Zainspirowany tym skromnym pytaniem StackOverflow .
Pomysł jest prosty; biorąc pod uwagę Ciąg i tablicę Ciągów, usuń wszelkie wystąpienia słów w tablicy (ignorując wielkość liter) z wejściowego Ciągu innego niż pierwszy, a także wszelkie dodatkowe białe znaki, które może zostawić. Słowa muszą pasować do całych słów w ciągu wejściowym, a nie do części słów.
na przykład "A cat called matt sat on a mat and wore a hat A cat called matt sat on a mat and wore a hat", ["cat", "mat"]
powinien generować"A cat called matt sat on a mat and wore a hat A called matt sat on a and wore a hat"
Wejście
- Dane wejściowe można traktować jako ciąg znaków oraz tablicę ciągów lub tablicę ciągów, w których ciąg wejściowy jest pierwszym elementem. Parametry te mogą być w dowolnej kolejności.
- Ciąg wejściowy nie może być traktowany jako lista ciągów rozdzielanych spacjami.
- Łańcuch wejściowy nie będzie zawierał spacji wiodących, końcowych ani kolejnych.
- Wszystkie dane wejściowe będą zawierać tylko znaki [A-Za-z0-9], z wyjątkiem ciągu wejściowego również ze spacjami.
- Tablica wejściowa może być pusta lub zawierać słowa spoza wejściowego ciągu znaków.
Wynik
- Dane wyjściowe mogą być albo wartością zwracaną z funkcji, albo drukowane do STDOUT
- Dane wyjściowe muszą być w tym samym przypadku, co oryginalny ciąg
Przypadki testowe
the blue frog lived in a blue house, [blue] -> the blue frog lived in a house
he liked to read but was filled with dread wherever he would tread while he read, [read] -> he liked to read but was filled with dread wherever he would tread while he
this sentence has no matches, [ten, cheese] -> this sentence has no matches
this one will also stay intact, [] -> this one will also stay intact
All the faith he had had had had no effect on the outcome of his life, [had] -> All the faith he had no effect on the outcome of his life
5 times 5 is 25, [5, 6] -> 5 times is 25
Case for different case, [case] -> Case for different
the letters in the array are in a different case, [In] -> the letters in the array are a different case
This is a test Will this be correct Both will be removed, [this,will] -> This is a test Will be correct Both be removed
Ponieważ jest to kod golfowy, wygrywa najmniejsza liczba bajtów!
This is a test Will this be correct Both will be removed
+this will
. Drugie dwa słowa zostały poprawnie usunięte, ale z jakiegoś powodu również usunęłybe
po drugimwill
.@B=<>;$_=join$",grep!(/^$_$/xi~~@B&&$v{+lc}++),@F
lc
zostać wezwanym bez parens. Niesamowite! A użycie wyrażenia regularnego względem tablicy jest znacznie lepsze, dziękuję! Z trudem pamiętam wszystkie twoje wskazówki!Pyth, 27 bajtów
Wypróbuj online
Wyjaśnienie
Jestem pewien, że 10 bajtów dla sprawdzania bez rozróżniania wielkości liter można zmniejszyć, ale nie wiem, jak to zrobić.
źródło
Stax , 21 bajtów CP437
25 bajtów po rozpakowaniu,
Wynikiem jest tablica. Wygodnym wyjściem dla Stax jest jeden element na linię.
Uruchom i debuguj online!
Wyjaśnienie
źródło
Perl 6 , 49 bajtów
Sprawdź to
Rozszerzony:
źródło
Perl 5 ,
5048 bajtówObejmuje
+1
dla-p
Podaj ciąg docelowy, po którym następuje każde słowo filtru, w osobnych wierszach STDIN:
Jest
chop
to potrzebne tylko do poprawienia spacji końcowej w przypadku usunięcia ostatniego słowaTylko kod:
Wypróbuj online!
źródło
JavaScript (ES6), 98 bajtów
źródło
K4 , 41 bajtów
Rozwiązanie:
Przykłady:
Wyjaśnienie:
Podziel na białe znaki, małe litery na obu wejściach, wyszukaj dopasowania, usuń wszystkie wystąpienia oprócz pierwszego, ponownie połącz ciąg znaków.
źródło
JavaScript (Node.js) , 75 bajtów
Wypróbuj online!
źródło
f=
w swojej liczbie bajtów. Można również zapisać bajt przez currying parametry, zastępując(s,a)=>
przys=>a=>
czym wywołanie funkcji zf(s)(a)
.JavaScript ES6, 78 bajtów
Jak to działa:
źródło
f
do wywołania rekurencyjnego, funkcja nienazwana również byłaby poprawnym przesłaniem, więc możesz zapisać dwa bajty, upuszczającf=
.PowerShell v3 lub nowszy, 104 bajty
Kosztem jednego bajtu można go uruchomić w PS 2.0, zastępując
$Matches.0
go$Matches[0]
.Długa wersja:
Zastosowanie
Zapisz jako Whokolwiek.ps1 i wywołaj z ciągiem znaków i słowami jako argumentami. Jeśli trzeba przekazać więcej niż jedno słowo, należy je zawinąć w @ ():
Alternatywnie bez pliku (można wkleić bezpośrednio do konsoli PS):
Zapisz skrypt jako ScriptBlock (wewnątrz nawiasów klamrowych) w zmiennej, a następnie wywołaj jego metodę Invoke () lub użyj go z Invoke-Command:
źródło
JavaScript, 150 bajtów
źródło
Czysty ,
153142138134 bajtówWypróbuj online!
Definiuje funkcję
$ :: String [String] -> String
, praktycznie dosłownie robiąc to, co opisuje wyzwanie. Znajduje i usuwa każde wystąpienie po pierwszym, dla każdego słowa docelowego.źródło
Siatkówka,
4637 bajtów-14 bajtów dzięki @Neil i +5 bajtów za naprawę błędu.
Dane wejściowe w formacie
word1,word2,word3,sentence
, ponieważ nie jestem pewien, jak wprowadzić dane wieloliniowe (gdzie dane wejściowe są używane inaczej).Wyjaśnienie:
Wypróbuj online.
źródło
+i`((.+),.*\2.* )\2( |$)
drugiej,$1
ale zauważam, że twój kod ioften,he intended to keep ten geese
tak nie działa .\b
zamiast(^|,)
, ale złą wiadomością jest, że myślę, że potrzebujesz\b\3\b
(chociaż nie opracowałem jeszcze odpowiedniego przypadku testowego).Czerwony , 98 bajtów
Wypróbuj online!
źródło
Łuska , 13 bajtów
Bierze listę ciągów i pojedynczy ciąg jako argumenty, w tej kolejności. Zakłada, że lista nie zawiera duplikatów. Wypróbuj online!
Wyjaśnienie
źródło
Min. 125 bajtów
Dane wejściowe są
quot
na stosie z ciągiem wejściowym jako pierwszym elementem, aquot
zduplikowanymi łańcuchami jako drugim elementem, tjźródło
Python 3 , 168 bajtów
Wypróbuj online!
źródło
AWK , 120 bajtów
Wypróbuj online!
Część „usuń białe znaki” sprawiła, że było to nieco trudniejsze, niż początkowo myślałem. Ustawienie pola na
""
usuwa pole, ale pozostawia dodatkowy separator.Łącze TIO ma 28 dodatkowych bajtów, aby umożliwić wiele wpisów.
Dane wejściowe podawane są w 2 liniach. Pierwszy wiersz to lista słów, a drugi to „zdanie”. Zauważ, że „słowo” i „słowo” nie są uważane za identyczne z dołączoną interpunkcją. Posiadanie wymagań interpunkcyjnych sprawiłoby, że byłby to jeszcze bardziej zabawny problem.
źródło
Rubinowy ,
63 61 6059 bajtówWypróbuj online!
Krótsza wersja, która rozróżnia wielkość liter i zawiesza ~ co 10 15 razy z powodu losowości (37 bajtów)
źródło
Python 2 , 140 bajtów
Wypróbuj online!
Wyjaśnienie:
re.sub(..)
może przyjąć jako argument funkcję zamiast ciągu zastępującego. Mamy więc trochę fantazyjnej lambdy. Wywoływana jest funkcja dla każdego wystąpienia wzorca i do tej funkcji przekazywany jest jeden obiekt - matchobject. Ten obiekt zawiera informacje o założonym wystąpieniu. Interesuje mnie indeks tego wystąpienia, który można odzyskać przezstart()
lubend()
funkcję. Późniejszy jest krótszy, więc jest używany.Aby wykluczyć zamianę pierwszego wystąpienia słowa, użyłem innej funkcji wyszukiwania wyrażenia regularnego, aby uzyskać dokładnie pierwszą, a następnie porównać indeksy, używając tego samego
end()
Flaga
re.I
to krótka wersjare.IGNORECASES
źródło