Tôi cần bao nhiêu thời gian để mở khóa điện thoại Android?


12

Kịch bản

Tôi đang sử dụng mô hình khóa phù hợp với màn hình và tôi buồn bã quên mẫu của tôi. Tôi muốn biết tôi sẽ cần bao nhiêu thời gian để mở khóa nó. Dưới đây là thông số kỹ thuật của màn hình khóa của Google, mà chúng tôi sẽ sử dụng cho thử thách này.

  • Cứ 5 mã sai, người dùng phải đợi 30 secondstrước khi nhập thêm.
  • Một mẫu phải, ít nhất, phải bao gồm 4 points(xem bên dưới)

  • Một điểm chỉ có thể được sử dụng một lần, nhưng bạn có thể đi qua nó vài lần (xem hình ảnh ngay bên dưới): wierd

Ở đây, điểm trung tâm chỉ được sử dụng một lần, ngay cả khi chúng ta đi qua nó một lần nữa cho mẫu đặc biệt này.

Giả thuyết & sự kiện

Chúng ta sẽ cho rằng chúng ta là siêu anh hùng và chúng ta có thể vẽ bất kỳ mô hình nào 1 second, chúng ta không bao giờ cần ăn hay ngủ. Vâng, chúng ta là siêu nhân.

Tôi là một người rất xui xẻo. "Trường hợp xấu nhất" là cuộc sống hàng ngày của tôi vì vậy mô hình tôi sẽ thử cuối cùng sẽ là mô hình đúng.

Chúng ta phải làm gì?

Đối với những người không biết điều đó, Android (và các điện thoại khác hiện nay) cung cấp khả năng mở khóa điện thoại thông qua việc vẽ một mẫu trên ma trận 9 điểm. Ma trận này có thể được mô tả như sau:

C(A)  M(B)  C(C)
M(D)  X(E)  M(F)
C(G)  M(H)  C(I)
  • C đứng cho "điểm góc"
  • M cho "điểm giữa"
  • X cho "điểm trung tâm"
  • Tôi đã đưa ra định danh cho các điểm để làm cho nó dễ dàng hơn

Các kết nối trực tiếp được phép như sau:

Điểm góc:

Góc

Điểm giữa:

Ở giữa

Điểm trung tâm :

Trung tâm

Tuy nhiên, như được chỉ ra bởi steveverrill, "một khi trung tâm đã được sử dụng (và do đó trở nên không khả dụng), một kết nối trực tiếp giữa góc dưới bên trái và góc trên bên phải trở nên rõ ràng và do đó có thể". Tương tự như vậy đối với mọi "điểm giữa", ví dụ: điểm B đã được tính, thì có thể kết nối trực tiếp giữa A và C. Nếu ví dụ F đã được tính, thì có thể kết nối trực tiếp giữa C và I. Vân vân...

Quy tắc

  • Mục đích của thử thách này là trả lại bao nhiêu thời gian (ở dạng có thể đọc được của con người, còn gọi là năm / ngày / tháng / giờ / bất cứ lúc nào bạn tìm thấy) tôi sẽ cần phải mở khóa điện thoại chết tiệt này.
  • Bạn không thể mã hóa số lượng các mẫu hợp lệ có thể (thậm chí không phải Google, bạn đánh lừa), tính toán nó (đó thực sự là phần thú vị, phải không?)
  • Đoạn mã ngắn nhất sẽ thắng
  • Chúc may mắn !

2
Tôi không có Android, nhưng tôi muốn chỉ ra rằng ví dụ của bạn dường như vi phạm các kết nối trực tiếp được phép. Tôi đoán rằng một khi trung tâm đã được sử dụng (và do đó trở nên không khả dụng), một kết nối trực tiếp giữa góc dưới bên trái và góc trên bên phải trở nên rõ ràng và do đó có thể.
Cấp sông St

1
Là người dùng màn hình khóa này, tôi gần như hoàn toàn chắc chắn rằng với độ chính xác của ngón tay đủ, bạn có thể kết nối bất kỳ hai điểm không sử dụng.
Οurous

