Ihre Herausforderung besteht darin, ein "Passwort" von der Tastatur / Standardeingabe zu lesen.
Herausforderung :
- Lesen Sie eine Zeichenfolge
s
unsichtbar. s
Drucken Sie für jedes der Zeichen in ein Zeichenc
.- In Echtzeit.
Regeln:
- Sie müssen
c
in Echtzeit drucken . Sobald der Benutzer ein Zeichen eingibt, müssen Sie anzeigenc
. c
muss konstant sein, dh 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).c
Kann nicht basierens
, dhc
muss definiert / konstant sein, bevors
gelesen wird.c
muss jedes Mal gleich sein, wenn das Programm ausgeführt wird.c
kann einer ders
zufälligen Charaktere sein , solange alle anderen Regeln befolgt werden.- Keines der Zeichen von
s
darf auf dem Bildschirm erscheinen,c
außer (siehe vorherige Regel). - Sie können alle sinnvollen Ein- und Ausgabemethoden verwenden, solange alle anderen Regeln eingehalten werden.
- Sie können davon ausgehen, dass die Länge von
s
niemals länger als die Breite des Terminals / Grafikfensters ist. - Wenn Sie ein Terminal verwenden, sollte Ihr Programm nach Eingabe eines Zeilenumbruchs oder einer EOF beendet werden.
Beispiel :
Wenn s
war password01
und c
war *
, würde die Ausgabe ungefähr so aussehen:
Gewinner :
Die kürzeste Einsendung in jeder Sprache gewinnt.
tkinter
für unser benutzerdefiniertes Eingabefeld zulässig (wie das in HTML), sodass das Programm nicht beendet wird, wenn die Eingabetaste gedrückt wird, sondern wenn Sie dasEntry
Fenster schließen (X unter Windows undcmd
+W
unter Mac)?Antworten:
str , 5 bytes
Aufgrund eines Fehlers sind dies 5 Bytes. Es sollte nur 1 Byte sein:
quelle
cmder
Antwort auf jeden Fall aufgrund IhresCtrl+Z
Kommentars gesehen: PHTML, 20 Bytes
Alternative: HTML + JavaScript, 51 Bytes
Obwohl das OP bestätigt hat, dass dies gültig ist, ist hier eine Lösung mit JS für Puristen!
quelle
oninput=_=>i.value=i.value.replace(/./g,"*")
Speichert ein Byte.c
kann alles sein, können Sie zwei weitere Bytes mit speichernoninput=_=>i.value=i.value.replace(/./g,1)
Vim, 36 Bytes:
Diese verwendet vim-Taste Notation , so
<C-v>
ist Ctrl-V ,<CR>
ist ein,<esc>
ist die Escape - Taste, und<tab>
ist die Tab - Taste.c ist
'0'
.Hier ist ein Hexdump, um zu beweisen, dass die Byteanzahl korrekt ist:
Dies funktioniert durch Ausführen der folgenden zwei ex-Befehle:
Der erste bedeutet
Und der zweite bedeutet
quelle
Ruby with Shoes, 29 Zeichen
Beispielausgabe:
quelle
Aceto ,
876 BytesErläuterung:
Lies ein Zeichen (
,
), negiere es (!
) und beende es unter bestimmten Bedingungen. Drucken Sie die Null oben auf den Stapel (p
) und kehren Sie zum Anfang zurück.Laufen Sie mit
-F
, um den Effekt sofort zu sehen (weil das Spülen)Meine erste Lösung basierte auf dem Sandbox-Post, wobei Leerzeichen als Ersatzzeichen zulässig waren und kein Verlassen bei der Eingabe erforderlich war (4 Byte):
quelle
C auf POSIX,
12811711396 Bytes-11 danke an Quentin beim Durchsuchen
termios.h
-4 danke an Quentin beim Hinweisen auf meine dummen Fehler
-17 weil Quentin ein verdammter Zauberer ist.
Dadurch wird STDIN in den unformatierten / unsichtbaren Modus versetzt, sodass es in Echtzeit Tastendrücke erhalten kann. Das dauert 77 Bytes und ich bin sicher, dass ich ein bisschen Golf spielen kann. Beachten Sie, dass dadurch STDIN beim Beenden nicht zurückgesetzt wird, sodass Ihr Terminal beschädigt wird, wenn Sie dies nicht manuell tun.
So können Sie STDIN zurücksetzen:
Ausgabe wie im GIF gezeigt :-)
quelle
termios.h
,ECHO
ist0000010
undICANON
ist0000002
. Das heißt, das~(ECHO|ICANON)
ist nur~10
:)!=
kann ersetzt werden^
, und'\n'
mit10
(unter der Annahme , UTF-8);)t
Speicher durch ein Array von ganzen Zahlen ersetzen . Dannc_lcflags
endet es beit[3]
, und wir brauchen weder den Namen noch den Typ noch die#include
insgesamt 94 Bytes:c,t[15];f(){for(tcgetattr(1,t),t[3]&=~10,tcsetattr(1,0,t);(c=getchar())^10&&c^4;)printf(".");}
- Aber vielleicht soll ich es lieber als Antwort posten, als Spaß mit Ihnen zu haben :)x86-Computercode unter MS-DOS - 14 Byte
Wie üblich ist dies eine vollständige COM-Datei, die auf DosBox und den meisten DOS-Varianten ausgeführt werden kann.
Kommentierte Versammlung:
quelle
xor
sind woppin '3 bytes und wären genau so groß, wenn ich es insgesamt funktionieren lassen würdeax
; Ich habe versuchtxor ax,0a0dh
/test al,al
, aber es ist genauso groß, weil dummtest
ist zwei Bytes, grrr ...Python 2 , 50 Bytes
Funktioniert nur unter Windows
quelle
AHK , 17 Bytes
Built-Ins sind nicht interessant.
quelle
Java 5-8,
125122131124 BytesUngolfed:
Ergebnis:
Kredit:
-3 @MD XF (wies auf meinen blöden Fehler mit hin
String[]args
)-7 @KritixiLithos (Darauf
public class
kann nur hingewiesen werdenclass
)quelle
String[]args
nötig?String[]a
.1>0
bewerten1
?Java (< 8)
-1>0
wertet austrue
, was anders ist. Ich werde die gleiche Antwort in Groovy posten.Mathematica 34 Bytes
Nach der Eingabe jedes Zeichens wird ein einzelnes Sternchen angezeigt. Die leeren Anführungszeichen stehen für den Titel, der im Popup-Eingabefenster angezeigt wird.
Die
;
verhindert , dass das Passwort gedruckt wird.quelle
Vim,
58505250 BytesWurde hinzugefügt, um sicherzustellen, dass Leerzeichen ordnungsgemäß behandelt werden.
Vielen Dank an @DJMcMayhem für jede Menge Hilfe und Ideen
In der folgenden typischen Vim-Schlüsselsyntax. Die mit einem gekennzeichneten Zeichen
^
sindCtrl+<char>
also^Q
=Ctrl+q
Es gibt keine TIO-Verknüpfung, da Sie direkt in Vim eingeben müssen (im Gegensatz zur normalen Vorabeingabe). Um den Code auszuführen, müssen Sie ihn in Vim eingeben. Anschließend können Sie Ihr Kennwort eingeben und die Eingabetaste drücken. Mit dem Passwort wird nichts gemacht. Es wird nicht einmal wissen, was es war. Sobald Sie auf "Enter" klicken, wird das Vim-Fenster geöffnet
:q!
Dies funktioniert, indem alle druckbaren ASCII-Zeichen
*
im Einfügemodus und Zuordnungen<CR>
zu zugeordnet werden<ESC>:q!<CR>
quelle
<C-v>, <esc> and <C-a>
aber es ist schwer zu sagen.FLTK, 47 Zeichen
Probelauf:
Beispielausgabe:
quelle
Verarbeitung, 53 Bytes
Dies übernimmt die Eingabe per Tastendruck aus einem grafischen Fenster. Das Zeichen, mit dem Kennwörter dargestellt werden sollen, ist
0
. Beachten Sie, dass aufgrund der hohen Framerate jeder Tastendruck als ein Vielfaches von0
s angezeigt wird (und auch aufgrund der Tatsache, dass dies istkeyPressed
und nichtkeyTyped
(kein Boolescher Wert) oderkeyrelease
).quelle
Bash , 54 Bytes
$'\r'
Kann zu Bewertungszwecken durch einen wörtlichen Wagenrücklauf ersetzt werden.Probieren Sie es online! (nicht viel zu sehen)
quelle
ZX81 BASIC, 54 Byte
Im ZX81-Zeichensatz befinden sich die druckbaren Zeichen im Bereich Leerzeichen bis
Z
, obwohl Sie auf diese Weise eigentlich kein Leerzeichen eingeben können, da es sich um das Umbruchzeichen handelt.ZX Spectrum BASIC, 24 Byte
Beachten Sie, dass dieses
>=
Schlüsselwort in Sinclair BASIC (in diesem Fall Codepunkt 140) als Einzelbyte-Schlüsselwort zählt.quelle
PRINT
zu?
, ich , das funktioniert in vielen alten BASIC - Dialekte weißPRINT
ist ein 1-Byte-Token. Es wird nur auf dem Bildschirm als 7 Zeichen dargestellt (außer nachTHEN
, wenn das führende Leerzeichen unterdrückt ist).R 29 Bytes
Eingebaut, die Passworteingaben behandelt. Öffnet ein neues Fenster und ersetzt die Eingabe durch Punkte.
invisible
wird verwendet, um das Drucken des Kennworts an STDOUT zu unterdrücken.quelle
Tcl / Tk, 18
Muss auf der in der interaktiven Shell ausgeführt werden (oder Abkürzungen aktiviert haben):
quelle
grid [entry .e -sh *]
und-sh
ist eine Optionsabkürzung für-show
. 23 Bytes ist das, was ich als Minimum für ein wartbares Programm ohne Golf betrachten würde , das dies tut.Vim, 15 Tastenanschläge
<S-tab>
bedeutet shift + tab.Anscheinend gibt es dafür eine eingebaute Funktion, von der ich nichts wusste. Da mir meine manuelle Antwort sehr gut gefällt und dieser Ansatz völlig anders ist, habe ich mir vorgenommen, eine neue Antwort zu posten, anstatt sie zu bearbeiten.
Dies funktioniert, indem die
inputsecret
Funktion aufgerufen und sofort nach dem Beenden beendet wird.quelle
6502 Maschinencode (C64),
2221 BytesVerwendung :
SYS 2062
In der Liste der kommentierten Demontagen (Commented Disassembly Listing, ACME) können Sie die ersten drei kommentierten Zeilen auskommentieren, die nach dem
RUN
Laden gestartet werden sollen:Bemerkungen:
quelle
Viertens (gviertens) , 54 Bytes
Erläuterung
quelle
Python 3 +
tkinter
-6361 BytesZeigt
1
für jedes Zeichen ein an und endet beim Schließen des Fensters (OP hat dies erlaubt).quelle
from tkinter import*
(newline)Entry(show=1).pack();Tk().mainloop()
funktionieren?tkinter
Fenster erzeugt. Eins mit dem Textfeld, eins leer. Es scheint mir nicht richtig zu sein.show=
?show=
Groovy,
7773 BytesDies ist ein anonymer Abschluss mit 0 erforderlichen Eingaben.
Ungolfed:
Edit 1 (-4 Bytes): Component # visible kann direkt aufgerufen werden, lesen Sie hier mehr .
quelle
Mikro , 35 Bytes
Erklärung:
quelle
BF, 24 Bytes
Funktioniert mit bf.doleczek.pl . Sie können mit Strg + Z ein Nullzeichen an das Programm senden.
Alternative Lösung:
BF, 1 Byte
Dies ist eine sehr witzige Lösung. Mein Terminal ist 0 Zeichen breit. Bitte geben Sie keine längeren Passwörter ein.
quelle
\b
eine Sache ist. : P\b
ist sowieso nicht bedruckbar.\b
, um die Eingabe zu überschreiben, richtig?PowerShell, 12 Byte
Hiermit werden Eingaben vom Host gelesen und mit dem Flag -a als sichere Zeichenfolge / Kennwort behandelt. In der ISE wird ein Meldungsfeld angezeigt, das ein ähnliches Verhalten aufweist, da die ISE keine Tastendruckerfassung zulässt.
quelle
QBasic, 48 Bytes
INPUT$(1)
Liest das nächste Zeichen von der Tastatureingabe. (Dies kann Dinge wie Tab, Backspace und Escape beinhalten, aber da das OP nichts über diese gesagt hat, gehe ich davon aus, dass wir uns keine Sorgen machen müssen.) Wenn das Zeichen\r
(ASCII 13) ist, beenden Sie das Programm; Andernfalls drucken Sie*
ohne Zeilenumbruch. Wiederholen Sie ad infinitum.quelle
Perl + Bash, 30 Bytes
c
is*
, wirdread
von bash verwendet, ist also keine reine Perl-Lösung.quelle
Brainfuck, 21 Bytes
Letzteres verspreche ich. Keine Eingabe = -1, Eingabeende = 0
Wie es funktioniert
quelle
,[>-.,]
QBIC , 44 Bytes
Erläuterung
quelle