Meine Herausforderungen sind in der Regel etwas schwierig und unattraktiv. Also hier etwas einfaches und lustiges.
Alcuins Sequenz
Alcuins Sequenz A(n)
wird durch Zählen von Dreiecken definiert. A(n)
ist die Anzahl der Dreiecke mit ganzzahligen Seiten und Umfang n
. Diese Sequenz heißt nach Alcuin von York.
Die ersten Elemente dieser Sequenz, beginnend mit n = 0
:
0, 0, 0, 1, 0, 1, 1, 2, 1, 3, 2, 4, 3, 5, 4, 7, 5, 8, 7, 10, 8, ...
Zum Beispiel A(9) = 3
, weil die einzige Dreiecke mit ganzzahligen Seiten und Umfang 9
ist 1 - 4 - 4
, 3 - 3 - 3
und 2 - 3 - 4
. Unten sehen Sie die 3 gültigen Dreiecke.
In dieser Sequenz gibt es einige recht interessante Muster. Zum Beispiel A(2*k) = A(2*k - 3)
.
Weitere Informationen finden Sie unter A005044 zu OEIS.
Herausforderung
Ihre Herausforderung besteht jedoch in der binären Darstellung dieser Zahlen. Wenn wir jede Sequenznummer in ihre Binärdarstellung umwandeln, sie in Spaltenvektoren einfügen und in einer Linie anordnen, entsteht ein sehr interessantes Binärbild.
Im folgenden Bild sehen Sie die binäre Darstellung der Folgenummern A(0), A(1), ..., A(149)
. In der ersten Spalte sehen Sie die binäre Darstellung von A(1)
, in der zweiten Spalte die Darstellung von A(1)
und so weiter.
In diesem Bild sehen Sie eine Art sich wiederholendes Muster. Es sieht sogar irgendwie aus wie Fraktale, wenn man sich zum Beispiel das Bild mit den Folgenummern ansieht A(600), A(601), ..., A(899)
.
Ihre Aufgabe ist es, ein solches Bild zu erzeugen. Ihre Funktion, Ihr Skript wird zwei Ganzzahlen erhalten 0 <= m < n
, und es muss das Binärbild von Alcuins Sequenz erzeugen A(m), A(m+1), A(m+2), ..., A(n-2), A(n-1)
. Der Eingang 0, 150
erzeugt also das erste Bild, der Eingang 600, 900
das zweite Bild.
Sie können jedes gängige Grafikformat verwenden. Angenommen , jedes Format, das mit image.online-convert.com in png konvertiert werden kann . Alternativ können Sie das Bild auf dem Bildschirm anzeigen. Keine führenden weißen Zeilen erlaubt!
Das ist Code-Golf. So gewinnt der kürzeste Code (in Bytes).
white=1 and black=0
oder umgekehrt?white=0 and black=1
. Also umgekehrt.A(0)
Erzeugt eine weiße Spalte,A(9)=3
erzeugt eine weiße Spalte mit 2 schwarzen Pixeln am unteren Rand.0,0,0,1,0,2
zwar die Liste am Anfang der Frage besagt0,0,0,1,0,1
.Antworten:
J (
5245 (Codepage 437))Das wäre erlaubt (denke ich)
Hex Dump
(Eigentlich nichts Besonderes, das schwarze Quadrat ist DB 16 oder 219 10 in Codepage 437.)
Verwendung
Dies wird wie folgt ausgegeben (die Code-Tags vermasseln es, indem sie Leerzeichen zwischen den Zeilen einfügen):
In der Standard-J-Konsole gibt es keinen Zeilenabstand. Daher bezeichne ich die Regel als "Alternativ können Sie das Bild auch auf dem Bildschirm anzeigen." (Nirgends wurde gesagt, dass dieses Bild intern als vernünftiges Bildformat dargestellt werden muss.)
BEARBEITEN: Jconsole (im Gegensatz zu JQT) verwendet standardmäßig die Codepage 437 und gibt die Rechtecke korrekt wieder, wenn sie aus einer Zeichenfolge verwendet werden.
quelle
Mathematica,
12612212189 BytesDies definiert eine unbenannte Funktion, die die beiden Ganzzahlen als Parameter verwendet und das Bild auf dem Bildschirm anzeigt. Es zeichnet jedes Quadrat als ein einzelnes Pixel auf, aber wenn Sie möchten, können Sie tatsächlich zoomen.
Ich verwende jetzt eine explizite Formel aus dem OEIS-Artikel (die erste im Mathematica-Abschnitt, danke an David Carraher, der darauf hingewiesen hat). Es ist jetzt auch unglaublich schnell.
Hier ist der eingerückte Code mit ein paar Kommentaren:
Hier ist die Ausgabe für
0, 600
:quelle
Image[1 - Thread@IntegerDigits[ l = Round[If[EvenQ[#], #^2, (# + 3)^2]/48] & /@ Range@##, 2, \[LeftCeiling]2~Log~Max@l\[RightCeiling]]] &
CJam (
56 5553 Zeichen) / GolfScript (64 Zeichen)CJam:
GolfScript:
Beide erzeugen eine Ausgabe im NetPBM-Format und sind im Wesentlichen Ports voneinander.
Präparation
Danke an Optimizer für CJam 56 -> 53.
quelle
'PoXq~{_1&3*+_*24+48/}%>_:e>2b,\2_$#f+2fbz(,@@]e_N*
Pyth -
1016059Ausgänge a
.pbm
. Kann wahrscheinlich mehr golfen werden.Sehr ungolfed, weil ich nach Pyth übersetzen werde.Erklärung kommt als nächstes. Schauen Sie sich jetzt den entsprechenden Python-Code an.Es verwendet den OEIS-Algorithmus, um die Sequenz zu berechnen, und konvertiert dann in Binärdaten, füllt die Zahlen auf, führt eine Matrixrotation durch und formatiert sie in ein
pbm
Bild. Da ich keine rohe Gewalt benutze, ist es unglaublich schnell.Hier ist das
600,900
Beispiel:Probieren Sie es hier online .
quelle
R -
127125Ich bin mir nicht sicher, ob dies den Regeln vollständig entspricht. Es wird kein Bild in eine Datei ausgegeben, jedoch ein Raster erstellt und auf einem Ausgabegerät geplottet.
Ich fand die gleiche Formel wie Martin, aber hier .
Es verwendet eine unbenannte Funktion.
Führen Sie wie folgt aus
Erzeugt den folgenden Plot
quelle
raster
zum Namespace herstellen, da diesraster()
das einzige ist, das für dieses Paket spezifisch ist. Stattdessen einfach machenraster::raster(...)
.Python 2
+ PIL,255184Meine erste Version verwendete PIL, um ein Bild anzuzeigen:
Die neue Version erzeugt nur ein s / w-PPM-Bild auf stdout:
quelle
for
. Sie können das Umgehenx%2
von Parens vermeiden, indem Sie die Reihenfolge auf ändernx%2*...
. Es ist kürzer, print nicht als Funktion zu definieren und nur zwei verschachteltefor
Schleifen zu verwendenprint ...,
, um Zeilenumbrüche zu vermeiden, und ein Leerzeichenprint
, um eine neue Zeile zu beginnen. Ein Trick, um zu erzwingen, dass binäre Erweiterungen eine Längeh
ohne haben,zfill
besteht darin2**h
, die letztenh
Ziffern hinzuzufügen und dann zu extrahieren .JAVASCRIPT - 291
Code:
Erläuterung:
Ergebnis:
Ja, das Ergebnis ist verkehrt herum, aber das liegt daran, dass
0,0
ajs canvas
oben links ist. :3Demo:
Demo auf jsfiddle
quelle