Lesen Sie ein Passwort: auf dem Handy!

13

Dank der jüngsten Herausforderung von MD XF können wir Passwörter jetzt in vielen verschiedenen Sprachen lesen! Das Problem ist, dass wir unsere Anwendungen jetzt auf mobile Geräte portieren müssen und die Kennworteingabe ein wenig anders erfolgt.

Herausforderung

  • Lesen Sie eine Zeichenfolge von der Tastatur.
  • kZeigen Sie jedes Mal, wenn ein Zeichen eingegeben wird, es für ein kurzes Zeitintervall an.
  • Nachdem das Zeitintervall abgelaufen ist ODER der Benutzer ein anderes Zeichen eingegeben hat, ersetzen Sie es kdurch ein Zeichen c.

Regeln

  • cmuss konstant sein; Es muss das gleiche Zeichen sein.
  • c kann ein beliebiges sichtbares Zeichen sein (dh es kann sich nicht um eine neue Zeile, ein Leerzeichen, ein Tabulator oder ein nicht druckbares Zeichen handeln).
  • ckann nicht auf einer Eingabe basieren k; cmuss definiert / konstant sein, bevor der erste kgelesen wird.
  • c muss jedes Mal gleich sein, wenn das Programm ausgeführt wird.
  • ckann einer der Werte sein, die wie kzufällig angegeben werden, solange alle anderen Regeln eingehalten werden.

  • Sie müssen kin Echtzeit drucken . Sobald der Benutzer ein neues eingibt k, müssen Sie es sofort anzeigen.
  • ksollte für den Endbenutzer sichtbar sein, bevor er zu geändert wird c; Das Zeitintervall darf 0,5 Sekunden nicht unterschreiten.
  • ksollte cinnerhalb einer angemessenen Frist ersetzt werden; Das Zeitintervall darf 5 Sekunden nicht überschreiten.
  • Sobald ein neues Zeichen eingegeben, ob das Zeitintervall abgelaufen ist, sollten Sie ersetzen kmit cund die eingegebenen Schlüssel als neues verwenden ksofort.

  • Es ist akzeptabel, den Bildschirm jedes Mal zu löschen und neu zu zeichnen, wenn Sie einen Charakter ändern müssen.
  • Sie können alle sinnvollen Ein- und Ausgabemethoden verwenden, solange alle anderen Regeln eingehalten werden.
  • Sie können davon ausgehen, dass die Anzahl der eingegebenen Zeichen niemals länger als die Breite des Terminals / Grafikfensters ist.
  • Wenn Sie ein Terminal verwenden, sollte Ihr Programm nach Eingabe einer neuen Zeile oder Erreichen der EOF beendet werden.
  • Ihr Programm sollte in mobilen und anderen Umgebungen wie hier beschrieben funktionieren.

  • Ihr Programm geht möglicherweise davon aus, dass die Eingabe nur druckbare Zeichen (Buchstaben, Zahlen, Symbole) und möglicherweise einen abschließenden Zeilenumbruch (keine Rücktaste, Pfeiltasten, Löschen usw.) enthält.
  • Ihr Programm wird möglicherweise beendet, wenn Sie Strg + C drücken.
  • Sie können Ihr Programm beenden, indem Sie ein Fenster schließen, wenn Ihr Programm eines startet.

Wertung

Das ist , also gewinnt die kürzeste Antwort in jeder Sprache!

Beispiel

Hier ist ein Beispiel, wie es aussehen sollte. Beachten Sie, dass dies auf einer mobilen Plattform aufgezeichnet wird, aber auch auf einer Desktop-Plattform funktionieren sollte.

Passwort

musicman523
quelle
Für diejenigen, die gelöschte Beiträge sehen können, ist hier der Sandbox-Beitrag
musicman523
Welche Tastatur benutzt du im Video?
Beta Decay
1
@BetaDecay die Benachrichtigung am Ende Staaten Zenui Tastatur
Ovs
@BetaDecay Es ist in der Tat die ZenUI-Tastatur. Einfach nur neugierig oder spielt es eine Rolle?
musicman523
@ musicman523 Nur neugierig :)
Beta Decay

Antworten:

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)

Die Verzögerung zwischen der Eingabe kund dem Schreiben *beträgt eine Sekunde.

JavaScript oninput, formatiert

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

Testschnipsel

Die abschließende Klammer ( >) wurde hinzugefügt, um die Kompatibilität zu verbessern.

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

Justin Mariner
quelle
Scheint aber nicht zu enden!
offiziell am
1
@officialaimm Die Herausforderung besagt, dass nur Terminalanwendungen eine Möglichkeit haben müssen, sie zu beenden.
Justin Mariner
Ach, dumm mich. Es tut uns leid.
offiziell am
3

Python 3 , 186 224 Bytes

Funktioniert nur in 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)

Ältere Version (186 Byte): Der Ruhezustand war unabhängig von der Geschwindigkeit, mit der die Taste gedrückt wurde, obligatorisch.

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
officialaimm
quelle
1
Ich glaube nicht, dass dies alle Kriterien erfüllt, insbesondere 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.kann ich es nicht testen, da ich kein Windows-Betriebssystem habe. Lassen Sie es mich wissen! Sie finden diese verwandte Herausforderung möglicherweise hilfreich als Referenz
musicman523
Ich nahm an, dass die Ersetzung von k nach c nur grafisch war (was in meinem Code erfüllt ist). Wollten Sie auch den gespeicherten Wert von k mit c ändern?
offiziell am
1
Nein, das ist alles, was es geben sollte. Ihre Zeitverzögerung beträgt 0,6 Sekunden. Was passiert, wenn ich zwei Buchstaben innerhalb von 0,1 Sekunden voneinander eingebe? Schläfst du noch 1,2 Sekunden? Tut mir leid, dass ich das nicht selbst testen kann - es könnte sich lohnen, ein Video zu veröffentlichen, in dem du deinen Code ausführst!
musicman523
Geändert. Die neuere Version stellt sicher, dass ein neuer Charakter geworfen werden kann, noch bevor die Zeit des vorherigen Charakters abgelaufen ist.
offiziell am
3

Python 2 , 133 Bytes

Basierend auf @officialaimm Antwort .

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
Felipe Nardi Batista
quelle
Woah, 90 Bytes weniger !!! Würde stimmen, aber mein Tageslimit wurde erreicht. Gibt es eine Möglichkeit, dies zu überprüfen (ich habe nur Python 3 auf meinem PC)? Btw sehe ich keinen klaren Bildschirm, wie wird es gehandhabt?
offiziell am
@officialaimm von \rim Druck
Felipe Nardi Batista
1
Ich werde eine py3-Variante posten, wenn ich in meinem Klassenzimmer bin
Felipe Nardi Batista,
1
@officialaimm das sollte funktionieren, ich bin unter Linux atm, also kann ich es nicht testen
Felipe Nardi Batista
Ich habe es überprüft. Es funktioniert. (y)
offiziell am