Studieren Sie zuerst dieses Puzzle , um ein Gefühl dafür zu bekommen, was Sie produzieren werden.
Ihre Herausforderung besteht darin, ein Programm oder eine Funktion zu schreiben, die eine kreisförmige Grafik wie die des Puzzles mit einer Zahl (Basis 10) zwischen 1 und 100 (einschließlich) ausgibt. Dies ähnelt dieser Herausforderung , mit der Ausnahme, dass Sie eine Grafik anstelle von römischen Ziffern erstellen. Die folgenden Kreise stehen für die Nummern 1-10 von links nach rechts:
Wie die Antwort auf das Rätsel besagt, sollte Ihre Grafik von innen nach außen wie eine römische Ziffer gelesen werden, wobei die Linienstärke die Symbole der römischen Ziffer und die gesamte Grafik die Zahl darstellt. Zu Ihrer Information, hier sind die Strichstärken, die Sie benötigen. Jede Zeile sollte einen 3px-Abstand zwischen der nächsten und der nächsten haben.
Number Roman Numeral Line Width
1 I 1px
5 V 3px
10 X 5px
50 L 7px
100 C 9px
Bitte posten Sie ein oder zwei Beispiele Ihrer Ausgabe. Angenommen, die Eingabe ist korrekt, es gibt Standardlücken usw. Das ist Codegolf, also gewinnen die wenigsten Bytes. Bei Stimmengleichheit gewinnen die meisten Stimmen. Viel Glück!
quelle
Antworten:
Mathematica -
166181 BytesEin bisschen prägnanter als die andere Mathematica-Antwort, auch dank eines punktloseren Stils.
Alle Leerzeichen dienen nur der Übersichtlichkeit. Dies definiert eine anonyme Funktion, die die gewünschte Grafik zurückgibt.
Animation
Das Erzeugen eines animierten GIF der Zahlenkreise ist in Mathematica, das integrierte Funktionen zum Animieren und Exportieren von Sequenzen beliebiger Objekte enthält, trivial. Angenommen, der obige Code wurde gerade ausgeführt,
Beispielausgabe
quelle
Gemeines Lisp -
376331304 BytesBeispiele
(1) (24)
(104) (1903) (3999)
Animation
Für Zahlen von 1 bis 400:
NB: Für die Aufzeichnung wird diese Animation wie folgt durchgeführt:
Ich habe eine modifizierte Version des Codes,
rings
der die Breite des erzeugten Bildes zurückgibt. Das Ergebnis der folgenden Schleife ist daher die maximale Größe, hier 182 :Die gesamte Schleife dauert 9,573 Sekunden. Das ergibt ungefähr 24 ms für jede ganze Zahl. Dann in einer Shell:
Ungolfed
Erklärungen
Die Funktion akzeptiert eine Ganzzahl
N
zwischen 1 und 3999 und einen DateinamenIch benutze
(format nil "~@R" N)
, um von dezimal zu römisch zu konvertieren. Beispielsweise:Die
~@R
Formatsteuerzeichenfolge ist für Ganzzahlen zwischen 1 und 3999 angegeben. Aus diesem Grund gibt es eine Einschränkung für den Bereich der zulässigen Eingaben.Ich iteriere über die resultierende Zeichenfolge, um eine Liste
P
mit(radius width)
Paaren für jede Ziffer C zu erstellen .Die Breite ist eine einfache lineare Abbildung: Ich verwende die konstante Zeichenfolge "IVXLCDM", um die Position von C darin zu berechnen. Multipliziert man mit zwei und addiert eins, erhält man den gewünschten Wert:
Dies wird jedoch in der Golfversion etwas anders gemacht:
Die Berechnung jedes Radius berücksichtigt die Breite jedes Rings sowie die Leerstellen zwischen den Ringen. Ohne Geschwindigkeitsoptimierung bleiben Berechnungen präzise, da sie nicht auf Gleitkommazahlen basieren, sondern auf rationalen Zahlen.
Bearbeiten : Ich habe die Parameter geändert, um den Auffüllregeln zu entsprechen.
Sobald dies erledigt ist, kenne ich die erforderliche Größe der resultierenden Leinwand (das Doppelte des zuletzt berechneten Radius).
P
und speichere die Leinwand.quelle
HTML + JQuery, 288
HTML
JS
Code-Snippet anzeigen
Geige
quelle
Java, 565
Beispiele
15
84
93
Schön formatiert:
quelle
Mathematica 9 -
301249 Bytes: D Es fühlt sich mies an, die eingebaute Umwandlung in römische Ziffern zu verwenden, aber hey.
(Als ich dies letzte Nacht tat, hatte ich nicht viel Zeit, aber ich erkannte, dass es viel mehr Golf spielen könnte. Und ich nahm auch einige Hinweise von David Zhang ...: D Danke!)
Ein bisschen klarer:
Dies ist eine Funktion, die Sie folgendermaßen aufrufen können:
Oder Sie können die Ergebnisse von den Werten a bis b anzeigen mit:
Table[r[i],{i,a,b}]
Hinweis : Dies funktioniert nur für Werte bis 399.
quelle
Python 2,
322296Das Skript liest die zu konvertierende Zahl aus stdin und gibt das Bild als SVG-Markup aus.
.. Ich benutze 'rot' anstelle von 'schwarz', weil es 2 Zeichen spart :)
Hier einige Beispiele: für 23: http://jsfiddle.net/39xmpq49/ für 42: http://jsfiddle.net/7Ls24q9e/1/
quelle
JavaScript
342334308quelle