Quando eu era criança, costumava jogar muito esse jogo.
Regras
Existem dois jogadores (vamos chamá-los de A e B), e cada jogador usa as mãos como armas. Existem três movimentos possíveis:
Mãos para carregar munição na sua arma.
Cada arma começa vazia. O carregamento aumenta a munição em um.
Mãos apontando para o outro jogador a atirar.
Isso diminui a munição em um. Você deve ter pelo menos uma unidade de munição para disparar.
Braços cruzados para se proteger de um tiro.
Ambos os jogadores se movem simultaneamente. Se os dois jogadores atirarem ao mesmo tempo, as balas se acertam e o jogo continua. O jogo termina quando um jogador atira enquanto o outro está carregando munição.
Tiro e arma vazia são considerados trapaça . Se um jogador trapaceia enquanto o outro executa uma ação legal, o trapaceiro perde imediatamente. Se os dois jogadores trapacearem ao mesmo tempo, o jogo continua.
As tentativas de trapaça não diminuem a munição, portanto nunca pode ser negativa.
Desafio
Dados os movimentos feitos pelos jogadores A e B, calcule qual jogador venceu o jogo: 1
para o jogador A, -1
para o jogador B e 0
para um empate. Você pode usar qualquer outro triplo de valores de retorno, mas precisa indicar na sua resposta quais você usa.
O jogo pode:
- terminar sem ter que processar todos os movimentos;
- não termina com os movimentos dados e, portanto, é considerado um empate.
A entrada pode ser obtida:
- como cordas
- como matrizes / listas de números inteiros
- de qualquer outra maneira que não pré-processe a entrada
Programa completo ou funções permitidas. Como se trata de código-golfe , a resposta mais curta em bytes vence!
Casos de teste
A: "123331123"
B: "131122332"
-----^ Player B shoots player A and wins.
Output: -1
A: "111322213312"
B: "131332221133"
-------^ Player B cheats and loses.
Output: 1
A: "1333211232221"
B: "1213211322221"
----------^^ Both players cheat at the same time. The game continues.
Output: 0
A: "12333213112222212"
B: "13122213312232211"
| || ^---- Player A shoots player B and wins.
^-------^^------ Both players cheat at the same time. The game continues.
Output: 1
Respostas:
Geléia,
333224 bytesIsso imprime 5 em vez de -1 e 7 em vez de 1 . Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Pitão,
48464947 bytesExperimente aqui!
Obrigado a @isaacg por salvar
24 bytes!Faz a entrada como uma tupla de 2 com a lista dos movimentos do jogador A primeiro e os movimentos do jogador B segundo. A saída é a mesma do desafio.
Explicação
Breve visão geral
[cheating win, fair win]
com os valores possíveis-1, 0, 1
para cada uma delas, para indicar se um jogador venceu neste momento (-1, 1
) ou se o jogo continua (0
)[0,0]
e pegar o primeiro elemento diferente de zero que indica o vencedorRepartição do código
fonte
m|Fd
é o mesmo que|M
.M
isso também respinga. Btw: A questão sobre variáveis lambda conflitantes que discutimos no chat está me custando vários bytes aqui: P,1 2
é o mesmo queS2
Python, 217 bytes
Explicação : Leva A e B como listas de números inteiros. Simplesmente passa por cada par de movimentos, adiciona ou subtrai 1, se necessário, e retorna quando alguém trapaceia ou ganha. Faz a mesma coisa duas vezes usando outro loop for, uma vez para a jogada de A e uma vez para a jogada de B. Adiciona 1 se x for menor que 0 a -1.
fonte
Java,
226212200196194 bytes-14 bytes reordenando a lógica
-12 bytes, graças ao Sr. Public, mostrando como usar uma operação ternária para a lógica de tiro
-4 bytes colocando a lógica de carga em um curto-circuito se
-2 bytes porque
==1
===<2
quando a entrada só podem ser1
,2
,3
Uso e versão recuada:
Implementação não tão direta das regras do jogo, mas simples. Cada ciclo, realiza estas operações:
r
para perderr
não for0
, retorne o valor porque alguém trapaceoux
é uma variável fictícia usada para fazer o compilador, deixe-me usar uma expressão ternária.Espere, Java é mais CURTO que Python?
fonte
w==2&&m<1?r--:m++
int x=w==2?m<1?r--:r:m--;
em seguida, continuar a usar o x (como esta é apenas uma variável dummy para fazer o ternário operar) comox=v==2?n<1?r++:r:n--;