Inspiration
Cette question est inspirée des cartes Throne Room et King's Court du célèbre jeu de cartes Dominion .
Dans le cadre de son tour, on joue une séquence d'actions. Ces deux actions particulières font répéter l'action jouée suivante deux ou trois fois *. D'autres actions "génériques" provoquent des effets de jeu spécifiques, mais nous ne nous intéresserons pas aux détails, simplement en les étiquetant avec des lettres.
Le cas intéressant est lorsqu'une salle du trône ou une cour du roi affecte une autre salle du trône de la cour du roi, ce qui provoque le doublement ou le triplement de l'effet de doublage ou de triplement. Les longues chaînes de salles du trône, les cours royales et les actions multipliées peuvent dérouter même les joueurs expérimentés du Dominion.
Votre objectif est d'écrire du code qui résout correctement ces chaînes, en utilisant le moins d'octets possible. Je décrirai les exigences du programme avant d'expliquer comment les chaînes se résolvent dans les règles de Dominion.
* Techniquement, vous choisissez l'action affectée dans le cadre de la résolution de la salle du trône ou de la cour du roi, mais cette vue est plus claire pour ce défi.
Exigences du programme
Écrivez un programme ou une fonction nommée . Il doit prendre en compte la chaîne d'actions jouée (STDIN ou entrée de fonction), et produire ou imprimer la chaîne d'actions résultante à partir des effets du doublement et du triplement. Le moins d'octets gagne.
Contribution
Une chaîne représentant la séquence d'actions jouées. Les actions génériques sont représentées par des majuscules à A
travers Z
. L'action de doublage spéciale Salle du trône est représentée par le personnage 2
, et l'action de triplement King's Court par 3
,
Le nombre de caractères (actions) sera compris entre 1 et 30 inclus. Vous pouvez avoir la fin de l'entrée dans une nouvelle ligne si vous le souhaitez.
Exemple d'entrée: WA23G3GA
Production
Une chaîne de lettres majuscules A
à Z
. Cela devrait être la séquence d'actions génériques qui résulte de la résolution des effets de doublement et de triplement, dans l'ordre où ils se produisent.
Vous pouvez avoir la sortie en fin de ligne si vous le souhaitez. Sinon, il ne devrait pas y avoir de caractères supplémentaires.
Exemple de sortie: WAGGGGGGAAA
.
Fonctionnement du doublement et du triplement dans Dominion
Ici, je vais passer en revue le fonctionnement des chaînes de salles du trône 2
et des cours du roi 3
conformément aux règles du Dominion.
Après avoir joué un 2
, l'action suivante à résoudre se produit deux fois. Donc, si vous jouez d' abord 2
, puis A
, on se A
passe deux fois.
2A -> AA
De même,
A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY
Notez dans le dernier exemple que la finale 2
n'avait rien à doubler, donc elle n'a eu aucun effet.
La chose intéressante se produit lorsque les effets doublant ou triplant sont eux-mêmes doublés ou triplés. Par exemple,
22AB -> AABB
D'abord, vous jouez 2
. Ensuite, vous jouez un autre 2
, qui est doublé par rapport au précédent 2
. En conséquence, les deux actions suivantes sont doublées. Tout d'abord, les deux copies de A
résoudre. Ensuite, les copies de B
résoudre.
Notez que ce A
n'est pas quadruplé: après la première copie des 2
actes sur la première A
, la copie suivante agit sur la prochaine action non résolue, qui est B
. Sans le B
, nous aurions
22A -> AA
où la deuxième copie de 2
attend la prochaine action pour doubler, mais aucune action ne vient.
Enfin, regardons un exemple complexe.
223BCDE -> BBBCCCDDE
Comme précédemment, le premier 2
fait 2
doubler le second . Ainsi, les deux prochaines actions seront doublées. La première copie de 2
double l'action suivante 3
, qui doit être résolue complètement avant de résoudre la copie suivante de 2
. La première copie des 3
triplets B
et la deuxième copie des triplets C
. Maintenant, la deuxième copie encore en attente de 2
double l'action suivante non résolue, qui est D
. Après cela, aucun effet de doublement ou de triplement ne subsiste et l'action finale E
se produit simplement.
Cas de test
Ils sont donnés sous forme de (input,output)
.
(FY, FY)
(A2BC, ABBC)
(3DE, DDDE)
(3N2BC3XY2, NNNBBCXXXY)
(WA23G3GA, WAGGGGGGAAA)
(32, )
(33RST, RRRSSSTTT)
(2A32B2CDEFG, AABBCCDDEEFG)
(A2A323AB2CD2D2E3ABC, AAAAAABBBCCDDDDEEAAABBBC)
(P22LL3Q2Q22T, PLLLLQQQQQTT)
(322322ABCDEFGHIJKLMN, AABBCCDDEEEFFGGHHIJKLMN)
1
les sous de la pile pour traiter les actions non multipliées de la même manière que les actions multipliées. Pourriez-vous expliquer davantage comment jongler avec les différentes piles? En particulier, que fait \ pour "amener la pile de représentants au sommet"?Javascript -
162152 octetsMinifié:
Étendu:
Je suppose que les langages de golf basés sur la pile tueront celui-ci, car il s'agit essentiellement d'un exercice d'empilement de fonctions. : P
Exemples de sorties
la source
2/3
cas ensemble?x
directement sans d'abord le copier dans une variableb
portée sur le lambda interne, mais Firefox n'évalue pas correctement la condition de la boucle. Plus précisément,x
devient négatif et le navigateur se bloque. Essayez de remplacer, b = x; b--;
par; x--;
et exécutez l'entréeA2A323AB2CD2D2E3ABC
. Si quelqu'un qui lit ceci peut comprendre pourquoi, ...C,
115111 octetsUtilise une entrée / sortie standard.
Enregistré 4 en utilisant
memset
et en faisant aller la pile dans l'autre sens.Non golfé
la source
Python (84)
S
est la pile de multiplicateurs (haut si avant). Il est initialisé avec suffisamment1
de pour gérer les actions non multipliées.Selon que l'action en cours
c
est générique ou non, nous ajoutons son résultat multiplié soit à la sortie,R
soit à la pile de multiplicateursS
.Tout est représenté sous la forme d'une chaîne plutôt que d'une liste de caractères. Parce que les chaînes sont immuables, nous ne pouvons malheureusement pas utiliser
pop
ni attribution d'élément sur elles.la source