Há um jogo que eu gosto de jogar. Isso acontece em uma grade de tamanho finito (mas é envolto, como uma esfera). Nessa grade, um ponto aleatório (somente número inteiro) é selecionado. Então, eu, o usuário, sou solicitado a inserir uma coordenada. Se minha entrada corresponde exatamente ao ponto aleatório, disseram-me que venci. Caso contrário, me disseram a distância em pontos entre minha entrada e o ponto aleatório. Por exemplo, se eu adivinhasse (2,2)
e o ponto aleatório estivesse (4,3)
, então a distância seria sqrt[(3-2)^2 + (4-2)^2] = sqrt[5]
.
O jogo continua até que o jogador chegue ao local correto do ponto.
Objetivo Crie uma versão funcional do jogo descrito acima. Você deve criar um programa completo para fazer isso. Aqui está o que seu programa deve fazer:
- Solicite duas entradas: a altura e a largura do quadro. A origem está no canto superior esquerdo do quadro. Essas entradas não excederão
1024
. - Selecione um ponto aleatório nesse quadro; este será o ponto a ser adivinhado.
- Aceite a entrada simulando uma curva. A entrada será um par de números inteiros separados por espaço ou duas entradas inteiras separadas. Em resposta a esta entrada, o programa fará uma de duas coisas:
- Se a entrada corresponder ao ponto aleatório selecionado, envie uma mensagem sinalizando a vitória do usuário. Eu sugeriria "Você ganhou!".
- Caso contrário, imprima a distância entre o ponto de entrada do usuário e o ponto aleatório.
- Depois que o usuário tiver alcançado a vitória, exiba o número de turnos que ele fez. O programa então sai.
Bónus
Os bônus são aplicados na ordem em que aparecem nesta lista
- -150 bytes se o seu programa usa um número inteiro de entrada
D
que descreve a dimensão na qual o jogo ocorre. Por exemplo, seD = 3
você criar um ponto aleatório de3
números inteiros, receber3
entradas inteiras e gerar a distância entre esses pontos. - -50% (ou + 50% se
score < 0
) se você fornecer uma representação gráfica da placa (ASCII ou Figura) que mostre onde o usuário adivinhou anteriormente na grade de determinadas dimensões e no contador de curvas. (Se você optar pelo primeiro bônus, ele se aplicará apenas aos modos2D
e1D
. Se você adicionar uma saída gráfica em 3D, receberá um adicional de -50%.) - -60 bytes se você pode fornecer um modo de jogo (selecionado por uma entrada no início; isto é, quando fornecido
0
, executa o modo de jogo regular; quando determinado1
, executa este modo de jogo) no qual o ponto move 1 unidade em uma direção ortogonal aleatória por turno
Mais sobre embalagem
O empacotamento ocorre apenas quando, no terceiro bônus, o ponto móvel se move através de qualquer um dos limites; neste caso, o ponto móvel é distorcido para o respectivo ponto, assim:
... ...
..R (move right) R..
... ...
Esse comportamento de empacotamento não afeta o palpite do usuário, além do fato de que o ponto mudou de direção.
Entre os melhores
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
# Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
10x10
, o ponto aleatório é (9,4)
, e eu acho (2,2)
, é a distância sqrt(13)
ou sqrt(53)
? (Observação para o futuro: se você estiver fazendo algo estranho, não inclua aleatoriedade, pois torna quase impossível fornecer casos de teste). 2. No terceiro bônus, a distância deve ser calculada e emitida antes ou depois do ponto se mover?