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.