Androidフォンのロックを解除するのにどれくらいの時間が必要ですか?


12

シナリオ

私はパターンマッチングロックスクリーンを使用していますが、残念ながらパターンを忘れてしまいました。ロックを解除するのに必要な時間を知りたいです。このチャレンジに使用するGoogleのロック画面の仕様を以下に示します。

  • 5つの間違ったコードごとに、ユーザーは30 secondsそれ以上入力するまで待たなければなりません。
  • パターンは、少なくとも4 points以下で構成されている必要があります(以下を参照)

  • ポイントは1回しか使用できませんが、複数回確認できます(下の画像を参照)。 風変わり

ここでは、この特定のパターンで再び中心点を通過しても、中心点は1回だけ使用されます。

仮説と事実

私たちはスーパーヒーローであり、で任意のパターンを描くことができると仮定します1 second。食べたり寝たりする必要はありません。ええ、私たちは超人です。

私は非常に不運な人です。「最悪のシナリオ」は私の日常生活であるため、最後に試みるパターンは正しいものです。

何が必要ですか?

知らない人のために、Android(および現在他の携帯電話)は、9ポイントマトリックスにパターンを描くことで携帯電話のロックを解除する機能を提供しています。このマトリックスは次のように説明できます。

C(A)  M(B)  C(C)
M(D)  X(E)  M(F)
C(G)  M(H)  C(I)
  • 「コーナーポイント」を表すC
  • 「中間点」のM
  • 「中心点」のX
  • 簡単にするためにポイントに識別子を付けました

許可される直接接続は次のとおりです。

コーナーポイント:

コーナー

中間点:

中間

中心点 :

センター

ただし、steveverrillが指摘したように、「中心が使用されると(したがって使用できなくなると)、左下隅と右上隅の間の直接接続が明確になり、したがって可能になります」。同じことがすべての「中間点」にも当てはまります。たとえば、ポイントBがすでにカウントされている場合、AとCの間の直接接続が可能です。たとえば、Fがすでにカウントされている場合、CとIの間の直接接続が可能です。等...

ルール

  • この課題のポイントは、このいまいましい携帯電話のロックを解除する必要がある時間(人間が読める形式、年/日/月/時間/何時でも)を返すことです。
  • 可能な有効なパターンの数をハードコーディングすることはできません(Googleでさえ、ばかにしないでください)。
  • 最短のコードが勝つ
  • 幸運を !

2
私はAndroidを持っていませんが、あなたの例は許可された直接接続に違反しているように見えることを指摘したいと思います。センターが使用されると(したがって使用できなくなると)、左下隅と右上隅の間の直接接続が明確になり、したがって可能になると推測しています。
レベル川セント14

1
このロック画面のユーザーとして、指の精度が十分であれば、未使用の2つのポイントを接続できることはほぼ確実です。
Οurous

4
@Ourous:少なくとも私の携帯電話では、ドットの周りで指を動かしてその両側のドットを接続すると、間にあるドットがシーケンスに挿入され、とにかく使用されたものとしてカウントされます。
user2357112はモニカをサポートします14

1
@steveverrill:そのとおりです、それについてのヒントを追加しました。良い説明だと思ったので、直接引用したことを気にしないでください。

1
「有効なパターンの数をハードコーディングすることはできません」は、目に見える要件ではありません。
ポストロックガーフハンター

回答:


2

Rebmu197 175 168 167文字

組み合わせを一連の数値として生成し(例:12369は左上から右上、右下へ)、組み合わせが有効かどうかを確認し、有効な場合はカウンターをインクリメントします。これを実行するにはしばらく時間がかかる場合があります*。電話のロックを解除するのに必要な秒数を返します。

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

解き放たれ、コメントされた:

; 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

プログラムは1から(987654321-1233)にループし、1233 +ループカウンターをチェックします(したがって、1234から987654321をチェックします)。

番号9876530889876-1233または8643に置き換えられた場合、プログラムはすべての4点の組み合わせにかかった時間を見つけます。

9876-1233=8643(4ポイントの組み合わせ)の出力:

>> rebmu %combinations.rebmu
== 11344

98765-1233=97532(4および5ポイントの組み合わせ)の出力:

>> rebmu %combinations.rebmu
== 61426

987654-1233=986421(4,5,6ポイントの組み合わせ)の出力:

>> rebmu %combinations.rebmu
== 243532

* 4/5ポイントの実行には約8秒かかりました。4-6は約77秒かかりました。4〜9ポイントの組み合わせの組み合わせの数を計算するのに誰がこれを実行するかによって、24時間以上かかる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.