Kunst gestohlen von Wie groß ist die Ziffer?
7-Segment-Ziffern können in ASCII mit _|
Zeichen dargestellt werden. Hier sind die Ziffern 0-9
:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Ihre Aufgabe ist es, die Kunst in normale Zahlen zu zerlegen.
Hinweise zu Zahlen
- Jede Ziffer hat eine andere Breite.
1
hat eine Breite von1
3
und7
sind2
breit245689
und0
sind alle3
breit
Außerdem steht zwischen jeder Ziffer ein Zeichen zum Auffüllen. Hier ist der vollständige Zeichensatz:
// <- sollte ein Leerzeichen sein, aber die SE-Formatierung hat es durcheinander gebracht | | ------------- _ _ | | _ ------------- _ _ | _ | ------------- | _ | | ------------- _ | _ _ | ------------- _ | _ | _ | ------------- _ | | ------------- _ | _ | | _ | ------------- _ | _ | _ | ------------- _ | | | _ |
Eingang
Die Eingabe kann entweder über die Konsole oder als String-Argument für eine Funktion erfolgen.
Ausgabe
Die Ausgabe wird entweder an die Konsole gesendet oder von der Funktion zurückgegeben.
Beispiele:
_ _ _
| | | |_
| | | |_|
1776
_ _ _
_| | | | |_
|_ |_| | |_|
2016
_ _
| |_| |_| |_
| _| | _|
1945
_ _ _ _ _ _
| | | | | | | | | | | | |
| |_| |_| |_| |_| |_| |_|
1000000
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
0123456789
Das ist Code-Golf, also gewinnt die kürzeste Anzahl an Bytes!
Antworten:
Pyth,
3330 BytesHier ist die Idee: Sobald wir die Eingabe transponiert und in Ziffern aufgeteilt haben, können wir die einzelnen Ziffernfolgen sortieren und ihnen ihre Werte zuweisen.
Probieren Sie es hier aus .
quelle
Ruby, 184 Bytes
Erläuterung
Dies ist mein erster Code-Golf. Danke für den Spaß!
quelle
Pyth, 39 Bytes
Das scheint zu funktionieren? Probieren Sie es online aus .
quelle
Japt, 119 Bytes
Try it here!
Oh meine Güte, das ist wirklich lang. Ich glaube nicht, dass ich mit dem Golfen fertig bin.
Erläuterung
Vorbereitung
Wir nehmen die Eingabe auf und konvertieren sie
|_
in1
. Dann transponieren wir, entfernen endende Leerzeichen und teilen sie entlang doppelter Zeilenumbrüche.Übersetzung
Wir ordnen das resultierende Array zu und finden den Index, in dem das Formular in einem Referenz-Array erscheint. Hier ist ein Diagramm, um zu helfen:
Danach verbinden wir die Zahlenreihe und geben aus!
HINWEIS : Sie fragen sich möglicherweise, warum wir jedes Kunstzeichen in eine Reihe von Einsen ändern müssen. Das liegt daran, dass es einen Bug (oder so etwas) zu geben scheint, der es mir nicht erlaubt, die Zeichen so zu speichern, wie sie sind
|_
.quelle
_
Fehler bemerkt , aber ich weiß nicht, was ihn verursacht hat."\n\n"
kann durchR²
und"\\||_"
durch ersetzt werden"%||_"
. Ich denke , man könnte auch einige Bytes speichern durch Codieren der langen Schnur in der Basis 4 (jeder der 4 disinctive Zeichen Wechsel auf0
,1
,2
, oder3
, Polsterung auf eine Länge von einem Vielfachen von 4, dann läuftr"...."_n4 d}
über sie), aber aus irgendeinem Grund Ich habe das noch nicht zum Laufen bekommen.Python2,
299261244 BytesDiese Herausforderung hat mir sehr gut gefallen, gute Arbeit!
Erläuterung
Die Funktion verwendet
s
die drei Zeilen als Eingabe und versucht, eine Zifferntrennung zu finden (alle Zeichen sind Leerzeichen). Wenn eine solche Trennung gefunden wird, ruft ess
mit den übrigen drei Zeilen auf und addiert den vom Aufruf zurückgegebenen Wert zu den drei Zeilen, aus denen sich die Ziffer zusammensetzt. Wenn es keine Trennung gibt, bedeutet dies, dass es nur eine Ziffer gibt.Die Funktion
p
ist der Einstiegspunkt, daher wird eine Zeichenfolge verwendet, die die Ziffern darstellt. Die Ziffern werden als "Hash" gespeichertsum(ord(c)**i for i,c in enumerate("".join(n)))%108
, um Platz zu sparen (dank anderer Antworten!).Beispiel
Andere Versionen
261 Bytes (py3):
249 Bytes, dieses transponiert die Zeilen (py2):
quelle
JavaScript (ES6), 169 Byte
Beginnt mit der Aufteilung in drei Zeilen, dem erneuten Zuordnen jeder Spalte zu einem Wert und dem Erstellen einer eindeutigen Identität für jede Spalte aus diesen Werten. Es teilt sich dann durch
0
(die Identität für den Raum zwischen den Spalten) und ordnet schließlich jede Identität ihren Zahlenwerten zu, die es verkettet und ausgibt.quelle
join
eine Zeichenfolge erstellt, damit ich sie teilen kann. Ich glaube, Sie könnten das auch in Python tun?Python 3,
281254 BytesBearbeiten
Ich habe mir gerade den Code für die andere Python-Antwort angesehen und festgestellt, dass ein Großteil des Codes ähnlich ist. Dies wurde unabhängig erreicht.
(Zeilenumbrüche für "Lesbarkeit" hinzugefügt)
Ungolfed:
Tests:
Wie es funktioniert
(Hinweis: Ich erkläre das ungolfed Programm hier, da es besser lesbar ist und genau denselben Code hat, mit der Ausnahme, dass die
digit
Funktion in ein Lambda eingebettet ist. )Die Hauptfunktion ist
parse
. Zunächst wird die Eingabe in Zeilen aufgeteilt und dasnumbers
Array erstellt.Dies ist mein Lieblingsteil (da es so lange gedauert hat, es herauszufinden). Hier haben wir
zip
die Linien, so dass wir die Eingabe im Grunde vertikal durchlaufen können. Wenn die Zeile Zeichen enthält, fügen wir sie zur letzten Zahl imnumbers
Array hinzu. Wenn es keine Zeichen enthält, fügen wir dem Array eine neue Nummer hinzu.Wirklich einfach,
numbers
wird mit derdigit
Funktion abgebildet und in einen String umgewandelt.Das ist (ziemlich) einfach.
fingerprint
ist die Zeichenfolgendarstellung der oben erstellten Ziffern abzüglich der ersten zwei Zeichen (dies war der kleinste Fingerabdruck, den ich finden konnte). Wir geben den Index des ersten Matches zurück.quelle
Haskell,
270207 BytesSeien Sie nicht zu hart, dies ist mein erstes Haskell-Programm;) Ich bin mir fast sicher, dass dies weiter verbessert werden kann, aber ich weiß nicht, wie ich es tun soll, wenn ich nur begrenzte Sprachkenntnisse habe.
Ungolfed:
Vielen Dank an @nimi für die Tipps!
quelle
import Data.List
in Ihre Byteanzahl einschließen . Gute Nachrichten: a) wenn SieData.Lists
installiert haben , können sie stattdessen importieren und ersetzena
mitsplitOn
:...map c$splitOn[" "]$transpose...
und...f<-splitOn",""|_...
. b)intercalate "" n
istconcat n
oderid=<<n
. c) durchres
einen einzelnen Buchstaben ersetzen . d) Verwendung Muster schützen stattlet ... in
:c n|e<-drop 2$id=<<n,Just r<-elemIndex ... ]=(show r)!!0
.=<<
tut? Weder die Google-Dokumente noch die Typensignatur sind für mich sehr hilfreich.=<<
im Listenkontext heißtconcatMap
, es bildet die gegebene Funktion über die Liste ab und fasst die Ergebnisse zu einer einzigen Liste zusammen.>>=
macht das selbe aber mit umgedrehten argumenten.id =<< n
(odern >>= id
) ordnet die Identitätsfunktion der Liste (der Listen) zu, dh es wird nichts mit den Unterlisten und den verketteten Listen gemacht. So ist es das gleiche wieconcat
.