Inspiriert von der C- Direktive #define
.
Herausforderung
Gegeben eine Phrase mit einem Alias und ein Array mit jedem Alias-Text. Geben Sie die ursprüngliche Phrase aus und ersetzen Sie jeden Alias durch den entsprechenden Text.
Ein Alias wird durch einen Punkt definiert, #
gefolgt von seinem Index im Array (der Index kann bei Null oder Eins beginnen). Der Alias kann einen anderen Alias in seinem Text enthalten, und Sie müssen alle auflösen (möglicherweise rekursiv). Sie können davon ausgehen, dass der Alias niemals in eine Endlosschleife gerät. Alias hat keine führenden Nullen ( #02
ist kein Alias am Index 2
, sondern ein Alias am Index, 0
gefolgt vom Text 2
).
Sie können davon ausgehen, dass das Array nicht länger als 20 Elemente ist.
Du kannst ein Programm schreiben oder eine Funktion oder sogar ein #define
-es wäre schön :)
Sie können auch eine andere Eingabemethode verwenden, die besser zu Ihrer Sprache passt.
Beispiel
phrase: "#0 & #3"
array: [
"Programming #1",
"Puzzles",
"Code",
"#2 Golf"
]
output: "Programming Puzzles & Code Golf"
Schritt für Schritt:
0> "#0 & #3"
1> "Programming #1 & #2 Golf"
2> "Programming Puzzles & Code Golf"
Da dies Code-Golf ist , gewinnt die kürzeste Antwort in Bytes!
Ein weiteres Beispiel
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."
In den obigen Beispielen wurde ein Array mit einem Index verwendet, der bei Null beginnt.
#0
sie nicht angezeigt werden sollte? Oder ist#01
gültig, aber kein Alias (dh es bleibt einfach so wie es ist)?#01
Antworten:
JavaScript (ES6) 58
Rekursive Funktion
Prüfung
quelle
Mathematica, 74 Bytes
Nicht zu kompliziert. Das meiste davon ist nur der Erstellung der Indizes gewidmet.
quelle
Julia,
11210766 BytesDies ist eine rekursive Funktion, die eine Zeichenfolge und ein Array akzeptiert und eine Zeichenfolge zurückgibt. Es verwendet eine 0-basierte Indizierung.
Wir beginnen mit der Konstruktion einer Zeichenfolge r als Eingabezeichenfolge s, wobei alle Übereinstimmungen des regulären Ausdrucks
#1?\d
durch das Element x ersetzt werden , das 1 + der aus der Übereinstimmung analysierten Ganzzahl entspricht. Wenn dies gleich s ist , geben wir s zurück , andernfalls rekursieren wir und übergeben r als Zeichenfolge.quelle
C
269232Wie gewünscht, eine einzige
#define
Lösung des Problems! C-Makros können nicht rekursiv sein, daher musste das Problem iterativ gelöst werden. Das Makro akzeptiert 3 Argumente. die Phrasep
, das Arraya
und die Länge des Arraysl
.Ich habe nur Leerzeichen aus meiner Lösung ohne Wolf entfernt. Ich weiß, dass ich noch ein paar Zeichen speichern kann, aber ich glaube nicht, dass ich dadurch unter 200 komme. Dies wird definitiv keine wettbewerbsfähige Lösung sein.Die Lösung ist voll Golf. Ungolfed Lösung in Form einer Funktion unten:Und Testcode:
EDIT: Hat etwas Golfzauber gewirkt. Es ist so kurz und unleserlich, wie ich denke, dass es nur geht.
quelle