อ่านรหัสผ่าน: บนมือถือ!


13

ต้องขอบคุณความท้าทายล่าสุดของ MD XFเราสามารถอ่านรหัสผ่านในหลายภาษา ปัญหาคือตอนนี้เราจำเป็นต้องย้ายแอปพลิเคชันของเราไปยังอุปกรณ์มือถือและพวกเขาทำรายการรหัสผ่านแตกต่างกันเล็กน้อย

ท้าทาย

  • อ่านสตริงจากคีย์บอร์ด
  • ทุกครั้งที่kป้อนตัวอักษรให้แสดงเป็นช่วงเวลาสั้น ๆ
  • หลังจากช่วงเวลาที่ได้ผ่านการหรือผู้ใช้ป้อนตัวอักษรอีกแทนที่ด้วยตัวอักษรบางkc

กฎระเบียบ

  • cจะต้องคงที่; มันจะต้องเป็นตัวละครเดียวกัน
  • c สามารถเป็นอักขระที่มองเห็นได้ (เช่นไม่สามารถขึ้นบรรทัดใหม่เว้นวรรคแท็บหรือไม่สามารถพิมพ์ได้)
  • cไม่สามารถขึ้นอยู่กับการป้อนใด ๆk; cจะต้องกำหนด / ค่าคงที่ก่อนการkอ่านครั้งแรก
  • c ต้องเหมือนกันทุกครั้งที่รันโปรแกรม
  • cสามารถเป็นหนึ่งในค่าที่ให้ราวกับkว่าโดยบังเอิญตราบเท่าที่มีการปฏิบัติตามกฎอื่น

  • คุณต้องพิมพ์kแบบเรียลไทม์ ทันทีที่ผู้ใช้ป้อนใหม่kคุณจะต้องแสดงทันที
  • kควรจะมองเห็นให้กับผู้ใช้ก่อนที่จะถูกเปลี่ยนไปc; ช่วงเวลาจะต้องไม่น้อยกว่า 0.5 วินาที
  • kควรถูกแทนที่ด้วยcภายในเวลาอันสมควร ช่วงเวลาต้องไม่เกิน 5 วินาที
  • ทันทีที่ป้อนอักขระใหม่ไม่ว่าช่วงเวลานั้นจะหมดอายุหรือไม่คุณควรแทนที่kด้วยcและใช้รหัสที่ป้อนเป็นอักขระใหม่kทันที

  • เป็นที่ยอมรับได้ในการล้างและวาดหน้าจอใหม่ทุกครั้งที่คุณต้องการเปลี่ยนอักขระ
  • คุณสามารถใช้วิธีการอินพุตและเอาท์พุตที่สมเหตุสมผลได้หากมีการปฏิบัติตามกฎอื่น ๆ ทั้งหมด
  • คุณอาจสมมติว่าจำนวนอักขระที่ป้อนเข้านั้นไม่เกินความกว้างของหน้าต่างเทอร์มินัล / กราฟิก
  • หากใช้เทอร์มินัลโปรแกรมของคุณควรยุติหลังจากป้อนบรรทัดใหม่หรือถึง EOF
  • โปรแกรมของคุณควรทำงานตามที่อธิบายไว้ที่นี่ทั้งในสภาพแวดล้อมมือถือและอื่น ๆ

  • โปรแกรมของคุณอาจสมมติว่าอินพุตจะมีอักขระที่พิมพ์ได้เท่านั้น (ตัวอักษรตัวเลขสัญลักษณ์) และอาจขึ้นบรรทัดใหม่ (ไม่มี backspace ปุ่มลูกศรลบ ฯลฯ )
  • โปรแกรมของคุณอาจสิ้นสุดเมื่อกด Ctrl + C
  • คุณสามารถยุติโปรแกรมของคุณโดยการปิดหน้าต่างหากโปรแกรมของคุณเปิดตัว

เกณฑ์การให้คะแนน

นี่คือดังนั้นคำตอบที่สั้นที่สุดในแต่ละภาษาจะชนะ!

ตัวอย่าง

นี่คือตัวอย่างของสิ่งที่ควรมีลักษณะ หมายเหตุสิ่งนี้ถูกบันทึกไว้บนแพลตฟอร์มมือถือ แต่ควรทำงานบนแพลตฟอร์มเดสก์ท็อปด้วย

รหัสผ่าน


สำหรับผู้ที่สามารถดูโพสต์ที่ถูกลบนี่คือโพสต์ Sandbox
musicman523

คุณใช้แป้นพิมพ์แบบใดในวิดีโอ
Beta Decay

1
@BetaDecay การแจ้งเตือนในตอนท้ายระบุ ZenUI แป้นพิมพ์
OVS

@BetaDecay ในความเป็นจริงแป้นพิมพ์ ZenUI แค่อยากรู้อยากเห็นหรือมันเป็นเรื่องสำคัญ?
musicman523

@ musicman523 เพียงแค่อยากรู้อยากเห็น :)
Beta Decay

คำตอบ:


4

HTML + JavaScript, 20 + 105 = 125 ไบต์

<input id=I oninput=v=I.value;s='*'.repeat(l=v.length-1);I.value=s+v[l];clearTimeout(I.t);I.t=setTimeout(`I.value=s+'*'`,1e3)

