7-Segment-Ziffern können in ASCII mit _|
Zeichen dargestellt werden. Hier sind die Größenangaben 1
:
_ _ _ _ _ _ _ _
| _| _| |_| |_ |_ | |_| |_| | |
| |_ _| | _| |_| | |_| _| |_|
Größere Größen werden gebildet, indem jedes Segment proportional länger gemacht wird. Hier sind ein paar 3-stellige Zahlen.
___ ___ ___ ___ ___ ___ ___
| | | | | | | | | |
| | | | | | | | | |
|___| |___ | |___ ___| | | |___|
| | | | | | | | | |
| | | | | | | | | |
|___| |___| | ___| ___| |___| ___|
Tor
In dieser Herausforderung müssen Sie ein Programm / eine Funktion schreiben, die eine einzelne Ziffer als Eingabe verwenden und deren Größe identifizieren kann. Der Haken: Wenn die Eingabe keine gültige Ziffer ist, sollte Ihr Programm ausgeben 0
.
Das ist Code-Golf , die wenigsten Bytes gewinnen.
Sie können entweder ein Programm oder eine Funktion schreiben, die die Ziffer entweder als STDIN oder als Argument empfängt, und den Wert drucken / zurückgeben.
Die Ziffern werden als mehrzeilige Zeichenfolge bereitgestellt, die mit dem Mindestmaß an abschließendem Leerzeichen aufgefüllt ist, das erforderlich ist, um ein perfektes Rechteck zu erstellen. Die nachfolgende Newline ist ein optionaler Teil der Eingabe. Es wird keine unnötigen führenden Leerzeichen geben.
Wenn eine Nicht-Ziffer übergeben wird, besteht sie weiterhin aus _|
Zeichen, die zu einem Rechteck aufgefüllt sind und keine nicht benötigten führenden Leerzeichen enthalten. Es werden keine Leerzeilen angezeigt. Sie müssen sich nicht mit Leereingaben befassen.
Die Ausgabe sollte eine einzelne nicht negative Ganzzahl mit optionalem Zeilenumbruch sein. Wenn die Eingabe keine richtige Ziffer von beliebiger Größe ist, geben Sie sie aus 0
. Anderenfalls geben Sie die Größe aus.
Hier finden Sie eine praktische Anleitung für die Breiten und Höhen der einzelnen Ziffern für eine bestimmte Größe N
.
Digit Height Width (not counting newlines)
1 2N 1
2 2N+1 N+2
3 2N+1 N+1
4 2N N+2
5 2N+1 N+2
6 2N+1 N+2
7 2N+1 N+1
8 2N+1 N+2
9 2N+1 N+2
0 2N+1 N+2
E / A-Beispiele
Im:
__
|
__|
|
__|
Aus:
2
Im:
|
|
|
Aus:
0 //because it is of an invalid height. Either 1 char too short or tall.
Im:
| |
| |
| |
|____|
|
|
|
|
Aus:
4
Im:
___
|
|___
| |
|___|
Aus:
0 //1 char too wide
Im:
_
|_|
| |
Aus:
0 //it's not a digit
Im:
__
|
|__
|
__|
Aus:
2
Im:
_ _
_| _|
|_ _|
Aus:
0 //both would be valid individually, but input should be a *single* digit
Im:
_
|_|
|_|
Aus:
1
Im:
|
|
Aus:
1
Im:
__|_
|
_ |
_
|__
Aus:
0
Dies ist ungefähr die Umkehrung der Transformationszahl in ein 7-Segment-Anzeigemuster seit 3 Jahren.
0
, oder? Es sei denn, Sie haben sich eine Möglichkeit ausgedacht, sie zu zeichnen.Antworten:
Rubin, 250
Angesichts der Tatsache, dass es so viele mögliche ungültige Eingaben gibt, bestand die einzige Möglichkeit darin, alle richtigen Ziffern zu generieren und zu überprüfen, ob die Eingabe übereinstimmt.
Ich baue jede Ziffer von unten nach oben auf, in 2 Hälften plus der oberen Zeile. Obwohl es 12 Möglichkeiten gibt (wenn man bedenkt, dass das linke Segment an, aus oder im Falle von
3
und7
völlig abwesend sein kann), sind tatsächlich nur 7 vorhanden, und die sorgfältige Auswahl der Codierung ermöglicht, dass alle Informationen (außer der obersten Zeile) in a codiert werden einzelnes Zeichen.Die Ziffer
1
passt nicht wirklich zum Muster und wird separat behandelt, um das Array zu initialisieren.Ungolfed im Testprogramm
Diese Version verwendet
.
aus diagnostischen Gründen anstelle von Leerzeichen.quelle