Inspirowany przez C -Dyrektywa #define
.
Wyzwanie
Podano jedną frazę z pewnym aliasem i jedną tablicę z każdym tekstem aliasu. Wypisz początkową frazę zastępując każdy alias odpowiednim tekstem.
Alias jest definiowany przez jeden kursor, #
po którym następuje jego indeks w tablicy (indeks może zaczynać się od zera lub jeden). Alias może zawierać inny alias w tekście i musisz je wszystkie rozwiązać (być może rekurencyjnie). Możesz założyć, że alias nigdy nie będzie działał w nieskończonej pętli. Alias nie będzie miał początkowych zer ( #02
nie jest aliasem w indeksie 2
, jest aliasem w indeksie, 0
po którym następuje tekst 2
).
Możesz założyć, że tablica nie przejdzie 20 elementów.
Możesz napisać program, funkcję lub nawet #define
- byłoby miło :)
Możesz także użyć innej metody wprowadzania, która lepiej pasuje do Twojego języka.
Przykład
phrase: "#0 & #3"
array: [
"Programming #1",
"Puzzles",
"Code",
"#2 Golf"
]
output: "Programming Puzzles & Code Golf"
Krok po kroku:
0> "#0 & #3"
1> "Programming #1 & #2 Golf"
2> "Programming Puzzles & Code Golf"
Ponieważ tak jest golf-golf, najkrótsza odpowiedź w bajtach wygrywa!
Kolejne próbki
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."
W powyższych przykładach użyto tablicy z indeksem rozpoczynającym się od zera.
#0
nie powinna się pojawić? Czy jest#01
poprawny, ale nie jest aliasem (tzn. Po prostu zostaje w niezmienionej postaci)?#01
Odpowiedzi:
JavaScript (ES6) 58
Funkcja rekurencyjna
Test
źródło
Mathematica, 74 bajty
Niezbyt skomplikowane. Większość z nich jest po prostu poświęcona tworzeniu indeksów.
źródło
Julia,
11210766 bajtówJest to funkcja rekurencyjna, która przyjmuje ciąg znaków do tablicy i zwraca ciąg znaków. Korzysta z indeksowania opartego na 0.
Zaczynamy od skonstruowania ciągu r jako ciągu wejściowego s ze wszystkimi dopasowaniami wyrażenia regularnego
#1?\d
zastąpionymi elementem x odpowiadającym 1 + liczba całkowita przeanalizowana poza dopasowanie. Jeśli jest to równe s , zwracamy s , w przeciwnym razie ponawiamy, przekazując r jako ciąg.źródło
C
269232Zgodnie z życzeniem, jedno
#define
rozwiązanie problemu! Makra C nie mogą być rekurencyjne, więc problem musiał zostać rozwiązany iteracyjnie. Makro przyjmuje 3 argumenty; frazap
, tablicaa
i długość tablicyl
.Usunąłem tylko białe spacje z mojego niegolfowanego rozwiązania; Wiem, że jest jeszcze kilka postaci, które mogę uratować, ale nie sądzę, że spadnie to poniżej 200. To zdecydowanie nie będzie konkurencyjne rozwiązanie.Rozwiązanie jest w pełni golfem. Niegolfowane rozwiązanie w postaci funkcji poniżej:I kod testowy:
EDYCJA: trochę magii golfa. Jest tak krótki i nieczytelny, jak mi się wydaje.
źródło