É um jogo de três jogadores, joga com uma mão.
Ao mesmo tempo, cada jogador mostra sua mão com 0 a 5 dedos estendidos.
Se todos os jogadores mostrarem o mesmo tipo de número (par ou ímpar), não haverá vencedor. Mas, caso contrário, o jogador que mostra o tipo diferente vence os outros dois.
P l a y e r s
A B C Winner
Even Even Even No winner
Odd Odd Odd No winner
Even Odd Odd Player A
Odd Even Even Player A
Even Odd Even Player B
Odd Even Odd Player B
Odd Odd Even Player C
Even Even Odd Player C
A ferramenta solicitada pode usar argumentos (3 argumentos como numéricos entre 0 e 5) ou STDIN (3 valores por linha, separados por espaços).
Não é necessário verificar a entrada: a entrada irregular pode produzir uma saída inesperada.
Argumentos ou valores na linha é dado da esquerda para a direita, de jogador A para o jogador C .
Apenas saída deve conter A
, B
ou C
(capitalizado) ou a corda no one
(em letras minúsculas, com um espaço regular).
A ferramenta pode funcionar apenas uma vez ou como um filtro em todas as linhas de entrada.
Menor vitória no código.
Respostas:
APL (
3430)Explicação:
2|⎕
: leia uma linha de entrada, pegue o mod-2 de cada número (fornecendo uma lista, ie1 0 1
)∘.=⍨
: compare cada elemento do vetor com cada elemento do vetor, fornecendo uma matriz+/
: soma as linhas da matriz, fornecendo para cada elemento quantos elementos ele era igual. Se houvesse dois iguais e um diferente, agora temos um vetor como2 1 2
onde1
denota quem era diferente. Se eles fossem todos iguais, nós entendemos3 3 3
.1⍳⍨
: encontre a posição do1
. Se não houver1
, isso retornará um a mais que o comprimento do vetor, neste caso4
.⊃'ABC',⊂'no one'
: exibe a string no índice especificado.fonte
Mathematica,
45 43 4241 caracteresExemplo:
Outra solução com
4342 caracteres:fonte
Powershell, 65
fonte
Befunge-98,
61 5045 caracteresUsa a expressão inteligente de Fors para raspar mais alguns personagens. Agora linha única (ou seja, compatível com Unefunge)! Lê até que um jogo seja vencido; adicione
@
no final um programa de tiro único.Trata a entrada mod 2 como um número binário, como na minha resposta JS, depois depende da pesquisa de CA e volta a 'ninguém' se estiver fora dos limites (testando se o caractere é ≥'A ', o que me permite para usar código próximo como dados: D).Variação que lê uma linha de entrada, produz saída, lê uma nova linha de entrada, etc. até que um jogo seja decidido (ou seja, não 'ninguém'):
fonte
APL, 30
Se eu tiver permissão para alterar as variáveis do sistema por configuração, dois caracteres podem ser cortados. (Especificamente, alterando a origem do índice
⎕IO
para 0)A parte crucial
Se representarmos todas as probabilidades da mesma maneira e todas iguais da mesma maneira, uma operação de igualdade entre pares pode distinguir todos os quatro casos:
0 0
para vitórias B,0 1
vitórias A, etc.Explicação
2|⎕
Recebe entrada e mod 22=/
Igualdade entre pares1+
Adicione 1 para indexação (matrizes APL são baseadas em 1 por padrão)'BA'('C',⊂'no one')
Matriz aninhada⊃
Seleciona o elemento correto da matriz aninhadafonte
C: 88 caracteres
Infelizmente, C, como sempre, requer bastante lixo desnecessário. Mas ainda assim, em que outra língua alguém pode escrever
=**++b+**(++
e realmente significa alguma coisa? Simplesmente sublime.Simplesmente passe três números como argumentos, e pronto!
fonte
*b[1]
etc para nenhuma diferença de tamanho (embora alguma perda de elegância .. :()s = "=**++b+**(++"
P com toda a seriedade, uau, como isso ... como isso funciona? : Ob
e imprimir algumas condições, poderá conseguir descobrir isso. : D (caneta e papel também ajuda, para a tabela de verdade resultante)GolfScript (31 caracteres)
Lógica muito simples: reduza o módulo de entrada 2 e depois ordene uma cópia. O item do meio da matriz classificada é a maioria, portanto, procure um índice que seja diferente (e, portanto, minoria).
fonte
Ruby (corpo da função), 42 caracteres
Assumindo 3 argumentos numéricos
a
,b
ec
:Ruby (ferramenta de linha de comando), 61 caracteres
A versão 1 vem com 62 caracteres:
Mas, pegando carona na resposta de Darren Stone , a Versão 2 chega a 61 caracteres:
fonte
Ruby, 61 caracteres
fonte
['no one',?C,?B,?A]
==%w(no\ one C B A)
(2 caracteres salvos).JavaScript (nó), 87 caracteres
Para fazer a bola rolar ... espera entrada como três argumentos extras. Utiliza o seguinte padrão para entrada / saída (
/
representa "ninguém"):fonte
GolfScript,
363533 caracteresRecebe a entrada conforme descrito em STDIN. Você também pode testar o código online .
fonte
Perl, 84 caracteres.
<>=~/(\d)/g
analisa a linha de entrada em dígitos distintosmap{$_%2
pega essa lista e calcula o valor mod 2 (par ou ímpar)oct"0b".join"",
pega essa lista de valores de mod, junta-os a uma string, anexa um especificador octal e converte a string em um número.Basicamente, o que fiz foi criar uma tabela de verdade e, em seguida, reordená-la cuidadosamente, para que eu fizesse uma operação de inversão
$x == 4
. Então$x >=4
, se fizemos a inversão[$x>=4?7-$x:$x]
que costumávamos indexar na matriz('no one','C','B','A')
Não é o código mais curto possível, mas na verdade não é ruído de linha ... o que é notável por si só.
Perl: 74 caracteres + 3 sinalizadores = 77, executado com
perl -anE '(code)'
Isso é uma melhoria, aproveitando a divisão automática (o -a), digamos (o -E) e, finalmente, descobrindo o que havia de errado na comparação.
fonte
>=4
invés de simplesmente>3
? +1 para as dicas'0b'.
que eu não conhecia antesLisp comum,
114 10670 caracteresA partir dos três valores, crie um par representando a diferença de paridade entre os elementos adjacentes. Trate isso como um número binário para indexar na lista de resultados.
Algoritmo mais antigo:
fonte
Python 2, 54
fonte
Mathematica
100 9489Teste
fonte
Haskell, 97
fonte
R 67
fonte
/usr/bin/R
) e depois inserir o código acima.scan()
é o que solicitará a entrada: um exemplo seria digitar1[space]3[space]5[space][enter][enter]
e você verá a saída correspondente (aquino one
) impressa na tela. Você pode fazer o download do R aqui: cran.r-project.org/mirrors.htmlC, 85 caracteres
Não é tão curto quanto a minha resposta Ruby, mas estou feliz com isso, considerando a
main
crosta.fonte
Peixe - 41
Roubou a resposta anterior do FireFly e a portou para pescar, porque o uso de registros no peixe nos permite raspar alguns caracteres. Perdeu alguns caracteres por não ter o operador horizontal se.
Isso leva parâmetros através de argumentos.
fonte
#@...<
no final para salvar um caractere. Ah, e seu código atual parece 42 caracteres para mim, então diminua esse número de caracteres. :)Smalltalk, 128 caracteres
enviar
value:
com uma coleçãofonte
JavaScript (ES6) / CoffeeScript, 50 bytes
Usa a tabela de verdade de acordo com a resposta do Firefly, mas adota uma abordagem mais direta no acesso ao personagem:
Demo
fonte
Python 3, 115
fonte
Python 3, 114
fonte
Dois métodos diferentes em dois idiomas diferentes + variações -> 6 respostas
Existem basicamente duas maneiras para esta operação:
array
baseado: Construiu um número binário de 3 dígitos, que recebe a resposta de uma matrizcount
com base: conte par e ímpar e verifique se há umcount == 1
Perl 71 (baseado em matriz + variação)
Um dos meus menores perl:
s/(.)\s*/$1&1/eg;
transformar uma string como1 2 3
em101
$==oct"0b".$_;
transformar binário em outubro (o mesmo que dec, abaixo de 8)$==$=>3?7-$=:$=;
se> 3
oper7-
. (A partir daíno one
== 0)say$=?chr 68-$=:"no one"
caso contrário0
, imprima char a partir do valor, caso contrário, imprimano one
.Perl 71 (baseado em matriz)
ligeiramente diferente na etapa de impressão: A saída é baseada em uma 'matriz' .
Perl 81 (baseado em contagem)
Significado diferente:
$c=A
Inicialize um contador c comA
.map{$a[$_%2]=$c++;$b[$_%2]++}split
Contador b conta par e ímpar, uma única loja quesay$b[0]==1?$a[0]:
se mesmo contador == 1? Também imprima jogador par .$b[0]==2?$a[1]:
se mesmo contador == 2? Também imprima jogador estranho .:"no one"
mais imprimano one
.Bash 85 (baseado em matriz)
Isso é baseado na minha segunda versão perl:
c=$((($1%2)<<2|($2&1)*2+($3%2)))
faça o índice pos.mod
and
*4
<<1
.((c>3))&&c=$((7-c))
se c> = 4 então c = 7-c.o=()
declarar uma matrizecho ${o[c]}
com base na matrizBash 133 (baseado em contagem)
a[$1&1]=A;a[$2&1]=B;a[$3&1]=C
armazena o jogador na variável a [par] e a [ímpar]((b[$1&1]++));((b[$2&1]++));((b[$3&1]++))
conte par / ímpar em b.case $b in 1) echo ${a[0]}
caso o contador par == 1 imprima o par2)echo ${a[1]};;
case even counter == 2 print odd player*)echo no one;esac
mais imprimano one
.Bash 133 (baseado em contagem)
Mesma versão, usando a condição e o grupo de comandos do bash em vez de
case ... esac
fonte
Linguagem do Game Maker, 116
Minha nova resposta depende muito da fórmula do FireFly:
O código antigo compilado com variáveis não inicializadas como 0, 183 caracteres:
Editar # 1 - Código totalmente diferente
fonte
Clojure, 116
fonte
vba, 116
chamar
?z(1,2,3)
ou atribuir a uma variável comq=z(1,2,3)
, ou até mesmo usar como uma UDF no excel e usar=z(1,2,3)
na sua fórmula do excelfonte
Python 3, 80 caracteres
Nota: a entrada deve ser '1' [ímpar] ou '0' [par]. Por exemplo:
fonte
split
e,join
portanto, você ainda pode usar suaint(...input...)
ideia (muito inteligente) . ?'0b'+
eu acho, pelo menos parece redundante para mim eint(input(),2)
parece funcionar em um REPL.Java, 226 caracteres
fonte
C
10196C, provavelmente o exemplo mais trivial (algumas operações ternárias):
fonte