ความล่าช้าระหว่างการเข้าkและจดหมายกลาย*เป็นหนึ่งวินาที

JavaScript oninput, จัดรูปแบบแล้ว

v=I.value;
s='*'.repeat(l=v.length-1);
I.value=s+v[l];
clearTimeout(I.t);
I.t=setTimeout(`I.value=s+'*'`,1e3)

ตัวอย่างการทดสอบ

เพิ่มวงเล็บสิ้นสุด ( >) เพื่อความเข้ากันได้ดีขึ้น

<input id=I oninput=v=I.value;s='*'.repeat(l=v.length-1);I.value=s+v[l];clearTimeout(I.t);I.t=setTimeout(`I.value=s+'*'`,1e3)>


ดูเหมือนจะไม่ยุติแม้ว่า!
เป็นทางการ

1
@officialaimm ความท้าทายระบุว่าเฉพาะแอปพลิเคชันเทอร์มินัลจำเป็นต้องมีวิธีในการยกเลิก
Justin Mariner

อ่าฉันโง่ ขอโทษ
อย่างเป็นทางการ

3

Python 3 , 186 224 ไบต์

ทำงานได้เฉพาะใน windows

import os,time,msvcrt as m
i=s=x=0;t=time.clock
def v():os.system("cls")
v()
while 1:
 if m.kbhit():
  k=str(m.getch())
  if"\\r"in k:break 
  i+=1;x=1;v();print("*"*(i-1)+k[2]);s=t()
 if (t()-s>.6and x):x=0;v();print("*"*i)

รุ่นที่เก่ากว่า (186 ไบต์): การนอนหลับเป็นสิ่งจำเป็นโดยไม่คำนึงถึงความเร็วในการกดแป้น

import os,time,msvcrt
a=k=[];i=0;o=os.system
while 1:
 o("cls")
 if i:print("*"*(i-1)+a[i-1]);time.sleep(.6);o("cls");print("*"*i)
 k=str(msvcrt.getch())
 if"\\r"in k:break
 a+=k[2];i+=1

1
ฉันไม่คิดว่ามันจะเป็นไปตามเกณฑ์ทั้งหมดโดยเฉพาะอย่างยิ่งAs soon as a new character is entered, whether or not the time interval has expired, you should replace k with c and use the entered key as the new k immediately.ที่ถูกกล่าวว่าฉันไม่สามารถทดสอบได้เนื่องจากฉันไม่ได้ใช้ Windows ดังนั้นให้ฉันรู้! คุณอาจพบว่าการท้าทายที่เกี่ยวข้องนี้มีประโยชน์ในฐานะข้อมูลอ้างอิง
musicman523

ฉันสันนิษฐานว่าการเปลี่ยนจาก k เป็น c เป็นกราฟิกเท่านั้น (ซึ่งเติมเต็มในโค้ดของฉัน) คุณหมายถึงการเปลี่ยนค่าที่เก็บไว้ของ k ด้วย c ด้วยหรือไม่
อย่างเป็นทางการ

1
ไม่นั่นคือทั้งหมดที่ควรมี การหน่วงเวลาของคุณคือ. 6 วินาที - จะเกิดอะไรขึ้นถ้าฉันพิมพ์ตัวอักษรสองตัวภายใน 0.1 วินาทีของกันและกัน? คุณจะยังคงนอนหลับอยู่ 1.2 วินาที อีกครั้งขอโทษฉันไม่สามารถทดสอบตัวเอง - มันอาจจะคุ้มค่าการโพสต์วิดีโอของคุณใช้รหัสของคุณ!
musicman523

ดัดแปลง เวอร์ชันที่ใหม่กว่าช่วยให้มั่นใจว่าสามารถโยนตัวละครใหม่ได้ก่อนที่เวลาของตัวละครก่อนหน้าจะยังไม่หมด
เป็นทางการ

3

Python 2 , 133 ไบต์

ขึ้นอยู่กับ @officialaimm คำตอบ

import time,msvcrt as m
k=T=0
s=p='\r'
while'\r'!=k:
 t=time.time();print s,
 if m.kbhit():k=m.getch();s=p+k;T=t;p+='*'
 if t-T>1:s=p

ว้าวน้อยกว่า 90 ไบต์ !!! จะลงคะแนน แต่ถึงขีด จำกัด รายวันของฉันแล้ว มีวิธีตรวจสอบหรือไม่ (ฉันมี python 3 บนพีซีของฉันเท่านั้น)? ถ้าฉันไม่เห็นหน้าจอไม่ชัดเจนมันมีการจัดการอย่างไร
อย่างเป็นทางการ

@ อย่างเป็นทางการโดย\rในการพิมพ์
เฟลิ Nardi บาติสตา

1
ฉันจะโพสต์ตัวแปร py3 เมื่อฉันไปที่ห้องเรียน
เฟลิปาร์นาดิบาติสตา

1
@ อย่างเป็นทางการสิ่งนี้ควรใช้งานได้ฉันกำลังใช้งาน linux atm ดังนั้นฉันจึงไม่สามารถทดสอบได้
Felipe Nardi Batista

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