求用户输入密码的时间问题

题目如下:

不考虑那么复杂场景,你们有什么解决思路,欢迎评论。

解决办法(python):

def counttime(pwd):
    keys=['azc', 'dwf', 'gti', 'jql', 'mon', 'pkr', 'shu' ,'vex', 'yb']
    times=0
    before='*'
    for p in pwd:
        for key in keys:
            if p in key:
                times+=key.index(p)+1
                if before in key:
                    times+=2
                before=p
                break
    print(times)

counttime(input("请输入小写密码"))
查看代码

java版:

package basictest;


public class demo1 {
    public static  int countstep(String pwd) {
        String[] keys = { "azc", "dwf", "gti", "jql", "mon", "pkr", "shu", "vex", "yb" };

        int count = 0;
        String beforeP = "0" ;
        for (int i = 0; i < pwd.length(); i++) {
            String singleP = String.valueOf(pwd.charAt(i));
            for (String key : keys) {
                if (key.contains(singleP)) {
                    count += key.indexOf(singleP) + 1;
                    if (key.contains(beforeP)) {
                        count += 2;
                    }
                    beforeP = singleP;
                    break;
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        System.out.println(countstep("ayb"));
//        6
    }
}
查看代码

大佬解决办法(python2.7):

keyboard = list("azcdwfgtijqlmonpkrshuvexyb")
time_delta = 1

def get_wait_time(c, b):
    return int(2 * time_delta) if max(keyboard.index(c), keyboard.index(b)) <= (min(keyboard.index(c), keyboard.index(b))/3*3 + 2) else 0


def test(input_str):
    # 所有字符的输入时间统计
    char_time = sum([(keyboard.index(c)% 3 + 1) * time_delta for c in list(input_str)])
    # 同一按键等待时间统计
    wait_time = sum([get_wait_time(c, list(input_str)[index-1]) for index, c in enumerate(list(input_str)) if index >= 1])
    print sum([char_time, wait_time])

test(input())
查看代码
posted @ 2020-12-23 16:09  崔术森  阅读(223)  评论(3)    收藏  举报