Stellen Sie sicher, dass Sie die andere Herausforderung, die umgekehrte ASCII-Zeichentabelle, sehen !
Der ASCII-Zeichensatz (American Standard Code for Information Interchange) ist der am häufigsten verwendete Standard für die Zeichencodierung. ASCII-Codes stehen für Text in Computern, Telekommunikationsgeräten und anderen Geräten.
Herausforderung
Ihre Herausforderung besteht darin, eine Zuordnung des ASCII-Zeichensatzes zu drucken, während der Benutzer sie eingibt. GIF:
Nachdem der Benutzer jedes ASCII-Zeichen eingegeben hat, sollte die Ausgabe folgendermaßen aussehen:
Kartierung
Jedes Zeichen hat eine zugewiesene Position in einem 16x6-Logikraster, beginnend mit dem Leerzeichen in der oberen linken Position, und wird so umbrochen, dass die Ziffer 0 darunter angezeigt wird.
Wenn druckbare ASCII-Eingaben empfangen werden, drucken Sie dieses ASCII-Zeichen an der zugewiesenen Bildschirmposition, ohne eines der derzeit auf dem Bildschirm angezeigten Zeichen zu löschen.
Regeln
- Ihr Programm muss nur die druckbaren ASCII-Zeichen zuordnen,
0x20
um0x7E
. - Ihr Programm darf erst dann beendet werden, wenn alle druckbaren ASCII-Zeichen eingegeben wurden. Von hier aus kann Ihr Programm entweder beendet oder in Neverland ausgeführt werden.
- Ihr Programm kann Zeichen beliebig zuordnen, z. B. zu einer Tabelle, einer Tabelle, einem Konsolenfenster oder einem Grafikfenster.
- Unabhängig davon, wie Sie das Mapping anzeigen, muss es in Echtzeit aktualisiert werden (sobald Benutzereingaben eingehen).
- Wenn Ihr Programm Eingaben nicht im Hintergrund liest, muss es den Cursor aus dem Weg räumen, damit der Text die Karte nicht behindert.
Hilfe
Hier ist der Pseudocode-Algorithmus, mit dem ich das GIF erstellt habe:
loop forever
c = input
y_coord = c / 16
x_coord = c - y * 16
if c is printable
print c at (x_coord * 2 + 1, y_coord + 1)
end if
end loop
Es kann auch einen anderen Weg geben, um die erforderliche Leistung zu erzielen. Sie können meinen oder Ihren eigenen Algorithmus verwenden, aber die Ausgabe muss unabhängig davon gleich sein.
Hier ist eine nützliche ASCII-Tabellenreferenz.
Wertung
Die Antwort mit den wenigsten Bytes in jeder Sprache gewinnt. Habe Spaß!
Antworten:
QBIC ,
5357 Bytes4 Bytes für den Abstand hinzugefügt.
QBIC begann die Entwicklung als Abkürzung für QBasic, daher dachte ich, dass die Übersetzung meiner QBasic-Antwort dies gut demonstrieren würde. Wir haben etwa 40% in der Byte-Anzahl für ein funktionsgleiche Programm gespeichert - und das ist auch bei
LOCATE
,ASC
undCHR
hat keine QBIC-Funktionen vor. Glücklicherweise kann QBIC Code direkt an QBasic übergeben, um dies zu kompensieren. Ein Side-by-Side:quelle
JavaScript (ES6) + HTML, 114 + 16 = 130 Byte
16 Bytes dank @Shaggy eingespart
Es ist so unglaublich befriedigend, nur die Tastatur zu zerdrücken ...
quelle
prompt()
in einer Schleife verwenden? Es erspart Ihnen die gesamte Ereignisbehandlung und HTML. OP scheint es zu erlauben. Siehe die Kommentare des Mathematica-Posts.onkeypress
für sich selbst zu verwenden, sodass Sie dasbody
Tag ablegen können. Auch daspre
Tag kann auf gerade gekürzt werden<pre id=O
. Sie müssen jedoch das Closing einschließen>
, damit es in einem Snippet funktioniert.QBasic 4.5,
8185 Bytes4 Bytes hinzugefügt, um der Abstandsregel zu entsprechen.
Und die Ausgabe wird so aussehen (HINWEIS: Alter Screenshot, jetzt ist jedes Zeichen durch ein Leerzeichen getrennt):
QBasic hat den
LOCATE
Befehl, der hier nützlich ist. Eine Aufschlüsselung dieses Codes:quelle
Java 8 , 143 Bytes
Verwendet den ANSI-Steuercode
CSI n ; m f
zum Festlegen der Cursorposition undConsole.readPassword()
zum stillen Lesen der Benutzereingaben. Ausgabe einiger Zeichen:quelle
readPassword()
gebraucht gesehen . Oh, und Ihnen scheint nach dem Ausdruck ein Semikolon zu fehlen. Ist es auch nicht möglich,System.out.printf
irgendwie statt zu verwendenSystem.out.println(String.format(
? Und Sie können zu wechseln()->
,o->
indem Sie einen nicht verwendeten leeren Parameter verwenden .BrainFuck , 355 Bytes
Die Optionen von BrainFuck sind ziemlich begrenzt, so dass die Ausgabe im Terminal erfolgt und der Bildschirm mit 20 Zeilenumbrüchen "gelöscht" wird. Die Eingabe sollte aus ASCII-Zeichen bestehen, die durch Zeilenumbrüche getrennt sind.
Probieren Sie es online!
Formatiert und dokumentiert
Dies sind die Debug-Hinweise, mit denen ich das Programm geschrieben habe. Ich habe meinen Interpreter verwendet, der optional den Zustand des Bandes bei jedem '~' Zeichen zum Debuggen drucken kann.
quelle
Mathematica, 108 Bytes
Versuchen Sie es online unter https://sandbox.open.wolframcloud.com/
Wenn Sie Code einfügen und drücken
Shift+Enter
, wird ein Dialogfeld angezeigt, das Sie"a"
beispielsweise als Zeichen eingebena
. Das Programm läuft für immer.Hinweis: In der Wolfram-Sandbox ist die Schriftart anders formatiert als in Mathematica auf meinem Computer. Der Zeilen- / Spaltenabstand sieht also möglicherweise seltsam aus.
quelle
OK
auf ein Eingabefeld drücken , wird ein anderes Eingabefeld angezeigt, in das Sie die Eingabe eingeben können.Python 2 , 115 Bytes
Probieren Sie es online!
Benötigt Anführungszeichen (einfach oder doppelt) um die eingegebenen Zeichen (die TIO-Version nicht).
quelle
raw_input
um ,input
wie es Gemeinschaft Volkszählung ist , dass Sie die Eingabe in Anführungszeichen es hat , wenn nötig annehmen kann.{
ohne eine Übereinstimmung eingegeben habe}
.str , nicht konkurrierend, 18 Bytes
Vorstellung meiner neuen semi-esoterischen Sprache.
quelle
Haskell, 133 Bytes
Erfordert ein Terminal, das ANSI-Escape-Sequenzen versteht.
Es ist kürzer, eine Liste aller bisher gedrückten Tasten zu halten und den Bildschirm zu löschen, bevor alle Tasten in jeder Runde gedruckt werden, als das Echo in der Terminalsitzung auszuschalten. Letzteres braucht
import System.IO
undhSetEcho stdin(2<1)
was zu viele Bytes kostet.quelle
C 101 Bytes
Dies war das Programm, mit dem ich die Grafiken erstellt habe. Die Ausgabe erfolgt wie im GIF gezeigt. ;)
quelle
QBasic,
6258 BytesGetestet mit QB64 . Sollte auch mit normalem QBasic gut funktionieren, obwohl Sie es möglicherweise ändern möchten, um a
CLS
beim ersten Start ausgeführt wird.Ähnlich wie die Antwort von steenbergh , aber verwendet
INPUT$(1)
, um Zeichen einzeln zu lesen. Dieser Ansatz ist kürzer und zeigt auch keine Eingabeaufforderung an. Es wird auchRUN
für die Endlosschleife verwendet, da zwischen den Iterationen nur der Status des Bildschirms gespeichert werden muss.quelle
input$()
. Ich mag das TIPPS-Thema übrigens auch.Pascal, 112 Zeichen
Da meine Mathematica Lösung viele Bytes nimmt
div
,mod
undToCharacterCode[Input[]]
versuche ich , eine andere Antwort mit Pascal zu machen. Aber ohneClrScr
meinen Compiler (FPC) blieben einige Kompilierinformationen auf dem Bildschirm.ClrScr;
dauert 7 Bytes.Der
*2
für den richtigen Abstand verwendete Wert benötigt weitere 2 Bytes.quelle
LOGO, 90 Bytes
Probieren Sie es auf FMSLogo.
Immerhin ist meine Logo-Lösung die kürzeste im Vergleich zu meiner Mathematica- und Pascal-Antwort.
Fügen Sie 3 Bytes hinzu, wenn die Schildkröte ausgeblendet werden soll.
quelle
6502 Maschinencode + Apple // e ROM, 31 Bytes
Hex-Dump:
Kommentierte Versammlung:
Wenn der Cursor ihn ungültig macht, ist dies eine 36-Byte-Version ohne Cursor:
quelle
Ruby,
797571 + 13 = 84 Bytes+13 Bytes für
-rio/console
Flag.Ungolfed
quelle
SmileBASIC 3, 82 Bytes
Befindet sich im SmileBASIC-Zeichensatz dort,
¥
wo\
normalerweise wäre; hoffentlich macht dies diese Antwort nicht vollständig ungültig.quelle
Applesoft BASIC , 134 Byte
Dies ist eine Golfversion des Apple] [Tastaturtests, der die Herausforderung angeregt hat.
quelle