Desafio
Bar Dice é um jogo simples jogado em uma barra com dados (daí o nome). Você joga 5 dados de seis lados e tenta fazer a melhor mão.
A pontuação é baseada na acumulação do maior número de dados com os mesmos dígitos. Cada mão deve incluir pelo menos um único "ás", ou um, para ser uma mão válida; Ases atuam como "wilds" e podem ser emparelhados com qualquer outro dígito. A força da mão de um jogador depende primeiro do número de dígitos e depois do valor desses dígitos. Como exemplo, uma mão (contando wilds) com quatro 3's é melhor que uma mão com três 5's, mas não melhor que uma mão com cinco 2's.
Retirado do artigo da Wikipedia
Isso significa que a mão mais alta é composta inteiramente de 6 e 1, e a mais baixa é qualquer mão sem 1.
Seu desafio é pegar duas mãos e retornar qual jogador venceu ou se empatou.
Entrada
Duas listas não ordenadas de 5 números, variando de 1 a 6. Cada lista representa a mão de um jogador. O formato de entrada é flexível.
Saída
Quaisquer três valores estáticos distintos, mas consistentes (intervalos não são permitidos), significando se o jogador 1 ou o jogador 2 venceu ou se foi um empate. Indique na sua resposta quais valores você está usando para quê. Por exemplo, você pode retornar -1
se P1 vencer, 0
se for um empate e 1
se P2 vencer.
Regras
- A entrada sempre será válida
- Somente a melhor pontuação possível de cada mão é usada para determinar um vencedor. Não há desempate. Por exemplo,
[1,4,4,3,3]
empatará em[1,4,4,2,2]
vez de usar os 3 e 2 como desempate. - A saída deve ser um dos 3 valores escolhidos sempre. Simplesmente mapear todos os números negativos para
P1 Wins
não é permitido e deve ser normalizado. - Mãos inválidas, ou seja, aquelas sem 1, perdem para todas as mãos válidas, mas empatam com todas as outras mãos inválidas. Por exemplo,
[2,2,2,2,2]
laços[3,3,3,3,3]
. - Uma mão de
[1,1,1,1,1]
contagens como um conjunto válido de 6s para fins de classificação. - Isso é código-golfe, e a menor contagem de bytes vence.
Exemplos
#You guys are pretty good at finding edge-cases that break things. Good job!
Input: [2,1,5,6,6], [6,2,6,6,6]
Output: P1 Wins
Input: [2,4,5,6,6], [6,2,6,6,6]
Output: Tie
Input: [1,2,3,4,5], [5,4,3,2,1]
Output: Tie
Input: [1,5,5,3,2], [5,4,1,6,6]
Output: P2 Wins
Input: [3,2,2,2,1], [4,1,3,6,6]
Output: P1 Wins
Input: [1,1,1,1,1], [6,1,1,6,6]
Output: Tie
Input: [1,3,3,4,4], [1,2,2,5,5]
Output: P2 Wins
Input: [1,3,3,5,5], [1,3,3,2,2]
Output: P1 Wins
Input: [1,3,3,3,4], [1,1,3,3,3]
Output: P2 Wins
Input: [2,2,2,6,1], [5,3,3,1,2]
Output: P1 Wins
Input: [5,5,5,1,5], [1,1,1,1,1]
Output: P2 Wins
Input: [1,1,1,1,1], [1,1,5,1,1]
Output: P1 Wins
fonte
IṠ
porM
e exibir uma lista dos vencedores.Ḍ
agora também pode ser redundante, uma vez que as listas são iguais às inteiras.R ,
11596 bytes-6 bytes graças a Giuseppe.
-6 bytes graças a Aaron Hayman.
-2 bytes graças a Arnauld, seguindo o formato de saída em sua resposta JavaScript .
Experimente online!
Retorna
Inf
para P1,NaN
para um empate,-Inf
para P2.Usa a função auxiliar
f
que calcula uma pontuação para cada mão. A pontuação é definida da seguinte forma:d
seja o dígito que mais se repete en
o número de vezes que se repete. A pontuação é6*n+d
se houver pelo menos um ás e0
se não houver ases. Só precisamos encontrar o jogador com a maior pontuação.Ungolfed:
fonte
order(l)[5]
vez demax.col(t(l),"l")
obter uma solução de 96 bytes: Experimente online!JavaScript (ES6),
9790 bytesToma entrada como
(a)(b)
. Retorna+Infinity
para P1,-Infinity
P2 ouNaN
empate.Experimente online!
Comentado
fonte
05AB1E ,
1615 bytes-1 byte graças a JonathanAllan
Experimente online!
Retorna [1, 0] para vitórias P1, [1, 1] para empates, [0, 1] para vitórias P2.
Em vez de usar a ordem lexicográfica em duas tuplas (contagem de dados, valor dos dados), isso calcula a pontuação como 10 ** contagem de dados * valor dos dados. Mãos sem pontuação 1.
fonte
ć+
(agora que eu vejo isso, eu não posso acreditar que não tinha pensado nisso ..)! Isso é muito melhor do que o que eu estava tentando .. Eu tive uma idéia semelhante°
. :) Exceto que eu já tinha 20 bytes e ainda tinha que corrigir um problema no caso de teste[[1,1,1,1,1],] [6,1,1,6,6]]
.. Então, obrigado por me poupar tempo para que eu possa colocar minha tentativa na lixeira ..; pć+
funciona bem . Minha idéia inicial começou comæʒW}ʒ1KË
, mas isso foi morto pelo[1,1,1,1,1]
problema.ε1¢©Āy{γéθ¬sg®+°P}`.S
, mas a[1,1,1,1,1]
ferrou tudo também. A sua resposta inteira tem uma boa sinergia com oWΘ*
,6L¢
,ć+
, e°ƶ
. Especialmente os builtinsWćƶ
realmente mostram sua força aqui.W
não é realmente necessário,6L¢¬Ā*
é o mesmo número de bytes queWΘ*6L¢
.W
sem estourar e depois*
mostrei sua força, mas¬
sem estourar e então*
é basicamente o mesmo. O fato de não aparecer é a força que eu estava implicando, economizando um byte. Mas é de fato principalmentećƶ
.Python 2 ,
858180 bytesExperimente online!
Retorna
1
para P1,0
empate e-1
P2.-1 byte, graças ao squid
fonte
1
ein
pode irPerl 6 ,
6049 bytesExperimente online!
Retornos
More
,Same
,Less
paraP1 Wins
,Tie
,P2 Wins
.Explicação
fonte
Consulta T-SQL, 148 bytes
Usando variável de tabela como entrada
Experimente online
fonte
Geléia , 21 bytes
esmagado antes mesmo de eu postá-lo por Nick Kennedy :)
Um link monádico que aceita uma lista de jogadores que gera uma lista de vencedores (indexados 1).
Então P1 é
[1]
, P2 é[2]
e um empate é[1,2]
.Experimente online!
fonte
PowerShell ,
112126123121 bytesToma entrada como
(a)(b)
. Retorna-1
para vitória P1,1
P2 ou0
empate.Experimente online!
Caso de teste
@( @(1,1,5,1,1), @(1,1,1,1,1), 1)
adicionado.Desenrolado:
fonte
Wolfram Language (Mathematica) ,
787574 bytes-1 byte por Greg Martin
Experimente online!
Produz -1 quando o jogador 1 vence, 1 quando o jogador 2 vence e 0 para um empate.
fonte
FreeQ[#,1]
por#~FreeQ~1
.Java 8,
244240236215199 bytes-4 bytes graças a alguém .
-21 bytes graças a @Neil .
-16 bytes graças a @ceilingcat .
Retorna
1
se P1 vencer;-1
se P2 vencer;0
se é um empate.Experimente online.
Explicação:
fonte
...*(c[p][1]>0?1:0)
porc[p][1]>0?...:0
. Não posso postar um link TIO, pois é muito longo e não quero encurtá-lo. A versão não-gasta tem parênteses desequilibrados em algum lugar por aí.c[p][1]>0?
verificação mais tarde como correção de bugs, mas aparentemente sem pensar muito. Obrigado pelo -4. :)*(i<2?6:i)
? Você está apenas duplicando o esforço parai=6
ei=1
. Isso pode ser justo*i
(e pare de repetir quando chegar a 2).9
pode haver qualquer número mágico entre5
e sobre32
, certo? Se você usar8
, em vez de(int)Math.pow(8,(...)*i)
você pode usari<<3*(...)
.a->b->{int c[][]=new int[2][7],m[]=new int[2],s,p,i=5;for(;i-->0;c[1][b[i]]++)c[0][a[i]]++;for(i=7;i-->2;)for(p=2;p-->0;m[p]=s>m[p]?s:m[p])s=c[p][1]>0?i+9*(c[p][i]+(i>1?c[p][1]:0)):0;return Long.compare(m[0],m[1]);}
que parece passar todos os seus casos de teste ...Gelatina , 27 bytes
Experimente online!
1 para P1, -1 para P2, 0 para empate
Explicação
fonte
Marreta 0.4 , 27 bytes
Descomprime nesta função da Wolfram Language:
que acaba sendo exatamente o mesmo que minha resposta do Mathematica .
fonte
Carvão ,
4845 bytesExperimente online! Link é a versão detalhada do código. Recebe entrada como uma matriz de matrizes e saídas
-1
se o jogador 1 vencer,0
por empate e1
se o jogador 2 vencer. Explicação:Substitua cada mão pela contagem de quantas vezes os valores
6..1
aparecem na mão. A lista é revertida porque a) facilita encontrar o valor mais alto com a contagem mais alta eb) facilita a remoção da contagem de1
s. A contagem de1
s é duplicada porque precisa ser removida duas vezes, uma vez para verificar se é diferente de zero e uma vez para adicioná-lo às outras contagens.Adicione a contagem de
1
s às contagens de6..2
, mas configure todas as contagens para zero se a contagem de1
s for zero.Para cada mão, encontre a contagem mais alta e o valor mais alto com essa contagem. (Na verdade, encontramos valor menos,
6
pois é mais golfista.)Determine qual mão ganhou subtraindo as posições das mãos vencedoras e perdedoras. (Se as mãos estão empatadas, a primeira mão ganha e perde, e o resultado é
0
o desejado.)fonte
C (gcc) / 32 bits, 117 bytes
Experimente online!
Toma duas matrizes inteiras terminadas em zero. Retornos
1
,0
,-1
paraP1 Wins
,P2 Wins
,Tie
.fonte
J ,
4744 bytesExperimente online!
Inspirado na ideia de Nick Kennedy.
destroçado
fonte
Perl 5
-MList::Util=max -pl
, 80 bytesExperimente online!
Entrada:
Cada jogador em uma linha separada, sem espaços
Saída:
1
A linha um vence0
Gravata-1
Linha dois vitóriasfonte