Als ich neulich auf quadratischem Papier herumgekritzelt habe, habe ich die oben genannte Negativschrift für Ziffern gefunden. Falls Sie es noch nicht entdeckt haben, ergeben die Zwischenräume zwischen den obigen Formen den goldenen Schnitt 1.618033988749 . In dieser Herausforderung besteht Ihre Aufgabe darin, eine Zahl als Eingabe zu verwenden und genau so zu rendern, wie im obigen Beispiel gezeigt.
So entstehen diese. Alle Zeilen befinden sich in einem regelmäßigen Raster, sodass die einzelnen Ziffern aus einer kleinen Anzahl von Rasterzellen bestehen. Hier sind die Formen der 10 Ziffern (der Dezimalpunkt wird bei dieser Herausforderung ignoriert):
Ja, die 7 unterscheidet sich vom Beispiel mit dem goldenen Schnitt oben. Ich habe das irgendwie durcheinander gebracht. Wir werden mit diesem gehen.
Beachten Sie, dass jede Ziffer fünf Zellen hoch und drei Zellen breit ist. Um eine Zahl zu rendern, können Sie sich vorstellen, alle ihre Ziffern nebeneinander zu platzieren, sodass genau eine leere Spalte zwischen jedem Ziffernpaar vorhanden ist. Zum Beispiel nimmt 319
als Eingabe, würden wir schreiben:
Beachten Sie, dass wir eine führende und eine nachfolgende leere Spalte hinzufügen. Nun kehren wir die Zellen um:
Die Ausgabe sollte dann die Grenzen der resultierenden Polygone sein:
Natürlich können Sie das Ergebnis auch auf andere Weise generieren, solange die gerenderte Ausgabe gleich aussieht.
Eingang
- Sie können ein Programm oder eine Funktion schreiben, indem Sie eine Eingabe über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument als Zeichenfolge oder eine Ziffernliste vornehmen. (Sie können keine Zahl verwenden, da Sie damit keine führenden Nullen unterstützen können.)
- Sie können davon ausgehen, dass die Eingabe keine weiteren 16 Stellen enthält.
Ausgabe
- Die Ausgabe kann entweder auf dem Bildschirm angezeigt oder in einem gemeinsamen Bildformat in eine Datei geschrieben werden.
- Sie können sowohl Raster- als auch Vektorgrafiken verwenden.
- In beiden Fällen muss das Seitenverhältnis der Zellen des zugrunde liegenden Rasters 1 sein (dh die Zellen sollten Quadrate sein).
- Bei Raster-Grafiken sollte jede Zelle mindestens 20 x 20 Pixel umfassen.
- Die Linien dürfen nicht breiter als 10% der Zellengröße sein. Ich bin bereit, aufgrund von Aliasing hier ein oder zwei Pixel Spielraum einzuräumen.
- Linien und Hintergrund können zwei klar unterscheidbare Farben sein, aber die Formen, die durch die Linien erzeugt werden, dürfen nicht ausgefüllt werden (dh die Innenseiten sollten auch die Hintergrundfarbe sein).
- In jedem geschlossenen Regelkreis dürfen keine Lücken vorhanden sein.
- Natürlich muss das gesamte Ergebnis sichtbar sein.
Testfälle
Hier sind 10 Eingänge, die zusammen alle möglichen Paare benachbarter Ziffern sowie jede mögliche führende und nachfolgende Ziffer abdecken:
07299361548
19887620534
21456837709
39284106657
49085527316
59178604432
69471338025
79581224630
89674235011
97518264003
Und hier sind die erwarteten Ergebnisse für diejenigen:
Stellen Sie sicher, dass Ihr Code auch bei einer einzelnen Ziffer funktioniert (ich möchte die erwarteten Ergebnisse hier nicht einschließen, da sie offensichtlich sein sollten und der Testfallabschnitt so aufgebläht ist, wie er ist).
quelle
Antworten:
BBC BASIC, 182 ASCII-Zeichen (tokenisierte Dateigröße 175 Byte)
Laden Sie den Interpreter unter http://www.bbcbasic.co.uk/bbcwin/bbcwin.html herunter
Bewertung: Wenn das obige Programm in den Editor eingefügt und ausgeführt wird, erweitert der Editor die abgekürzten Schlüsselwörter auf dem Bildschirm zu vollständigen Schlüsselwörtern, obwohl sie tatsächlich nur 1 Byte nach der Tokenisierung sind. (Beispiel
I.
=INPUT
Speicherplatz 1 Byte.)Erläuterung
Ich werde nur erklären, was die VDU-Linie tut: Sie zeichnet einen Rahmen, indem sie die aktuelle Pixelfarbe auf dem Bildschirm bitweise spiegelt. Dies bedeutet, dass (mit ein wenig Sorgfalt mit den Ecken) es möglich ist, einfach eine Zelle nebeneinander zu zeichnen, und die dazwischen liegende Kante sich aufhebt und aufgrund des Doppelziehens verschwindet.
Eine genaue Untersuchung zeigt, dass die oberen rechten und unteren linken Ecken einer Zelle gezeichnet sind, aber die oberen linken und unteren rechten Ecken fehlen ("gerundet"), damit dies funktioniert.
Nachdem die Zelle gezeichnet wurde, wird der Grafikcursor um 32 Pixel nach oben bewegt, um für die nächste zu zeichnende Zelle bereit zu sein.
Der Rest des Programms ist eine ziemlich einfache ASCII-Bitmap-Dekomprimierung. Die Abmessungen der Zelle betragen 64 x 64 Einheiten, um die Kompatibilität mit der Art und Weise, wie die Bitmap dekomprimiert wird, zu gewährleisten.
q
Steuert die Größe der gezeichneten Zelle: 64 x 64 Einheiten für eine vorhandene Zelle, 0x0 für eine Zelle, die nicht vorhanden ist.Ungolfed Code
Ausgabe
Die
MOVE
s bringen die Ausgabe einfach auf die entsprechende Höhe auf dem Bildschirm. BBC basic verwendet in diesem Modus 2 Einheiten = 1 Pixel, sodass die Zellen 32 x 32 Pixel groß sind.quelle
Octave,
233 225 216213 BytesHier der erste Testfall (von einem verkleinerten Screenshot, der zu meinem Monitor passt =):
Die Eingabe kann beliebig lang sein, wie z
'07299361548'
quelle
Javascript ES6, 506 Bytes
Ungolfed:
Es wird davon ausgegangen, dass die Zeichenfläche
<body>
angehängt werden kann, getestet in Firefox 46.Beispiellauf (Zuweisen einer anonymen Funktion zu f):
ergibt:
quelle
HTML + JavaScript ES6, 352
Testen Sie das folgende Snippet
Weniger golfen
quelle
Java, 768 Bytes
Ungolfed
Anmerkungen
Die Eingabe ist eine einzelne Zeichenfolge als Argument. Wie zu verwenden:
javac G.java
,java G 80085
Ich beginne mit einer schwarzen Leinwand und addiere dann die Zahlen als weiße Positive. Ich erstelle eine Kopie des Bildes und drehe dann jedes schwarze Pixel um, das 4 schwarze Nachbarn auf dem Originalbild hat.
Ausgänge
Einige einzelne Ziffern:
quelle
R, zu viele Bytes zum Golfen (
1530+1115)lol beim Schreiben auf die Festplatte, dann das Lesen von der Festplatte entfernt die schwarze Füllung.
quelle
Python 3,
326325 Bytesquelle
range(3)
es lohnt sich nie.C #, 768
773 776BytesNimmt die Nummer als Kommandozeilenargument. Gibt ein nettes, sauberes, nicht verfälschtes BMP-Bild mit der Nummer als Namen aus.
Original vor dem Golfen:
quelle
Mathematica 328 Bytes
Erläuterung
Für jede eingegebene Ziffer werden vier Bits in jeweils fünf Zellenzeilen verwendet.
"75557262277174771717557117471774757711117575775717"
repräsentiert 0 bis 9 als Bitmaps.Die ersten 5 Ziffern der obigen großen Ganzzahl
75557
geben an, wie jede Array-Zeile für Null angezeigt werden soll.7
wird{0,1,1,1}
eine weiße Zelle darstellen, auf die rechts drei schwarze Zellen folgen; Das führende0
Zeichen ist ein Leerzeichen, um die angezeigten Ziffern zu trennen.5
entspricht{0,1,0,1}
, das heißt weißen, schwarzen, weißen, schwarzen Zellen.Das Folgende erzeugt eine Liste von Ersetzungsregeln:
Beachten Sie, dass bei der
3
Eingabe71717
diese Darstellung durch die folgende Binärdarstellung ersetzt wird:Das Schwarz-Weiß-Inverse wird durch einfaches Austauschen von
1
s und0
s gefunden.Mal sehen , was
p
undq
aussehen wie bei der Anzeige vonArrayPlot
:Dies verbindet einfach die Arrays von Nullen und Einsen für jede Ziffer, bevor das große Array über gerendert wird
ArrayPlot
.*
ist definiertj
als der letzte vertikale Abstand nach der letzten Ziffer.quelle