Seu trabalho é simular um jogo matematicamente perfeito de 2048. A idéia é encontrar o limite superior teórico de quão longe um jogo de 2048 pode ir e descobrir como chegar lá.
Para ter uma idéia de como isso é, brinque com esse clone 2x2 e tente marcar 68 pontos. Se fizer isso, você terminará com um bloco de 2, 4, 8 e 16. É impossível avançar além desse ponto.
Sua tarefa é facilitada porque você pode escolher onde os blocos aparecerão e quais serão seus valores, assim como este clone .
Você deve escrever um programa ou função que aceite uma placa 2048 como entrada e produza a placa com o bloco gerado e o painel após o recolhimento dos blocos. Por exemplo:
Input:
-------
0 0 0 0
0 0 0 0
0 0 0 0
0 0 8 8
Output:
-------
0 0 0 0
0 0 0 0
0 0 0 0
0 4 8 8
0 0 0 0
0 0 0 0
0 0 0 0
0 0 4 16
Seu programa receberá repetidamente sua própria saída para simular um jogo inteiro de 2048. A primeira entrada do programa será um tabuleiro vazio. Você deve gerar uma peça sobre ela, diferente das duas peças do jogo original. Na última etapa do jogo, você não poderá se mover, portanto suas duas placas de saída podem ser idênticas.
Obviamente, você deve produzir apenas movimentos legais. Apenas um 2 ou 4 pode ser gerado, você deve mover ou recolher pelo menos um bloco em um movimento, etc.
Eu propositadamente tornei os requisitos de entrada e saída vagos. Você é livre para escolher o formato da entrada e saída. Você pode usar matrizes, matrizes, strings ou o que quiser. Contanto que você possa simular um jogo de 2048 com eles, suas entradas e saídas são boas.
O vencedor será aquele que terminar o jogo com a maior soma de peças no tabuleiro e, em seguida, com o menor número de bytes no código-fonte. A pontuação do jogo original não será levada em consideração. (Dica: use 4)
fonte
Respostas:
Ruby, Para o Canto, Pontuação: 3340
Aqui está uma estratégia muito simples para iniciar isso. Eu tenho uma idéia para uma pontuação (quase) perfeita, mas estou tendo problemas para formalizá-la, então aqui está algo simples para fazer as coisas acontecerem.
A
advance
função é a que você está solicitando. Ele pega um tabuleiro como matriz 1d e o devolve depois que o ladrilho foi gerado e depois que a jogada foi feita.Você pode testá-lo com este trecho
A estratégia é muito simples, e é a que eu realmente costumava pular para o 128 quando estava jogando 2048: apenas alterne entre cima e esquerda . Para fazer isso funcionar o máximo de tempo possível, novos
4
s são gerados no canto inferior direito.EDIT: Eu adicionei um comutador codificado para ir para a direita algumas vezes em etapas específicas antes do final, o que na verdade me permite chegar a 1024. Isso está ficando um pouco fora de controle, por isso vou parar com isso por enquanto e pense em uma abordagem geralmente melhor amanhã. (Honestamente, o fato de eu poder aumentar minha pontuação em um fator 4, adicionando hacks ajustados à mão, apenas me diz que minha estratégia é péssima.)
Este é o quadro com o qual você acaba
fonte