Le jeu Waving Hands se situe quelque part entre un stylo et du papier Magic: the Gathering et un Rock Paper Scissors très élaboré. Chaque tour, vous écrivez l'un des huit gestes pour chaque main:
- tortilla
F
Ingers P
alm offertS
siesteW
aveD
igit pointantC
tour- sta
B
N
rien
Il existe peu de règles importantes qui prévalent sur les autres:
- Si les deux mains
P
vous font signe de vous rendre automatiquement . (Il s'agit d'une simplification, mais nous allons continuer avec cela.) - Une seule main à la fois peut faire un geste
B
.
Une série de gestes exécutés par la même main peut lancer un sort, où chaque sort est lié à une séquence particulière. Ces séquences peuvent se chevaucher, mais chaque geste ne peut être utilisé que comme le geste final d'un seul sort (vous pouvez donc créer jusqu'à deux sorts en un seul tour). Certains sorts nécessitent qu'un geste soit fait avec les deux mains simultanément.
Votre tâche consiste, à partir d'une liste de gestes pour chaque main, à déterminer quels sorts pourraient être lancés au cours du tour en cours. Pour chaque main, la dernière lettre de la liste représente le geste choisi pour le tour en cours.
Voici la liste des séquences de gestes. Les lettres majuscules se réfèrent à un geste effectué avec une seule main, les lettres minuscules se réfèrent à un geste effectué avec les deux mains.
B Stab
cDPW Dispel magic
cSWWS Summon elemental
cw Magic mirror
DFFDD Lightning bolt
DFPW Cure heavy wounds
DFW Cure light wounds
DPP Amnesia
DSF Confusion
DSFFFc Disease
DWFFd Blindness
DWSSSP Delayed effect
DWWFWc Raise dead
DWWFWD Poison
FFF Paralysis
FPSFW Summon troll
FSSDD Fireball
P Shield
p Surrender
PDWP Remove enchantment
PPws Invisibility
PSDD Charm monster
PSDF Charm person
PSFW Summon ogre
PWPFSSSD Finger of death
PWPWWc Haste
SD Missile
SFW Summon goblin
SPF Antispell
SPFPSDW Permanency
SPPc Time stop
SSFP Resist cold
SWD Fear
SWWc Fire storm
WDDc Lightning bolt
WFP Cause light wounds
WFPSFW Summon giant
WPFD Cause heavy wounds
WPP Counterspell
WSSc Ice storm
WWFP Resist heat
WWP Protection from evil
WWS Counterspell
Oui, Lightning bolt
et Counterspell
ont chacun deux séquences différentes.
Vous pouvez écrire un programme ou une fonction, en prenant des entrées dans n'importe quel format de liste ou de chaîne, via STDIN, un argument de ligne de commande ou un argument de fonction, tant qu'il n'est pas prétraité. Vous pouvez sortir des paires de sorts via la valeur de retour ou en imprimant sur STDOUT. Encore une fois, vous pouvez utiliser n'importe quel format de liste ou de chaîne, tant que la sortie est sans ambiguïté.
Vous pouvez supposer que les séquences pour la main gauche et la main droite ont la même longueur et qu'elles sont valides (en particulier, B
elles ne seront jamais exécutées à deux mains en même temps). Notez que l'entrée ne contiendra que des lettres majuscules. Les lettres minuscules sont uniquement utilisées dans la liste ci-dessus pour indiquer que les deux mains doivent effectuer le même geste (majuscule).
Pour les sorts qui se terminent par un geste à deux mains, vous devez simplement sortir un seul sort. Si d' une part ne peut pas effectuer un sort, cela doit être indiqué par une chaîne contenant seulement un trait d' union, -
.
Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte.
Exemples
Chaque exemple se compose de trois lignes: la séquence de gauche, la séquence de droite (les deux entrées; le geste le plus à droite est le plus récent) et la liste de toutes les combinaisons de sorts possibles (la sortie).
WFP
WWS
[["Cause light wounds","Counterspell"],["Shield","Counterspell"]]
SD
BB
[["Missile","Stab"]]
WWP
WPP
[["Surrender"]]
DFW
CCW
[["Cure light wounds","-"]]
FFW
WWF
[["-","-"]]
DCW
CCW
[["Magic mirror"]]
WFPSFW
PPDDPP
[["Summon goblin","Shield"],["Summon ogre","Shield"],["Summon troll","Shield"],
["Summon giant","Shield"],["Summon goblin","Amnesia"],["Summon ogre","Amnesia"],
["Summon troll","Amnesia"],["Summon giant","Amnesia"]]
BSWWS
CSWWS
[["Counterspell","Counterspell"]]
CSWWS
CSWWS
[["Counterspell","Counterspell"],["Counterspell","Summon elemental"],
["Summon elemental","Counterspell"],["Summon elemental","Summon elemental"]]
PWPWWC
BBSPPC
[["Haste"],["Time stop"]]
Réponses:
CJam,
987 931 925663 octetsNotez qu'il contient uniquement tous les caractères ASCII du code ASCII 32 à 255. Certains caractères peuvent être ignorés par SE, il vaut donc mieux copier le code à partir du lien ci-dessus
Ce code ci-dessus est une version convertie en base de la solution suivante de 925 octets:
Les nouvelles lignes sont juste pour le spectacle.
Cela peut être beaucoup joué au golf , mais au moins je l'ai réussi à passer tous les cas de test -_-.Cela a pris plus de temps que prévu.
MISE À JOUR 1 - joué un peu à la partie de code. Encore plus de possibilités. La partie chaîne peut également être jouée / convertie en base, mais je m'abstiendrai de cela maintenant car toutes les autres réponses ne le font pas non plus.
MISE À JOUR 2 - Terminé de jouer au code, il est maintenant temps de compresser cette chaîne.
MISE À JOUR 3 - La base a converti la chaîne pour réduire la taille du code à 663 octets (elle peut être réduite à 640 octets, mais il y a également de 0 à 31 caractères de code ASCII, qui sont vraiment difficiles à gérer et je n'y résiderai que quand je suis de nouveau battu).
Essayez-le en ligne ici
la source
Python 2, 685
Définit une fonction
f
acceptant deux chaînes. La valeur de retour est la chaîneSurrender
si le joueur se rend; sinon, un ensemble composé de cordes (qui indiquent des sorts à deux mains) et de tuples de longueur 2 (indiquant des sorts séparés pour chaque main).Source encodée en Base64:
La source est du formulaire
exec "eu352909HE%#NTHQh".decode('zip')
qui exécute le code suivant:la source
Java,
15651388Appelez avec
java M %leftString %rightString
. SortSurrender
si le joueur se rend. Sinon, renvoie une chaîne sous cette formebothHandSpell;oneHandSpell,oneHandSpell;...
. Notez qu'il s'agit d'une solution à un revêtement pour un problème plutôt compliqué. :)Dentelé:
Edit: a utilisé la suggestion de Peter pour créer un tableau de chaînes avec moins de code.
Tout conseil pour améliorer cela serait apprécié.
la source
JavaScript (ES6),
1070941Encodé en Base64:
Vous l'exécutez en le faisant
eval(atob("Zj0obCxyK..."))
dans la console Firefox.Code golfé (peut inclure des caractères non pris en charge par Stack Exchange):
Étant donné que le dictionnaire orthographique se compose uniquement de lettres, nous pouvons le traiter comme une chaîne codée en base64 et utiliser des nombres comme séparateurs et espaces. J'ai "décodé" la chaîne de type base64 en une chaîne binaire, qui est 3/4 de la taille de l'original.
Légèrement non golfé:
Un golf que j'aime particulièrement teste les tableaux vides avec
array - 1
.[] - 1 => "" - 1 => 0 - 1 => -1 (truthy)
["foo"] - 1 => "foo" - 1 => NaN (falsey)
la source