Hay 21 elementos en Minecraft que puedes crear usando solo madera y elementos hechos de madera:
hacha
barco
tazón
botón
cofre
elaboración mesa
puerta
valla
puerta
azada
escalera
pico
tablones
placa de presión
pala
signo
losa
escaleras
palo
espada
trampa
Esta lista supone que los 6 tipos diferentes de tablones de madera / losas / puertas / etc. Todos cuentan como el mismo artículo. Otra forma de pensar es asumir que solo tienes acceso a un tipo de madera.
Cada uno de estos 21 artículos tiene una receta de elaboración diferente . Representaremos cada una de estas recetas como una cuadrícula de 2 × 2 o 3 × 3 de los personajes .WPS
. El .
es una ranura de hacer a mano vacía, W
es para la madera , P
es para los tablones de madera , y S
es para palos . No se necesitan otros personajes para estos elementos en particular.
Por ejemplo, esta es la receta para un cofre :
PPP
P.P
PPP
Reto
Escriba un programa que tome el nombre de uno de nuestros 21 artículos, exactamente como aparece arriba, e imprima una receta de elaboración válida para ese artículo.
Las recetas de elaboración son invariables en la traducción, por lo que si la entrada es fence
válida, ambas son válidas:
PSP
PSP
...
...
PSP
PSP
Si una receta cabe en una cuadrícula de 2 × 2, puede generarla en una cuadrícula de 2 × 2 o 3 × 3. por ejemplo stick
:
.P
.P
...
.P.
.P.
Las recetas también se pueden reflejar horizontalmente (alrededor de una línea vertical de simetría), aunque esto solo hace una diferencia para el hacha, la azada y las escaleras. por ejemplo hoe
:
.PP
.S.
.S.
PP.
.S.
.S.
Por lo tanto, la salida de cualquier receta que se ajuste a la cuadrícula y tenga la forma correcta (ignorando la traducción y la duplicación) es lo que su programa debe hacer. Estas son todas las recetas que el juego oficial reconocerá. (Tenga en cuenta que las recetas no se pueden girar ni reflejar verticalmente).
Detalles
- Tome la entrada de stdin o la línea de comando. Puede suponer que la entrada siempre es válida. Requerir comillas alrededor de la entrada (por ejemplo
"chest"
) está bien. - Salida a stdout (o alternativa más cercana) con una nueva línea final opcional.
- La presentación más corta en bytes gana.
Ejemplo
Aquí hay una lista de todas las entradas y salidas de muestra:
axe
PP.
SP.
S..
boat
P.P
PPP
...
bowl
P.P
.P.
...
button
P.
..
chest
PPP
P.P
PPP
crafting table
PP
PP
door
PP.
PP.
PP.
fence
PSP
PSP
...
gate
SPS
SPS
...
hoe
PP.
S..
S..
ladder
S.S
SSS
S.S
pickaxe
PPP
.S.
.S.
planks
W.
..
pressure plate
PP
..
shovel
P..
S..
S..
sign
PPP
PPP
.S.
slab
PPP
...
...
stairs
P..
PP.
PPP
stick
P.
P.
sword
P..
P..
S..
trapdoor
PPP
PPP
...
fuente
Respuestas:
CJam,
100969491 bytesStackExchange destruye los elementos no imprimibles, por lo que en lugar de copiar y pegar aquí, está el enlace permanente . Además, aquí está el programa de prueba .
(Gracias a @Optimizer por informarme
f
y a @ MartinBüttner por informarme sobre la indexación de módulos de CJam).Cygwin's
hexdump
:Explicación
Para construir las recetas, utilizamos 13 filas diferentes (también se enumeran las explicaciones de por qué esto es mínimo):
Codificamos las filas a través de
Z"O>HVa=4a"98bZb+"P.SW"f=3/
, lo que daEl primer bit
"+WcbKF AQH;_{GM8Lyf=_tmTn"141bDb3/
codifica las recetas, dandoTenga en cuenta cómo es la primera entrada
[3 3 8]
, que es la recetasign
.l72b970%=
lee en la entrada, luego aplica un poco de magia para determinar qué receta tomar de la lista. Aunque solo tenemos 21 recetas, hay 24 en la lista; los pocos puntos adicionales corresponden al[1 0 0]
s.Después de leer la entrada, elegir la receta y convertir la receta en filas, agregamos algunas líneas nuevas
N*
y la impresión automática.CJam,
898683 bytes... resulta que codificar todas las salidas funciona un poco mejor en CJam. Estoy bastante decepcionado
Una vez más tenemos algunos no imprimibles, así que aquí está el programa de enlace permanente y prueba .
Cygwin's
hexdump
:Explicación
Las salidas se codifican usando la base 3, con el solitario
W
pegado al frente antes de que la cadena se divida en 3 para dar filas, y las filas se dividen en grupos de 3 para dar recetas.Al igual que arriba, la conversión de bases y el módulo de magia se utilizan para seleccionar la receta. Hay 22 recetas (una sin usar) pero necesitamos tomar el módulo 24, por lo que en realidad necesitamos especificar explícitamente
24%
este tiempo en lugar de depender de la indexación del módulo.fuente
xxd
? Los enlaces permanentes no funcionan en Firefox.JavaScript (ES6),
235241262Editar Abusar aún más de la regla de que la entrada siempre es válida: solo hay 1 elemento que requiere W, y eso puede ser un caso especial. Por lo tanto, la cuadrícula de salida se codifica como números de base 3 de 9 dígitos.
235 bytes con E / S a través de una ventana emergente.
221 bytes como una función comprobable.
Salida siempre como cuadrícula 3x3. Con 4 símbolos de salida disponibles, la cuadrícula se codifica como un número de bit 3x3x2 (18). Y como la entrada tiene que ser siempre válida, la cadena se almacena truncada al mínimo.
Prueba en la consola Firefox / FireBug
Salida
fuente
Python, 305 bytes
Explicación
Comentario
Este código seguramente no es el más pequeño, pero funciona bien. Estoy satisfecho. :)
Python, 282 bytes
Usando la misma técnica para generar un identificador único pero buscando directamente la receta en una matriz. Es mucho más simple y un poco más compacto que mi primer código.
fuente
W.\n..