Dungeon Master a été l’un des tout premiers jeux de rôle en temps réel, sorti en 1987 sur Atari ST. Entre autres choses excitantes pour le moment, il proposait un système de sorts plutôt sophistiqué basé sur les runes.
Votre tâche aujourd'hui est d'écrire un programme ou une fonction qui évalue le nombre de points de mana nécessaires pour lancer un sort donné dans Dungeon Master.
Le système de 'distribution de sorts' est la boîte cyan en haut à droite dans l'image ci-dessus.
Sorts, runes et mana
Les sorts de Maître de donjon sont composés de 2 à 4 runes, sélectionnées dans les catégories suivantes, dans cet ordre exact:
- Puissance (obligatoire)
- Influence élémentaire (obligatoire)
- Formulaire (optionnel)
- Classe / Alignement (optionnel)
Cela signifie que les périodes valides sont soit:
- Puissance + Influence élémentaire
- Puissance + Influence élémentaire + Forme
- Puissance + Influence élémentaire + Forme + Classe / Alignement
Chaque catégorie contient 6 runes et chaque rune a un coût en mana de base associé:
=============================================================================
| Power | Rune | Lo | Um | On | Ee | Pal | Mon |
| +-----------+------+------+------+------+------+------+
| | Base cost | 1 | 2 | 3 | 4 | 5 | 6 |
=============================================================================
| Elemental Influence | Rune | Ya | Vi | Oh | Ful | Des | Zo |
| +-----------+------+------+------+------+------+------+
| | Base cost | 2 | 3 | 4 | 5 | 6 | 7 |
=============================================================================
| Form | Rune | Ven | Ew | Kath | Ir | Bro | Gor |
| +-----------+------+------+------+------+------+------+
| | Base cost | 4 | 5 | 6 | 7 | 7 | 9 |
=============================================================================
| Class / Alignment | Rune | Ku | Ros | Dain | Neta | Ra | Sar |
| +-----------+------+------+------+------+------+------+
| | Base cost | 2 | 2 | 3 | 4 | 6 | 7 |
=============================================================================
Évaluation du coût en mana
Le coût en mana du sort correspond à la somme du coût en mana de toutes les runes:
Le coût de la rune Power est toujours égal à son coût de base (de 1 à 6).
Pour les autres runes, la formule suivante s'applique:
où le pouvoir est le coût de base de la rune Power.
Exemples
Spell: Lo Ful
Cost : 1 + floor((1 + 1) * 5 / 2) = 1 + 5 = 6
Spell: Um Ful
Cost : 2 + floor((2 + 1) * 5 / 2) = 2 + 7 = 9
Spell: Pal Vi Bro
Cost : 5 + floor((5 + 1) * 3 / 2) + floor((5 + 1) * 7 / 2) = 5 + 9 + 21 = 35
Clarifications et règles
- Votre saisie consistera en 2 à 4 chaînes désignant les runes du sort. Vous pouvez les prendre dans n'importe quel format raisonnable, tels que 4 paramètres distincts, un tableau de chaînes (par exemple
['Lo', 'Ful']
) ou une seule chaîne avec un séparateur de caractère unique de votre choix (par exemple'Lo Ful'
). Veuillez spécifier le format de saisie sélectionné dans votre réponse. - Les runes sont garanties d'être valides.
- L'ordre des catégories doit être respecté. Les catégories non utilisées peuvent être manquantes ou remplacées par une valeur de fausseté.
- Vous pouvez accepter les runes dans l’un des formats suivants: 1. Une lettre majuscule suivie de minuscules (
'Ful'
) 2. Toutes les minuscules ('ful'
) 3. Toutes les majuscules ('FUL'
). Mais vous ne pouvez pas mélanger différents formats. - Bien évidemment, nous ne nous soucions pas de savoir si le sort a réellement un effet sur le jeu (pour les sorts curieux et utiles , ils sont listés ici .)
- C'est le code-golf , donc le code le plus court en octets gagne.
- Et rappelez-vous: Lord Chaos vous observe!
Cas de test
Spell | Output
---------------+-------
Lo Ful | 6
Um Ful | 9
On Ya | 7
Lo Zo Ven | 12
Pal Vi Bro | 35
Ee Ya Bro Ros | 31
On Ful Bro Ku | 31
Lo Zo Kath Ra | 20
On Oh Ew Sar | 35
Ee Oh Gor Dain | 43
Mon Zo Ir Neta | 68
Mon Des Ir Sar | 75
la source
Réponses:
SOGL V0.12 ,
11078 octetsEssayez-le ici!
Pourrait probablement jouer au golf un octet ou deux en refaisant tout
Explication:
la source
Python 2 ,
135119115 octetsEssayez-le en ligne!
L'entrée est une liste de chaînes de stdin
la source
05AB1E ,
8382 octetsEssayez-le en ligne!
-1 grâce à Emigna .
SOOOOOOO ungolfed :(
Explication:
la source
.•Y<εΔ•
au début, vous n'avez pas besoin d'incrémenter l'index.JavaScript (ES6),
1571561161121009997 octetsPrend l'entrée comme un tableau de chaînes.
Essayez-le en ligne!
Explication
Hoo, mec, ça va être amusant - mes explications à des solutions triviales sont nulles dans le meilleur des cas! Essayons ...
Une fonction anonyme prenant le tableau en argument avec paramètre
a
.Réduisez les éléments du tableau en les faisant passer chacun à travers une fonction. le
t
paramètre est le total cumulé, lec
paramètre est la chaîne en cours et0
la valeur initiale det
.Convertit l’élément actuel d’une chaîne en base 36 en un entier décimal.
Effectuez quelques opérations modulo dessus.
Saisissez le caractère de la chaîne à cet index et convertissez-le en nombre.
Attribuez ce numéro à la variable
v
.Vérifiez si variable
a
est un nombre. Pour le premier élémenta
sera le tableau de chaînes, essayer de convertir cela en un nombre va revenirNaN
, ce qui est falsey. À chaque passage suivant,a
sera un entier positif, ce qui est la vérité.Si
a
est un nombre, on le multiplie par la valeur dev
, on ajoute la valeur dev
et on décale les bits du résultat 1 bit vers la droite, ce qui donne le même résultat que la division par 2 et le revêtement de sol.Si
a
n'est pas un nombre on attribue la valeur dev
, ce qui nous donnera également la possibilité0
d’ajouter à notre total lors du premier passage.Enfin, nous ajoutons le résultat du ternaire ci-dessus à notre total cumulé.
Original, 156 octets
la source
a=>a.reduce((t,c)=>t+(v=+'27169735020045670435262'[parseInt(c,36)%141%83%50%23],+a?a*v+v>>1:a=v),0)
(EDIT: enlevé un commentaire non pertinent sur les entiers passés en entrée - il semble que je n'ai pas très bien compris mon propre défi ^^)JavaScript,
212210207206 octetsAlgorithme de recherche simple, les chaînes de recherche ne font que contribuer au nombre total d'octets.
Code
Format d'entrée
Tableau de chaînes, chaque élément est une chaîne en majuscule. Exemple: ["Mon", "Zo", "Ir", "Neta"]
Explication
Cette demande pour les coûts de base.
Initialise 2 variables avec le premier élément du résultat du tableau ci-dessus et supprime cet élément. Doit être converti d'abord en nombre, sinon il sera considéré comme une concaténation de chaîne dans la partie suivante.
Ajoute les coûts des runes non puissantes à la puissance de base. Le changement est utilisé à la place du sol (blah) / 2.
Évaluez le dernier résultat. (Crédit: Step Hen)
Cas de test
Edit 1: 212> 210 - Suppression d'une paire d'accolades
Edit 2: 210> 207 - Merci à Step Hen de nous avoir rappelé les règles JS et de nous aider à utiliser la fonction eval (). Comme AS3 interdit l’utilisation de eval (), cela fait longtemps que je ne l’utilise pas
Edit 3: 207> 206 - Merci Shaggy pour l'idée de remplacer indexOf () par search ()
la source
g
intérieur deg
, nous autorisons JS réponses à supprimer leg=
. En outre, vous pouvez économiser quelques octets en le basculant sur une évaluation et en supprimantreturn
: Fiddlesearch
vous permettra d'économiser un octets surindexOf
.Haskell ,
159156148133130127 octetsEssayez-le en ligne!
la source
Python 2 ,
320 318 314 311307 octetsFormat d'entrée - Liste de chaînes. Programme complet:
Essayez-le en ligne!
la source
Excel, 339 octets
Entrées entrées
A1
parD1
. Formule dans n'importe quelle autre cellule.Vous pouvez également importer en tant que CSV:
Excel et CSV, 228 octets
Entrée entrée dans la première ligne,
SPACE
pour les valeurs nulles. Résultat affiché en A3.la source
SCALA, 1106 caractères, 1106 octets
C'est assez long, probablement optimisable, mais c'était amusant à faire :)
Format d'entrée : runes séparées par des espaces dans une chaîne. S'il n'y a que 2 entrées (comme "Lo Ful"), mon code le complète
while(k.length<4)k:+=""
(je peux donc économiser 24 octets en modifiant les paramètres, si je le souhaite "ABC D").while(k.length<4)k:+=""
Merci pour ce superbe challenge. Essayez-le en ligne!
la source
Langage de programmation Shakespeare , 4420 octets
Prend l'entrée en tant que chaîne majuscule.
Explication à venir ... Pour le moment, fait amusant:
Microsoft
est un nom négatif en SPL. Tous les autres mots acceptés sont apparus dans les œuvres de Shakespeare.Essayez-le en ligne!
la source
Java (OpenJDK 8) , 252 octets
Essayez-le en ligne!
Les runes sont entrées en tant que
String[]
(tableau deString
), dans le premier cas (première lettre en majuscule, reste en minuscule).C'est la méthode standard "trouver la n-ième lettre", avec le twist qui existe
Ros
et quiRa
existe dans le 4ème segment. J'ai traité cela avec un remplacement en ligne et explicite deRa
àX
.la source
Retina ,
124123 octetsEssayez-le en ligne! Le lien inclut des cas de test. Prend des runes séparées par des espaces. Explication: Les étapes initiales convertissent simplement chaque rune en un chiffre, qui est ensuite converti en unaire. Les nombres qui suivent le premier sont multipliés par un de plus que le premier, puis le premier est doublé. L'entier final divise tout le résultat par 2 et prend la somme.
la source
C, 274
Plus ungolfed:
Vous devez fournir quatre arguments en ligne de commande - vous devez donc exécuter le premier cas de test
./a.out Lo Ful "" ""
la source
Go, 205 octets
C'est une fonction appelable, prend les runes comme une tranche de chaînes, par exemple
[]string{"Um", "Ful"}
.Essayez-le sur le terrain de jeu .
la source
Haskell, 623 octets
Utiliser des ADT au lieu du vaudou numérique.
REMARQUE: Ajoutez 36 pour
{-# LANGUAGE GADTs,ViewPatterns #-}
-XGADTs -XViewPatterns
Entrée: un seul sort sous forme de chaîne normale, par exemple
Lo Ful
Um Ful
La multiplication peut être effectuée en remplaçant la dernière ligne par
Mais cela ajouterait des octets au compte
la source