Zadanie
Napisz program lub funkcję, która podając trzy łańcuchy A, B, C
tworzy łańcuch wyjściowy, w którym rekurencyjnie podstawiono każde wystąpienie B
in . Rekurencyjne podstawianie oznacza powtarzanie podstawienia, w którym na każdym etapie wszystkie nie nakładające się wystąpienia in (wybrane zachłannie od lewej do prawej) są zastępowane przez, aż do momentu, gdy nie jest już zawarte w .A
C
B
A
C
B
A
Wejście wyjście
- Możesz użyć dowolnej domyślnej metody we / wy .
- Ciągi będą zawierać tylko drukowalne znaki ASCII (i mogą zawierać dowolny z nich).
B
nigdy nie będzie pustym ciągiemA
iC
może być.- Ciągi znaków należy traktować jako zwykły tekst, nie można na przykład traktować go
B
jako wzorca Regex. - Niektóre kombinacje wejść nigdy się nie zakończą. W takich przypadkach Twój program może zrobić wszystko.
Przypadki testowe
Są w formacie: A/B/C\nOutput
Hello, world!/world!/PPCG
Hello, PPCG
Uppercase is up/up/down
Uppercase is down
ababababa/aba/ccc
cccbcccba
delete/e/{empty string}
dlt
{empty string}/no/effect
{empty string}
llllrrrr/lr/rl
rrrrllll
+-+-+-+/+-+/+
+
ababababa/aba/bada
badabbadbada
abaaba/aba/ab
abb
((())())())/()/{empty string}
)
Przykłady, które się nie kończą:
grow/ow/oow
loop/lo/lo
code-golf
string
substitution
code-golf
math
code-golf
string
set-theory
code-golf
code-golf
compile-time
code-golf
kolmogorov-complexity
binary
code-golf
sequence
cops-and-robbers
code-golf
subsequence
card-games
code-golf
sequence
primes
code-golf
code-golf
number
graphical-output
music
code-golf
ascii-art
code-golf
string
lambda-calculus
code-golf
string
code-generation
code-golf
unicode
code-golf
math
combinatorics
code-golf
balanced-string
code-golf
sequence
cops-and-robbers
code-golf
sequence
cops-and-robbers
code-challenge
fastest-code
chess
code-golf
math
graphical-output
code-golf
string
hello-world
animation
code-golf
number
arithmetic
code-golf
integer
code-golf
code-golf
combinatorics
code-golf
kolmogorov-complexity
graphical-output
code-golf
string
code-golf
code-golf
game
code-golf
math
combinatorics
code-golf
ascii-art
popularity-contest
random
code-golf
arithmetic
number-theory
integer
code-golf
tips
underload
code-golf
math
sequence
primes
code-golf
math
path-finding
code-golf
ascii-art
primes
code-golf
kolmogorov-complexity
alphabet
Lew
źródło
źródło
((())())())/()/
downpercase is down
Odpowiedzi:
05AB1E , 2 bajty
Wypróbuj online!
Wyjaśnienie
To może być
:
dla 1 bajt , jeśli nie mamy do czynienia z pustymi strunami.źródło
:
jest wbudowane, które rozwiązuje całe wyzwanie? Powinienem był zakazać wbudowanych;)Python 2 , 43 bajty
Wypróbuj online!
Ocenia ciąg formularza
Aby osiągnąć ustalony punkt, jeśli taki istnieje, wystarczy wykonać zamianę równą długości oryginalnego łańcucha.
źródło
ES6 (JavaScript),
47, 43 bajtyGrał w golfa
Spróbuj
źródło
c=>b=>g=a=>a==(a=a.split(b).join(c))?a:g(a)
Some combinations of inputs will never terminate. Your program can do anything in those cases.
Siatkówka , 27 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Dane wejściowe powinny być oddzielone od linii.
Wypróbuj online! (Dla wygody używa formatu wejściowego zestawu testów, w którym każdy wiersz jest przypadkiem oddzielonym ukośnikiem).
źródło
C #, 44 bajtów
Krótka wersja:
Przykładowy program:
Objaśnienie: Funkcja jest zapisywana jako wyrażenie rekurencyjne typu tail, unikając słowa kluczowego return i nawiasów klamrowych, wykorzystując następujące elementy:
To pozwala nam zachować to w jednym stwierdzeniu.
EDYCJA: Wróciłem do pomijania typu funkcji r, ponieważ wydaje się to do przyjęcia. W przypadku deklaracji typu za pomocą tablic ma ona 68 znaków. Bez 44 znaków.
źródło
r=
deklarację, czy też wiele więcej (częściowo dlatego, że nie znam w pełni reguł, częściowo dlatego, że nie znam C # wystarczająco dobrze, aby je zastosować).Japt , 15 bajtów
Przetestuj online!
Jak to działa
Japt ma wbudowaną funkcję zastępowania rekurencyjnego, ale widzi pierwsze wejście jako wyrażenie regularne. Gdyby zagwarantowano, że dane wejściowe zawierają tylko znaki alfanumeryczne, to rozwiązanie 3-bajtowe działałoby:
Jeżeli wejście mogły zawierać węgiel odbarwiający wyjątkiem
^
,\
czy]
to rozwiązanie 12 bajtów będzie ważne, a nie:źródło
C #,
3349 bajtówPrawdopodobnie jeden z najmniejszych fragmentów napisanych w C # ... A ponieważ
Replace
jest natywny dlastring
struktury, nie ma potrzeby używaniausing
s ( Przynajmniej nie na wbudowanej funkcji VS, C # Interactive ... )Ponadto, ponieważ
B
zawsze ma wartość, kod nie wymaga żadnych weryfikacji.Grał w golfa
Nie golfił
Pełny kod
Prasowe
+19 bytes
- Naprawiono brak rekurencji rozwiązania.33 bytes
- Wstępne rozwiązanie.źródło
Replace
dokonuje wymiany rekurencyjnej?"((())())())".Replace("()", "")
zwraca(()))
.Przetwarzanie,
7572 bajtówDrukuje wyniki. Nazwij to jak
g("llllrrrr", new String[]{"lr","rl"});
źródło
Mathematica,
3532 bajtówArgumenty podane jako sekwencja. Nigdy nie kończy się na
grow
przykład, powracaloop
naloop
przykład. Trzy bajty wolne dzięki sugestii Martina.źródło
FixedPoint
bywa zbyt długi i można go emulować za pomocą//.
:#//.x_:>StringReplace[x,#2->#3]&
ReplaceRepeated
pracy z łańcuchami!$RecursionLimit
razy, co jest2^16
domyślnie, a nie to, że wpływa na twoją odpowiedźReplaceRepeated
jest to kontrolowane przez$RecursionLimit
- Właśnie przetestowałem to, ustawiając limit na 20, a program nadal szczęśliwie zapętla się dla nie kończących się danych wejściowych.ReplaceRepeated
tam oddzielna opcja (co nie może być używany z//.
składni), zwanyMaxIterations
. Że jeden domyślnie 2 ^ 16. (cc @ngenisis)Rubinowy, 29 bajtów
Biorąc pod uwagę 3 argumenty, zastosuj podstawienie do pierwszego, dopóki nie będzie już nic do zastąpienia.
Wyjaśnienie
1
przedwhile
jest po prostu nopgsub!
zwraca ciąg znaków lubnil
jeśli nie wystąpiło podstawienieźródło
Pyke, 6 bajtów
Wypróbuj tutaj!
źródło
/// , 3 bajty
Umieść ciąg B po pierwszym ukośniku, C po drugim i A na końcu, tj .:
Wypróbuj online!
źródło
///
nie akceptuje danych wejściowych w żaden inny sposób./
jest obecne w dowolnym z ciągów wejściowychJavaScript (Firefox 48 lub wcześniejszy), 43 bajty
Podejmuje argumenty curry w odwrotnej kolejności. Firefox miał niestandardowy trzeci parametr, dla
replace
którego określono flagi wyrażeń regularnych. Ten parametr został usunięty w przeglądarce Firefox 49.źródło
SmileBASIC,
7268 bajtówJednym z rzadkich przypadków, w których wykonywanie funkcji jest w rzeczywistości SHORTER w SmileBASIC.
źródło
JavaScript 130 bajtów
JavaScript zastąpi wszystkie jednocześnie, jeśli dasz mu wyrażenie regularne. Aby to wyrażenie regularne działało dla wszystkich wartości, wszystkie znaki używane w wyrażeniach regularnych muszą zostać zastąpione wersją zmiany znaczenia. Na koniec zamiana jest oceniana w celu zastąpienia wszystkich instancji B w A literą C i przekazania jej z powrotem do funkcji.
źródło
q, 15 bajtów
Przykład:
link do pobrania tłumacza
Objaśnienie: ssr , / (zbieżność)
źródło
Cheddar, 37 bajtów
Na telefonie, więc dodanie linku TIO jest nieco trudne. Zasadniczo używa rekurencji, podczas gdy sprawdzanie b jest w a. Rozwiązanie mogło być,
(a,b,c)->a.sub(Regex{b,"cr"},c)
ale z jakiegoś powodu nie działa.źródło
Perl 6 , 40 bajtów
Wypróbuj (jeśli tio.run zostanie zaktualizowany)
Wypróbuj zmienioną wersję
Rozszerzony:
źródło
PHP, 46 bajtów
źródło
PHP, 102 bajty
Przypadki testowe (funkcjonalne)
Przypadek testowy z błędem pętli
źródło
function replace(...){...}
, w przeciwnym razie twoje zgłoszenie jest tylko fragmentem kodu, który domyślnie;)
Java - 157 bajtów
W przypadku pustego wejścia zwraca pusty ciąg.
Awaria z
StackOverflowException
błędem, gdyB
jest pusty lub jest zasilany takimi danymiA/A/A
.Jak to działa:
Niekluczony kod z komentarzami:
źródło
AutoHotkey, 87 bajtów
%1%
,%2%
i%3%
są pierwszymi 3 argumentami przekazanymi do funkcjiJeśli funkcja oczekuje argumentu zmiennego,
%
s są pomijaneZmiana ustawienia rozróżniania wielkości liter kosztuje 19 bajtów, ale bez tego można uzyskać rzeczy takie jak
downpercase is down
.źródło