Sie kennen wahrscheinlich alle die 7-Segment-Anzeige, die unter anderem alle Ziffern von anzeigen kann :
Herausforderung
Wir betrachten nur die Segmente . Ihre Aufgabe ist es, eine einzelne Ziffer zu decodieren, , welche Segmente sind.
Dies kann als 8-Bit-Ganzzahl codiert werden. Hier ist eine Tabelle jeder Ziffer mit ihrer binären Darstellung und den entsprechenden Little-Endian- und Big-Endian-Werten:
Regeln & I / O
- Eingang wird einer von
- einzelne ganze Zahl (wie in der Tabelle oben angegeben)
- eine Liste / Array / .. von Bits
- eine Zeichenfolge , die aus Zeichen
ABCDEFG
(Sie davon ausgehen , kann es sortiert, als ein BeispielABC
kodiert ), deren Fall Ihrer Wahl (nicht gemischt-Fall)
- Die Ausgabe ist die Ziffer, die kodiert wird
- Sie dürfen keine ungültigen Eingaben annehmen (ungültig bedeutet, dass es keine entsprechende Ziffer gibt)
Tests
Da diese Herausforderung mehrere Darstellungen zulässt, beziehen Sie sich bitte auf die Tabelle.
Antworten:
JavaScript (ES6), 26 Byte
Nimmt Eingaben in Little Endian auf.
Probieren Sie es online!
quelle
Python 3 , 18 Bytes
Probieren Sie es online!
Verwendet Little-Endian-Eingaben. Enthält ein
\x7F
Rohbyte.Python 2 , 27 Bytes
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 41 Bytes
Probieren Sie es online!
Verwendet die Little-Endian-Ganzzahlenspalte als Eingabe. Ignorieren Sie die Syntaxwarnung.
Für eine Eingabe X nehmen wir zuerst X mod 41 und dann das Ergebnis mod 11. Die Ergebnisse sind verschiedene mod 11, so dass wir sie aus einer Tabelle extrahieren können. Beispiel: 126 mod 41 mod 11 ist 3. Wenn wir also Position 3 gleich 0 machen, erhalten wir die richtige Antwort für eine Eingabe von 126.
Der Tisch ist
9[,6,0,8,2,3,1,7,5,4]
. Teil 0 ist der Kopf, der ist9
. Teil 1 fehlt, also ist esNull
, um ein Byte zu speichern: Wir müssen nie Teil 1 nehmen. Dann ist Teil 26
, Teil 30
und so weiter, wie üblich.Jonathan Allans Antwort gibt uns
1[4,9,8,6,2,0,5,3,7][[384~Mod~#~Mod~13]]&
. Dies ist nicht kürzer, aber es vermeidet die Syntaxwarnung!Wolfram Language (Mathematica) ,
27-25Bytes(Es gibt eine Figur, die hier nicht ganz auftaucht, sorry. Klicken Sie auf den Link unten und Sie werden es sehen.)
Probieren Sie es online!
Hier geht es darum, einige Zeichenketten dazu zu zwingen, nach innen zu gehen,
Hash
damit die Hashes am Ende die richtigen Werte für Mod 11 haben. Mehr Brute Forcing kann uns wahrscheinlich zu einer noch kürzeren Lösung führen.quelle
Gelee , 12 Bytes
Akzeptiert eine Little-Endian-Ganzzahl.
Probieren Sie es online!
Dies ist die naive Implementierung. Möglicherweise gibt es eine Möglichkeit, einen genaueren Code zu erhalten.
quelle
Python 2 , 31 Bytes
Probieren Sie es online! Nimmt Eingaben als Little-Endian.
quelle
Java (JDK) , 32 Byte
Probieren Sie es online!
Credits
quelle
JavaScript (Node.js) , 25 Byte
Akzeptiert eine Little-Endian-Ganzzahl.
Probieren Sie es online!
Ports für 31 Bytes in Python mit
lambda n:'1498620537'[384%n%13]
quelle
Leerzeichen , 152 Bytes
Obligatorisch "Die S, T und L sind nicht wirklich vorhanden, sondern nur sichtbare Darstellungen der Befehle".
Probieren Sie es online!
Endet mit einem Fehler.
Äquivalente Assembler-ähnliche Syntax:
quelle
Brainfuck ,
474176154151149137 BytesNimmt eine Eingabezeichenfolge von acht
0
und1
einschließlich der ersten0
für den Dezimalpunkt.(wie in der zweiten Spalte der Tabelle in der Post)
Gibt Ziffern von 0 bis 9 aus.
Probieren Sie es online!
Algorithmus
Indem wir den Zustand eines bestimmten Segments beobachten, können wir einen Satz möglicher Ziffern in kleinere Teilmengen aufteilen. Unten ist der statische binäre Suchbaum, der in meinem Code verwendet wird. Der linke Unterbaum entspricht dem Segment-EIN-Zustand, der rechte dem Segment-AUS-Zustand.
Einige Beobachtungen, die zum Golfen nützlich sind
+++++
für beide Werte und dann nur+
für sechs tun .+
Befehle verringern , wenn wir vorab 2 zum Ausgabewert addieren. In diesem Fall müssen wir es für0
und1
nur verringern und Vorteile für andere Ziffern erzielen.quelle
Netzhaut 96 Bytes
Probieren Sie es online! Vielleicht nicht der beste Weg, aber es ist eine interessante Art, in Retina zu programmieren. Erläuterung:
Versucht, die interessanten Fälle zu erfassen. Die positiven Aufnahmen erfassen einfach den Brief, wenn er vorhanden ist. Die Länge des Captures beträgt daher 1, wenn es vorhanden ist, und 0, wenn es nicht vorhanden ist. Die Sonderfälle sind Captures 4 und 6, die nur existieren, wenn D bzw. E fehlen. Diese können nur in dezimal ausgedrückt werden
$#4
und ,$#6
aber das ist alles , was wir hier brauchen. Die Captures werden dann zu einer Zeichenfolge zusammengesetzt, deren Länge der gewünschten Zahl entspricht. Wenn wir zum Beispiel schreiben,6*$1
hat dieser String die Länge 6, wenn A vorhanden ist, und 0, wenn es nicht vorhanden ist. Um zwischen verschiedenen Ausdrücken zu wählen, verwenden wir entweder$.
(für die positiven Captures) oder$#
(für die negativen Captures), die entweder 0 oder 1 ergeben, und dies kann dann mit dem bisherigen String multipliziert werden.F
wird 6-mal undB
zweimal wiederholt (durch Verkettung als Golfspieler). Das Ergebnis wird jedoch ignoriert, sofern nicht beideE
undG
vorhanden sind. Dies behandelt die Fälle von2
,6
und8
.F
wird fünfmal wiederholt, und wennB
vorhanden, wird es ein sechstes Mal plus eine zusätzliche 3 hinzugefügt (dargestellt durch eine konstante Zeichenfolge mit der Länge 3). Das Ergebnis wird jedoch ignoriert, sofernD
es nicht vorhanden ist und nicht vorhandenE
ist. Dies behandelt die Fälle von3
,5
und9
.A
wird 6-malG
wiederholt und 3-mal wiederholt und ein zusätzliches1
hinzugefügt (dargestellt durch ein konstantes Zeichen zwischen den beiden, weil es Golfspieler ist). Das Ergebnis wird jedoch ignoriert, esD
sei denn, es fehlt. Dies behandelt die Fälle von1
,4
und7
.Die obigen Zeichenfolgen werden dann verkettet und die Länge genommen. Wenn keine der oben genannten Bedingungen zutrifft, wird keine Zeichenfolge generiert und die Länge ist daher gleich
0
.Die resultierenden Zeichenfolgen (bevor die Länge genommen wird) lauten wie folgt:
quelle
MATL , 14 Bytes
Die Eingabe ist eine Zahl, die die Segmente im Little-Endian-Format darstellt.
Probieren Sie es online!
Erläuterung
quelle
Perl 5 -pl, 24 Bytes
Probieren Sie es online!
Nimmt Little-Endian-Ganzzahlen auf.
quelle
Ruby , 29 Bytes
Probieren Sie es online!
quelle
Japt, 15 Bytes
Nimmt den Big-Endian-Wert als Eingabe.
Versuch es
Erläuterung
Die Zeichenfolge enthält die Zeichen an jedem der Codepunkte der Big-Endian-Werte.
Ud
Ruft das Zeichen am Codepunkt der Eingabe ab undb
findet den Index davon in der Zeichenfolge.quelle
Neim , 15 Bytes
Erläuterung:
Probieren Sie es online!
quelle
Stax , 12 Bytes
Führen Sie es aus und debuggen Sie es
Die Eingabe ist eine kleine Endian-Ganzzahl.
Es wird dieselbe String-Konstante wie in Luis 'MATL-Lösung verwendet.
quelle
TI-BASIC (Serie TI-83 + / 84 +), 15 Byte
Verwendet Little-Endian-Eingabe. Hashes sind in TI-BASIC ziemlich verbreitet, deshalb habe ich für solche Fälle eine Hash-Funktion geschrieben .
Wir haben hier ein bisschen Glück, da der Multiplikator 9 Stellen lang ist und nicht die erwarteten 10.
quelle
05AB1E ,
17161512 Bytes-1 Byte dank @ErikTheOutgolfer .
-1 Byte durch Erstellen eines Ports der Mathematica-Antwort von @MishaLavrov .
-3 Bytes dank @Grimy .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E (Abschnitt Wie komprimiere ich große ganze Zahlen? ) An, um zu verstehen, warum dies so
•NŽyf¯•
ist99608231754
.quelle
128в
. Ich habe vergessen, dass es ein eingebautes System gibt, um128
halbiert zu werden256
. Vielen Dank!¦C•26¤æÈÛµÀš•2ô₂+sk
(19).Kohle, 17 Bytes
Versuch es!
Port of the Japt antworten .
quelle