Leggi una password: sul cellulare!


13

Grazie alla recente sfida di MD XF , ora possiamo leggere le password in molte lingue diverse! Il problema è che ora dobbiamo trasferire le nostre applicazioni su dispositivi mobili e l'immissione della password è leggermente diversa.

Sfida

  • Leggi una stringa dalla tastiera.
  • Ogni volta che kviene inserito un carattere , visualizzalo per un breve intervallo di tempo.
  • Dopo che è trascorso l'intervallo di tempo OPPURE l'utente ha inserito un altro carattere, sostituirlo kcon un altro carattere c.

Regole

  • cdeve essere costante; deve essere lo stesso personaggio.
  • c può essere qualsiasi carattere visibile (ovvero non può essere una nuova riga, spazio, tabulazione o non stampabile).
  • cnon può essere basato su nessuna immissione k; cdeve essere definito / costante prima di kleggere il primo .
  • c deve essere lo stesso ogni volta che si esegue il programma.
  • cpuò essere uno dei valori indicati come kper caso, purché vengano seguite tutte le altre regole.

  • Devi stampare kin tempo reale. Non appena l'utente immette un nuovo k, è necessario visualizzarlo immediatamente.
  • kdovrebbe essere visibile all'utente finale prima di essere modificato in c; l'intervallo di tempo non deve essere inferiore a 0,5 secondi.
  • kdovrebbe essere sostituito centro un termine ragionevole; l'intervallo di tempo non deve superare i 5 secondi.
  • Non appena viene inserito un nuovo carattere, indipendentemente dal fatto che l'intervallo di tempo sia scaduto, è necessario sostituirlo kcon ce utilizzare kimmediatamente la chiave inserita come nuovo .

  • È accettabile cancellare e ridisegnare lo schermo ogni volta che è necessario modificare un personaggio.
  • È possibile utilizzare qualsiasi metodo ragionevole di input e output purché vengano seguite tutte le altre regole.
  • Si può presumere che il numero di caratteri immessi non sia mai più lungo della larghezza della finestra terminale / grafica.
  • Se si utilizza un terminale, il programma dovrebbe terminare dopo aver inserito una nuova riga o aver raggiunto EOF.
  • Il tuo programma dovrebbe funzionare come indicato qui su entrambi gli ambienti mobili e altri.

  • Il tuo programma potrebbe presumere che l'input conterrà solo caratteri stampabili (lettere, numeri, simboli) e possibilmente una nuova riga che termina (senza backspace, tasti freccia, cancella, ecc.).
  • Il programma può terminare quando si preme Ctrl + C.
  • È possibile terminare il programma chiudendo una finestra, se il programma ne avvia uno.

punteggio

Questo è , quindi vince la risposta più breve in ogni lingua!

Esempio

Ecco un esempio di come dovrebbe apparire. Nota che questo è registrato su una piattaforma mobile, ma dovrebbe funzionare anche su una piattaforma desktop.

parola d'ordine


Per coloro che possono vedere i post eliminati, ecco il post di Sandbox
musicman523

Quale tastiera stai usando nel video?
Decadimento beta

1
@BetaDecay la notifica alla tastiera degli stati finali zenui
ovs

@BetaDecay È infatti la tastiera ZenUI. Solo curioso o importa?
musicman523,

@ musicman523 Semplicemente curioso :)
Decadimento beta

Risposte:


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)

Il ritardo tra l'ingresso ke il divenire della lettera *è di un secondo.

JavaScript oninput, formattato

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

Test snippet

Aggiunta la parentesi finale ( >) per una migliore compatibilità.

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


Non sembra terminare però!
officialaimm,

1
@officialaimm La sfida afferma che solo le applicazioni terminali devono avere un modo per terminarle.
Justin Mariner,

Ah, sciocco me. Scusa.
officialaimm,

3

Python 3 , 186 224 byte

Funziona solo su 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)

Versione precedente (186 byte): la sospensione era obbligatoria indipendentemente dalla velocità con cui è stato premuto il tasto.

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
Non credo che questo soddisfi tutti i criteri, in particolare 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.Detto questo, non posso provarlo dal momento che non eseguo Windows, quindi fammi sapere! Puoi trovare questa sfida correlata utile come riferimento
musicman523

Ho supposto che la sostituzione da k a c fosse solo grafica (che è soddisfatta nel mio codice). Intendevi anche cambiare il valore memorizzato di k con c?
officialaimm,

1
No, è tutto ciò che dovrebbe esserci. Il tuo ritardo è di .6 secondi: cosa succede se scrivo due lettere entro 0,1 secondi l'una dall'altra? Dormirai ancora per 1,2 secondi? Ancora una volta, mi dispiace di non poterlo provare da solo - potrebbe valere la pena pubblicare un video su di te che esegui il tuo codice!
musicman523

Modificata. La versione più recente assicura che il nuovo personaggio possa essere lanciato anche prima che il tempo del personaggio precedente non sia scaduto.
officialaimm,

3

Python 2 , 133 byte

Basato sulla risposta di @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, 90 byte in meno !!! Voterei ma il mio limite giornaliero è stato raggiunto. C'è un modo per controllarlo (ho solo Python 3 sul mio PC)? A proposito non vedo lo schermo chiaro, come viene gestito?
officialaimm,

@officialaimm by the \rin the print
Felipe Nardi Batista,

1
Pubblicherò una variante py3 quando arrivo in classe
Felipe Nardi Batista,

1
@officialaimm questo dovrebbe funzionare, io sono su linux atm, quindi non posso provarlo
Felipe Nardi Batista

L'ho controllato, funziona. (y)
officialaimm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.