Wie viel Zeit brauche ich, um mein Android-Handy freizuschalten?

12

Szenario

Ich verwende den Pattern Matching Lockscreen und habe mein Pattern leider vergessen. Ich würde gerne wissen, wie viel Zeit ich brauchen werde, um es freizuschalten. Hier sind die Spezifikationen des Google-Sperrbildschirms, die wir für diese Herausforderung verwenden werden.

  • Alle 5 falschen Codes muss der Benutzer 30 secondsvor jeder weiteren Eingabe warten .
  • Ein Muster muss mindestens bestehen aus 4 points(siehe unten)

  • Ein Punkt kann nur einmal verwendet werden, aber Sie können ihn mehrmals durchgehen (siehe Abbildung rechts unten): komisch

Hier wird der Mittelpunkt nur einmal verwendet, auch wenn wir ihn für dieses bestimmte Muster noch einmal durchgehen.

Hypothese & Fakten

Wir gehen davon aus, dass wir Superhelden sind und dass wir jedes Muster zeichnen können 1 second, wir müssen nie essen oder schlafen. Ja, wir sind Übermenschen.

Ich bin eine sehr unglückliche Person. "Worst-Case-Szenario" ist mein tägliches Leben, daher ist das Muster, das ich zuletzt versuchen werde, das richtige.

Was müssen wir tun?

Für diejenigen, die es nicht kennen, bietet Android (und jetzt auch andere Handys) die Möglichkeit, das Telefon durch Zeichnen eines Musters auf einer 9-Punkt-Matrix zu entsperren. Diese Matrix kann wie folgt beschrieben werden:

C(A)  M(B)  C(C)
M(D)  X(E)  M(F)
C(G)  M(H)  C(I)
  • C steht für "Eckpunkt"
  • M für "Mittelpunkt"
  • X für "Mittelpunkt"
  • Ich habe die Punkte identifiziert, um es einfacher zu machen

Die zulässigen direkten Verbindungen lauten wie folgt:

Eckpunkt:

Ecke

Mittelpunkt :

Mitte

Mittelpunkt :

Center

Wie steveverrill jedoch ausführt, "wird eine direkte Verbindung zwischen der unteren linken und der oberen rechten Ecke eindeutig und daher möglich, sobald die Mitte verwendet wurde (und daher nicht mehr verfügbar ist)". Gleiches gilt für jeden "Mittelpunkt", wenn zB der Punkt B bereits gezählt wurde, dann ist eine direkte Verbindung zwischen A und C möglich. Wenn zB F bereits gezählt wurde, ist eine direkte Verbindung zwischen C und I möglich. Etc...

Regeln

  • Der Sinn dieser Herausforderung besteht darin, zurückzugeben, wie viel Zeit (in menschenlesbarer Form, auch bekannt als Jahr / Tag / Monat / Stunde / zu welcher Zeit auch immer) ich für das Entsperren dieses verdammten Telefons benötigen werde.
  • Sie können die Anzahl der möglichen gültigen Muster nicht fest codieren (nicht einmal Google, Sie Idiot), es berechnen (das ist eigentlich der spaßige Teil, nicht wahr?)
  • Das kürzeste Stück Code gewinnt
  • Viel Glück !
Krankheit
quelle
2
Ich habe kein Android, aber ich möchte darauf hinweisen, dass Ihr Beispiel die zulässigen direkten Verbindungen verletzt. Ich vermute, dass eine direkte Verbindung zwischen der linken unteren und rechten oberen Ecke eindeutig und daher möglich wird, sobald das Zentrum verwendet wurde (und daher nicht mehr verfügbar ist).
Level River St
1
Als Benutzer dieses Sperrbildschirms bin ich mir fast sicher, dass Sie mit ausreichender Fingerpräzision zwei beliebige nicht verwendete Punkte verbinden können.
Urous
4
@Unser: Wenn Sie auf meinem Telefon Ihren Finger um einen Punkt bewegen, um Punkte auf beiden Seiten zu verbinden, wird der dazwischen liegende Punkt in die Sequenz eingefügt und als ohnehin verwendet gezählt.
user2357112 unterstützt Monica
1
@steveverrill: Du hast recht, ich habe einen Tipp dazu hinzugefügt. Ich hoffe, es macht Ihnen nichts aus, dass ich Sie direkt zitiert habe, da ich dachte, es wäre eine gute Erklärung.
1
"Sie können die Anzahl der möglichen gültigen Muster nicht fest codieren" ist keine beobachtbare Anforderung.
Post Rock Garf Hunter

Antworten:

2

Rebmu : 197 175 168 167 Zeichen

Erzeugt Kombinationen als eine Reihe von Zahlen (z. B. 12369 ist von links oben nach rechts oben nach rechts unten), prüft, ob die Kombination gültig ist, und erhöht einen Zähler, wenn dies der Fall ist. Dies kann eine Weile dauern * . Gibt die Anzahl der Sekunden zurück, die zum Entsperren des Telefons benötigt werden.

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

Enttäuscht und kommentiert:

; 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

Das Programm durchläuft eine Schleife von 1 bis (987654321-1233) und überprüft 1233 + Schleifenzähler (daher 1234 bis 987654321).

Wenn die Zahl 987653088durch 9876-1233oder ersetzt wird 8643, ermittelt das Programm die für alle 4-Punkt-Kombinationen benötigte Zeit.

Ausgabe für 9876-1233=8643(4-Punkt-Kombinationen):

>> rebmu %combinations.rebmu
== 11344

Ausgabe für 98765-1233=97532(4- und 5-Punkt-Kombinationen):

>> rebmu %combinations.rebmu
== 61426

Leistung für 987654-1233=986421(4,5,6-Punkt-Kombinationen):

>> rebmu %combinations.rebmu
== 243532

* Bei einem 4/5-Punkt brauchte ich ungefähr 8 Sekunden, um zu rennen. 4-6 dauerte ca. 77 Sekunden. Es kann ~ 24 Stunden oder länger dauern, je nachdem, wer dies ausführt, um die Anzahl der Kombinationen für 4-9 Punktekombinationen zu berechnen.

es1024
quelle