pozwolić S
, a
a b
każdy reprezentuje ciąg
Cel: Wpisz ciąg zastąpić standardową funkcję gdzie zastąpić wszystkie wystąpienia a
w ciąg S
z b
tak długo, jak a
nie jest już częścią instancjib
na przykład, jeśli mamy ciąg S
=My oh my that there is a big ol' that
i chcieliśmy zrobić fantazyjny zastąpić a = that
i b = that there
chcielibyśmy zastąpić wszystkie wystąpienia that
z that there
tak długo, jak instancja that
nie jest już instancjąthat there
W takim przypadku dane wyjściowe byłyby następujące: My oh my that there is a big ol' that there
Pierwszy that
nie jest zastępowany, ponieważ jest już częścią wystąpieniathat there
Notatki
Wszystkie 3 dane wejściowe muszą być ciągami zawierającymi tylko drukowane znaki ascii
Dane wejściowe można podać jako 3 osobne ciągi lub listę 3 ciągów
Wejście będzie w porządku
S
,a
,b
o ile nie zaznaczono inaczej w odpowiedziAby
a
zostać uznanym za częśćb
, wszystkie wystąpieniaa
muszą być częścią wystąpieniab
Wyjaśniono niektóre przypadki narożne
Input: ["1222", "22", "122"]
Output: "12122"
W powyższym przykładzie ten ostatni 22
został zastąpiony. Chociaż część tego jest częścią instancji b
, całość NIE jest częścią instancji b
. Ponieważ cała instancja a
nie jest częścią instancji b
, jest zastępowana.
Input: ["123 ", "23", "12"]
Output: "112 "
Ten przypadek testowy ilustruje ten sam przypadek jak powyżej, ale być może w nieco bardziej wyraźny sposób. Ponownie, 2
w środku jest zarówno część wystąpienia, a
jak i część wystąpienia b
, jednak ponieważ wszystko a
nie jest częścią wystąpienia b
, jest ono nadal zastępowane.
Input: ["Empty", "", "p"]
Output: "pEpmptpyp"
W powyższym przypadku testowym zarówno pusty ciąg przed, jak i po nim p
nie są zastępowane, ponieważ można je w całości uznać za część wystąpienia p
.
Inne przypadki testowe
Input: ["aabbaa", "aa", "aabb"]
Output: "aabbaabb"
Input: ["Hello World!", "o", " no"]
Output: "Hell no W norld!"
Input: ["Wow, oh wow, seriously WOW that's... wow", "wow", "WOW,"]
Output: "Wow, oh WOW,, seriously WOW that's... WOW,"
Input: ["Empty", "", "b"]
Output: "bEbmbpbtbyb"
Input: ["Empty", "b", "br"]
Output: "Empty"
Input: ["Empty", "pty", "Empty"]
Output: "Empty"
Input: ["aabbaaa", "aa", "PP"]
Output: "PPbbPPa"
Input: ["121212","1","121"]
Output: "121212"
To jest pytanie do golfa kodowego, więc wygrywa najkrótsza odpowiedź w bajtach.
Odpowiedzi:
Perl 6 , 76 bajtów
Wypróbuj online!
Anonimowy blok kodu, który pobiera dane wejściowe curry, jak
f(a,b)(s)
.Jestem prawie pewien, że pasuje to do treści pytania. Zasadniczo dokonuje podstawienia tylko wtedy, gdy pozycja
a
nie mieści się w żadnym z nakładających się dopasowańb
.źródło
pEpmpptpyp
zamiastpEpmptpyp
1222
,22
,122
] ->12122
. Zaktualizowałem pytanie, aby wyjaśnić i przeprosić, że wcześniej nie wyjaśniłem tej sprawy w rogu.s/(?!$b)$a/$b/g
, że $ a jest pusty, ponieważp
pasujący pusty łańcuch po był(?!p)
potrzebny(?<!p)(?!p)
Węgiel drzewny , 55 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Zainicjuj zmienną, aby pokazać, gdzie zakończyło się ostatnie zastąpione dopasowanie.
Znajdź wszystkie pokrywające się mecze
a
wS
.Jeśli następny mecz nie pokrywa się z ostatnim udanym zamiennikiem ...
... i nie nakłada się też na żadną kopię
b
wS
...... następnie połącz pośredni podciąg między ostatnim dopasowaniem a tym dopasowaniem z
b
ciągiem wyjściowym ...... i zaktualizuj ostatnią zmienną końcową dopasowania do końca tego nowego dopasowania.
Na koniec dodaj resztę
S
i wyślij wynik.źródło
Wolfram Language (Mathematica) ,
431229688 bajtówWypróbuj online!
+79: należy naprawić.
Jak zadzwonić
f[a,S,b]
.źródło
Perl 5 (
-lpF/;/
), 41 bajtówTIO
źródło
1222
,22
,122
] Powinien wyjść12122
, ale wyjścia yours11222
12
s, okazuje się, że zadane przeze mnie pytanie było znacznie trudniejsze, niż początkowo myślałem!123
,23
,12
->112
ale1212
,1
,121
->1212
(dlaczego nie powinno być121212
)S
nie powinny się zgadzaćb
lub w której części pominąć przed rozpoczęciem następnego meczu