Les boues sont des ennemis en forme de cube dans Minecraft qui se divisent en plusieurs versions plus petites d’eux-mêmes quand ils sont tués. Pour les besoins de ce défi, nous les représenterons comme une image 8 × 8 pixels avec 3 couleurs:
Les couleurs RVB précises sont:
0, 0, 0
pour les yeux et la bouche110, 170, 90
pour le centre, vert plus foncé116, 196, 96
pour l'extérieur, vert plus clair
Défi
Ecrivez un programme ou une fonction qui prend un entier positif N et génère une image de N tailles de slimes regroupées dans un rectangle. En allant de gauche à droite, l’image doit suivre le schéma suivant:
- Une pile de 2 (N-1) 8 × 8 boues.
- Une pile de 2 (N-2) 16 × 16 boues.
- Une pile de 2 (N-3) 32 × 32 boues.
- Et ainsi de suite jusqu'à ce que la pile ne contienne plus qu'un seul slime.
Les images visqueuses plus grandes que la version 8 × 8 ( ) sont générées par suréchantillonnage du voisin le plus proche (en doublant simplement tous les pixels). Notez que vous devez utiliser exactement le design et les couleurs de slime indiqués ici.
L'image finale contiendra 2 N -1 slimes et aura 2 (N + 3) -8 pixels de large et 2 (N + 2) pixels de haut.
L'image peut être sortie dans n'importe quel format de fichier d'image commun, enregistrée dans un fichier ou imprimée / renvoyée sous forme de flux de données brutes, ou directement affichée pendant l'exécution.
Le code le plus court en octets gagne.
Exemples
Votre programme devrait produire ces résultats exacts.
N = 1:
N = 2:
N = 3:
N = 4:
N = 5:
N = 6:
Un plus grand N devrait aussi bien fonctionner.
la source
Réponses:
MATL ,
777674 octetsLe code fonctionne dans ce commit , qui est antérieur au défi.
Vous pouvez l'essayer dans MATL en ligne . Cet interprète est encore expérimental. Si cela ne fonctionne pas, essayez d'actualiser la page et d'appuyer à nouveau sur "Exécuter".
Voici un exemple exécuté dans l'interpréteur hors ligne:
Explication
la source
11
et cela fonctionne. Pour11
le résultat est une image 8192 × 16376. Car12
ce serait 16384 × 32760 (536 mégapixels), nécessitant plus de 4 Go de RAM, ce qui est plus que ce que mon ordinateur portable peut gérer.Dyalog APL,
118113 octets('P3',⌽∘⍴,255,∊)(3↑(116 196 96)(110 170 90))[⊃,/i{⊃⍪/⍵⍴⊂⍺⌿⍺/8 8⍴∊22923813097005 926134669613412⊤¨⍨⊂32⍴3}¨⌽i←2*⍳⎕]
en supposant
⎕IO=0
De droite à gauche:
i←2*⍳⎕
pouvoirs 1 2 4 ... 2 n-1i{ }¨⌽i
itérer sur les pouvoirs (avec⍺
) et les pouvoirs inversés (⍵
)⊤¨⍨⊂32⍴3
décoder chacun des nombres à gauche en 32 chiffres ternaires8 8⍴∊
aplatir et remodeler à 8 × 8⍺⌿⍺/
reproduire chaque rangée et colonne⍺
fois⍵⍴⊂
prendre des⍵
copies⊃⍪/
et les empiler verticalement⊃,/
joindre tous les résultats horizontalement3↑(116 196 96)(110 170 90)
couleurs;3↑
les étend avec(0 0 0)
[ ]
indexer les couleurs avec chaque élément de la matrice; le résultat est une matrice de RVB('P3',⌽∘⍴,255,∊)
est un "train" - une fonction qui retourne'P3'
suivie de la forme inversée de l'argument255
et de l'argument aplati.la source
⎕IO←0
et le déclarer simplement comme une condition, en dehors du nombre d'octets. De nombreux systèmes APL utilisent cela par défaut. (Y compris le vôtre LOL)JavaScript (ES7), 326
327octetsVersion ES6 Ungolfed
Essayez vous-même.
La seule différence entre les versions ES7 et ES6 est d'utiliser
**
au lieu deMath.pow()
. Vous pouvez également voir comment appeler la fonction - dans cet exemple avecn=4
.Résultat
Édite
;
Ceci est assez lent et peut prendre un certain temps pour des nombres supérieurs à 10.
la source
C, 220 octets
J'ai ajouté des nouvelles lignes inutiles pour la lisibilité, le score est sans ces nouvelles lignes.
Définit une fonction
f(n)
qui génère une image PPM simple sur stdout.la source
Mathematica,
267255254225212 octetsSauvegardé
2942 octets grâce à Martin EnderDes suggestions de golf sont les bienvenues, en particulier pour la construction du tableau 8 x 8 (sur 3)
s
. Malheureusement, il n’existe pas d’ArrayResize
analogue pourImageResize
, le tableau doit donc être converti en image (Image
) avant de redimensionner, puis de nouveau en tableau (ImageData
)Join
.Ungolfed:
la source
b=0g
. Pour le générer,s
il serait peut-être plus court de coder les valeurs de pixel sous forme de nombre en base 3, mais je devrais essayer d'être sûr. En attendant, vous pouvez économiser des octets en ne définissant pasb
,g
,f
,e
,t
jusqu'à ce que vous avez besoin, ets
n'a pas besoin d' un nom à tous et ne faitc
. Pour que2^(j-1)8
vous puissiez utiliser4*2^j
. En appliquant tous ceux-ci, je me retrouve à 225 octets: pastebin.com/YnkUwvwVImage
,ImageResize
, desImageData
choses. Ce bit gonfle un tableau d'un facteur 2:#&@@{##&@@{#,#}&//@x}
oùx
est le tableau. Donc, si vous stockez la grille 8x8 initiale dans une variablex
, puisx=#&@@{##&@@{#,#}&//@x}
après chaque utilisation, vous pouvez générer les tuiles successives assez facilement.#&[##&[#,#]&//@x]
##~Join~2
et en b)f={g,a=##&[G,G,G],a,g}
, puis remplacez chaque nouvelle occurrence deG,G,G
para
.Python 2.7:
424412405376357 octetsJe suis un peu nouveau au golf .... on y va
ungolfed et longueur testé.
edit1: supprimé
sys.argv[1]
en faveur de l'raw_input()
enregistrement d'une déclaration d'importation supplémentaireedit2: importation abrégée de PIL: supprimé
from Image
ajoutéPIL.
edit3: Merci @ Sherlock9 pour le code hexadécimal du modèle slime
edit4: n'a pas besoin de la fonction def et utilisé à la
input()
place deraw_input()
la source
'0000100001111110111211100111111102211220022112200111111000001000'
(votre tableau en arrière) converti de la base 3 à la base 160x2df0777ca228b9c18447a6fb
. Avec ce nombre, utilisez un code comme celui-ci[0x2df0777ca228b9c18447a6fb//3**i%3 for i in range(64)]
pour obtenir vos nombres entiers dans le bon ordre.[0x2df0777ca228b9c18447a6fb/3**i%3for i in range(64)]
peut-être mieux.0x2df0777ca228b9c18447a6fb
. C'est simple. Pour obtenir un exemple plus simple, pour obtenir le0
e chiffre de01221100
, divisez simplement par 30
, puis prenez le dernier chiffre (en utilisant le mod 3) à obtenir0
. Pour prendre le deuxième chiffre, divisez par 32
fois, puis mod 3 pour obtenir1
. La compréhension de la liste se divise simplement par 364
fois pour récupérer votre tableau complet. Si vous avez d'autres questions, nous pouvons en discuter dans le chat du PPCG .R,
378356346334 octetsEnregistre en tant que fichier png. En retrait, avec sauts de ligne:
N = 2: N = 3: N = 4:
Quelques explications:
Voici la matrice en cours de tracé (0 représente le vert clair, 1 le vert foncé et 2 le noir; la matrice est inclinée car les colonnes sont l'axe des y et les lignes l'axe des x):
Chaque appel à
image
tracer cette matrice (chaque entier correspondant à une couleur). Pour N = 4, voici L (la matrice de présentation, chaque numéro unique représente un seul tracé), w (les largeurs des colonnes de la matrice) et h (les hauteurs des lignes de la matrice):la source