Aufgabe
Die Aufgabe besteht darin, einen der 128 möglichen Zustände einer 7-Segment-Anzeige anzuzeigen .
Ihr Programm sollte eine Zeichenfolge von 7 Zeichen ("Bits") akzeptieren, die entweder 0
oder sind 1
. Das erste Eingabebit entspricht dem Segment A der folgenden Abbildung, das zweite dem Segment B usw. (ignorieren dp
):
Wie Sie die Anzeige darstellen, bleibt Ihnen überlassen - ein einzelnes Unicode- oder ASCII-Symbol, ASCII- Grafiken, Grafiken oder was auch immer Sie sich ausdenken können. Jeder Eingang muss jedoch einen eigenen Ausgang haben. Wenn Sie sich etwas Besonderes einfallen lassen, können Sie mit einigen Beispielen sicher positive Stimmen einbringen.
Alle 128 möglichen Zustände der Anzeige sind:
Regeln
- Codegolf
- Wie gesagt, jede Art von Ausgabe ist erlaubt, aber es wäre schön, wenn Sie es spezifizieren würden.
- Die Eingabe kann stdin oder ein Befehlszeilenargument sein.
Beispiele
Eingang
1101101
Ausgabe
Als ASCII / Unicode:2
Verschiedene Arten von ASCII-Kunst (das kann ich nicht so gut)
_ ╺┓ ╒╗ ---
_| ┏┛ ╔╝ |
|_ ┗╸ ╚╛ ---
|
---
Antworten:
J (51)
Ausgabe:
quelle
1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1
.C 106
Die Größe beträgt 74 Zeichen, wenn das Programm "W00WG5WW1GW66WG4WW2GW33WG" umbenannt werden darf.
Laufen:
Anmerkungen:
'W' und 'G' (0x47 und 0x57) werden so gewählt, dass der Wert & 7 = 7 ist, dh sie indizieren sicher das Nullzeichen, das die Eingabezeichenfolge abschließt.
quelle
Brainfuck - 224
Ausdrucke mit Prüfpunkten:
Nicht die am besten lesbare, aber auch nicht zu schrecklich.
Erstaunt, wie nahe dies daran ist, nicht der letzte Platz zu sein.
quelle
Nachschrift
121107muss
n
als Zeichenfolge definiert werden, damit sie verarbeitet werden kannbekommen
das komplette Set ist
quelle
Mathematica:
135129118, BildanzeigeLeerzeichen hinzugefügt "für Klarheit"
Bearbeiten
Für jene wählerischen Mitbenutzer: Ohne eine externe Maske zu verwenden:
quelle
&
.&
.APL,
5855Beispiel Eingabe:
Ausgabe:
⍞='1'
Nimmt die Eingabe als Zeichenarray und konvertiert sie in ein numerisches Array.1 2 2 1 2 2 1×⍞='1'
konvertiert dieses Array in:0
for blank,1
for_
,2
for|
(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
Weisen Sie dieses Array der Variablen zux
und ordnen Sie es neu an, um die Segmente F, G, B, E, D, C darzustellen0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
Verkettet ein Leerzeichen, Segment A und ein anderes Leerzeichen nach vorne3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
Umformen in eine 3x3-Matrix1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
Konvertiert in 1-basierte IndizierungVerwendet schließlich die Zeichenfolge
' _|'
, um Angaben in Zeichen umzuwandelnBearbeiten
Sparen Sie 3 Zeichen aus, indem Sie ein verketten,
0
um das Array voranzustellen, und indem Sie doppelte Angaben verwenden, um eine variable Zuweisung zu verhindernquelle
{
um 1 Zeichen kürzer als die Indizierung von Klammern[]
.PHP 66 Bytes
Eine leichte Verbesserung eine Verwendung
md5
Zauberformel, erfordert aber zusätzlichen binären 3 Bytes¡
,æ
undÚ
gibt Zeichen 161, 230 und 218 jeweils. Es sollte so funktionieren, wie es ist, wenn es direkt kopiert und als ANSI-Format gespeichert wird.PHP 73 (70) Bytes
Wenn Sie mir drei Binärzeichen erlauben, kann dies auf 70 Byte reduziert werden :
Dabei
ƒ
sindß
, undõ
die Zeichen 131, 223 bzw. 245.Erhält Eingaben als Befehlszeilenargument. Beispielnutzung:
quelle
php.ini
(standardmäßig sind sie bereits deaktiviert) oder zum Testen dem Skript den folgenden Code voranstellen:<? error_reporting(E_ALL & ~E_NOTICE); ?>
JavaScript + jQuery + HTML + CSS (
210201)Diese Lösung verwendet CSS-Sprites und das bereitgestellte Bild als Beispiel :
HTML (3)
CSS (
8271)Danke an xem für den " background: url " Trick:
JavaScript (125 nach Entfernen der hier zur besseren Lesbarkeit hinzugefügten Zeilenumbrüche)
Online-Test: http://jsfiddle.net/zhqJq/3/
quelle
<p>
Tag verwenden unddisplay:block
auf CSS vermeiden , um Platz zu sparenR (65 Zeichen):
Verlässt sich auf einige lose Näherungen für einige transzendentale Näherungen ...
quelle
Python 2 - 65
Beispiel:
quelle
PostScript:
53 binär, 87 ASCII52 binär, 86 ASCIIHexdump des Programms mit Binärtoken:
Laden Sie diese Datei herunter , um sie auszuprobieren.
Verwenden von ASCII-Token:
Die erste
forall
Schleife legt alle erforderlichen Koordinaten auf den Stapel. Die Koordinaten werden in einer Zeichenfolge gespeichert, um den erforderlichen Platz zu minimieren. Die Koordinaten sind in umgekehrter Reihenfolge, dh die letzten 4 Zeichen sind für Segment A. Wir zeichnen eine Linie von(0,8)
bis(4,8)
für dieses Segment (tatsächlich müssen wir zu allen Koordinaten 48 addieren, daforall
alle ASCII-Codes auf den Stapel gelegt werden).Die Sekunde
forall
durchläuft alle0
s und1
s in der Eingabezeichenfolge und wandelt sie in einen Grauwert um.0
s sind weiß gezeichnet (Grauwert 1) und1
s sind schwarz gezeichnet (Grauwert 0). Dann verwenden wir die Koordinaten, die die ersteforall
Schleife auf dem Stapel gelassen hat, um die Linien zu zeichnen.Rufen Sie das Programm mit Ghostscript auf, genau wie Geoff Reedy's:
Dies zeigt an:
quelle
neg 49 add
(was übrigens super ist) mit1 and
.not 1 and
, oder? Speichert weiterhin ein Byte sowohl in ASCII als auch in Binär.bitshift
ist so ein langes Wort.APL
101 86 7369Die Eingabe erfolgt vom Bildschirm über ⍞
Womit eine 9x5-Zeichenmatrix aus Leerzeichen und ⎕ wie folgt erstellt wird:
Die siebenstellige Zahl wird in einen Partitionsvektor umgewandelt, um die ⎕-Koordinaten auszuwählen.
quelle
Mathematica
1121031009688 unter Verwendung von Diagrammenquelle
[123]
noch ["123"], nochIntegerDigits[123]
für mich arbeiten. Ich bekomme nurz
, ohne Hervorhebung.Python (107)
Auf jeden Fall mehr Golf.
Ausgabe:
Erläuterung:
quelle
Python 2.7 (93 Zeichen):
Erläuterung:
Verwenden Sie bei der Eingabe stdin einen provisorischen ternären Operator, um
*
true und ein Leerzeichen für false anzugeben. Nehmen Sie diese Werte und fügen Sie sie in eine Formatanweisung ein, die das Format der 7-stelligen Anzeige hat. Es wären höchstens 83 Zeichen, wenn die Anzeige wie folgt funktionieren würde:aber die Bestellung macht es länger. Hat jemand einen Weg, dies zu umgehen?
Beispiel:
quelle
print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()])
:;) Auch für die print-Anweisung werden keine Klammern und kein Platz benötigt.>'0'
anstelle von=='1'
undinput()
(mit Backticks herum, aber das wird wegen der Formatierung hier nicht angezeigt) stattraw_input()
.x = `input()`
Ich dachte, wir brauchen eine lispy Antwort ...
Clojure, 159 Zeichen
Das Obige wird in der REPL ausgeführt und liefert die richtige Antwort. Beispielsweise:
Wirf mit kleinen Modifikationen Zahlen drauf:
ergibt:
Nicht leicht zu lesen, aber sie sind da!
quelle
Javascript 123
Ich kann die Zeichenanzahl verringern (101), wenn wir nur ein Zeichen für den Status "Ein" verwenden, dies ist jedoch weniger lesbar:
quelle
Nachschrift 136
Kein Gewinner, aber ein anderer Ansatz.
Erwartet, dass sich die Eingabezeichenfolge auf dem Stapel befindet:
Das ist noch schlimmer. 294 , um eine "binäre" Bitmap zu erstellen. Ich habe eine Weile gebraucht, um mich daran zu erinnern, dass jede Zeile mit einem geraden Byte aufgefüllt ist. Eine 3x5-Bitmap besteht also aus fünf Bytes, wobei die 3 msb-Bits signifikant sind.
Die Ausgabe ist genauso hässlich wie die andere. :(
Okay, hier ist einer, der gut aussieht. 190
Edit: Es war verkehrt herum und rückwärts. Jetzt behoben.
quelle
Mathematica 264
Damit die Ausgabe richtig aussieht, sind viele Bytes erforderlich, also diesmal keine Zigarre. Aber hier ist trotzdem der ausführliche Code (264 Zeichen).
Der komplette Zeichensatz:
Die Ziffern:
quelle
PHP - 155 Zeichen
Es wäre 150 Zeichen, wenn wir PHP 5.4 Typ Array Deklaration verwenden, aber ich habe das nicht auf meinem Laptop installiert, also konnte ich es nicht testen.
Probe heraus setzt.
Erläuterung:
Zuerst habe ich die 7-Segment-Anzeige in fünf Zeilen und drei Spalten unterteilt. Mit der ersten, dritten und fünften Zeile in der mittleren Spalte mit einem '-' und ansonsten mit einem Leerzeichen.
Die 2. und 4. Reihe hat eine Pipe '|' Zeichen in der ersten und letzten Spalte. Jetzt sollte das Vorhandensein dieser Zeichen von den Eingabewerten geleitet werden.
Ich habe eine Nachschlagetabelle erstellt, bei der es sich im Grunde um zwei Nachschlagetabellen handelt. Erste zur Berechnung der Werte für die 1., 3. und 5. Reihe. Und noch eine bei Offset 2 (3. Position) zur Berechnung der 2. und 4. Zeile.
quelle
Java - 204 Zeichen
Beispielausgabe:
Richtig formatiert:
Ich wünschte wirklich, ich könnte das für die Schleife vermeiden, aber ich habe ein paar andere Dinge ausprobiert und sie waren alle länger. Es gibt wahrscheinlich einen besseren Weg, dies zu tun, aber dies ist mein erster Versuch, Code Golf zu spielen. (Und Java ist die schlechteste Sprache dafür, weshalb ich es interessant fand.) Selbst Brainfuck hat mich geschlagen, aber zumindest sieht meine Ausgabe besser aus.
BEARBEITEN: kann "öffentlich" auf Klasse loswerden, spart mir 7 Zeichen!
Und danke, daniero, dass du mir printf gezeigt hast! (18 Zeichen gespeichert)
Das Ausgabeformat wurde umgeschrieben, Zeichenliterale in Dezimalzahlen geändert und 12 Zeichen gespeichert.
quelle
printf
paar Versionen eine Methode eingeführt , die im Grunde genommenprintln
undformat
in einer ist (wie die C-Funktion). Diesfor
Schleife und den Update-Teil zu einem zusammenfassen und ein Zeichen speichern:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
VBA - 263
Es ist hässlich, aber es funktioniert, denke ich. Ich habe Probleme beim Anzeigen der richtigen Bitreihenfolge, daher kann ich auf die Antworten anderer zurückgreifen. Auch wenn dieses Teil falsch ist, sollte die Codelänge gleich bleiben.
quelle
VBScript - 178 Zeichen
quelle
CJam - 29
CJam ist eine neue Sprache, die ich entwickle, ähnlich wie GolfScript - http://sf.net/p/cjam . Hier ist die Erklärung:
l
liest eine von der Eingangsleitung0
die Zahl 0N
eine Variable an das Neuen - Zeile - String vorinitialisiert ist]
Raffungen die Elemente auf dem Stapel in ein Arrays
wandelt einen Wert (das Array) zu bespannen, wodurch Anfügen eine Null und eine neue Zeile zu der gegebenen Eingabe7078571876784728737
ist ein number (die gleiche Zahl, die ich in Python verwendet habe, die aberA
hexadezimal angegeben wurde ) ist eine Variable, die vorinitialisiert wurde, um eine Basisumwandlung durchzuführen. Dabei wirdb
das Array [7 0 7 8 ... 3 7] erstellt,\
das die letzten beiden Werte auf dem Stapel vertauschtf=
Wendet den=
Operator (hier indizierter Array-Zugriff) auf die Eingabezeichenfolge (plus Null und Zeilenvorschub) und jede Zahl 7, 0, 7, ... an.Der Index 7 entspricht der angehängten Null und 8 entspricht der angehängten Zeilenvorschub.
Meine Python-Lösung macht genau das Gleiche (außer, dass die Zifferntrennung über die String-Konvertierung erfolgt)
quelle
VBA, 188 Zeichen
Beachten Sie, dass die muss man sich geben 188 Zeichen , wenn nur obligatorisch Leerzeichen einschließlich - die IDE erweitert es aus , wenn Sie es in den VBA - Editor kopieren.
Leider hat VBScript kein stark typisiertes Byte-Array, oder dieses könnte mit dieser Methode viel kürzer sein.
quelle
Javascript (ECMAScript 2016) - 108 Byte
Dies wahrscheinlich weiter golfed werden, aber ich kann nichts denken.
quelle
JavaScript, 148 Bytes
Probieren Sie es online! (Footer ist Node.js zu lesen
.input.tio
)Akzeptiert die Eingabe von ABCDEFG in binären Flags und gibt Folgendes zurück:
quelle
SmileBASIC, 136 Bytes
Die Ausgabe erfolgt grafisch.
quelle
05AB1E , 4 Bytes
Probieren Sie es online aus oder überprüfen Sie alle möglichen Eingaben .
Zeigen Sie den Link zum Überprüfen aller möglichen Eingaben oben an, um die Zuordnung zu sehen, die für jede Eingabe verwendet wird.
Erläuterung:
Dies missbraucht die Regeln, wo es heißt:
Alternative mehr im Geiste der Herausforderung mit dem Ausgabeformat:
38 Bytes :
Kann auf jeden Fall Golf gespielt werden ..
Probieren Sie es online aus oder überprüfen Sie alle möglichen Eingaben .
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E ( Abschnitt Wie komprimiere ich große ganze Zahlen? ) An, um zu verstehen, warum dies so
•L7ו
ist1367524
.quelle
PHP 5.6, 65 Bytes einfaches ASCII
oder, ohne abschließenden Zeilenumbruch, aber mit ein bisschen Spaß:
Laufen Sie als Pipe mit
-nR
oder probieren Sie sie online aus .Aufschlüsselung 1
Aufschlüsselung 2
quelle