Il y a plusieurs années, Hot Wheels a créé un jeu flash simple appelé "Formula Fuelers Racers" *. Pour jouer au jeu, vous sélectionnez trois ingrédients d'un réfrigérateur à mettre dans votre voiture, qui est ensuite confronté à la voiture générée aléatoirement par l'ordinateur. Il s'avère que la mécanique de ce jeu est assez simple. Tout d'abord, le «temps» de course réel de votre voiture est généré de manière aléatoire et n'a aucune incidence sur le fait de gagner ou non la course. Deuxièmement, le vainqueur de la course est déterminé par un score qui est calculé à partir des ingrédients sélectionnés (les ingrédients en double sont autorisés et l'ordre est important). Chaque ingrédient a une "valeur" et une "opération" associées, comme indiqué dans le tableau suivant:
# ingredient val op
1 Hot Salsa 2 +
2 Root Beer 1 +
3 Milk 1 +
4 Pickle Juice 2 +
5 Mystery Lunch -3 *
6 BBQ Sauce 2 +
7 Egg 1 +
8 Ketchup 2 +
9 Mustard -1 *
10 Melon 1 +
11 Chocolate Milk 1 +
12 Mayonnaise -2 *
13 Baby Food 0 +
14 Pepper 1 +
15 Salt 2 +
16 Syrup -1 *
17 Salad Dressing 2 +
18 Orange Juice 1 +
19 Soy Sauce 2 +
Pour plus de commodité, ce défi fera référence aux ingrédients par leur nombre et non par leur nom. Voici les étapes pour calculer un score:
- Tout d'abord, initialisez le score avec la valeur du premier ingrédient.
- Ensuite, utilisez l'opération du deuxième ingrédient pour combiner le score actuel et la valeur du deuxième ingrédient pour obtenir un score mis à jour.
- Enfin, utilisez l'opération du troisième ingrédient pour combiner le score actuel et la valeur du troisième ingrédient pour obtenir le score final.
Des scores plus élevés sont meilleurs et battent toujours des scores plus bas.
Par exemple, les ingrédients 1 2 3
ont un score de (2+1)+1 = 4
. Les ingrédients 7 5 6
ont un score de (1*-3)+2 = -1
. Par conséquent, 1 2 3
bat 7 5 6
.
Défi
Dans ce défi, vous écrirez un programme qui prend une liste ordonnée de 3 entiers et sort le score correspondant.
Contribution
Votre programme peut accepter une liste de trois entiers dans le format le plus pratique. Vous êtes autorisé à utiliser l'indexation 1 pour les noms d'ingrédients (comme ci-dessus) ou l'indexation 0 (soustrayez 1 de chaque index ci-dessus).
Ouput
Votre programme doit produire un seul entier indiquant le score.
Cas de test
4 5 5 => 18 // max score
5 5 5 => -27 // min score
13 13 13 => 0
1 2 3 => 4
7 5 6 => -1
16 2 19 => 2
19 7 12 => -6
* Cette page est assez obsolète et ne fonctionne pas dans certains navigateurs, mais vous n'avez pas besoin de jouer au jeu pour ce défi.
Réponses:
Gelée , 24 octets
Prend une liste d'ingrédients indexés 0.
Essayez-le en ligne! ou voir une suite de tests
Comment?
Utilise une forme légèrement alambiquée de compression des valeurs en tant que nombre en base 6 et le fait que les entrées multiplicatives sont les entrées négatives. Au lieu de simplement décaler de 3 pour obtenir les chiffres de base 6, les valeurs complémentaires incrémentées sont utilisées - cela permet d'économiser des octets en permettant à l'
Ị
atome de sélectionner les entrées négatives avant l'étape du complément tout en enregistrant un octet dans la base-250 compression.la source
zẈ€$ụ¤
sont lus comme leurs index (1-indexés) dans la page de codes Jelly, qui sont[123,188,13,37,226,4]
, et interprétés comme un nombre de base 250:123*250**5+188*250**4+13*250**3+37*250**2+226*250**1+4*250**0=120851767994004
(voir la section littérale des chaînes du tutoriel .)JavaScript (ES6),
8984827873 octetsPrend l'entrée comme un tableau de 3 entiers, en utilisant l'indexation 0.
Cas de test
Afficher l'extrait de code
Version précédente, 78 octets
Prend les 3 entiers dans la syntaxe de currying
(a)(b)(c)
, en utilisant l'indexation 0.Comment ça marche
Une chose un peu inhabituelle à propos de ce code est qu'il ne prend que 2 arguments dans la syntaxe de curry `` commune ''
a => b =>
et retourne finalement une fonction qui prend le 3e.Panne
Cas de test
Afficher l'extrait de code
la source
Befunge,
7473 octetsEssayez-le ici! C'est bizarre que mon code ne fonctionne que sur cet interprète.
La deuxième ligne contient essentiellement toutes les valeurs du tableau. Les valeurs non numériques sont en fait des valeurs négatives car elles précèdent les chiffres de la table ASCII. Il y a un peu de logique qui détermine si le nombre est négatif ou non, et s'il l'est, ce nombre est multiplié par le résultat.
Le côté droit de la troisième ligne initialise le premier nombre. Si je n'avais pas à le faire, je pourrais économiser beaucoup d'octets.
la source
PHP, 128 octets
PHP, 138 octets
Version en ligne
Étendu
la source
Python 2 ,
123110107 octetsEssayez-le en ligne!
-3 octets grâce à @mathjunkie
la source
5445054524413452545
puis soustrayez 3 peut vous faire économiser des tonnes d'octets.n=[n+i,n*i][i<0]
dans la boucle vous fait économiser 3 octets05AB1E , 29 octets
Essayez-le en ligne!
Cela fonctionne en fait pour autant ou aussi peu d'entrées que vous le souhaitez, vous pouvez donc avoir des voitures avec 4 traits ou plus ou des voitures avec seulement 2. Ce n'était pas intentionnel, juste comment cela s'est terminé.
la source
CJam ,
4338 octetsIl pourrait y avoir un moyen de compresser davantage la liste ...
Utilise l'indexation basée sur 0.
Essayez-le en ligne!
Explication
Ce programme utilise le fait qu'une valeur est multiplicative plutôt qu'additive si et seulement si elle est négative.
la source
+ *
astuce!Lua,
140131 octetsla source
JavaScript,
8572 octetsPrend l'entrée au format
[a,b,c]
-13 octets grâce à ETHproductions
la source
x=>(b="...",b<0?"*":"+")+b
pour éviter celareturn
, je pense. (De plus, vous n'avez pas besoin de[... ]
, l'indexation fonctionne sur les chaînes)a=a=>eval(a.map(x=>(b="5445054524413452545"[x]-3,b<0?"*":"+")+b)).join``)
marche pour vous?)
après+b
, je croisR,
125123 octetsFonction anonyme qui prend trois entiers en entrée. Définit une liste de valeurs et d'opérations, puis évalue simplement celles appelées par l'entrée, c'est-à-dire
o3(o2(v1,v2),v3)
. Il y a presque certainement une façon golfique de le faire!Mise à jour: après quelques retouches, j'ai une alternative, également 123 octets . Encore une fois, une fonction anonyme, mais prend l'entrée comme un seul vecteur de trois valeurs. Utilise la même approche, définissant une liste de valeurs et d'opérations et l'évaluant.
la source
Haskell,
186116112108 octetsLa fonction principale est
k
. Nouveau sur Code Golf, je suis sûr qu'il y a quelques octets que je pourrais raser avec une utilisation intelligente de l'$
opérateur par rapport aux parenthèses. Je mettrai probablement à jour la réponse à mesure que je continuerai à trouver des améliorations.Essentiellement, le programme peut être divisé comme suit:
*
là où les valeurs positives sont toujours+
)v
mappé pour entrer des entiers et extrait les opérations et les valeurs appropriées de chacune et retourne la sortie appropriée.MISE À JOUR
Un merci spécial pour avoir souligné l'astuce fromEnum! Cela a bien fonctionné. J'ai également manqué la partie des règles qui stipulait qu'une solution acceptable pourrait être une fonction qui prend une liste d'entiers. Cela a permis d'économiser énormément de travail.
MISE À JOUR 2
Selon d'autres suggestions, rasé une poignée d'octets en réorganisant les opérations, créant un garde else qui a toujours la valeur True et un modèle correspondant à W qui correspond au modèle sur une liste de 3 éléments. Merci pour les suggestions!
MISE À JOUR 3
Un autre merci à Laikoni pour avoir souligné plus de règles de golf de code que je ne connaissais pas. Le mappage de v à mon entrée pour créer une liste de fonctions partiellement appliquées était une idée phénoménale et m'a sauvé 4 octets supplémentaires!
la source
[Int] -> Int
au lieu de lire depuis stdin et d'écrire vers stdout. Cela est autorisé par défaut, mais dans ce cas, il est même explicitement mentionné dans le défi que le taling d'une liste d'entiers en entrée est acceptable.fromEnum
lieu dedigitToInt
risque d'être plus courte , car il vous permet de déposer l'importation.v=(map((-51+).fromEnum)"95 ... 5"!!)
enregistre deux parenthèses.o x|x<0=(*)|0<1=(+)
enregistre un octet dans la deuxième garde.w
reste un espace supplémentaire. De plus, comme vous ne devez gérer que des listes de longueur 3, vous pouvez les utiliserw[x,y,z]=
comme correspondance de modèle.Haskell,
9287 octetsEssayez-le en ligne!
Sur la base de la réponse de @ maple_shaft, je viens de factoriser un peu.
Merci à @Laikoni pour 5 octets!
la source
f=
car les fonctions anonymes sont autorisées comme soumission. Ils ne sont nécessaires que pour faire fonctionner l'exemple tio.C,
171161 octetsla source
8086 code machine, 62 octets
Les trois derniers octets contiennent l'entrée (indexée zéro). Hé, tu m'as dit que je pouvais utiliser le format d'entrée le plus pratique. Dans ce cas, c'est du hardcoding!
La sortie est le code d'erreur renvoyé au shell.
Comment ça marche:
la source