Schreiben Sie ein Programm, das ASCII-Text in eine Braillezeile übersetzt . Bedarf:
- Die Eingabe kann von stdin, der Befehlszeile oder einer anderen externen Eingabequelle stammen.
- Die Ausgabe sollte als Blindenschrift erkennbar sein, die Form der Ausgabe liegt bei Ihnen. Ein Beispiel wäre
o
für einen erhöhten Punkt und.
für einen nicht erhöhten Punkt. Eine Textmusterdarstellung1-3-4
ist beispielsweise nicht akzeptabel. Ein langer Zeilenumbruch ist nicht erforderlich. - Für eine minimale Lösung sind nur die 26 Buchstaben und Leerzeichen erforderlich. Alle Eingabezeichen, die von Ihrer Lösung nicht unterstützt werden, sollten ignoriert werden.
Die Bewertung erfolgt nach Anzahl der Zeichen im Quellcode. Strafen und Boni sind:
- +50 Strafe für die Verwendung von Unicode-Braillezeichen als Ausgabe.
- -50 Bonus für die Unterstützung von Großbuchstaben, Ziffern und Satzzeichen.
-200 Bonus für die Unterstützung von Ligaturen und Ein-Buchstaben-Kontraktionen aus englischer (Grad-2) Braille .(Wird dies zu einer separaten Herausforderung machen, da es ein ganz anderes Problem ist.)
Beispielaufruf und Ausgabe (minimale Lösung):
$ braille Hello world
o . o . o . o . o . . . . o o . o . o . o o
o o . o o . o . . o . . o o . o o o o . . o
. . . . o . o . o . . . . o o . o . o . . .
Antworten:
Python, 162
Unterstützt derzeit Kleinbuchstaben und Zeichensetzung, ist aber noch in Arbeit.
Beispiel:
quelle
Python -
9075 + 50 = 125Verwenden Sie Kleinbuchstaben.
Einzeiler (danke an ɐɔıɐɔuʎs)
quelle
for l in input():print("⠀⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵"[max(0,ord(l)-96)],end="")
75 Zeichen.max
Trick vergessen . Vielen Dankfor l in input():print((" "*97+"⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵")[ord(l)],end="")
C 269
Diese Implementierung erfordert, dass sein Argument, falls es Leerzeichen enthält, in Anführungszeichen gesetzt wird:
quelle
BBC Basic 103 ASCII-Zeichen oder 92 Token
Möglicherweise nicht ganz das, was das OP beabsichtigt hat. Dadurch wird die Schriftart für die Kleinbuchstaben neu definiert.
VDU 23,n,a,b,c,d,e,f,g,h
Weist dem Zeichen n eine 8x8-Bitmap zu, die aus acht Bytes besteht. Wenn Sie einem Parameter mit einem Semikolon anstelle eines Kommas folgen, wird er als Zwei-Byte-Little-Endian-Zahl behandelt.Die Braillemuster für Buchstaben
a
bisz
werden gemäß dem folgenden Bitmuster in A $ gespeichert. Dies wird durch Masken mit 9 = binär1001
und Rechteschiebungen extrahiert (Division durch 2 und 4 wird verwendet, da BBC Basic standardmäßig keinen Schichtoperator hat.)Ungolfed Code
Anwendungsbeispiel
Dies geschieht aus Gründen der Übersichtlichkeit im Bildschirmmodus 6 (geben Sie MODE6 ein, sobald Sie den Befehlszeilenemulator öffnen.)
Tatsächlich werden nach dem Ausführen des Codes alle Kleinbuchstaben (einschließlich Tastatureingaben) in Blindenschrift angezeigt.
Emulator unter http://bbcbasic.co.uk/bbcwin/bbcwin.html .
Siehe auch meine ähnliche Antwort: /codegolf//a/28869/15599
quelle
Bash + Coreutils
Minimale Lösung - nur Kleinbuchstaben, 83 (33 Unicode-Zeichen + 50 Strafpunkte):
Großbuchstaben, Ziffern und Interpunktion, 120 (120 Unicode-Zeichen + 50 Strafpunkte - 50 Bonuspunkte):
Beispielausgabe:
quelle
PHP, 331
Noch keine Boni.
quelle
<?
anstatt sie<?php[SPACE]
zu verwenden.JavaScript - 286
Erster Versuch. Keine Prämien.
quelle
w=prompt().split("");for(i=0;i<w.length;i++)z=w[i],o="o",p=".",b=[1,5,3,11,9,7,15,13,6,14],e=[c="",1,3],g=z.charCodeAt(0)-97,22<g&&g--,f=e[g/10|0],d=b[g%10],22==g&&(d=14,f=2),c+=d&1?o:p,c+=d&2?o:p,c+="\n",c+=d&4?o:p,c+=d&8?o:p,c+="\n",c+=f&1?o:p,c+=f&2?"o\n":".\n",console.log(c)
CJam - 51
Versuchen Sie es unter http://cjam.aditsu.net/
Beispiel Eingabe:
Beispielausgabe:
Es werden nur Kleinbuchstaben und Leerzeichen unterstützt. Andere Zeichen werden unterstützten Zeichen zugeordnet (insbesondere Groß- und Kleinbuchstaben).
Erläuterung:
Braillezeichen werden mit 1 für einen erhöhten Punkt und 0 für einen nicht erhöhten Punkt von links nach rechts und von oben nach unten codiert. Dies ergibt 6 Base-2-Ziffern; Eine 1 wird vorangestellt, um führende Nullen nicht zu entfernen. Anschließend wird die Zahl in die Basis 10 und anschließend in das entsprechende ASCII-Zeichen konvertiert.
Beispiel: t -> ⠞ -> 01/11/10 -> 1011110 -> 94 -> ^
Das Programm konvertiert jedes Zeichen zurück in das Triplett von Bitpaaren (wie z. B.
[[0 1][1 1][1 0]]
), um eine Matrix von Bitpaaren zu erhalten. Die Matrix wird dann transponiert und Separatoren hinzugefügt (Leerzeichen in Zeilen, Zeilenumbrüche zwischen Zeilen).q
Liest die Eingabe in einen String = Array von Zeichen{…}%
wendet der Block auf jedes Zeichen an,i32%
erhält den ASCII-Code. Mod 32 (Leerzeichen-> 0, a-> 1, b-> 2, z-> 26)"@`hptdx|lX\bjrvfz~nZ^ck]swg"
ist ein String, der die Braillezeichen enthält codiert wie zuvor erklärt=
erhält das entsprechende codierte Braillezeichen aus der Zeichenkettei2b
den ASCII-Code und konvertiert dann zur Basis 2 (wobei ein Array mit 7 Ziffern erhalten wird)1>
entfernt die führende 1 Ziffer2/
teilt das Array in (3) Paarez
transponiert die Matrix,Sf*
mit der jede Zeile verbunden wird LeerzeichenN*
verbinden die Zeilen mit Zeilenumbrüchenquelle
C
249,244Die Eingabe ist ein Befehlszeilenargument, das in Anführungszeichen gesetzt werden muss, wenn die Zeichenfolge Leerzeichen enthält. Unterstützte Zeichen sind Kleinbuchstaben und Leerzeichen. Nicht unterstützte Zeichen werden stillschweigend gelöscht.
Bearbeiten: 5 Bytes durch Vereinfachung einer Bedingung rasiert
quelle
Perl, 195 + 2-50 = 147
Dies behandelt Groß- und Kleinschreibung, Zahl und Zeichensetzung, ohne sich auf Unicode zu verlassen (195 Bytes + 2 Bytes (für
-pl
) - 50 Bonus).Mit Einrückung:
Beispielausgabe
quelle
Javascript ES6 -
282309297283270 - 50 =232259233220 BytesDies wäre kürzer, aber das Überprüfen auf Großbuchstaben tut weh .
EDIT: Vielen Dank an mbomb007, der mir zwei Bytes gespart hat. Leider stellte ich fest, dass ein bisschen früheres Golfen alles ruiniert hatte und ich musste 27 Zeichen hinzufügen.
BEARBEITEN: Aaand 12 Bytes durch Verschieben der Leerzeichen gespeichert.
BEARBEITEN: Es wurde erkannt, dass es albern war, als Zeichen auszugeben, und einige Bytes gespart. Ich habe auch ein paar Zeichen gespeichert, indem ich k = (a, b) => a% (2 * b)> b-1? 1: 0 für k = (a, b) => a% b> ~ -b / getauscht habe. 2: 1.
quelle
string.toLowerCase
eine Variable zuzuweisen ?1-9-->a-i
und0-->j