Crie uma função que terá duas seqüências de caracteres como entrada e retornará uma única saída para o resultado. A resposta mais popular vence.
As regras de Pedra-papel-tesoura-lagarto-Spock são:
- Tesoura corta papel
- Papel cobre rocha
- Rocha esmaga lagarto
- Veneno de lagarto Spock
- Spock esmaga tesoura
- Tesoura decapita lagarto
- Lagarto come papel
- Papel nega Spock
- Spock vaporiza a rocha
- Pedra quebra tesoura
A saída para cada caso de entrada possível é:
winner('Scissors', 'Paper') -> 'Scissors cut Paper'
winner('Scissors', 'Rock') -> 'Rock breaks Scissors'
winner('Scissors', 'Spock') -> 'Spock smashes Scissors'
winner('Scissors', 'Lizard') -> 'Scissors decapitate Lizard'
winner('Scissors', 'Scissors') -> 'Scissors tie Scissors'
winner('Paper', 'Rock') -> 'Paper covers Rock'
winner('Paper', 'Spock') -> 'Paper disproves Spock'
winner('Paper', 'Lizard') -> 'Lizard eats Paper'
winner('Paper', 'Scissors') -> 'Scissors cut Paper'
winner('Paper', 'Paper') -> 'Paper ties Paper'
winner('Rock', 'Spock') -> 'Spock vaporizes Rock'
winner('Rock', 'Lizard') -> 'Rock crushes Lizard'
winner('Rock', 'Scissors') -> 'Rock breaks Scissors'
winner('Rock', 'Paper') -> 'Paper covers Rock'
winner('Rock', 'Rock') -> 'Rock ties Rock'
winner('Lizard', 'Rock') -> 'Rock crushes Lizard'
winner('Lizard', 'Spock') -> 'Lizard poisons Spock'
winner('Lizard', 'Scissors') -> 'Scissors decapitate Lizard'
winner('Lizard', 'Paper') -> 'Lizard eats Paper'
winner('Lizard', 'Lizard') -> 'Lizard ties Lizard'
winner('Spock', 'Rock') -> 'Spock vaporizes Rock'
winner('Spock', 'Lizard') -> 'Lizard poisons Spock'
winner('Spock', 'Scissors') -> 'Spock smashes Scissors'
winner('Spock', 'Paper') -> 'Paper disproves Spock'
winner('Spock', 'Spock') -> 'Spock ties Spock'
Desafio adicional sugerido por @Sean Cheshire: permita listas personalizadas, como as deste site. Com a lista de itens n, o item perde para (n-1) / 2 anterior e ganha sobre (n-1) / 2 a seguir
popularity-contest
dansalmo
fonte
fonte
Respostas:
APL
Saída exatamente como exigido em todos os casos, incluindo empate / empate. Nenhuma tabela de pesquisa, exceto as palavras reais.
Você pode experimentá-lo em http://ngn.github.io/apl/web/
APL apenas sabe!
fonte
SED
fonte
Aqui está uma solução geral com base em uma sequência de regras de qualquer tamanho. Ele executa letras maiúsculas corretas para o nome próprio "Spock" e também permite regras para especificar 'empate' em vez de 'empates' para objetos no plural.
Resultados:
fonte
rules
você pode usar uma cadeia de linhas múltiplas em vez da concatenação literal. Isso permite remover os parênteses redundantes.Pitão
fonte
Pitão
fonte
Ruby, abordagem aritmética
Os atores podem ser organizados em uma matriz de tal maneira que cada ator
a[i]
ganhe contra os atoresa[i+1]
ea[i+2]
, módulo 5, por exemplo:Então, para um ator
A
com índicei
, podemos ver como ele combina de novoB
com atorj
fazendoresult = (j-i)%5
: Resultado1
e2
significa que o ator A venceu um ator com 1 ou 2 lugares à sua frente, respectivamente;3
e da4
mesma forma significa que ele perdeu contra um ator atrás dele na série.0
significa um empate. (Observe que isso pode depender do idioma; no Ruby(j-i)%5 == (5+j-i)%5
também quandoj>i
.)A parte mais interessante do meu código é o uso dessa propriedade para encontrar uma função de classificação dos índices de dois atores. O valor de retorno será -1, 0 ou 1, como deveria :
Aqui está a coisa toda:
fonte
Pitão
Usando um dicionário complicado.
fonte
return(' '.join([p,'tie' + 's'*(p[1]!='c'),q]))
obterá o tempo verbal correto.C #
Premissas
Os oponentes são organizados em uma matriz de itens n, onde os jogadores vencem os (n-1) / 2 jogadores à frente deles e perdem para os (n-1) / 2 jogadores atrás deles. (Com listas longas, o jogador perde para os jogadores ((n-1) / 2 + 1) atrás deles)
As ações do jogador são organizadas em uma matriz em que ações dentro do intervalo de [(indexOfPlayer * (n-1) / 2)] a [(indexOfPlayer * (n-1) / 2)) + (n-2) / 2 - 1 ]
Informação adicional
CircularBuffer<T>
é um invólucro em torno de uma matriz para criar uma matriz endereçável "infinitamente". AIndexOf
função retorna o índice de um item dentro dos limites reais da matriz.A classe
Exemplo
fonte
Python, one-liner
fonte
.split(', ')
e não precisa congestionar as regras juntos.Apenas uma pequena coisa que eu vim com:
Aqui, rules é o arquivo que contém todas as regras fornecidas.
fonte
Pitão
Inspirado pelo código APL do @ Tobia.
Resultados:
fonte
C ++
Um pouco de teste
fonte
Javascript
fonte
Javascript
Vejo que isso não é um concurso de golfe, mas eu brincava com esse quebra-cabeça há um tempo antes de encontrar esse tópico, então aqui vai.
Aqui está uma versão js (padrão) em 278 caracteres:
Ou um usando os recursos E6 (provavelmente só funciona no Firefox) em 259 caracteres:
fonte