Il y a un mini-jeu dans Super Mario 3D World connu sous le nom de Lucky House . Il se compose d'une machine à sous à 4 blocs.
Chaque bloc peut être l'une des 5 icônes différentes (Fleur, Feuille, Cloche, Cerise ou Boomerang) et l'objectif du joueur est d'obtenir autant d'icônes identiques que possible ( voir une vidéo ).
Le joueur est récompensé par des pièces, qui à leur tour peuvent être converties en vies supplémentaires. Votre tâche consiste à calculer le nombre de vies supplémentaires gagnées.
Selon le nombre d'icônes qui correspondent, le nombre de pièces récompensées est le suivant:
- Pas de correspondance - 10 pièces
- Une paire - 100 pièces
- Deux paires - 200 pièces
- Trois pièces uniques - 300 pièces
- Quatre pièces uniques - 777 pièces
Vous gagnez une vie supplémentaire (1UP) toutes les 100 pièces . Par conséquent, vous êtes assuré de gagner exactement 1UP avec une paire , 2UP avec deux paires et 3UP avec 3-of-a-kind . Cependant, le nombre de vies gagnées sans match ou 4-of-a-kind dépend de votre stock de pièces initial.
Source: Super Mario Wiki
Contribution
On vous donne le stock initial de pièces et une liste de quatre valeurs représentant les icônes finales sur la machine à sous.
Sortie
Le nombre de vies supplémentaires gagnées: , , , , ou .
Règles
- Vous pouvez prendre les icônes dans n'importe quel format raisonnable: par exemple sous forme de liste, de chaîne ou de 4 paramètres distincts.
- Chaque icône peut être représentée soit par un entier à un chiffre, soit par un seul caractère . Veuillez spécifier l'ensemble d'icônes utilisé dans votre réponse. (Mais vous n'avez pas à expliquer comment ils sont associés à Flower, Leaf, Bell, etc., car cela n'a pas d'importance du tout.)
- Vous n'êtes pas autorisé à remapper les valeurs de sortie.
- C'est 🎰 code-golf 🎰.
Cas de test
Dans les exemples suivants, nous utilisons une liste d'entiers dans pour représenter les icônes.
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
la source
Réponses:
Assemblage x86-16,
564139 octetsBinaire:
Non assemblé:
Entrez le décompte des pièces de départ
DX
, enSI
pointant vers le début des octets "icône" (qui peuvent être'1'
-'5'
, ou n'importe quelle valeur d'octet). Sortie le nombre de 1UP dansBX
.Explication:
L'entrée de quatre octets est itérée et comparée aux octets restants à droite, en comptant le nombre de correspondances. Les scores pour chaque type de match sont attribués et totalisent. Puisqu'un quatre-de-un-type est également trois-de-un-type et aussi une paire, la valeur de chaque type de score peut être décomposée comme suit:
Exemples:
[2, 2, 2, 2]
(quatre pièces uniques) = 7 1UP + 77 pièces[2, 5, 2, 2]
(trois en un) = 3 1UP[4, 5, 5, 4]
(deux paires) = 2 1UP[2, 3, 4, 3]
(une paire) = 1 1UPSi le nombre de 1UP gagnés est de 0 à la fin, 10 pièces sont attribuées. Si le nombre total de pièces est supérieur à 100, un 1UP supplémentaire est attribué.
Voici un programme de test pour PC DOS qui comprend des routines supplémentaires pour gérer les E / S de valeur entière:
Téléchargez et testez LUCKY.COM pour DOS.
la source
Gelée ,
23 22 2019 octets-1 grâce à Erik l'Outgolfer (utiliser
³
à la place deȷ2
) également utilisé deux fois dans la version plus récente-1 grâce à Grimy (soustrayez-en un avant de sommer au lieu de soustraire quatre après)
Peut-être battable?
Un lien dyadique acceptant une liste et un entier qui donne un entier.
Essayez-le en ligne! Ou consultez une suite de tests .
Comment?
Fonctionnement de l'évaluation des mains pour chaque type de main:
Alternative 20:
ĠẈị“¡ıKĖ‘S×4+E{»⁵+:³
la source
ȷ2
par³
en supposant que le programme dans lequel se trouve la fonction ne prend pas d'arguments de ligne de commande , bien que ce ne soit pas ce que je pense que vous entendez par "battable". : PċⱮ`’SṚḌH׳«777»⁵+:³
Zsh ,
117 ...60 octets-13 en utilisant un critère différent pour la différenciation, -9 en combinant les cas, -28 en changeant l'
case
instruction en un ternaire arithmétique imbriqué, -4 grâce à @JonathanAllan, -1 en optimisant les ternaires, -2 parce que j'ai accidentellement utiliséecho
lors de l'ajout Optimisation de Jonathan.Prend le nombre de pièces sur stdin et bloque les entrées comme arguments. Les arguments peuvent être des nombres, des caractères ou même des chaînes:
./foo.zsh flower leaf flower boomerang
Essayez en ligne:
117 104 95 67 63 6260Voici la magie de la réponse de 67 octets:
la source
C # (Visual C # Interactive Compiler) ,
12310690 octetsUn port de ma réponse python, qui est dérivé de la réponse de @ Dat.
Essayez-le en ligne!
la source
Python 2 , 63 octets
Essayez-le en ligne!
J'ai eu la même idée que GammaFunction à utiliser
sum(map(l.count,l))
comme "empreinte digitale". Mais, au lieu d'utiliser une formule arithmétique sur le résultat, j'utilise une table de recherche, en écrasant d'abord la valeur de 0 à 4 à l'aide d'une chaîne de mod%14%5
. La division de toutes les valeurs en points par 100 a permis d'économiser quelques octets.la source
Python 3 , 68 octets
Essayez-le en ligne!
Un port Python de mon port C de mon port Bash de ma réponse Zsh, re-joué avec l'aide de la page "Conseils pour jouer au golf en Python". Dernier port, je le jure ... Je suis à court de langues, je suis à l'aise pour jouer au golf. J'étais curieux de voir comment cette stratégie par rapport aux autres réponses Python. Encore une fois, il y a probablement un moyen de battre cela.
Celui-ci s'est révélé étonnamment bon, j'ai donc ajouté un tableau ci-dessous résumant ce qui se passe afin que d'autres puissent porter ou améliorer cela.
Python 3.8 (pré-version) , 63 octets
Louez le
:=
morse!Essayez-le en ligne!
la source
Perl 6 ,
4844 octetsEssayez-le en ligne!
Fonction curry
f(icons)(coins)
.la source
Python 2 ,
969189 octets-2 octets grâce à @Kevin Cruijssen
Essayez-le en ligne!
la source
(100*sum((a==b,a==c,a==d,b==c,b==d,c==d))
de -2 octets.PHP,
153127 octets@ 640KB a fait des changements vraiment intelligents pour le raccourcir encore:
Essayez-le en ligne!
la source
Python 3 ,
126111 111108103 octetsEssayez-le en ligne!
la source
Python 3.8 (pré-version) , 78 octets
La réponse de Dat, mais plus de golf.
Essayez-le en ligne!
la source
Perl 5
-pF
, 46 octetsEssayez-le en ligne!
La première entrée est le résultat de rotation, en utilisant 5 lettres ASCII uniques, sauf
q
(je suggèreabcde
). La deuxième ligne d'entrée est le nombre actuel de pièces.Comment?
Tous les nombres impliqués sont divisés par 100, donc le programme compte le nombre de vies (y compris les vies partielles) actuellement gagnées. L'astuce pour cette solution est dans le
map
. Si les entrées possibles sontabcde
, alors chacun$a
,$b
,$c
,$d
et$e
tenir le compte du nombre de fois que ce personnage avait déjà été vu. Cela s'ajoute à un total cumulé ($q
) à chaque fois qu'un personnage est vu. Le total cumulé est augmenté s'il y en a quatre (en fait un bonus de 177 pièces).la source
JavaScript (Node.js) , 64 octets
Essayez-le en ligne!
Je pensais qu'il devait y avoir au moins une réponse JavaScript à un défi Arnauld!
Le concept ici est principalement d'utiliser le nombre d'éléments distincts comme clé de recherche.
Afin de faire la distinction entre 2 paires et 3 paires, le tableau d'entrée est trié et les 2 éléments du milieu sont comparés.
la source
PHP ,
8984 octetsEssayez-le en ligne!
Entrée depuis la ligne de commande, sortie vers
STDOUT
:la source
Stax , 23 octets
Exécuter et déboguer
Ce programme utilise n'importe quel ensemble arbitraire de 5 entiers pour les icônes.
Procédure:
Voici la sortie d'un visualiseur d'état de pile expérimental sur lequel j'ai travaillé pour la prochaine version de stax. Il s'agit d'une version décompressée du même code avec l'état de la pile ajouté aux commentaires.
Exécutez celui-ci
la source
Retina 0.8.2 , 72 octets
Essayez-le en ligne! Le lien inclut des cas de test. Prend la saisie sous forme de 4 chiffres ASCII imprimables suivis du nombre initial de pièces en chiffres. Explication:
Triez les non-chiffres afin que les symboles identiques soient regroupés.
Quatre en un 777.
Trois pièces uniques 300.
Chaque paire marque 100, donc deux paires marqueront 200.
S'il n'y a pas eu de matchs, vous gagnez quand même!
Convertissez les valeurs en unaire et prenez la somme.
Entier divisez la somme par 100 et reconvertissez en décimal.
la source
Rétine , 56 octets
Essayez-le en ligne! Le lien inclut des cas de test. Prend la saisie sous forme de 4 chiffres ASCII imprimables suivis du nombre initial de pièces en chiffres. Explication:
Quatre en un 777.
Chaque paire obtient un score de 100. Le
w
prend toutes les paires en considération, de sorte qu'elles peuvent être entrelacées, plus trois du genre peuvent être décomposées en trois paires, obtenant ainsi automatiquement 300 points.S'il n'y a pas eu de matchs, vous gagnez quand même!
Convertissez les valeurs en unaire et prenez la somme.
Entier divisez la somme par 100 et reconvertissez en décimal.
la source
APL + WIN, 42 octets
Demande des icônes suivies du stock de pièces.
Essayez-le en ligne! Gracieuseté de Dyalog Classic
la source
Bash ,
76 75 7170 octets-4 merci à @JonathanAllan, -1 en réorganisant le ternaire.
Port bash de ma réponse Zsh.
Essayez-le en ligne! Essayez-le en ligne! Essayez-le en ligne!Essayez-le en ligne!la source
C (gcc) ,
92 84 82 81 7978 octets-1 par
x+=(..!=..)
-5 en revenant par affectation , -4 merci à Jonathan Allan en remplaçant!=
par<
, ce qui économise des octets ailleurs, -1 en réorganisant le ternaire.De @ceilingcat: -2 en déclarant
i
et enx
dehors de la fonction, -1 en définissantx=i
et décrémentant à lax
place.Un autre port de ma réponse Zsh. Je ne suis pas familier avec le golf C, il y a probablement un autre truc quelque part ici pour le réduire davantage.
92 84 82 81 79Essayez-le en ligne!la source
x+=a[i/4]<a[i%4];c=x?(x-6?6-x:c>89):7+(c>22);
05AB1E ,
201918 octetsPort de la réponse Jelly de @JonathanAllan , alors assurez-vous de lui donner un vote positif !!
-2 octets grâce à @Grimy .
Prend la liste des icônes comme première entrée (étant
[1,2,3,4,5]
) et la quantité de pièces comme deuxième entrée.Essayez-le en ligne ou vérifiez tous les cas de test . (La suite de tests utilise
T‚à+
au lieu deTMI+
, qui est une alternative à octets égaux.)Explication:
la source
777‚ßTMI
peut être777T)Åm
.0.90
sont- elles donc90
dans ce cas? Étant donné que l'entrée de pièces est garantie dans la plage[0,99]
, vous pouvez demander à OP s'il l'autorisera ou non.Scala , 88 octets
Essayez-le en ligne!
la source
Fusain , 30 octets
Essayez-le en ligne!Le lien est vers la version détaillée du code. Prend l'entrée comme le nombre de pièces et un tableau de toutes les valeurs comparables Python sous forme d'icônes. Explication:
Voler sans vergogne l'astuce de @ GammaFunction de calculer la moitié de la somme des comptes.
Soustrayez
2
de la somme, ce qui donne les valeurs0, 1, 2, 3
appropriées, mais pour 4-of-a-kind, divisez le2
par d'9
abord, ce qui donne7.777...
.Mais si le résultat est 0, il n'y a pas de correspondance, remplacez-le par
0.1
place. (L'utilisation d'un littéral ne m'aide pas ici car j'aurais besoin d'un séparateur.)Divisez les pièces initiales par 100 et ajoutez les gains, puis fixez le résultat et convertissez-le en chaîne pour une sortie implicite.
la source
Pyth , 32 octets
Essayez-le en ligne!
Inspiré par la solution de GammaFunction. Prend l'entrée comme
[coins, [icons]]
.la source
PowerShell , 94 octets
Essayez-le en ligne!
Déroulé:
la source
PowerShell ,
114107 octets-7 octets grâce à mazzy
Essayez-le en ligne!
Une grande opération ternaire aromatisée PowerShell basée sur le regroupement et le tri des comptes de la liste d'entrée. Le tri est nécessaire car nous tirons parti du fait que la liste groupée se raccourcit au fur et à mesure des répétitions. En fait, voici toutes les valeurs possibles:
La troncature en int est toujours coûteuse.
Déroulé:
la source
0
? Essayez-le en ligne!Wolfram Language (Mathematica) , 54 octets
Essayez-le en ligne!
la source
R,
102,91, 81 octetsGéré pour supprimer 11 octets (et corriger un bogue) grâce à @Giuseppe. Géré 10 autres inspirés par l'idée de @ Giuseppe / 10.
Non golfé
Essayez-le en ligne!
la source
as.factor()
et lef=
pour obtenir 88 octets.table
- je ne le connais pas aussi bien que je le devrais - j'ai commencésummary(as.factor(v))
. Je préfère quitter lef=
. Je ne pense pas que le code soit complet sans lui, mais je me rends compte que c'est un choix de style.f=
; n'hésitez pas à mettre un lien TIO dans votre réponse :-)sum(s==2)
aide beaucoup. Mais il a fallu8051 Assembly (compile en 158 octets)
Ceci est une approche naïve VEEEEEEEEEERRY, ce n'est pas encore testé et non golfé mais je suis assez confiant qui fonctionne. Les choses à considérer sont:
1) le 8051 est une machine à accumulateur ie. il a besoin d'instructions mov dont d'autres architectures peuvent ne pas avoir besoin du tout.
2) le 8051 est une machine à 8 bits, il faut donc faire quelque ruse pour les nombres> 255, ce qui fait plus de code et est donc un inconvénient de la plate-forme par rapport aux autres.
la source