Baca kata sandi: di ponsel!


13

Berkat tantangan MD XF , sekarang kita dapat membaca kata sandi dalam berbagai bahasa! Masalahnya adalah, sekarang kita perlu port aplikasi kita ke perangkat mobile, dan mereka melakukan entri kata sandi sedikit berbeda.

Tantangan

  • Baca string dari keyboard.
  • Setiap kali karakter kdimasukkan, tampilkan untuk interval waktu singkat.
  • Setelah interval waktu berlalu ATAU pengguna memasukkan karakter lain, ganti k dengan beberapa karakter c.

Aturan

  • charus konstan; itu harus karakter yang sama.
  • c dapat berupa karakter apa pun yang terlihat (yaitu tidak boleh berupa baris, spasi, tab, atau yang tidak dicetak).
  • ctidak dapat didasarkan pada input apa pun k; charus didefinisikan / konstan sebelum yang pertamak dibaca.
  • c harus sama setiap kali program dijalankan.
  • cdapat menjadi salah satu nilai yang diberikan seolah- kolah secara tidak sengaja, selama semua aturan lain diikuti.

  • Anda harus mencetak kdalam waktu nyata. Segera setelah pengguna memasukkan yang baru k, Anda harus segera menampilkannya.
  • kharus terlihat oleh pengguna akhir sebelum diubah menjadi c; interval waktu tidak boleh kurang dari 0,5 detik.
  • kharus diganti cdalam waktu yang wajar; interval waktu tidak boleh melebihi 5 detik.
  • Segera setelah karakter baru dimasukkan, apakah interval waktu telah berakhir atau tidak, Anda harus mengganti kdengan cdan menggunakan kunci yang dimasukkan sebagai yang baruk segera.

  • Dapat diterima untuk menghapus dan menggambar ulang layar setiap kali Anda perlu mengubah karakter.
  • Anda dapat menggunakan metode input dan output yang masuk akal selama semua aturan lain diikuti.
  • Anda dapat berasumsi bahwa jumlah karakter yang dimasukkan tidak pernah lebih panjang dari lebar jendela terminal / grafik.
  • Jika menggunakan terminal, program Anda harus berakhir setelah baris baru dimasukkan atau EOF tercapai.
  • Program Anda harus berfungsi sebagaimana dijabarkan di sini di lingkungan seluler dan lainnya.

  • Program Anda mungkin berasumsi bahwa input hanya akan berisi karakter yang dapat dicetak (huruf, angka, simbol) dan mungkin baris baru yang mengakhiri (tidak ada spasi mundur, tombol panah, hapus, dll).
  • Program Anda dapat berakhir ketika Ctrl + C ditekan.
  • Anda dapat menghentikan program Anda dengan menutup jendela, jika program Anda meluncurkannya.

Mencetak gol

Ini , jadi jawaban tersingkat di setiap bahasa menang!

Contoh

Berikut ini contoh tampilannya. Catatan ini direkam pada platform seluler, tetapi juga harus bekerja pada platform desktop.

kata sandi


Bagi mereka yang dapat melihat posting yang dihapus, berikut adalah posting Sandbox
musicman523

Keyboard apa yang Anda gunakan dalam video?
Beta Decay

1
@BetaDecay notifikasi di bagian akhir menyatakan keyboard zenui
zenui

@ BetaDecay Ini sebenarnya adalah keyboard ZenUI. Hanya ingin tahu, atau apakah itu penting?
musicman523

@ musicman523 Hanya ingin tahu :)
Beta Decay

Jawaban:


4

HTML + JavaScript, 20 + 105 = 125 byte

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

Keterlambatan antara masuknya kdan surat menjadi* satu detik.

JavaScript oninput, Diformat

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

Cuplikan Tes

Menambahkan braket akhir (> ) untuk kompatibilitas yang lebih baik.

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


Sepertinya tidak berakhir!
officialaimm

1
@officialaimm Tantangan menyatakan bahwa hanya aplikasi terminal yang perlu memiliki cara untuk menghentikannya.
Justin Mariner

Ah, konyol aku. Maaf.
officialaimm

3

Python 3 , 186 224 byte

Hanya bekerja di 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)

Versi yang lebih lama (186 bytes): Tidur wajib dilakukan terlepas dari kecepatan tombol ditekan.

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
Saya tidak berpikir ini cukup memenuhi semua kriteria, khususnya 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.Yang dikatakan, saya tidak bisa mengujinya karena saya tidak menjalankan Windows, jadi beri tahu saya! Anda dapat menemukan tantangan terkait ini bermanfaat sebagai referensi
musicman523

Saya menganggap penggantian dari k ke c hanya grafis (yang terpenuhi dalam kode saya). Apakah Anda juga bermaksud mengubah nilai tersimpan k dengan c?
officialaimm

1
Tidak, hanya itu yang seharusnya. Waktu tunda Anda 0,6 detik - apa yang terjadi jika saya mengetikkan dua huruf dalam 0,1 detik satu sama lain? Apakah Anda masih tidur selama 1,2 detik? Sekali lagi, maaf saya tidak dapat menguji ini sendiri - mungkin ada baiknya memposting video Anda yang menjalankan kode Anda!
musicman523

Diubah. Versi yang lebih baru memastikan karakter baru dapat dibuang bahkan sebelum waktu karakter sebelumnya belum habis.
officialaimm

3

Python 2 , 133 byte

Berdasarkan jawaban @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

Woah, kurang dari 90 byte !!! Akan memilih tetapi batas harian saya telah tercapai. Apakah ada cara untuk memeriksanya (saya hanya punya python 3 di pc saya)? Tapi saya tidak melihat layar yang jelas, bagaimana cara mengaturnya?
officialaimm

@ resmi oleh \rcetakannya
Felipe Nardi Batista

1
Saya akan memposting varian py3 ketika saya sampai di kelas saya
Felipe Nardi Batista

1
@ resmi ini seharusnya bekerja, saya di linux atm, jadi saya tidak bisa mengujinya
Felipe Nardi Batista

Saya memeriksanya, Ini berfungsi. (y)
officialaimm
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.