Berapa banyak waktu yang saya perlukan untuk membuka kunci ponsel Android saya?

12

Skenario

Saya menggunakan lockscreen pencocokan pola dan sayangnya saya lupa pola saya. Saya ingin tahu berapa banyak waktu yang saya perlukan untuk membukanya. Berikut adalah spesifikasi layar kunci Google, yang akan kami gunakan untuk tantangan ini.

  • Setiap 5 kode salah, pengguna harus menunggu 30 secondssebelum ada entri lebih lanjut.
  • Suatu pola setidaknya harus terdiri dari 4 points(lihat di bawah)

  • Suatu titik hanya dapat digunakan satu kali, tetapi Anda dapat mengulanginya beberapa kali (lihat gambar di bawah): aneh

Di sini, titik pusat hanya digunakan sekali, bahkan jika kita membahasnya lagi untuk pola khusus ini.

Hipotesis & Fakta

Kami akan menganggap kami pahlawan super dan kami bisa menggambar pola apa pun 1 second, kami tidak perlu makan atau tidur. Ya, kami manusia super.

Saya orang yang sangat sial. "Skenario terburuk" adalah kehidupan sehari-hari saya sehingga pola yang akan saya coba terakhir akan menjadi yang benar.

Apa yang harus kita tusuk?

Bagi mereka yang tidak mengetahuinya, Android (dan telepon lain sekarang) menawarkan kemampuan membuka kunci telepon melalui menggambar pola pada matriks 9-titik. Matriks ini dapat digambarkan sebagai berikut:

C(A)  M(B)  C(C)
M(D)  X(E)  M(F)
C(G)  M(H)  C(I)
  • C berarti "titik sudut"
  • M untuk "titik tengah"
  • X untuk "titik tengah"
  • Saya telah memberikan pengidentifikasi poin untuk membuatnya lebih mudah

Koneksi langsung yang diizinkan adalah sebagai berikut:

Titik sudut:

Sudut

Titik tengah:

Tengah

Titik pusat:

Pusat

Namun, seperti yang ditunjukkan oleh steveverrill, "begitu pusat telah digunakan (dan karenanya tidak tersedia) koneksi langsung antara kiri bawah dan sudut kanan atas menjadi tidak ambigu dan karenanya memungkinkan". Hal yang sama berlaku untuk setiap "titik tengah", jika misalnya titik B telah dihitung, maka koneksi langsung antara A dan C dimungkinkan. Jika misalnya F sudah dihitung, maka koneksi langsung antara C dan I dimungkinkan. Dll ...

Aturan

  • Inti dari tantangan ini adalah mengembalikan berapa banyak waktu (dalam bentuk yang dapat dibaca manusia, alias tahun / hari / bulan / jam / apa pun waktu yang Anda temukan) Saya harus membuka kunci ponsel sialan ini.
  • Anda tidak dapat meng-hardcode jumlah kemungkinan pola yang valid (bahkan tidak Google, bodoh), hitung (itu sebenarnya bagian yang menyenangkan, bukan?)
  • Sepotong kode terpendek menang
  • Semoga berhasil !
Penyakit
sumber
2
Saya tidak memiliki Android, tetapi saya ingin menunjukkan bahwa contoh Anda tampaknya melanggar koneksi langsung yang diizinkan. Saya menduga bahwa begitu pusat telah digunakan (dan karena itu menjadi tidak tersedia) koneksi langsung antara kiri bawah dan sudut kanan atas menjadi tidak ambigu dan karena itu mungkin.
Level River St
1
Sebagai pengguna layar kunci ini, saya hampir sepenuhnya yakin bahwa dengan ketepatan jari yang cukup, Anda dapat menghubungkan dua titik yang tidak digunakan.
Surous
4
@Ourous: Setidaknya di ponsel saya, jika Anda menggerakkan jari Anda di sekitar titik untuk menghubungkan titik-titik di kedua sisi itu, titik di antaranya dimasukkan ke dalam urutan dan tetap dihitung seperti yang digunakan.
user2357112 mendukung Monica
1
@steveverrill: Anda benar, saya menambahkan tip tentang itu. Saya harap Anda tidak keberatan saya mengutip Anda secara langsung, karena saya pikir itu adalah penjelasan yang bagus.
1
"Anda tidak dapat meng-hardcode jumlah kemungkinan pola yang valid" bukan persyaratan yang bisa diamati.
Ad Hoc Garf Hunter

Jawaban:

2

Rebmu : 197 175 168 167 karakter

Menghasilkan kombinasi sebagai serangkaian angka (mis. 12369 adalah kiri atas ke kanan atas ke kanan bawah), memeriksa apakah kombinasi itu valid, dan menambahkan penghitung jika itu. Ini mungkin memakan waktu * untuk dijalankan. Mengembalikan jumlah detik yang diperlukan untuk membuka kunci ponsel.

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

Tanpa suara dan berkomentar:

; 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 loop dari 1 ke (987654321-1233), memeriksa konter 1233 + loop (karena itu memeriksa 1234 hingga 987654321).

Jika nomor 987653088diganti dengan, 9876-1233atau 8643, maka program akan menemukan waktu yang diperlukan untuk semua kombinasi 4 poin.

Output untuk 9876-1233=8643(kombinasi 4 poin):

>> rebmu %combinations.rebmu
== 11344

Output untuk 98765-1233=97532(kombinasi 4 dan 5 poin):

>> rebmu %combinations.rebmu
== 61426

Output untuk 987654-1233=986421(4,5,6 poin kombinasi):

>> rebmu %combinations.rebmu
== 243532

* 4/5-point membutuhkan waktu sekitar 8 detik untuk berlari; 4-6 membutuhkan waktu sekitar 77 detik. Mungkin perlu ~ 24 jam atau lebih tergantung pada siapa yang menjalankan ini untuk menghitung jumlah kombinasi untuk kombinasi 4-9 poin.

es1024
sumber