Hay un minijuego en Super Mario 3D World conocido como Lucky House . Consiste en una máquina tragamonedas con 4 bloques.
Cada bloque puede ser uno de los 5 iconos diferentes (Flor, Hoja, Campana, Cereza o Boomerang) y el objetivo del jugador es obtener la mayor cantidad posible de iconos idénticos ( ver un video ).
El jugador es recompensado con monedas, que a su vez pueden convertirse en vidas extra. Su tarea es calcular la cantidad de vidas adicionales ganadas.
Dependiendo de la cantidad de iconos que coincidan, la cantidad de monedas recompensadas es la siguiente:
- No coincide - 10 monedas
- Un par - 100 monedas
- Dos pares - 200 monedas
- Tres en su tipo: 300 monedas
- Cuatro de su tipo: 777 monedas
Ganas una vida extra (1UP) cada 100 monedas . Por lo tanto, tiene la garantía de ganar exactamente 1UP con un par , 2UP con dos pares y 3UP con 3 de su tipo . Sin embargo, el número de vidas ganadas sin partidos o 4 de su tipo depende de su stock inicial de monedas.
Fuente: Super Mario Wiki
Entrada
Se le da el stock inicial de monedas y una lista de cuatro valores representan los íconos finales en la máquina tragamonedas.
Salida
El número de vidas extra ganadas: , , , , u .
Reglas
- Puede tomar los iconos en cualquier formato razonable: por ejemplo, como una lista, como una cadena o como 4 parámetros distintos.
- Cada icono puede estar representado por un entero de un solo dígito o por un solo carácter . Por favor, especifique el conjunto de iconos utilizados en su respuesta. (Pero no tiene que explicar cómo se asignan a Flor, Hoja, Campana, etc., porque no importa en absoluto).
- No está permitido reasignar los valores de salida.
- Este es 🎰 code-golf 🎰.
Casos de prueba
En los siguientes ejemplos, usamos una lista de enteros en para representar los iconos.
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
fuente
Respuestas:
Asamblea x86-16,
564139 bytesBinario:
Desmontado:
Ingrese el recuento inicial de monedas
DX
,SI
señalando el inicio de bytes de "íconos" (que pueden ser'1'
-'5'
, o cualquier valor de byte). Salida del número de 1UP's enBX
.Explicación:
La entrada de cuatro bytes se itera y se compara con los bytes restantes a la derecha, contando el número de coincidencias. Los puntajes para cada tipo de partido se otorgan y suman el total. Dado que un cuatro de un tipo es también tres de un tipo y también un par, el valor de cada tipo de puntuación se puede descomponer de la siguiente manera:
Ejemplos:
[2, 2, 2, 2]
(cuatro en una especie) = 7 1UP's + 77 monedas[2, 5, 2, 2]
(trío) = 3 1UP's[4, 5, 5, 4]
(dos pares) = 2 1UP's[2, 3, 4, 3]
(un par) = 1 1UPSi el número de 1UP ganados es 0 al final, se otorgan 10 monedas. Si el total de monedas es superior a 100, se otorga 1UP adicional.
Aquí hay un programa de prueba para PC DOS que incluye rutinas adicionales para manejar el valor entero de E / S:
Descargue y pruebe LUCKY.COM para DOS.
fuente
Jalea ,
23 22 2019 bytes-1 gracias a Erik the Outgolfer (uso
³
en lugar deȷ2
) también utilizado en la versión más reciente dos veces-1 gracias a Grimy (reste uno antes de sumar en lugar de restar cuatro después)
Tal vez vencible?
Un enlace diádico que acepta una lista y un número entero que produce un número entero.
Pruébalo en línea! O ver un conjunto de pruebas .
¿Cómo?
Cómo funciona la evaluación manual para cada tipo de mano:
Alternativa 20:
ĠẈị“¡ıKĖ‘S×4+E{»⁵+:³
fuente
ȷ2
con³
suponiendo que el programa en el que se encuentra la función no toma argumentos de línea de comandos , aunque eso no es lo que creo que quiera decir con "superable". : PċⱮ`’SṚḌH׳«777»⁵+:³
Zsh ,
117 ...60 bytes-13 usando un criterio diferente para la diferenciación, -9 combinando casos, -28 cambiando la
case
declaración a un ternario aritmético anidado, -4 gracias a @JonathanAllan, -1 optimizando los ternarios, -2 porque accidentalmente uséecho
al agregar La optimización de Jonathan.Toma el recuento de monedas en stdin y bloquea las entradas como argumentos. Los argumentos pueden ser números, caracteres o incluso cadenas:
./foo.zsh flower leaf flower boomerang
Pruébelo en línea:
117 104 95 67 63 6260Aquí está la magia de la respuesta de 67 bytes:
fuente
C # (Visual C # interactivo Compilador) ,
12310690 bytesUn puerto de mi respuesta de Python, que se deriva de la respuesta de @ Dat.
Pruébalo en línea!
fuente
Python 2 , 63 bytes
Pruébalo en línea!
Tuve la misma idea que GammaFunction para usar
sum(map(l.count,l))
como "huella digital". Pero, en lugar de usar una fórmula aritmética en el resultado, utilizo una tabla de búsqueda, primero reduciendo el valor a 0 a 4 usando una cadena de modulación%14%5
. Al dividir todos los valores de puntos por 100 se guardan unos pocos bytes.fuente
Python 3 , 68 bytes
Pruébalo en línea!
Un puerto Python de mi puerto C de mi puerto Bash de mi respuesta Zsh, re-golf con la ayuda de la página "Consejos para jugar golf en Python". Último puerto, lo juro ... Me estoy quedando sin idiomas en los que me siento cómodo jugando al golf. Tenía curiosidad por cómo esta estrategia en comparación con las otras respuestas Python. De nuevo, probablemente haya alguna forma de superar esto.
Este resultó sorprendentemente bueno, así que agregué una tabla a continuación que resume lo que está sucediendo para que otros puedan portar o mejorar esto.
Python 3.8 (prelanzamiento) , 63 bytes
¡Alabado sea la
:=
morsa!Pruébalo en línea!
fuente
Perl 6 ,
4844 bytesPruébalo en línea!
Función de curry
f(icons)(coins)
.fuente
Python 2 ,
969189 bytes-2 bytes gracias a @Kevin Cruijssen
Pruébalo en línea!
fuente
(100*sum((a==b,a==c,a==d,b==c,b==d,c==d))
para -2 bytes.PHP,
153127bytes@ 640KB hizo algunos cambios realmente inteligentes para acortarlo aún más:
Pruébalo en línea!
fuente
Pitón 3 ,
126111108103 bytesPruébalo en línea!
fuente
Python 3.8 (prelanzamiento) , 78 bytes
La respuesta de Dat, pero jugó más.
Pruébalo en línea!
fuente
Perl 5
-pF
, 46 bytesPruébalo en línea!
Primero de la entrada es el resultado del giro, usando 5 letras ASCII únicas, excepto
q
(sugieroabcde
). La segunda línea de entrada es el conteo actual de monedas.¿Cómo?
Todos los números involucrados se dividen entre 100, por lo que el programa cuenta el número de vidas (incluidas las parciales) actualmente ganadas. El truco para esta solución está en el
map
. Si las entradas son posiblesabcde
, entonces cada uno de$a
,$b
,$c
,$d
, y$e
sostener la cuenta del número de veces que este personaje había sido visto. Eso se agrega a un total acumulado ($q
) cada vez que se ve un personaje. El total acumulado se incrementa si hay un cuatro de un tipo (efectivamente un bono de 177 monedas).fuente
JavaScript (Node.js) , 64 bytes
Pruébalo en línea!
¡Pensé que tenía que haber al menos una respuesta de JavaScript para un desafío de Arnauld!
El concepto aquí es principalmente utilizar el número de elementos distintos como clave de búsqueda.
Para distinguir entre 2 pares y 3 de un tipo, se ordena la matriz de entrada y se comparan los 2 elementos del medio.
fuente
PHP ,
8984 bytesPruébalo en línea!
Entrada desde la línea de comando, salida a
STDOUT
:fuente
Stax , 23 bytes
Ejecutar y depurarlo
Este programa utiliza cualquier conjunto arbitrario de 5 enteros para iconos.
Procedimiento:
Aquí está el resultado de un visualizador de estado de pila experimental en el que he estado trabajando para la próxima versión de Stax. Esta es una versión desempaquetada del mismo código con el estado de pila agregado a los comentarios.
Ejecute este
fuente
Retina 0.8.2 , 72 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Toma la entrada como 4 no dígitos ASCII imprimibles seguidos del número inicial de monedas en dígitos. Explicación:
Ordene los no dígitos para que los símbolos idénticos se agrupen.
Puntajes de cuatro en 777.
Tres puntajes de 300.
Cada par puntúa 100, por lo que dos pares puntuarán 200.
Si no hubo partidos, ¡todavía ganas!
Convierta los valores a unario y tome la suma.
Entero divide la suma por 100 y convierte de nuevo a decimal.
fuente
Retina , 56 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Toma la entrada como 4 no dígitos ASCII imprimibles seguidos del número inicial de monedas en dígitos. Explicación:
Puntajes de cuatro en 777.
Cada par tiene un puntaje de 100.
w
Toma en consideración todos los pares, para que puedan ser intercalados, además de tres de un tipo puede descomponerse en tres pares, por lo tanto, puntuar automáticamente 300.Si no hubo partidos, ¡todavía ganas!
Convierta los valores a unario y tome la suma.
Entero divide la suma por 100 y convierte de nuevo a decimal.
fuente
APL + WIN, 42 bytes
Solicita iconos seguidos de stock de monedas.
Pruébalo en línea! Cortesía de Dyalog Classic.
fuente
Bash ,
76 75 7170 bytes-4 gracias a @JonathanAllan, -1 al reorganizar el ternario.
Bash puerto de mi respuesta Zsh.
Pruébalo en línea! Pruébalo en línea! Pruébalo en línea!Pruébalo en línea!fuente
C (gcc) ,
92 84 82 81 7978 bytes-1 por
x+=(..!=..)
-5 al regresar mediante asignación , -4 gracias a Jonathan Allan al reemplazar!=
con<
, lo que ahorra bytes en otro lugar, -1 al reorganizar el ternario.Desde @ceilingcat: -2 al declarar
i
yx
fuera de la función, -1 estableciendox=i
y decrementando en sux
lugar.Otro puerto de mi respuesta Zsh. No estoy familiarizado con el golf C, probablemente haya otro truco en algún lugar para reducirlo aún más.
92 84 82 81 79Pruébelo en línea!fuente
x+=a[i/4]<a[i%4];c=x?(x-6?6-x:c>89):7+(c>22);
05AB1E ,
201918 bytesPuerto de la respuesta Jelly de @JonathanAllan , ¡así que asegúrate de votarlo!
-2 bytes gracias a @Grimy .
Toma la lista de iconos como primera entrada (ser
[1,2,3,4,5]
) y la cantidad de monedas como segunda entrada.Pruébelo en línea o verifique todos los casos de prueba . (El conjunto de pruebas usa en
T‚à+
lugar deTMI+
, que es una alternativa de bytes iguales).Explicación:
fuente
777‚ßTMI
puede ser777T)Åm
.0.90
son las90
monedas en ese caso? Como se garantiza que la entrada de monedas estará en el rango[0,99]
, puede preguntarle a OP si lo permitiría o no.Scala , 88 bytes
Pruébalo en línea!
fuente
Carbón , 30 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Toma datos como el número de monedas y una matriz de cualquier valor comparable de Python como iconos. Explicación:
Robar descaradamente el truco de @ GammaFunction de calcular la mitad de la suma de los recuentos.
Restar
2
de la suma, resultando así en los valores0, 1, 2, 3
apropiadamente, pero para 4-de-a-tipo, se divide el2
por9
primera, dando como resultado7.777...
.Pero si el resultado es 0, entonces no hubo coincidencias, así que reemplácelo con
0.1
. (Usar un literal no me ayuda aquí porque necesitaría un separador).Divida las monedas iniciales entre 100 y agregue las ganancias, luego ponga el resultado en el suelo y eche a cadena para obtener resultados implícitos.
fuente
Pyth , 32 bytes
Pruébalo en línea!
Inspirado en la solución de GammaFunction. Toma entrada como
[coins, [icons]]
.fuente
PowerShell , 94 bytes
Pruébalo en línea!
Desenrollado:
fuente
PowerShell ,
114bytes-7 bytes gracias a mazzy
Pruébalo en línea!
Una gran operación ternaria con sabor a PowerShell basada en la agrupación y clasificación de los recuentos de la lista de entrada. El tipo es necesario porque aprovechamos el hecho de que la lista agrupada se acorta cuanto más repeticiones hay. De hecho, aquí están todos los valores posibles:
Truncar a un int todavía es costoso.
Desenrollado:
fuente
0
? Pruébalo en línea!Wolfram Language (Mathematica) , 54 bytes
Pruébalo en línea!
fuente
R,
102,91, 81 bytesLogró soltar 11 bytes (y corregir un error) gracias a @Giuseppe. Manejé otros 10 inspirados por la idea de @ Giuseppe / 10.
Sin golf
Pruébalo en línea!
fuente
as.factor()
y elf=
para obtener 88 bytes.table
: no estoy tan familiarizado con él como debería estar, comencé consummary(as.factor(v))
. Prefiero dejar elf=
. No creo que el código esté completo sin él, pero me doy cuenta de que es una opción de estilo.f=
; siéntase libre de poner un enlace TIO en su respuesta :-)sum(s==2)
ayuda mucho. Pero requirió reescribir todo lo demás, y el / 10 ya no ahorró espacio (no creo)Conjunto 8051 (compila a 158 bytes)
Este es un enfoque ingenuo VEEEEEEEEEERRY, esto aún no se ha probado y no se ha defendido, pero estoy bastante seguro de que funciona. Las cosas a considerar son:
1) el 8051 es una máquina acumuladora, es decir. necesita instrucciones mov que otras arquitecturas pueden no necesitar en absoluto.
2) el 8051 es una máquina de 8 bits, por lo que debe hacerse algún truco para los números> 255, lo que genera más código y es una desventaja de la plataforma sobre los demás.
fuente