Android telefonumun kilidini açmak için ne kadar zamana ihtiyacım olacak?


12

senaryo

Desen eşleştirme kilit ekranı kullanıyorum ve ne yazık ki desenimi unuttum. Kilidini açmak için ne kadar zamana ihtiyacım olacağını bilmek istiyorum. İşte Google'ın bu meydan okuma için kullanacağımız kilit ekranının özellikleri.

  • Her 5 yanlış kodda, kullanıcı 30 secondsherhangi bir girişten önce beklemek zorundadır .
  • Bir desen en azından 4 pointsaşağıdakilerden oluşmalıdır (aşağıya bakın)

  • Bir nokta yalnızca bir kez kullanılabilir, ancak birkaç kez üzerinden geçebilirsiniz (aşağıdaki resme bakın): garip

Burada, bu belirli model için tekrar üzerinden geçsek bile, merkez nokta sadece bir kez kullanılır.

Hipotez ve Gerçekler

Süper kahraman olduğumuzu ve herhangi bir desen çizebileceğimizi 1 second, asla yememize veya uyumamıza gerek olmadığını varsayacağız . Evet, biz süper insanız.

Ben çok şanssız biriyim. "En kötü senaryo" benim günlük hayatımdır, bu yüzden en son deneyeceğim desen doğru olacaktır.

Ne yememiz gerekiyor?

Bilmeyenler için, Android (ve şimdi diğer telefonlar), 9 noktalı bir matriste bir desen çizerek telefonun kilidini açma yeteneği sunuyor. Bu matris aşağıdaki gibi tanımlanabilir:

C(A)  M(B)  C(C)
M(D)  X(E)  M(F)
C(G)  M(H)  C(I)
  • C "köşe noktası" için ayakta
  • "Orta nokta" için M
  • "Merkez nokta" için X
  • Daha kolay hale getirmek için noktalara tanımlayıcılar verdim

İzin verilen doğrudan bağlantılar aşağıdaki gibidir:

Köşe noktası:

Köşe

Orta nokta:

Orta

Merkez noktası :

merkez

Bununla birlikte, steveverrill tarafından işaret edildiği gibi, "merkez kullanıldıktan sonra (ve bu nedenle kullanılamaz hale geldiğinde) sol alt ve sağ üst köşe arasındaki doğrudan bağlantı açık ve bu nedenle mümkün olur". Her "orta nokta" için de aynı şey geçerlidir, örneğin B noktası daha önce sayılmışsa, A ve C arasında doğrudan bir bağlantı mümkündür. Örneğin F zaten sayılmışsa, C ve I arasında doğrudan bir bağlantı mümkündür. Vb...

kurallar

  • Bu zorluğun amacı, ne kadar zaman (insan tarafından okunabilir formda, aka yıl / gün / ay / saat / bulduğunuz zaman ne olursa olsun) bu lanet telefonun kilidini açmam gerekecek.
  • Olası geçerli kalıpların sayısını kodlayamazsınız (Google bile, aptal değilsiniz), hesaplayamazsınız (aslında eğlenceli kısım, değil mi?)
  • En kısa kod kazancı
  • İyi şanslar !

2
Android'im yok, ancak örneğinizin izin verilen doğrudan bağlantıları ihlal ettiği anlaşılıyor. Merkez kullanıldıktan sonra (ve bu nedenle kullanılamaz hale geldiğinde) sol alt ve sağ üst köşe arasındaki doğrudan bağlantının açık ve bu nedenle mümkün olduğunu tahmin ediyorum.
Level River St

1
Bu kilit ekranının bir kullanıcısı olarak, neredeyse tamamen parmak hassasiyetiyle kullanılmayan iki noktayı bağlayabileceğinizden neredeyse eminim.
Οurous

4
@Ourous: En azından telefonumda, her iki tarafındaki noktaları birleştirmek için parmağınızı bir noktanın etrafında hareket ettirirseniz, aradaki nokta diziye eklenir ve yine de kullanıldığı şekilde sayılır.
user2357112 Monica

1
@steveverrill: Haklısın, bununla ilgili bir ipucu ekledim. Umarım sizi doğrudan alıntıladığımı umursamazsınız, çünkü bunun iyi bir açıklama olduğunu düşündüm.

1
"Olası geçerli kalıp sayısını kodlayamazsınız" gözlemlenebilir bir gereklilik değildir.
Ad Hoc Garf Hunter

Yanıtlar:


2

Rebmu : 197 175 168 167 karakter

Kombinasyonları bir dizi sayı olarak oluşturur (ör. 12369, sol üstten sağ üste sağdan alt sağa), kombinasyonun geçerli olup olmadığını kontrol eder ve varsa sayacı artırır. Çalışması biraz zaman alabilir * . Telefonun kilidini açmak için gereken saniye sayısını döndürür.

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

Acemi ve yorum yapılmamış:

; 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

Program 1'den (987654321-1233) döngüye girer, 1233 + döngü sayacını kontrol eder (bu nedenle 1234 ila 987654321'i kontrol eder).

Sayı veya 987653088ile değiştirilirse , program tüm 4 nokta kombinasyonları için harcanan zamanı bulur.9876-12338643

Çıkış 9876-1233=8643(4 noktalı kombinasyonlar):

>> rebmu %combinations.rebmu
== 11344

Çıkış 98765-1233=97532(4 ve 5 noktalı kombinasyonlar):

>> rebmu %combinations.rebmu
== 61426

Çıktı 987654-1233=986421(4,5,6 noktalı kombinasyonlar):

>> rebmu %combinations.rebmu
== 243532

* 4/5 puan koşmam için yaklaşık 8 saniye sürdü; 4-6 yaklaşık 77 saniye sürdü. 4-9 puanlık kombinasyonların kombinasyon sayısını hesaplamak için bunu kimin çalıştırdığına bağlı olarak ~ 24 saat veya daha uzun sürebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.