Quanto tempo devo sbloccare il mio telefono Android?


12

Scenario

Sto usando la schermata di blocco della corrispondenza dei motivi e purtroppo ho dimenticato il mio motivo. Vorrei sapere quanto tempo avrò bisogno per sbloccarlo. Ecco le specifiche della schermata di blocco di Google, che utilizzeremo per questa sfida.

  • Ogni 5 codici errati, l'utente deve attendere 30 secondsprima di ogni ulteriore immissione.
  • Un modello deve almeno consistere in 4 points(vedi sotto)

  • Un punto può essere usato solo una volta, ma puoi ripassarlo più volte (vedi immagine sotto): strano

Qui, il punto centrale viene usato solo una volta, anche se lo ripassiamo per questo particolare schema.

Ipotesi e fatti

Supponiamo che siamo supereroi e che possiamo tracciare qualsiasi modello 1 second, non abbiamo mai bisogno di mangiare o dormire. Sì, siamo superumani.

Sono una persona molto sfortunata. Lo "scenario peggiore" è la mia vita quotidiana, quindi lo schema che tenterò per ultimo sarà quello giusto.

Cosa dobbiamo fare?

Per coloro che non lo conoscono, Android (e altri telefoni ora) offre la possibilità di sbloccare il telefono disegnando un modello su una matrice a 9 punti. Questa matrice può essere descritta come segue:

C(A)  M(B)  C(C)
M(D)  X(E)  M(F)
C(G)  M(H)  C(I)
  • C sta per "punto d'angolo"
  • M per "punto medio"
  • X per "punto centrale"
  • Ho fornito identificatori ai punti per renderlo più semplice

I collegamenti diretti consentiti sono i seguenti:

Punto d'angolo:

Angolo

Punto medio:

mezzo

Punto centrale :

Centro

Tuttavia, come sottolineato da steveverrill, "una volta che il centro è stato usato (e quindi diventa non disponibile) una connessione diretta tra l'angolo in basso a sinistra e in alto a destra diventa inequivocabile e quindi possibile". Lo stesso vale per ogni "punto medio", se ad esempio il punto B è già stato contato, allora è possibile una connessione diretta tra A e C. Se ad esempio F è già stato contato, è possibile una connessione diretta tra C e I. Eccetera...

Regole

  • Il punto di questa sfida è restituire quanto tempo (in forma leggibile dall'uomo, alias anno / giorno / mese / ora / qualunque sia il tempo che trovi) dovrò sbloccare questo dannato telefono.
  • Non puoi codificare il numero di possibili schemi validi (nemmeno Google, sciocco), calcolarlo (questa è in realtà la parte divertente, non è vero?)
  • Vince il codice più breve
  • In bocca al lupo !

2
Non ho Android, ma vorrei sottolineare che il tuo esempio sembra violare le connessioni dirette consentite. Immagino che una volta che il centro è stato usato (e quindi non è disponibile) una connessione diretta tra l'angolo in basso a sinistra e in alto a destra diventa inequivocabile e quindi possibile.
Level River St

1
Come utente di questa schermata di blocco, sono quasi del tutto sicuro che con una precisione delle dita sufficiente, è possibile collegare due punti non utilizzati.
Οuroso

4
@Ourous: almeno sul mio telefono, se muovi il dito attorno a un punto per collegare punti su entrambi i lati, il punto in mezzo viene inserito nella sequenza e conteggiato comunque come usato.
user2357112 supporta Monica il

1
@steveverrill: hai ragione, ho aggiunto un consiglio al riguardo. Spero non ti dispiaccia di averti citato direttamente, dato che pensavo fosse una buona spiegazione.

1
"Non è possibile codificare il numero di possibili schemi validi" non è un requisito osservabile.
Ad Hoc Garf Hunter il

Risposte:


2

Rebmu : 197 175 168 167 caratteri

Genera combinazioni come una serie di numeri (es. 12369 è in alto a sinistra in alto a destra in basso a destra), controlla se la combinazione è valida e incrementa un contatore se lo è. Questa operazione potrebbe richiedere alcuni minuti * . Restituisce il numero di secondi necessari per sbloccare il telefono.

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

Non decompresso e commentato:

; 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

Il programma passa da 1 a (987654321-1233), controllando 1233 + contatore loop (quindi controllando da 1234 a 987654321).

Se il numero 987653088viene sostituito con, 9876-1233o 8643, il programma troverà il tempo impiegato per tutte le combinazioni di 4 punti.

Uscita per 9876-1233=8643(combinazioni di 4 punti):

>> rebmu %combinations.rebmu
== 11344

Uscita per 98765-1233=97532(combinazioni a 4 e 5 punti):

>> rebmu %combinations.rebmu
== 61426

Uscita per 987654-1233=986421(combinazioni di 4,5,6 punti):

>> rebmu %combinations.rebmu
== 243532

* La corsa a 4/5 punti mi ha richiesto circa 8 secondi; 4-6 ha impiegato circa 77 secondi. Potrebbero essere necessari ~ 24 ore o più a seconda di chi esegue questo per calcolare il numero di combinazioni per combinazioni di 4-9 punti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.