Suchen Sie bei einer 7-Segment-Anzeige mit einigen eingeschalteten und einigen ausgeschalteten Segmenten eine Ziffernfolge (0-9), sodass nach dem Umschalten der entsprechenden Segmente für jede Ziffer alle Segmente ausgeschaltet werden.
Beispiel
_
_ [3] => | [1] => [OFF]
_ |
Zahlen und ihre entsprechenden Segmente:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Regeln
Codegolf ⊨ kürzester Einstieg gewinnt.
Eingang
Eine nicht leere Liste von Segmenten, die eingeschaltet sind, gegeben als
Eine Folge von Zahlen. Die Segmente sind von oben nach unten von links nach rechts nummeriert. ab 0 oder 1. Zahlen müssen nicht in Ordnung sein.
Eine einzelne 7-Bit-Ziffer. MSB / LSB nicht angegeben (somit können Sie wählen).
Nicht numerische Zeichen zwischen Zahlen sind zulässig (müssen jedoch nicht unterstützt werden).
Z.B. für Nummer 7
: 136
oder 1010010
oder0100101
Ausgabe
Eine Folge von Zahlen, die auf die Anzeige "angewendet" werden sollen. Nicht in irgendeiner Weise eingeschränkt, wie die Reihenfolge der Ziffern. Z.B. für Ausgangszustand entspricht Zahl 1
wäre gültig Ausgängen 1
, 111
, 010
usw.
Eine alternative Ausgabe ist eine 10-Bit-Ziffer (wieder ist MSB / LSB Ihre Wahl). Z.B. für 1
als Eingabe, würde der Ausgang sein 1000000000
oder 0000000001
.
Einige Kombinationen haben mehrere sich nicht wiederholende Lösungen, z. Segmente, die dem Großbuchstaben entsprechen, H
können durch 013
, aber auch 489
und ausgeschaltet werden 0258
.
Wenn es keine Lösung gibt (was meines Erachtens nicht möglich ist), ist die Ausgabe leer.
quelle
301
fürH
).17
,08
und1479
. Lösungen für die oberen vertikalen Segmente von links nach rechts sind39
und59
. Lösungen für die unteren vertikalen Segmente von links nach rechts sind56
und2389
.2
ist nicht immer notwendig, weil man es mit entweder ersetzen kann0468
,1358
oder1369
, je nachdem , ob Sie ein0
,8
oder9
in Ihrer Antwort, aber es gibt keine Möglichkeit zu beseitigen ,7
überhaupt, und ich glaube , Sie mindestens einen haben , haben von1
und3
.Antworten:
Jelly ,
2625 BytesProbieren Sie es online!
Übernimmt die Eingabe als 7-Bit-Ganzzahl. Gibt die Binärform einer 10-Bit-Ganzzahl zurück.
Dies zwingt einfach alle Möglichkeiten. Entfernen Sie das
Ḣ
, um alle möglichen Ausgaben zu erhalten, oder ersetzen Sie es durch einX
, um eine zufällige mögliche Ausgabe zu erhalten.Magic Visualisierungsprogramm!
Wie es funktioniert
quelle
“wØ][:koR¶z‘
) enthält möglicherweise einen Fehler. Ihrer Nummer9
fehlt das untere Segment (vergleichen Sie9
in Ihrer Visualisierung mit dem in der Aufgabenbeschreibung). Ansonsten sehr schön, vor allem die Visualisierung!JavaScript (ES6), 60 Byte
Das funktioniert, weil:
quelle
JavaScript (ES6),
1171071018684 ByteDank Neil 15 Bytes gespart
Übernimmt die Eingabe als 7-Bit-Ganzzahl, wobei das LSB das obere Segment ist. Gibt eine 10-Bit-Ganzzahl zurück, bei der das LSB eine Ziffer ist
0
.Demo
Code-Snippet anzeigen
quelle
f=(n,k=1023)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?k--&&f(n,k):k
. Oder wenn Sie davon ausgehen , eine Antwort vorliegt,f=(n,k=0)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?f(n,k+1):k
.1-7
, können Sie weitere 8 Byte speichern, indem Sie das83
und das,91,75
und mit entfernenk+2
.Mathematica, 40 Bytes
(Sie können mehr Golf spielen, indem Sie die Ausgabe für jedes Segment sorgfältig auswählen und zwischen LSB und MSB wechseln.)
Nehmen Sie die Eingabe zum Beispiel als Liste von Positionen
{2,4,5,7}
und geben Sie eine 10-Bit-Zahl aus (384
=0110000000
binär) in der MSB-Reihenfolge (0, ..., 9) aus.Im Beispiel entspricht
und die Ausgabe entspricht
{7,8}
.Erläuterung:
Die magischen Zahlen (fest codierte Liste) sind die Ausgabe, die für jedes Segment zurückgegeben wird. (binär codiert) Und wenn eine Zahl zweimal in der Liste erscheint, ist der Effekt der gleiche wie der, dass sie nicht angezeigt wird. Daher wird bitweises XOR verwendet. Wir müssen nur die Ausgabe des möglichen Wertes der eingeschalteten Segmente XOR.
quelle
Gelee , 12 Bytes
Probieren Sie es online!
Dies ist keine rohe Kraft, und es ist bemerkenswert kürzer als meine andere Lösung. Nimmt Eingaben als Liste aktivierter Segmente und Ausgaben als LSB als oberstes Segment.
Ausgabe als Liste der Ziffernbewegungen.
Wie es funktioniert
Das wird schnell gehen
quelle
1*use digit 1 + 2*use digit 2 + 4*use digit 3 ... 64*use digit 7
, dann reduziert XOR sie @ ais523. Das Reduzieren würde bei einer Liste von verwendeten Ziffern funktionieren, die mehr Zeichen benötigt.