Los limos son enemigos en forma de cubo en Minecraft que se rompen en múltiples versiones más pequeñas de sí mismos cuando son asesinados. A los fines de este desafío, los describiremos como una imagen de 8 × 8 píxeles con 3 colores:
Los colores RGB precisos son:
0, 0, 0
para los ojos y la boca110, 170, 90
para el verde central, más oscuro116, 196, 96
para el exterior, verde más claro
Desafío
Escriba un programa o función que tome un entero positivo N y genere una imagen de N tamaños de limos empaquetados en un rectángulo. Al ir de izquierda a derecha, la imagen debe seguir el patrón de tener:
- Una pila de 2 (N-1) 8 × 8 limos.
- Una pila de 2 (N-2) 16 × 16 limos.
- Una pila de 2 (N-3) 32 × 32 limos.
- Y así sucesivamente hasta que la pila solo contenga un limo.
Las imágenes de limo más grandes que la versión 8 × 8 ( ) son generadas por el muestreo ascendente del vecino más cercano (es decir, duplicando todos los píxeles). Tenga en cuenta que debe usar el diseño y los colores exactos del limo que se proporcionan aquí.
La imagen final contendrá 2 limos N -1 y tendrá 2 (N + 3) -8 píxeles de ancho y 2 (N + 2) píxeles de alto.
La imagen puede imprimirse en cualquier formato de archivo de imagen común, guardarse en un archivo o imprimirse / devolverse como un flujo de datos sin procesar o mostrarse directamente durante el tiempo de ejecución.
El código más corto en bytes gana.
Ejemplos
Su programa debe producir estos resultados exactos.
N = 1:
N = 2:
N = 3:
N = 4:
N = 5:
N = 6:
Un N más grande debería funcionar igual de bien.
fuente
Respuestas:
MATL ,
777674 bytesEl código funciona en esta confirmación , que es anterior al desafío.
Puedes probarlo en MATL en línea . Este intérprete aún es experimental. Si no funciona, intente actualizar la página y presione "Ejecutar" nuevamente.
Aquí hay un ejemplo que se ejecuta en el intérprete sin conexión:
Explicación
fuente
11
y funciona. Para11
el resultado es una imagen de 8192 × 16376. Para12
ello sería 16384 × 32760 (536 megapíxeles), que requieren más de 4 GB de RAM, que es más de lo que mi computadora portátil puede manejar.Dyalog APL,
118113 bytes('P3',⌽∘⍴,255,∊)(3↑(116 196 96)(110 170 90))[⊃,/i{⊃⍪/⍵⍴⊂⍺⌿⍺/8 8⍴∊22923813097005 926134669613412⊤¨⍨⊂32⍴3}¨⌽i←2*⍳⎕]
asumiendo
⎕IO=0
De derecha a izquierda:
i←2*⍳⎕
potencias 1 2 4 ... 2 n-1i{ }¨⌽i
iterar sobre poderes (con⍺
) y poderes invertidos (⍵
)⊤¨⍨⊂32⍴3
decodifica cada uno de los números de la izquierda como 32 dígitos ternarios8 8⍴∊
aplanar y remodelar a 8 × 8⍺⌿⍺/
replicar cada fila y columna⍺
veces⍵⍴⊂
tomar⍵
copias⊃⍪/
y apilarlos verticalmente⊃,/
une todos los resultados horizontalmente3↑(116 196 96)(110 170 90)
colores;3↑
los extiende con(0 0 0)
[ ]
indexar los colores con cada elemento de la matriz; el resultado es una matriz de RGB('P3',⌽∘⍴,255,∊)
es un "tren": una función que regresa'P3'
seguida de la forma invertida del argumento255
, y el argumento se aplana.fuente
⎕IO←0
y simplemente establecerlo como una condición, fuera del recuento de bytes. Muchos sistemas APL lo usan por defecto. (Incluyendo el tuyo jajaja)JavaScript (ES7), 326
327bytesVersión ES6 Ungolfed
Inténtalo tú mismo.
La única diferencia entre la versión ES7 y ES6 es usar en
**
lugar deMath.pow()
. También puede ver cómo puede invocar la función, en este ejemplo conn=4
.Resultado
Ediciones
;
Esto es bastante lento y puede tomar algún tiempo para números mayores a 10.
fuente
C, 220 bytes
Agregué nuevas líneas inútiles para facilitar la lectura, la puntuación es sin estas nuevas líneas.
Define una función
f(n)
que genera una imagen PPM simple en stdout.fuente
Mathematica,
267255254225212 bytesGuardado
2942 bytes gracias a Martin EnderLas sugerencias de golf son bienvenidas, especialmente para construir la matriz de 8 por 8 (por 3)
s
. Desafortunadamente, no hay unArrayResize
análogo " " paraImageResize
, por lo que la matriz debe convertirse en una imagen (Image
) antes de cambiar el tamaño, y luego volver a una matriz (ImageData
) para hacer elJoin
ing.Sin golf:
fuente
b=0g
. Para generarlos
, podría ser más corto codificar los valores de píxeles como un número de base 3, pero tendría que intentar estar seguro. Mientras tanto, usted puede ahorrar bytes al no definirb
,g
,f
,e
,t
hasta que los necesite, ys
no necesita un nombre en absoluto y tampoco lo hacec
. Para2^(j-1)8
que puedas usar4*2^j
. Aplicando todo eso, termino en 225 bytes: pastebin.com/YnkUwvwVImage
,ImageResize
,ImageData
cosas. Este bit explota una matriz por un factor de 2:#&@@{##&@@{#,#}&//@x}
dóndex
está la matriz. Entonces, si almacena la cuadrícula inicial de 8x8 en una variablex
, y luego lo hacex=#&@@{##&@@{#,#}&//@x}
después de cada uso, puede generar los mosaicos sucesivos con bastante facilidad.#&[##&[#,#]&//@x]
##~Join~2
yb)f={g,a=##&[G,G,G],a,g}
y luego reemplazar cada aparición adicional deG,G,G
cona
.Python 2.7:
424412405376357 bytesSoy un poco nuevo en el golf ... aquí vamos
sin golf y longitud probada ..
edit1: eliminado
sys.argv[1]
a favor deraw_input()
guardar una declaración de importación adicionaledit2: importación PIL acortada: eliminado
from Image
agregadoPIL.
edit3: Gracias @ Sherlock9 por la codificación hexadecimal de la plantilla de limo
edit4: no necesitaba la función def y se usaba en
input()
lugar deraw_input()
fuente
'0000100001111110111211100111111102211220022112200111111000001000'
(su matriz al revés) convertido de base 3 a base 160x2df0777ca228b9c18447a6fb
. Con ese número, use un código como este[0x2df0777ca228b9c18447a6fb//3**i%3 for i in range(64)]
para obtener sus enteros en el orden correcto.[0x2df0777ca228b9c18447a6fb/3**i%3for i in range(64)]
puede ser mejor.0x2df0777ca228b9c18447a6fb
. Esto es simple. Para un ejemplo más simple, para obtener el0
enésimo dígito01221100
, simplemente divídalo entre 30
veces y luego tome el último dígito (usando el mod 3) para obtenerlo0
. Para tomar el segundo dígito, divídalo entre 32
veces, luego mod 3 para obtener1
. La comprensión de la lista solo se divide por 364
veces para recuperar su matriz completa. Si tiene más preguntas, podemos discutirlas en el chat PPCG .R,
378356346334 bytesGuarda como un archivo png. Sangrado, con saltos de línea:
N = 2: N = 3: N = 4:
Algunas explicaciones:
Aquí está la matriz que se está trazando (0 representa verde claro, 1 verde oscuro y 2 negro; la matriz está inclinada porque las columnas son el eje yy las filas el eje x):
Cada llamada para
image
trazar esa matriz (con cada número entero correspondiente a un color). Para N = 4, aquí está L (la matriz de diseño, cada número único representa una sola gráfica), w (los anchos de las columnas de la matriz) yh (las alturas de las filas de la matriz):fuente