Schleime sind würfelförmige Feinde in Minecraft , die beim Töten in mehrere kleinere Versionen von sich selbst zerfallen. Für diese Herausforderung stellen wir sie als 8 × 8-Pixel-Bild mit drei Farben dar:
Die genauen RGB-Farben sind:
0, 0, 0
für die Augen und den Mund110, 170, 90
für das zentrale, dunklere Grün116, 196, 96
für das äußere, hellere Grün
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine positive ganze Zahl N aufnimmt und ein Bild mit N in ein Rechteck gepackten Schleimgrößen ausgibt. Von links nach rechts sollte das Bild dem Muster folgen:
- Ein Stapel von 2 (N-1) 8 × 8 Schleimen.
- Ein Stapel von 2 (N-2) 16 × 16 Schleimen.
- Ein Stapel von 2 (N-3) 32 × 32 Schleimen.
- Und so weiter, bis der Stapel nur noch einen Schleim enthält.
Die Schleimbilder, die größer als die 8 × 8-Version ( ) sind, werden durch Aufwärtsabtasten des nächsten Nachbarn (dh nur Verdoppeln aller Pixel) erzeugt. Beachten Sie, dass Sie das genaue Schleimdesign und die Farben verwenden müssen, die hier angegeben sind.
Das endgültige Bild enthält 2 N -1 Schleime und ist 2 (N + 3) -8 Pixel breit und 2 (N + 2) Pixel hoch.
Das Bild kann in jedem gängigen Bilddateiformat ausgegeben, in einer Datei gespeichert oder als Rohdatenstrom gedruckt / zurückgegeben oder zur Laufzeit direkt angezeigt werden.
Der kürzeste Code in Bytes gewinnt.
Beispiele
Ihr Programm sollte genau diese Ergebnisse liefern.
N = 1:
N = 2:
N = 3:
N = 4:
N = 5:
N = 6:
Größere N sollten genauso gut funktionieren.
quelle
Antworten:
MATL ,
777674 BytesDer Code funktioniert in dieser Festschreibung , die vor der Herausforderung liegt.
Sie können es in MATL online ausprobieren . Dieser Interpreter ist noch experimentell. Wenn es nicht funktioniert, aktualisieren Sie die Seite und drücken Sie erneut auf "Ausführen".
Hier ist ein Beispiel, das im Offline-Interpreter ausgeführt wird:
Erläuterung
quelle
11
und es funktioniert. Für11
das Ergebnis ist ein 8192 × 16376 Bild. Dafür12
wären 16384 × 32760 (536 Megapixel) erforderlich, was mehr als 4 GB RAM bedeutet, als mein Laptop verarbeiten kann.Dyalog APL,
118113 Bytes('P3',⌽∘⍴,255,∊)(3↑(116 196 96)(110 170 90))[⊃,/i{⊃⍪/⍵⍴⊂⍺⌿⍺/8 8⍴∊22923813097005 926134669613412⊤¨⍨⊂32⍴3}¨⌽i←2*⍳⎕]
vorausgesetzt
⎕IO=0
Von rechts nach links:
i←2*⍳⎕
Potenzen 1 2 4 ... 2 n-1i{ }¨⌽i
über Potenzen (mit⍺
) und umgekehrte Potenzen (⍵
) iterieren⊤¨⍨⊂32⍴3
Dekodieren Sie jede der Zahlen auf der linken Seite als 32 ternäre Ziffern8 8⍴∊
Abflachen und auf 8 × 8 umformen⍺⌿⍺/
Replizieren jede Zeile und Spalte⍺
Zeiten⍵⍴⊂
nehmen⍵
Kopien⊃⍪/
und stapeln sie vertikal⊃,/
Verbinden Sie alle Ergebnisse horizontal3↑(116 196 96)(110 170 90)
Farben;3↑
erweitert sie mit(0 0 0)
[ ]
Indizieren Sie die Farben mit jedem Element der Matrix. Ergebnis ist eine Matrix von RGBs('P3',⌽∘⍴,255,∊)
ist ein "Zug" - eine Funktion, die zurückgegeben wird,'P3'
gefolgt von der umgekehrten Form des Arguments255
und dem abgeflachten Argument.quelle
⎕IO←0
und es nur als Bedingung außerhalb der Bytezahl angeben. Viele APL-Systeme verwenden dies als Standard. (Einschließlich Ihrer LOL)JavaScript (ES7), 326
327ByteUngolfed ES6 Version
Versuch es selber.
Der einzige Unterschied zwischen der ES7- und der ES6-Version besteht in der Verwendung
**
vonMath.pow()
. Sie können auch sehen, wie Sie die Funktion aufrufen können - in diesem Beispiel mitn=4
.Ergebnis
Bearbeitungen
;
Dies ist ziemlich langsam und kann bei Zahlen über 10 einige Zeit in Anspruch nehmen.
quelle
C 220 Bytes
Ich habe nutzlose Zeilenumbrüche hinzugefügt, um die Lesbarkeit zu verbessern. Die Punktzahl ist ohne diese Zeilenumbrüche.
Definiert eine Funktion
f(n)
, die ein einfaches PPM-Bild auf Standardausgabe ausgibt.quelle
Mathematica,
267255254225212 Bytes2942 Bytes dank Martin Ender gespeichertGolfvorschläge sind willkommen, insbesondere für die Konstruktion des 8 x 8 (x 3) Arrays
s
. Leider gibt es kein "ArrayResize
" Analogon fürImageResize
, daher muss das ArrayImage
vor dem Ändern der Größe in ein Bild ( ) und anschließend wieder in ein Array (ImageData
) konvertiert werden, " " um die Größe zuJoin
ändern.Ungolfed:
quelle
b=0g
. Ums
es zu generieren, ist es möglicherweise kürzer, die Pixelwerte als Zahl zur Basis 3 zu codieren, aber ich müsste versuchen, sicher zu sein. In der Zwischenzeit können Sie Bytes nicht definiert , speichernb
,g
,f
,e
,t
bis Sie sie benötigen, unds
brauchen keinen Namen überhaupt nicht und auch nichtc
. Denn2^(j-1)8
du kannst verwenden4*2^j
. Wenn ich all das anwende, landeImage
,ImageResize
,ImageData
Sachen. Dieses Bit vergrößert ein Array um den Faktor 2:#&@@{##&@@{#,#}&//@x}
Wox
ist das Array? Wenn Sie also das anfängliche 8x8-Raster in einer Variablen speichernx
undx=#&@@{##&@@{#,#}&//@x}
nach jeder Verwendung erneut ausführen, können Sie die nachfolgenden Kacheln ganz einfach generieren.#&[##&[#,#]&//@x]
##~Join~2
und b) verwendenf={g,a=##&[G,G,G],a,g}
und dann jedes weitere Vorkommen vonG,G,G
mit ersetzena
.Python 2.7:
424412405376357 BytesIch bin ein bisschen neu im Golfen ... los geht's
ungolfed und länge getestet ..
edit1:
sys.argv[1]
wurde zugunsten von entferntraw_input()
, um zusätzliche Importanweisungen zu speichernedit2: verkürzter PIL-Import: entfernt
from Image
hinzugefügtPIL.
edit3: Danke @ Sherlock9 für die hexadezimale Kodierung der Schleimvorlage
edit4: brauchte keine Funktion def und verwendet
input()
stattraw_input()
quelle
'0000100001111110111211100111111102211220022112200111111000001000'
(Ihr Array rückwärts) konvertierte von Basis 3 zu Basis 160x2df0777ca228b9c18447a6fb
. Verwenden Sie mit dieser Nummer den folgenden Code[0x2df0777ca228b9c18447a6fb//3**i%3 for i in range(64)]
, um Ihre Ganzzahlen in der richtigen Reihenfolge abzurufen.[0x2df0777ca228b9c18447a6fb/3**i%3for i in range(64)]
vielleicht besser.0x2df0777ca228b9c18447a6fb
. Das ist ganz einfach. Für ein einfacheres Beispiel, um die0
th Ziffer von zu erhalten01221100
, dividieren Sie einfach durch 30
und nehmen Sie dann die letzte Ziffer (mit Mod 3), um zu erhalten0
. Um die 2. Ziffer zu nehmen, dividiere durch 32
mal, dann um Mod 3 zu erhalten1
. Das Listenverständnis wird nur64
dreimal geteilt, um das gesamte Array wiederherzustellen. Wenn Sie weitere Fragen haben, können wir diese im PPCG-Chat diskutieren .R,
378356346334 BytesSpeichert als PNG-Datei. Eingerückt, mit Zeilenvorschub:
N = 2: N = 3: N = 4:
Einige Erklärungen:
Hier ist die geplottete Matrix (0 steht für Hellgrün, 1 für Dunkelgrün und 2 für Schwarz; die Matrix ist geneigt, da Spalten die y-Achse und Zeilen die x-Achse sind):
Jeder Aufruf zum
image
Zeichnen dieser Matrix (wobei jede Ganzzahl einer Farbe entspricht). Für N = 4 ist hier L (die Layoutmatrix, jede eindeutige Nummer steht für ein einzelnes Diagramm), w (die Breiten der Matrixspalten) und h (die Höhen der Matrixzeilen):quelle