Como aprendemos com o IBM PC AT, YouTube (ver vídeo) , Wikipedia (ver artigo) e Vila Sésamo:
A letra H
é a letra mais impiedosa do alfabeto !
(Mesmo quando realmente composto de dois elementos no Código Página 437. De fato, é ainda MAIS impiedoso dessa maneira.)
Como os alienígenas, uhm ... er ... alienígenas , bestas perseguem implacavelmente todos os que ousariam chegar perto de seus ovos. Não há raciocínio com eles. Você deve esmagá-los para não perecer.
Nesse cenário, assumiremos que você está em sua última vida e conheceu Bestas comuns em um terreno sem ovos (como na captura de tela da Wikipedia). Você não tem um teclado numérico e só pode se mover diretamente para cima / baixo / esquerda / direita ... mas as bestas aparentemente têm um e podem se mover na diagonal na sua vez.
A escolha de uma besta entre as opções será a que minimiza a distância do jogador. Se as distâncias forem iguais, o desempate é feito favorecendo a esquerda + para cima sobre a direita + para baixo, mas aqui está a matriz de desambiguação para ser explícita sobre isso ... número mais baixo para desempate:
1 3 4
2 H 5
6 8 7
Uma fera nunca dorme, mas felizmente é um pouco mais lenta que o jogador. Eles se movem a cada dois turnos (dando ao jogador uma vantagem iniciando suas alternâncias no segundo turno). Eles devem se mover se for possível, independentemente de isso os afastar do jogador.
Você esmaga um animal se mover um trem de paredes móveis onde ele estava sentado em um espaço fechado. Essas bestas comuns valem 2 pontos por cabeça.
Entrada
Um par de números inteiros indicando o tamanho de um mapa em colunas e depois em linhas.
Contagem de linhas de linhas de entrada, cada uma do tamanho da coluna ... contendo uma parede sólida (
#
), uma parede móvel (~
), uma besta (H
), o player (O
) ou apenas um espaço.Entrada que será U, D, L, R indicando uma tentativa de movimento do jogador ... ou W para apenas esperar. Observe que a tentativa de empurrar uma parede móvel bloqueada é uma entrada legal, apenas resultará em nenhuma ação.
Resultado
aHHHH!
se os animais mataram o jogador ... ou nada se o jogador ganhou sem animais restantesA pontuação
(Observação: para fins de depuração e / ou diversão, você provavelmente desejará gerar o estado a cada etapa; mas isso é muito tempo para ser postado aqui.)
Esclarecimentos
É garantido que os mapas sejam delimitados por paredes sólidas.
A ordem de quem se move por sua vez é importante para o resultado. Assim: O jogador sempre segue primeiro, então as bestas recebem uma ordem com base na posição inicial do mapa, se você estiver varrendo a tela de cima para baixo, da esquerda para a direita. (Um animal da linha 1 se move antes de um animal da linha 2 e dois animais na mesma linha seria aquele com o menor número de coluna que se moveria antes do outro)
Bestas em movimento na diagonal podem se mover para qualquer espaço diagonal aberto adjacente, independentemente de exigir espremer entre paredes.
Um jogador pode empurrar qualquer número de paredes móveis em uma linha, desde que exista um espaço ou um animal no outro extremo. Mas tentar empurrar um conjunto de paredes para dentro de uma Besta que não esteja presa entre as paredes trata a Besta como uma parede e não permitirá o movimento.
A decisão de movimentação de uma Besta durante um turno é baseada na localização do jogador no início do turno. Sua otimização desejada de "distância ao jogador" é feita através de um cálculo "enquanto o corvo voa". Qualquer aproximação que daria o mesmo resultado medido do centro do quadrado ao centro do quadrado do jogador é boa.
Se uma Besta não puder fazer o que teria sido o seu primeiro movimento preferido em um turno porque uma Besta de maior prioridade tomou o seu lugar, ela fará a próxima melhor escolha em vez de permanecer no lugar (se ainda for possível).
Casos de amostra
Simple Crush
Entrada
5 3
#####
#O~H#
#####
R
Resultado
2
Matriz de Preferências -> Morte
Entrada
5 5
#####
#O #
# ~ #
# H#
#####
WWDW
Resultado
aHHHH!
0
Matriz de Preferências -> Ganhar
Entrada
5 5
#####
#O #
# ~ #
# H#
#####
WRD
Resultado
2
Esperando o Ceifador
Entrada
5 5
#####
#O #
# ~ #
# H#
#####
WWW
Resultado
aHHHH!
0
Derrota bem-sucedida no cenário da Wikipedia
Entrada
40 23
########################################
#~ ~ ~~ ~ ~ ~~ ~ ~~ ~ ~ ~~ #
#~~ ~ ~~ ~ ~ ~~ ~ #
#~# ~~ ~~~~ ~ ~~~~ ~ ~~~ ~#
# ~ ~ ~ ~~ #~~ ~ #
#~~ ~~~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ #
# ~~ ~ ~ ~ ~~~ H ~ #~ #
# O~ ~ # ~~~ ~ ~ ~~ ~ ~ ~~ #
# ~ ~H~~ ~~ ~ # ~~ ~ #
# ~~ ~ ~~~ ~~ ~~~~ ~ ~#
#~ ~ ~~~ ~ ~ ~ ~ ~~ ~~#
# ~ # ~ ~~ ~~~ ~ ~ ~ # ~#
#~ ~ ~~ ~ ~ H ~~ ~~ ~ ~ ~~~ #
# ~ ~ ~ ~ ~ ~~~ ~ #
# ~~ ~ ~ ~~ ~ ~ ~ ~ ~ #
# ~~ ~ ~ ~ ~ ~~ #
#~ ~ # ~~~~ ~ ~~~H # ~ #
# ~ ~ ~ ~ ~ ~~ ~ #
# ~ ~ #~ ~ ~~ ~ ~ ~#
# ~~ ~ ~ ~~ ~ ~ #
# ~~~ ~ ~~ ~ ~ ~ ~ #
# ~ ~ ~ ~~ ~ ~ ~ #
########################################
RRRUWWWRRRURWWWWRDRRWWRDWWWWD
Resultado
8
Mapa fornecido por mim, movimentos e saída da @bobbel, corroborado por mim e pela @Allbeert.
Critérios Vencedores
Eu acho que isso é jogável, então vou seguir as regras do código, a menos que as pessoas se queixem.
Crédito extra
Implementação Unicode reproduzível com caracteres de largura dupla para se parecer com a imagem!
Respostas:
Perl 6: 741 caracteres, 758 bytes
A versão golfada está na parte inferior, pois é basicamente linenoise. Acima está a minha versão pré-golfe. Ambos são interativos (eles lêem o máximo de comandos do arquivo de entrada possível e passam a usar STDIN para obter comandos). Eles tentam usar os caracteres e cores originais.
O uso é como
perl6 beast.p6 beast-input
:A versão golfed:
Feliz Páscoa!
fonte
Java, 1.843
Minha primeira tentativa de resolver esse quebra-cabeça com Java. Eu sei que existem muitas melhorias para torná-lo mais curto. Mas, no final, funciona por enquanto.
Para experimentá-lo, você precisa criar uma classe
C
e colar o código.args[0]
(estritamente falandoa[0]
) é para entrada. O método de impressão do mapa não está incluído, pois não é necessário para a saída do quebra-cabeça.Para executá-lo, tente por exemplo:
Saída do último grande cenário um turno antes de uma besta comer o jogador:
Sem espaços de linha tolos: http://pastebin.com/raw.php?i=QhpxKcCT
Assim, o caminho dos jogadores termina após os movimentos
RRDDDRRRWW
, porque no últimoW
turno, a besta à esquerda irá para a direita para comer o jogador.Outro exemplo do mapa grande original, mas com movimentos diferentes:
http://pastebin.com/raw.php?i=nBWjC3PZ
Veja esta animação: http://youtu.be/0DIhEhjWd6s
E o último exemplo com mapa original e movimentos diferentes (de acordo com as novas regras de movimento das bestas):
http://pastebin.com/raw.php?i=NNmgzx7U
Veja no youtube: http://youtu.be/jXPzL88TU2A
fonte
C -
1004984917Ahh, a beleza de C. Seguindo o espírito da outra resposta, tentei formatar a minha também :)
Imagino que ainda haja algumas melhorias aqui e ali, mas isso foi realmente divertido de escrever e jogar golfe. A contagem de caracteres inclui todos os espaços necessários e novas linhas.
Testei isso com todos os casos de amostra e mais alguns dos meus, e parece estar funcionando corretamente. Se alguém encontrar alguma situação em que ela não responda adequadamente, entre em contato.
A entrada é de stdin e a saída para stdout. Não há verificações para entrada incorreta. E, retorna a pontuação se o jogador for comido ou se estiver vivo após a execução de todos os movimentos (mesmo se ainda houver por aí
H
.Versão não destruída:
fonte
RRRUWWWRRRURWWWWRDRRWWRDWWWWD
no grande mapa, você recebe 6, enquanto ele recebe 8. Ele fez um vídeo , você talvez pudesse imprimir cada passo e olhar para qualquer anomalia ...