Há um minigame no Super Mario 3D World conhecido como Lucky House . Consiste em uma máquina caça-níqueis com 4 blocos.
Cada bloco pode ser um dos 5 ícones diferentes (Flor, Folha, Sino, Cereja ou Bumerangue) e o objetivo do jogador é obter o maior número possível de ícones idênticos ( veja um vídeo ).
O jogador é recompensado com moedas, que por sua vez podem ser convertidas em vidas extras. Sua tarefa é calcular o número de vidas extras ganhas.
Dependendo do número de ícones correspondentes, a quantidade de moedas recompensadas é a seguinte:
- Sem correspondências - 10 moedas
- Um par - 100 moedas
- Dois pares - 200 moedas
- Três-de-um-tipo - 300 moedas
- Four-of-a-kind - 777 moedas
Você ganha uma vida extra (1UP) a cada 100 moedas . Portanto, você ganha exatamente 1UP com um par , 2UP com dois pares e 3UP com 3 tipos . No entanto, o número de vidas ganhadas sem combinações ou 4 do tipo depende do seu estoque inicial de moedas.
Fonte: Super Mario Wiki
Entrada
Você recebe o estoque inicial de moedas e uma lista de quatro valores representam os ícones finais na máquina caça-níqueis.
Saída
O número de vidas extras ganhas: , , , , ou .
Regras
- Você pode pegar os ícones em qualquer formato razoável: por exemplo, como uma lista, como uma string ou como 4 parâmetros distintos.
- Cada ícone pode ser representado por um número inteiro de um dígito ou um único caractere . Especifique o conjunto de ícones usados na sua resposta. (Mas você não precisa explicar como eles são mapeados para Flor, Folha, Sino, etc., porque isso não importa.)
- Você não tem permissão para remapear os valores de saída.
- Este é o " código-golfe ".
Casos de teste
Nos exemplos a seguir, usamos uma lista de números inteiros em para representar os ícones.
coins icons output explanation
-------------------------------------------------------------------------
0 [1,4,2,5] 0 no matches -> 0 + 10 = 10 coins -> nothing
95 [3,1,2,4] 1 no matches -> 95 + 10 = 105 coins -> 1UP
25 [2,3,4,3] 1 one pair -> 25 + 100 = 125 coins -> 1UP
25 [4,5,5,4] 2 two pairs -> 25 + 200 = 225 coins -> 2UP
0 [2,5,2,2] 3 3-of-a-kind -> 0 + 300 = 300 coins -> 3UP
22 [1,1,1,1] 7 4-of-a-kind -> 22 + 777 = 799 coins -> 7UP
23 [3,3,3,3] 8 4-of-a-kind -> 23 + 777 = 800 coins -> 8UP
99 [3,3,3,3] 8 4-of-a-kind -> 99 + 777 = 876 coins -> 8UP
fonte
Respostas:
x86-16 Assembly,
56.41.39 bytesBinário:
Desmontado:
Insira a contagem inicial de moedas
DX
,SI
apontando para o início dos bytes de "ícones" (que podem ser'1'
-'5'
ou qualquer valor de byte). Emita o número de 1UPs emBX
.Explicação:
A entrada de quatro bytes é iterada e comparada com os bytes restantes à direita, contando o número de correspondências. As pontuações para cada tipo de partida são concedidas e somadas ao total. Como um quádruplo é também três e um par, o valor de cada tipo de pontuação pode ser decomposto da seguinte maneira:
Exemplos:
[2, 2, 2, 2]
(quatro) = 7 1UP's + 77 moedas[2, 5, 2, 2]
(três) = 3 1UP's[4, 5, 5, 4]
(dois pares) = 2 1UP's[2, 3, 4, 3]
(um par) = 1 1UPSe o número de 1UPs ganhos for 0 no final, 10 moedas serão concedidas. Se o total de moedas for maior que 100, um 1UP adicional será concedido.
Aqui está um programa de teste para o PC DOS que inclui rotinas extras para lidar com o valor inteiro de E / S:
Faça o download e teste o LUCKY.COM for DOS.
fonte
Geléia ,
23 22 2019 bytes-1 graças a Erik the Outgolfer (use
³
no lugar deȷ2
) também usado na versão mais recente duas vezes-1 graças a Grimy (subtrai um antes da soma em vez de subtrair quatro depois)
Talvez imbatível?
Um link diádico que aceita uma lista e um número inteiro que gera um número inteiro.
Experimente online! Ou veja uma suíte de testes .
Quão?
Como a avaliação da mão funciona para cada tipo de mão:
Alternativa 20:
ĠẈị“¡ıKĖ‘S×4+E{»⁵+:³
fonte
ȷ2
com³
assumindo o programa a função está em não leva argumentos de linha de comando , apesar de que não é o que eu acho que você quer dizer com "superável". : PċⱮ`’SṚḌH׳«777»⁵+:³
Zsh ,
117 ...60 bytes-13 usando um critério diferente para diferenciação, -9 combinando casos, -28 alterando a
case
instrução para um ternário aritmético aninhado, -4 graças a @ Jonathan JonathanAllan, -1 otimizando os ternários, -2 porque usei acidentalmenteecho
ao adicionar Otimização de Jonathan.Adota contagem de moedas com stdin e bloqueia entradas como argumentos. Os argumentos podem ser números, caracteres ou até seqüências de caracteres:
./foo.zsh flower leaf flower boomerang
Experimente online:
117 104 95 67 63 6260Aqui está a mágica da resposta de 67 bytes:
fonte
C # (compilador interativo do Visual C #) ,
12310690 bytesUma porta da minha resposta python, derivada da resposta da @ Dat.
Experimente online!
fonte
Python 2 , 63 bytes
Experimente online!
Eu tive a mesma idéia que GammaFunction para usar
sum(map(l.count,l))
como uma "impressão digital". Mas, em vez de usar uma fórmula aritmética no resultado, eu uso uma tabela de pesquisa, primeiro pressionando o valor de 0 a 4 usando uma cadeia de mods%14%5
. Dividir todos os valores dos pontos por 100 salvou alguns bytes.fonte
Python 3 , 68 bytes
Experimente online!
Uma porta Python da minha porta C da minha porta Bash da minha resposta Zsh voltou a jogar com a ajuda da página "Dicas para jogar golfe em Python". Última porta, eu juro ... Estou ficando sem idiomas em que estou confortável jogando golfe. Fiquei curioso em saber como essa estratégia se comparava às outras respostas do Python. Novamente, provavelmente há uma maneira de superar isso.
Este foi surpreendentemente bom, então eu adicionei uma tabela abaixo resumindo o que está acontecendo para que outros possam portar ou melhorar isso.
Python 3.8 (pré-lançamento) , 63 bytes
Louvado seja a
:=
morsa!Experimente online!
fonte
Perl 6 ,
4844 bytesExperimente online!
Função ao curry
f(icons)(coins)
.fonte
Python 2 ,
969189 bytes-2 bytes graças a @Kevin Cruijssen
Experimente online!
fonte
(100*sum((a==b,a==c,a==d,b==c,b==d,c==d))
por -2 bytes.PHP,
153127 bytesO @ 640KB fez algumas alterações realmente inteligentes para encurtar ainda mais:
Experimente online!
fonte
Python 3 ,
126111108103 bytesExperimente online!
fonte
Python 3.8 (pré-lançamento) , 78 bytes
A resposta de Dat, mas jogou mais.
Experimente online!
fonte
Perl 5
-pF
, 46 bytesExperimente online!
A primeira entrada é o resultado da rotação, usando 5 letras ASCII exclusivas, exceto
q
(sugiroabcde
). A segunda linha de entrada é a contagem atual de moedas.Quão?
Todos os números envolvidos são divididos por 100, portanto, o programa conta o número de vidas (incluindo as parciais) atualmente conquistadas. O truque para esta solução está no
map
. Se as entradas possíveis sãoabcde
, em seguida, cada um$a
,$b
,$c
,$d
, e$e
realizar a contagem do número de vezes que este personagem tinha sido visto anteriormente. Isso é adicionado a um total em execução ($q
) toda vez que um personagem é visto. O total acumulado é aumentado se houver quatro do mesmo tipo (efetivamente um bônus de 177 moedas).fonte
JavaScript (Node.js) , 64 bytes
Experimente online!
Imaginei que deveria haver pelo menos uma resposta JavaScript para um desafio de Arnauld!
O conceito aqui é principalmente usar o número de elementos distintos como uma chave de pesquisa.
Para distinguir entre 2 pares e 3 de um tipo, a matriz de entrada é classificada e os 2 elementos do meio são comparados.
fonte
PHP ,
8984 bytesExperimente online!
Entrada da linha de comando, saída para
STDOUT
:fonte
Stax , 23 bytes
Execute e depure
Este programa usa qualquer conjunto arbitrário de 5 números inteiros para ícones.
Procedimento:
Aqui está a saída de um visualizador de estado de pilha experimental em que estive trabalhando para a próxima versão do stax. Esta é uma versão descompactada do mesmo código com o estado da pilha adicionado aos comentários.
Execute este
fonte
Retina 0.8.2 , 72 bytes
Experimente online!O link inclui casos de teste. Recebe a entrada como 4 dígitos não ASCII imprimíveis, seguidos pelo número inicial de moedas em dígitos. Explicação:
Classifique os não dígitos, para que símbolos idênticos sejam agrupados.
Resultados quatro-de-um-tipo 777.
Três pontuações de 300.
Cada par tem 100 pontos, então dois pares terão 200 pontos.
Se não houve jogos, você ainda ganha!
Converta os valores em unário e pegue a soma.
Inteiro divida a soma por 100 e converta novamente em decimal.
fonte
Retina , 56 bytes
Experimente online! O link inclui casos de teste. Recebe a entrada como 4 dígitos não ASCII imprimíveis, seguidos pelo número inicial de moedas em dígitos. Explicação:
Resultados quatro-de-um-tipo 777.
Cada par tem 100 pontos. O
w
leva em consideração todos os pares, para que possam ser intercalados, e os três do mesmo tipo podem ser decompostos em três pares, marcando automaticamente 300.Se não houve jogos, você ainda ganha!
Converta os valores em unário e pegue a soma.
Inteiro divida a soma por 100 e converta novamente em decimal.
fonte
APL + WIN, 42 bytes
Solicita ícones seguidos por estoque de moedas.
Experimente online! Cortesia de Dyalog Classic
fonte
Bash ,
76 75 7170 bytes-4 graças a @ JonathanAllan, -1 reorganizando o ternário.
Porta Bash da minha resposta Zsh.
Experimente online! Experimente online! Experimente online!Experimente online!fonte
C (gcc) ,
92 84 82 81 7978 bytes-1 pela
x+=(..!=..)
-5 por retornando através de atribuição , -4 graças a Jonathan Allan, substituindo!=
com<
, o que poupa bytes noutro local, -1 rearranjando a ternário.De @ceilingcat: -2 declarando
i
ex
fora da função, -1 definindox=i
e decrementandox
.Outra porta da minha resposta Zsh. Não estou familiarizado com o golfe C, provavelmente há outro truque em algum lugar aqui para reduzi-lo ainda mais.
92 84 82 81 79Experimente online!fonte
x+=a[i/4]<a[i%4];c=x?(x-6?6-x:c>89):7+(c>22);
05AB1E ,
201918 bytesPorto da resposta de @JonathanAllan Jelly , por isso não deixe de votar nele !!
-2 bytes graças a @Grimy .
Toma a lista de ícones como primeira entrada (sendo
[1,2,3,4,5]
) e a quantidade de moedas como segunda entrada.Experimente online ou verifique todos os casos de teste . (O conjunto de testes usa em
T‚à+
vez deTMI+
, que é uma alternativa igual a bytes.)Explicação:
fonte
777‚ßTMI
pode ser777T)Åm
.0.90
é90
moedas, nesse caso? Como a entrada de moeda está garantida no intervalo[0,99]
, você pode perguntar ao OP se ele permitiria ou não.Scala , 88 bytes
Experimente online!
fonte
Carvão , 30 bytes
Experimente online! Link é a versão detalhada do código. Recebe entrada como o número de moedas e uma matriz de quaisquer valores comparáveis do Python como ícones. Explicação:
Rouba descaradamente o truque do @ GammaFunction de calcular metade da soma das contagens.
Subtraia
2
da soma, resultando assim nos valores0, 1, 2, 3
apropriadamente, mas para 4 do mesmo tipo, divida o2
por9
primeiro, resultando em7.777...
.Mas se o resultado for 0, não houve correspondências, então substitua-o por
0.1
. (Usar um literal não me ajuda aqui porque eu precisaria de um separador.)Divida as moedas iniciais por 100 e adicione os ganhos, depois coloque o resultado no chão e jogue na sequência para obter resultados implícitos.
fonte
Pitão , 32 bytes
Experimente online!
Inspirado na solução da GammaFunction. Toma entrada como
[coins, [icons]]
.fonte
PowerShell , 94 bytes
Experimente online!
Desenrolado:
fonte
PowerShell ,
114107 bytes-7 bytes graças ao mazzy
Experimente online!
Uma grande operação ternária com sabor do PowerShell, criada ao agrupar e classificar as contagens da lista de entradas. A classificação é necessária porque aproveitamos o fato de que a lista agrupada fica mais curta quanto mais repetições existirem. De fato, aqui estão todos os valores possíveis:
Truncar para um int ainda é caro.
Desenrolado:
fonte
0
? Experimente online!Wolfram Language (Mathematica) , 54 bytes
Experimente online!
fonte
R,
102,91, 81 bytesConseguiu eliminar 11 bytes (e corrigir um erro) graças a @Giuseppe. Gerenciei mais 10 inspirados na ideia de @ Giuseppe / 10.
Ungolfed
Experimente online!
fonte
as.factor()
ef=
para obtê-lo para 88 bytes.table
- não estou tão familiarizado com isso quanto deveria - comeceisummary(as.factor(v))
. Eu prefiro deixar of=
. Não acho que o código esteja completo sem ele, mas percebo que é uma escolha de estilo.f=
; sinta-se livre para colocar um link TIO em sua resposta :-)sum(s==2)
ajuda muito. Mas era necessário reescrever tudo o mais, e o / 10 não economizava mais espaço (eu não acho)Montagem 8051 (compila para 158 bytes)
Esta é uma abordagem ingênua da VEEEEEEEEEERRY, ainda não foi testada e não-destruída, mas estou bastante confiante de que funciona. As coisas a considerar são:
1) o 8051 é uma máquina acumuladora, ou seja. ele precisa de instruções mov que outras arquiteturas podem não precisar.
2) o 8051 é uma máquina de 8 bits; portanto, devem ser feitos alguns truques para os números> 255, o que gera mais código e, portanto, uma desvantagem da plataforma em relação aos outros.
fonte