Existem 21 itens no Minecraft que você pode criar usando apenas madeira e itens criados a partir de madeira:
machado
barco
tigela
botão
no peito
elaboração de mesa
porta
cerca
portão
enxada
escada
picareta
pranchas de
placa de pressão
pá
sinal
laje
escadas
ficar
espada
alçapão
Esta lista pressupõe que os 6 tipos diferentes de pranchas / lajes / portas de madeira / etc. todos contam como o mesmo item. Outra maneira de pensar é assumir que você só tem acesso a um tipo de madeira.
Cada um desses 21 itens tem uma receita de artesanato diferente . Representaremos cada uma dessas receitas como uma grade 2 × 2 ou 3 × 3 dos caracteres .WPS
. O .
slot para criação é vazio, W
é para madeira , P
é para pranchas de madeira e S
é para paus . Nenhum outro caractere é necessário para esses itens em particular.
Por exemplo, esta é a receita para um baú :
PPP
P.P
PPP
Desafio
Escreva um programa com o nome de um de nossos 21 itens, exatamente como aparece acima, e imprima uma receita de fabricação válida para esse item.
As receitas de criação são invariantes à tradução; portanto, se a entrada for fence
, ambas são válidas:
PSP
PSP
...
...
PSP
PSP
Se uma receita se encaixa em uma grade 2 × 2, você pode produzi-la em uma grade 2 × 2 ou 3 × 3. por exemplo stick
:
.P
.P
...
.P.
.P.
As receitas também podem ser espelhadas horizontalmente (em torno de uma linha vertical de simetria), embora isso só faça diferença para o machado, a enxada e as escadas. por exemplo hoe
:
.PP
.S.
.S.
PP.
.S.
.S.
Portanto, a saída de qualquer receita que se encaixe na grade e tenha a forma correta (ignorando a tradução e o espelhamento) é o que o seu programa precisa fazer. Estas são todas as receitas que o jogo oficial reconhecerá. (Observe que as receitas não podem ser giradas ou espelhadas verticalmente.)
Detalhes
- Receba as informações do stdin ou da linha de comando. Você pode assumir que a entrada é sempre válida. Exigir aspas em torno da entrada (por exemplo
"chest"
) é bom. - Saída para stdout (ou alternativa mais próxima) com uma nova linha à direita opcional.
- O menor envio em bytes vence.
Exemplo
Aqui está uma lista de todas as entradas e saídas de amostra:
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
...
fonte
Respostas:
CJam,
100969491 bytesO StackExchange controla os imprimíveis, então, em vez de copiar e colar aqui, está o link permanente . Além disso, aqui está o programa de teste .
(Obrigado ao @Optimizer por me falar sobre
f
e @ MartinBüttner por me falar sobre a indexação do módulo do CJam.)Cygwin's
hexdump
:Explicação
Para construir as receitas, usamos 13 linhas diferentes (também listadas estão explicações sobre por que isso é mínimo):
Codificamos as linhas via
Z"O>HVa=4a"98bZb+"P.SW"f=3/
, o que forneceO primeiro bit
"+WcbKF AQH;_{GM8Lyf=_tmTn"141bDb3/
codifica as receitas, dandoObserve como é a primeira entrada
[3 3 8]
, qual é a receitasign
.l72b970%=
lê a entrada e, em seguida, aplica alguma mágica para descobrir qual receita extrair da lista. Embora tenhamos apenas 21 receitas, há 24 na lista - os poucos pontos extras correspondem aos[1 0 0]
s.Depois de ler a entrada, escolher a receita e converter a receita em linhas, inserimos algumas linhas novas
N*
e a impressão automática.CJam,
898683 bytes... acontece que codificar todas as saídas é um pouco melhor no CJam. Estou muito decepcionado.
Mais uma vez, temos alguns imprimíveis, então aqui está o programa de permalink e teste .
Cygwin's
hexdump
:Explicação
As saídas são codificadas usando a base 3, com o solitário
W
sendo pregado na frente antes que a sequência seja dividida em 3s para dar linhas, e as linhas são divididas em grupos de 3s para dar receitas.Como acima, a conversão de base e o módulo mágico são usados para selecionar a receita. Existem 22 receitas (uma não utilizada), mas precisamos
24%
usar o módulo 24, portanto, na verdade, precisamos especificar explicitamente esse tempo, em vez de confiar na indexação do módulo.fonte
xxd
? Os links permanentes não funcionam no Firefox.JavaScript (ES6),
235241226Editar Abusando ainda mais da regra de que a entrada é sempre válida: há apenas 1 item que requer W e que pode ser especial. Portanto, a grade de saída é codificada como 9 dígitos base 3 números.
235 bytes com E / S via pop-up.
221 bytes como uma função testável.
Saída sempre como grade 3x3. Com 4 symobols de saída disponíveis, a grade é codificada como um número de bits 3x3x2 (18). E como a entrada deve ser sempre válida, a sequência é armazenada truncada no mínimo.
Teste no console Firefox / FireBug
Saída
fonte
Python, 305 bytes
Explicação
Comente
Esse código certamente não é o menor, mas funciona muito bem. Estou satisfeito. :)
Python, 282 bytes
Usando a mesma técnica para gerar um identificador exclusivo, mas procurando diretamente a receita em uma matriz. É muito mais simples e um pouco mais compacto que o meu primeiro código.
fonte
W.\n..