Escreva um programa que gere uma sequência vencedora de jogadas para a variante determinística do jogo 2048. A sequência deve estar na forma de uma sequência de números 0-3, com 0: para cima, 1: para a direita, 2: para baixo, 3: esquerda. Por exemplo, a cadeia "1132" significa direita direita esquerda para baixo. O programa vencedor é o código-fonte mais curto que chega a 2048!
As regras para 2048 determinístico: O jogo é jogado em uma grade 4x4 contendo inicialmente 1 peça, no canto superior esquerdo. Cada movimento consiste no comando "esquerda", "direita", "para cima" ou "para baixo". O comando à esquerda desliza todos os blocos da grade para a esquerda e combina e soma como blocos a partir da esquerda. Da mesma forma, o comando desliza lado a lado para a direita e combina a partir da direita.
Cada bloco só pode participar de uma combinação por jogada.
Após uma movimentação, um novo bloco 2 é criado na primeira coluna da esquerda com um espaço disponível, no primeiro espaço disponível na parte superior dessa coluna.
Por exemplo, a sequência "direita direita esquerda para baixo" leva aos estados
2___
____
____
____
2__2
____
____
____
2__4
____
____
____
24__
2___
____
____
2___
____
____
44__
O comando à direita aplicado à linha _ 2 2 2 resulta em _ _ 2 4 O comando à direita aplicado à linha 2 2 2 2 resulta em _ _ 4 4
Esta pergunta foi inspirada em http://jmfork.github.io/2048/
fonte
$(".tile-container").addItem("<div class="tile tile-2048 tile-position-3-4">2048</div>");
Respostas:
Python, 740 caracteres (665 caracteres compactados)
Código :
(Mistura guias com espaços para recuo para salvar alguns bytes)
Eu devo ter gostado muito de jogar golfe, porque se eu apenas comprimir o código acima, a base-64 o codifica, e
exec
são apenas 665 caracteres. O seguinte é exatamente equivalente ao acima, nenhuma solução codificada ou qualquer coisa:Resposta :
Demora ~ 47 segundos (17 segundos sem ser destruído) para encontrar a sequência de 1111 movimentos:
Com a seguinte posição final do tabuleiro e mova-se:
Curiosidades: a solução tem 309 bytes com gzip e 418 bytes se gzipped e codificado em base64. Portanto, seria um programa mais curto decodificar e imprimi-lo, mas isso não é nada divertido .
Explicação :
Aqui está uma pasta da versão não destruída que imprime o quadro após cada movimento, muito divertido de assistir!
É uma IA de força bruta muito simples. Ele atribui um EV para cada posição do quadro:
Ele faz uma pesquisa profunda quatro movimentos à frente e escolhe o caminho que leva ao VE mais alto em quatro movimentos. A função ev a incentiva a limpar o tabuleiro e a manter as peças de maior valor no canto, o que acaba sendo ótimo. É o suficiente para chegar lá!
Se você modificar a função EV para colocar um valor mais alto em outros pontos da placa, algo como:
Essa função chega até:
16k :
Eureka! Com um cabeçote de 5 etapas em vez de um 4 e os seguintes pesos:
Quase chega a 32k, terminando em:
A sequência está aqui .
32k :
Sim, senhoras e senhores, atingimos a marca de 32k. A função EV, em vez de multiplicar quadrados por uma constante, eleva cada quadrado aos seguintes poderes e os adiciona.
x
significa que o quadrado não está envolvido:Ainda soma todos os valores uma vez e adiciona 256 para cada quadrado vazio. Lookahead tinha 4 até 32k, e depois aumentou para 5, mas não parece fazer muito. Placa final:
Pasta da sequência de 24.625 movimentos .
fonte