Schreiben Sie das kürzeste Programm, das eine Folge von Zahlen (mit einer Länge von bis zu mindestens 20) als Eingabe verwendet, und zeigen Sie die Ausgabe mit den Standardnummern im Digitaluhrstil an. Zum Beispiel für Eingabe 81 würde eine Lösung mit ASCII-Ausgabe ergeben:
_
|_| |
|_| |
Eine grafische Ausgabe ist ebenfalls akzeptabel, wenn dies hilfreich ist.
Antworten:
APL (Dyalog) (45)
Die Zeichenfolge ist
ા8धगɯેࣃଏ૽
das Unicode-Zeichen2750 56 2343 2327 623 2759 2777 2243 2831 2813
(Sie sollten sie jedoch nur kopieren und einfügen können). Sie kodieren die Zahlen. Das Programm liest eine Zeile von der Tastatur.Erläuterung:
1+⍎¨⍞
: Liest eine Zeile von der Tastatur, parst jedes Zeichen als Ziffer und addiert dann 1 zu jeder Zahl (APL-Arrays basieren standardmäßig auf 1).⎕UCS'ા8धगɯેࣃଏ૽'[
...]
: Wählen Sie die Zeichen aus, die zu den Ziffern der eingegebenen Zahlen gehören, und suchen Sie die Unicode-Werte.{
...}¨
: Führen Sie für jeden dieser Werte Folgendes aus:1+⍵⊤⍨9⍴3
: Ermitteln Sie die ersten 9 Stellen der Basis 3 aus dem in Basis 3 ausgedrückten Wert und addieren Sie 1 (da die Arrays auf 1 basieren).' _|'[
...]
: Wählen Sie abhängig von diesen Ziffern ein Leerzeichen, eine horizontale Linie oder eine vertikale Linie aus3 3⍴
: Format als 3-mal-3-Box.quelle
Funktion
Nicht wirklich eine Sprache, die zum Golfen geeignet ist ... aber trotzdem habe ich versucht, die Codegröße so klein wie möglich zu halten - eine ganz andere Herausforderung als in "normalen" Sprachen. Dies sind 1555 Zeichen oder 3110 Bytes (wenn als UTF-16 codiert; UTF-8 ist größer).
Hier ist ein Screenshot des laufenden Programms. Es funktioniert wirklich :)
Da dies in StackExchange aufgrund des zusätzlichen Zeilenabstands hässlich aussieht, sollten Sie den folgenden Code in der JavaScript-Konsole Ihres Browsers ausführen, um dies zu beheben:
$('pre').css('line-height',1)
Es könnte wahrscheinlich kleiner sein, wenn ich keinen Fehler gemacht hätte, aufgrund dessen die Ausgabe von hinten nach vorne lief. Ich habe das behoben, indem ich eine zusätzliche Funktion hinzugefügt habe, um die Eingabe umzukehren. Sonst müsste ich wahrscheinlich alles neu schreiben.
Ich habe auch einen weiteren Fehler gemacht (Vertauschen der Operanden in zwei Aufrufen von
‼
), der es erforderlich machte, die zusätzliche‡
Funktion zu deklarieren , aber diese ist so klein, dass sie in die Hauptfunktion passt und daher keine Zeichen hinzufügt!quelle
wxpython, viele zeichen
Prüfung
ps: kein seriöser eintrag, sieht aber so aus, als wäre eine grafische ausgabe auch akzeptabel, also habe ich es einfach mal ausprobiert :-)
quelle
Golfscript - 66 Zeichen
xxd
: (xxd -r
zum Zurücksetzen verwenden)Dies folgt den meisten anderen Antworten, dass es keine Leerzeichen zwischen den Zahlen und Leerzeichen in gehalten werden. Ein Raum zwischen den Zahlen können leicht hinzugefügt werden mit
1+
vor{"_ |"=}%
. Gepackt in eine Zahl zur Basis 3 und dann als Basis 243 in eine Zeichenfolge.quelle
J,
90,78,68 Zeichen[ Update: Verwenden der Unicode-Codierung (1 Byte):
funktioniert wie bisher:]
Der Schlüssel liegt in der Kodierung von Ziffern als Ganzzahlen zur Basis 3. Null ist zum Beispiel:
oder
' _ | ||_|'
010202212 3 = 2750.quelle
http://codegolf.stackexchange.com/q/1000
)Mathematica
205 209 198179Verwendung
quelle
JavaScript (145)
148145Da JavaScript nicht über die Standardeingabe / -ausgabe verfügt, wird dies als eine Funktion geschrieben, die eine Zeichenfolge verwendet und die Ausgabe als Zeichenfolge zurückgibt.
Abgetrennt aus:
So funktioniert das:
Die ersten drei Bits sind für die erste Zeile usw.
In jeder Gruppe von drei Bits gibt das erste an, ob das erste Zeichen
|
oder ein Leerzeichen ist, das zweite, ob es_
oder ein Leerzeichen ist, und das dritte wiederum|
oder ein Leerzeichen.Diese drei Bits werden abgerufen , wie
c&1
,c&2
undc&4
, die dann als Indizes in der Zeichenfolge verwendetb
.Bei jeder Iteration
i%L
ist dies die „x-Koordinate“, dh die Ziffer innerhalb der Eingaben
Bei jeder Iteration
i/L
ist die "y-Koordinate", dh die Zeile, aber wir müssen|0
es eine ganze Zahl machenSchließlich werden die Leerzeichen zwischen den Ziffern und die Zeilenumbrüche zwischen den Zeilen auch durch Indizieren abgerufen
b
, wobei das Leerzeichen und die ansonsten nicht verwendete Position 3 in dieser Zeichenfolge erneut verwendet werden! :)quelle
Rubin, 142
erwartet eine Eingabe in die Variable
x
. Beispiele:quelle
Golfscript - 97 Zeichen
quelle
Windows PowerShell, 127
Da die Zeichenfolgen einige unangenehm zu schreibende Zeichen enthalten, können Sie einen Hexdump erstellen:
quelle
Fortan
186175 ZeichenNeue Version:
Dies stört eigentlich auch das Beenden (+3 Zeichen) :). Hier ist die besser lesbare Version. Sie reduziert die LUT-Größe um ein Drittel. Der resultierende Code ist jedoch komplexer, sodass sich keine großen Einsparungen ergeben:
Alte Version:
Dies lässt den Stapel unausgeglichen und macht sich nicht die Mühe, den Interpreter zu verlassen. Hier ist eine übersichtlichere, besser lesbare Version
quelle
C # 369 Zeichen
Ich könnte leicht ein paar Zeichen ausschneiden . Es ging mehr darum, LINQ zu missbrauchen :)
Mehr Whitespace-Version:
quelle
using
s (409). Dann gibt es einige unnötige Leerzeichen, die entfernt werden können (402). Die Aufgabe gibt an, dass Leerzeichen zwischen den Ziffern weggelassen werden sollen (399).g
wird nur einmal verwendet, so dass Sie 7 Zeichen durch Einfügen speichern können.b
auch nur einmal verwendet, so kann man es auch einbinden. Sie können auch viele Zeichen speichern, wenn Sie das Ganzzahl-Array in ändern"{H=mNgwI\x7fo"
, oder sogar kürzer, wenn Sie\x7f
das tatsächliche Zeichen 127 (das nicht druckbar, aber zulässig ist) ändern. Der>>
wird immer noch funktionieren, da eine implizite Konvertierung vonchar
nach erfolgtint
..ToCharArray()
und die.ToArray()
sind beide überflüssig, Sie können sie einfach entfernen :)Java-Lösung:
585570 ZeichenIch glaube nicht, dass ich in Java noch mehr Golf spielen werde ...
quelle
Python,
218180176b=map(int,raw_input());a=map(int,bin(914290166014670372457936330)[2:]);c=' |_';p=lambda k:''.join(c[a[9*n+k]]+c[2*a[9*n+1+k]]+c[a[9*n+2+k]]for n in b)+'\n';print p(6)+p(0)+p(3)
Mit Zeilenumbrüchen:
quelle
Bash, 11 Zeichen
Ja, ich weiß, ich betrüge.
Sie müssen Toilette installiert haben.
quelle
figlet
würde auch funktionieren.Java, 2.095
BEISPIEL E / A
quelle
D: 295 Zeichen
Mehr leserlich:
quelle
Ocaml, 268
Lesbare Version
quelle
Perl (
182180)liest aus STDIN.
quelle
Ghostscript
(270)(248)(214)Bearbeiten: Weitere Substitutionen. Leerzeichen zwischen den Ziffern entfernt.
Edit: Noch mehr Substitutionen. Die Hauptschleife sieht jetzt so aus, wie sie funktioniert!
Verwendet die Argumentverarbeitungsfunktion von ghostscript: Rufen Sie mit auf
gs -dNODISPLAY -- digit.ps 012 345 6789
.quelle
Delphi || 453 (568 Mit Format)
Nicht einmal nah genug, um zu gewinnen, aber es hat Spaß gemacht, das zu tun
Mit Format
Ende.
quelle
PHP,
140136133131129128 BytesIch könnte mit Extended ASCII
57 mehr sparen : je eins für"| _"
und den Zeilenumbruch, drei für~"z/]{4lno~|"
(bitweise Negation würde alles zu Extended ASCII-Zeichen machen = keine Sonderzeichen, und PHP benötigt dort keine Anführungszeichen), zwei für-1
(es ist nur dort, um die Karte in Standard-ASCII zu halten). Aus Gründen der Lesbarkeit und Kompatibilität bleibe ich jedoch bei Standard-ASCII.die Bitmap
_
,|_|
,|_|
als Bits-6-
,024
,135
(Bitnummer & 2 ist 0 für vertikale LEDs)[123,48,94,124,53,109,111,112,127,125]
"z/]{4lno~|"
~"z/]{4lno~|"
(erlaubt ternäre Abkürzung bei der Zeichenauswahl)Die Vorlage
7
für die Räume ->767
,024
,135
701
,623
,745
(rendert$p=0
veraltet)547326107
(Karte von rechts nach links lesen; ermöglicht arithmetisches Looping)5473261070
(ermöglicht die Kombination von Shift und Test im Schleifenkopf)753754680
(zwei Bytes kürzer: eine Ziffer und das Präfix)Nervenzusammenbruch
quelle
ord(~"z/]{4lno~|v.J=NF"[hexdec($c)])-1
Java 8, 280 Bytes
Erläuterung:
Probieren Sie es hier aus.
Als Funktion wären dies stattdessen 218 Bytes .
quelle
Python, 227 Zeichen
Einfach und unkompliziert.
quelle
Perl, 145 Zeichen
Ungolfed:
quelle
Python 3.4.3 -
1514858 BytesDie Versuchung, dies zu lösen, war zu groß, um sich nicht anzumelden und zu antworten = P
Ich bin ein bisschen neu in Python, also habe ich mein Programm schön und ordentlich formatiert (oder zumindest habe ich es getan). Verbesserungen werden sehr geschätzt!
Bearbeiten: Verkürzte Variablennamen, verwendet; zu verkürzen, nur ein Leerzeichen am Ende der Ausgabenummern, definierte Variablen auf einmal.
Neue Zeilen bestehen aus 2 Byte (CRLF) und ich habe Tabulatoren anstelle von 4 Leerzeichen verwendet.
quelle
SmileBASIC, 216 Bytes
Verwenden Sie Grafiken anstelle von Text, da dieser wahrscheinlich kürzer ist.
Erläuterung:
quelle
C ++,
230229225223218207204198 BytesLiest von stdin und gibt nach stdout aus.
Erläuterung:
quelle
Powershell, 114 Bytes
Testskript:
Ausgabe:
Hauptidee:
Jede Standardnummer im Digitaluhrstil enthält 3 Zeilen. Darüber hinaus enthält die erste Zeile nur 2 Optionen. Insgesamt 6 Optionen. Daher sind 7 Bits ausreichend, um jede Ziffer zu codieren.
Die Zeichenfolge
f-SR5Z^mvr
codiert also alle Segmente für alle Standardnummern im Digitaluhrstil.Hinweis: Die Reihenfolge der
line str
wurde speziell so gewählt, dass alle Codes im Intervall lagen32..126
.quelle