4
@Ourous: Ít nhất là trên điện thoại của tôi, nếu bạn di chuyển ngón tay của mình xung quanh một dấu chấm để kết nối các dấu chấm ở hai bên của nó, dấu chấm ở giữa được chèn vào chuỗi và được tính là được sử dụng.
user2357112 hỗ trợ Monica

1
@steveverrill: Bạn nói đúng, tôi đã thêm một mẹo về điều đó. Tôi hy vọng bạn không phiền tôi đã trích dẫn bạn trực tiếp, vì tôi nghĩ đó là một lời giải thích tốt.

1
"Bạn không thể mã hóa số lượng mẫu hợp lệ có thể" không phải là một yêu cầu có thể quan sát được.
Đăng Rock Garf Hunter

Câu trả lời:


2

Rebmu : 197 175 168 167 ký tự

Tạo các kết hợp dưới dạng một chuỗi các số (ví dụ: 12369 nằm trên cùng bên trái sang trên cùng bên phải sang dưới cùng bên phải), kiểm tra xem kết hợp có hợp lệ không và tăng bộ đếm nếu có. Điều này có thể mất một lúc * để chạy. Trả về số giây cần thiết để mở khóa điện thoại.

B[[2 13][4 17][6 39][8 79][5 19][5 28][5 37][5 46][a 0]]Fdz[Q1feCb[st[a]paStsC/1 Qa^Qa^e?NNfiAtsC/2 e?NNfiArvTSc/2]]rpJ987653088[StsADj1233iA^e?SuqSf[++K]]adKmp30dvK 5

Không che giấu và nhận xét:

; for each subarray c: 
; the sequences c/2 and c/3 are invalid before the point c/1 is pressed
; a 0 - a is never in the sequence, therefore 0 is always invalid
b: [[2 13] [4 17] [6 39] [8 79] [5 19] [5 28] [5 37] [5 46] [a 0]]
; checks (most) conditions of validity
f: dz[
    ; set q to 1
    q: 1
    ; foreach array in b as c
    fe c b [
        ; set a to be portion of s before c/1
        st [a] pa s ts c/1
        ; q = q and (a does not contain c/2) and (a does not contain reverse of c/2)
        q: a^ q 
           a^ e? nn fi a ts c/2 
              e? nn fi a ts rv c/2
    ]
]
; repeat 98765308 times, with j = 1 to 98765308
; 987653088 = 987654321 (largest valid combination) - 1234 (smallest valid combination) + 1
rp j 987653088 [
    ; set s to j+1233 (smallest valid combination - 1) as a string
    s: ts ad j 1233 
    ; if f returns trues and s does not contain duplicates, increment k
    i a^ e? s uq s 
          f
     [++ k]
]
; print k (number of combinations) + 30 * (k/5) -> number of seconds needed
ad k mp 30 dv k 5

Các vòng lặp chương trình từ 1 đến (987654321-1233), kiểm tra bộ đếm vòng 1233 + (do đó kiểm tra 1234 đến 987654321).

Nếu số 987653088được thay thế bằng, 9876-1233hoặc 8643, thì chương trình sẽ tìm thời gian thực hiện cho tất cả các kết hợp 4 điểm.

Đầu ra cho 9876-1233=8643(kết hợp 4 điểm):

>> rebmu %combinations.rebmu
== 11344

Đầu ra cho 98765-1233=97532(kết hợp 4 và 5 điểm):

>> rebmu %combinations.rebmu
== 61426

Đầu ra cho 987654-1233=986421(kết hợp 4,5,6 điểm):

>> rebmu %combinations.rebmu
== 243532

* 4/5 điểm khiến tôi mất khoảng 8 giây để chạy; 4-6 mất khoảng 77 giây. Có thể mất ~ 24 giờ hoặc lâu hơn tùy thuộc vào người chạy chương trình này để tính số lượng kết hợp cho các kết hợp 4-9 điểm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.