ฉันจะต้องปลดล็อกโทรศัพท์ Android ของฉันนานเท่าไร


12

สถานการณ์

ฉันใช้ lockscreen จับคู่รูปแบบและฉันเสียใจที่ลืมรูปแบบของฉัน ฉันต้องการทราบว่าต้องใช้เวลาในการปลดล็อคเท่าใด นี่คือข้อกำหนดของหน้าจอล็อคของ Google ที่เราจะใช้สำหรับความท้าทายนี้

  • ทุกรหัสผิด 5 ผู้ใช้จะต้องรอ30 secondsก่อนรายการใด ๆ เพิ่มเติม
  • อย่างน้อยรูปแบบต้องประกอบด้วย4 points(ดูด้านล่าง)

  • จุดหนึ่งสามารถใช้ได้เพียงครั้งเดียว แต่คุณสามารถไปได้หลายครั้ง (ดูภาพด้านล่าง): แปลก

ที่นี่จุดกึ่งกลางจะใช้เพียงครั้งเดียวแม้ว่าเราจะข้ามมันอีกครั้งสำหรับรูปแบบเฉพาะนี้

สมมติฐาน & ข้อเท็จจริง

เราจะสมมติว่าเราเป็นฮีโร่และเราสามารถวาดรูปแบบใด ๆ ใน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 กับฉันเป็นไปได้ ฯลฯ ...

กฎระเบียบ

  • ประเด็นของความท้าทายนี้คือการคืนเวลาเท่าไหร่ (ในรูปแบบที่มนุษย์อ่านได้นั่นคือปี / วัน / เดือน / ชั่วโมง / เวลาที่คุณพบ) ฉันจะต้องปลดล็อกโทรศัพท์เจ้ากรรมนี้
  • คุณไม่สามารถ hardcode จำนวนรูปแบบที่ถูกต้องที่เป็นไปได้ (ไม่แม้แต่ Google คุณเป็นคนโง่) คำนวณมัน (ที่จริงแล้วเป็นส่วนที่สนุกไม่ใช่ใช่)
  • รหัสที่สั้นที่สุดชนะ
  • โชคดี !

2
ฉันไม่มี Android แต่ฉันอยากจะชี้ให้เห็นว่าตัวอย่างของคุณดูเหมือนจะละเมิดการเชื่อมต่อโดยตรงที่ได้รับอนุญาต ฉันเดาว่าเมื่อใช้งานที่ศูนย์ (และไม่สามารถใช้งานได้) การเชื่อมต่อโดยตรงระหว่างมุมล่างซ้ายและมุมขวาบนจะไม่ชัดเจนและเป็นไปได้
เลเวลริเวอร์เซนต์

1
ในฐานะผู้ใช้ล็อคหน้าจอนี้ฉันเกือบจะแน่ใจว่ามีความแม่นยำของนิ้วมากพอคุณจึงสามารถเชื่อมต่อจุดที่ไม่ได้ใช้งานได้สองจุด
Οurous

4
@Ourous: อย่างน้อยในโทรศัพท์ของฉันถ้าคุณเลื่อนนิ้วของคุณไปรอบ ๆ จุดเพื่อเชื่อมต่อจุดที่ด้านใดด้านหนึ่งของมันจุดในระหว่างจะถูกแทรกลงในลำดับและนับตามที่ใช้อยู่แล้ว
user2357112 รองรับ Monica

1
@ สตีฟเวอร์ริลล์: คุณพูดถูกฉันได้เพิ่มเคล็ดลับ ฉันหวังว่าคุณจะไม่รังเกียจฉันขอให้คุณโดยตรงเพราะฉันคิดว่ามันเป็นคำอธิบายที่ดี

1
"คุณไม่สามารถ hardcode จำนวนรูปแบบที่ถูกต้องที่เป็นไปได้" ไม่ใช่ข้อกำหนดที่สังเกตได้
Ad Hoc Garf Hunter

คำตอบ:


2

Rebmu : 197 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

Unmushed และแสดงความคิดเห็น:

; 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)

หากหมายเลข987653088ถูกแทนที่ด้วย9876-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 วินาที อาจใช้เวลาประมาณ 24 ชั่วโมงหรือนานกว่านั้นขึ้นอยู่กับว่าใครทำสิ่งนี้เพื่อคำนวณจำนวนชุดค่าผสมสำหรับชุดค่าผสม 4-9 จุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.