Super Mario Galaxy apresenta dois planetas em forma de rhombicuboctahedron * revestidos de plataformas que encolhem quando Mario atravessa. Se Mario cair em um buraco triangular ou em um espaço deixado por um ladrilho que ele tocou anteriormente, ele será consumido pelo buraco negro no núcleo. (Assista: Galaxy apressado , Galaxy Slide do mar )
Imagem: MarioWiki.com
(Você pode pensar no planeta como um cubo 2x2x2 cujas faces foram separadas e conectadas umas às outras por "pontes" 2x3.)
Infelizmente, como meu controlador está muito quebrado, Mario não pode pular e está limitado às quatro direções principais. Além disso, Mario se move muito devagar e não pode recuar nem um passo sem primeiro ter a plataforma atrás dele desaparecendo.
Vamos supor que a câmera esteja sempre acima da cabeça de Mario e ele começa no canto inferior direito de um rosto 2x2:
■ ■
■ ■
■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ M ■ ■ ■
■ ■
■ ■
■ ■
Seu programa seguirá uma lista ou uma sequência de instruções U
D
L
R
(para cima, baixo, esquerda, direita), representando a caminhada de Mario ao redor do planeta até uma série de etapas. O programa pode gerar uma de duas saídas distintas: uma representando que Mario ainda está vivo e andando, e a outra representando que, em algum momento de sua caminhada, Mario caiu no Satélite Encolhendo.
RR: ■ ■ RRD: ■ ■ RRL: ■ ■
■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ □ M ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ □ M □ ■
■ ■ \ ■ ■ M ■ ■ \
■ ■ Let's-a go! ■ ■ \ ■ ■ W-aaaaaaaaaahh!
■ ■ ■ ■ W-aaaaaaaaaahh! ■ ■
Obviamente, ao contrário dos diagramas acima, você terá que levar em conta o 3D. Aqui está um diagrama que pode ajudá-lo a visualizar melhor o cenário:
Top 2x2 face
<- clockwise anticlockwise ->
- ■ - ■ - ■ - ■ -
/ \ / \ / \ / \
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ Left and right
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ M ■ ■ ■ ■ ■ ■ ■ ■ ■ edges wrap around.
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
<- anticlockwise clockwise ->
Bottom 2x2 face
Portanto, de acordo com este diagrama, UUUUURRRR
pode ser assim:
- ■ - ■ - □ - ■ -
/ \ / \ / \ / \
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ M ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
E UUUUUUUUULURRRRRR
pode ficar assim:
- ■ - ■ - □ - □ -
/ \ / \ / \ / \
■ ■ ■ ■ □ ■ ■ □
■ ■ ■ ■ □ ■ ■ □
-> □ ■ ■ ■ □ ■ ■ □ ->
<- □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ M □ □ □ □ □ <-
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
Que o programa mais curto em bytes seja w-aaaaaaaaaahh!
Casos de teste
Saída 1: Ainda Vivo
DDDDDLUUUUU
- Mario atravessa uma ponte e volta.
RRRRDDDDLLL
- Mario anda em um triângulo.
LLLLLLUUUUUURRRRR
- Mario entra em um triângulo maior.
ULLDRDDDRU
- Mario se coloca em perigo.
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRR
- Mario segue um caminho não convencional ... e se arrisca.
Mario atravessa cada peça exatamente uma vez.
DDDDLUUUULLLLDDDLUUULLLLDDDDLUUUULLLLDDDLUUULLLURRRUUURDDDRRRRUUURDDDRRRRUUURDDDRRRRUUUUURDDDDD
DLDRDLDLLLDRRRDDDDLLLLLLLLLDRRRRRRRRRDDDDLLLDRRRDDDRUUURRRRULLLLUUUURRRULLLUUUUURDRURDRUURULURU
Saída 2: W-aaaaaaaaaahh!
LLR
- Mario tenta recuar um passo e cai.
UULDR
- Mario tenta cruzar uma peça duas vezes e pisa no ar.
RRDDDDD
- Mario sai de uma ponte no primeiro D (ignora os passos seguintes).
RRRRDDDDLLLL
- Mario caminha em um triângulo e cai através da peça inicial.
LLLLLLUUUUUURRRRRR
- Mario caminha em um triângulo maior e cai através da peça inicial.
UUUUUUUUUUUUUUUUUUUU
- Mario anda por todo o planeta e cai no ladrilho inicial.
RURDRURDRDLDRDLDLDLULDLLUU
- Mario segue uma rota não convencional e fica desorientado.
Mario, percebendo o perigo em que está, não tem escolha.
ULLDRDDDRUUU
ULLDRDDDRUUL
ULLDRDDDRUUR
ULLDRDDDRUUD
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRR
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRU
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRL
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRD
Por fim, copie qualquer caso de teste de "Mario cruza todos os blocos exatamente uma vez" e altere ou adicione uma etapa aleatoriamente. Mario deve cair. (Se você adicionar um passo até o fim, Mario cai para pegar a Power Star!)
* Cubo cantelado seria um termo mais correto, já que algumas faces não são quadradas, mas é preciso admitir - o "rhombicuboctahedron" flui melhor.
fonte
R
. Eu trabalhei isso no papel para garantir que meu código esteja correto.Respostas:
Ruby, golfe,
244230 bytesParece funcionar bem, testará um pouco mais.
Ruby, primeira versão de trabalho, 260 bytes
Experimente online
Função Lambda usando um argumento de string. Retorna 4 para vivo, 0 para morto.
Explicação
O tabuleiro é desdobrado em 6 tiras de tamanho 2x8, representadas pelos caracteres
/\
eO
abaixo. Elas são mapeadas em um mapa 2D 24 * 8, onde x = (número da faixa) * 4 + (posição horizontal na faixa) e y = posição vertical na faixa.Eles são armazenados em uma matriz de 8 números binários; portanto, x aumenta para a esquerda e y aumenta para baixo.
A matriz é inicializada com 8 cópias do número
0x33333333
. Isso forma os quadrados em que Mario pode pisar. Quando Mario se move ao redor do quadrado em que ele está, é definido como zero, e o quadrado para o qual ele está se mudando é testado - ele vive com um 1 e morre se contiver um 0.Se Mario sai da parte superior ou inferior da faixa em que está, ele se move para outra faixa. Se ele sair do lado da faixa em que está, se estiver em um quadrado com y = 3 ou y = 4, ele se moverá para outra faixa. Se y não é 3 ou 4, ele não se move para outra faixa e acaba em um quadrado que tinha 0 desde o início do jogo, então ele morre.
Como a câmera está sempre acima da cabeça de Mario, sempre que ele muda de faixa, a referência para as direções deve ser girada em 90 graus.
Ungolfed in program program
fonte