Inspiré par la C- directive #define
.
Défi
Étant donné une phrase avec un alias et un tableau avec chaque texte d'alias. Sortez la phrase initiale en remplaçant chaque alias par son texte respectif.
Un alias est défini par un pointu #
suivi de son index dans le tableau (l'index peut commencer à zéro ou un). L'alias peut contenir un autre alias à l'intérieur de son texte, et vous devez tous les résoudre (peut-être récursivement). Vous pouvez supposer que l'alias ne fonctionnera jamais dans une boucle infinie. L'alias n'aura pas de zéros non significatifs (ce #02
n'est pas un alias à l'index 2
, c'est un alias à l'index 0
suivi du texte 2
).
Vous pouvez supposer que le tableau ne dépassera pas 20 éléments.
Vous pouvez écrire un programme, ou une fonction ou même un #define
-il serait bien :)
Vous pouvez également utiliser une autre méthode d'entrée qui convient mieux à votre langue.
Exemple
phrase: "#0 & #3"
array: [
"Programming #1",
"Puzzles",
"Code",
"#2 Golf"
]
output: "Programming Puzzles & Code Golf"
Pas à pas:
0> "#0 & #3"
1> "Programming #1 & #2 Golf"
2> "Programming Puzzles & Code Golf"
Puisqu'il s'agit de code-golf , la réponse la plus courte en octets gagne!
Un autre échantillon
phrase: "#0!"
array: [
"We are #1",
"#2",
"#3",
"#4 !",
"graduating"
]
output: "We are graduating !!"
phrase: "##0#1#0#21#3#4"
array: [
"a",
"m",
"z",
"n",
"g"
]
output: "#amaz1ng"
phrase: "##1#23"
array: [
"WEIRD",
"0 C",
"AS"
]
output: "WEIRD CAS3"
phrase: "#1#7#6y#4#7#10s#7b#11#0#0#11r#7#0h#6#5#2#5#9#4."
array: [
"t",
"#12#3",
"#11ga#3",
"#0#10v#11",
"#0h#10#8g",
"#7#8",
"a#8",
" ",
"n",
"o",
"i",
"e",
"P#9s#10"
]
output: "Positive anything is better than negative nothing."
Les exemples ci-dessus ont utilisé Array avec un index commençant à zéro.
#0
elle ne devrait pas apparaître? Ou est#01
valide mais pas un alias (c'est-à-dire qu'il est simplement laissé tel quel)?#01
Réponses:
JavaScript (ES6) 58
Fonction récursive
Tester
la source
Mathematica, 74 octets
Pas trop compliqué. La majeure partie est uniquement dédiée à la création des indices.
la source
Julia,
11210766 bytesIl s'agit d'une fonction récursive qui accepte une chaîne et un tableau et renvoie une chaîne. Il utilise une indexation basée sur 0.
Nous commençons par construire une chaîne r comme chaîne d'entrée s avec toutes les correspondances de l'expression régulière
#1?\d
remplacées par l'élément de x correspondant à 1 + l'entier analysé hors de la correspondance. Si cela est égal à s , nous renvoyons s , sinon nous recursons, en passant r comme chaîne.la source
C,
269232Comme demandé, une seule
#define
solution au problème! Les macros C ne peuvent pas être récursives, le problème a donc dû être résolu de manière itérative. La macro prend 3 arguments; la phrasep
, le tableaua
et la longueur du tableaul
.J'ai seulement supprimé les espaces blancs de ma solution non golfée; Je sais qu'il y a quelques autres personnages que je peux enregistrer, mais je ne pense pas que cela me mettra en dessous de 200. Ce ne sera certainement pas une solution compétitive.La solution est entièrement jouée. Solution non golfée sous la forme d'une fonction ci-dessous:Et testez le code:
EDIT: A travaillé la magie du golf. C'est aussi court et illisible que je pense qu'il peut l'être.
la source