tło
Jest to pierwsza część 3-dołkowego pola golfowego poświęconego przetwarzaniu tekstu. Ogólny pomysł polega na tym, że jeśli weźmiesz tekst wejściowy i przejrzysz go przez wszystkie trzy wyzwania (z niewielką ilością kodu kleju), wypluje pięknie sformatowany akapit. W tym pierwszym wyzwaniu Twoim zadaniem jest dzielenie tekstu za pomocą podanych wzorców dzielenia wyrazów.
Wejście
Twój program pobierze dwa ciągi znaków: fragment tekstu i listę wzorców dzielenia wyrazów. Pierwsze wejście jest po prostu niepustym ciągiem drukowalnych znaków i spacji ASCII; nie będzie zawierać podziałów ani tyld ~
. Drugie wejście to rozdzielona przecinkami lista słów, które składają się z rozdzielonych tyldą sylab małych znaków ASCII. Przykładem jest ex~cel~lent,pro~gram~ming,abil~i~ties
.
Wynik
Twój program zmodyfikuje pierwsze wejście w następujący sposób. Każde słowo (maksymalny ciąg znaków alfabetycznych ASCII), którego dzielona wersja małych liter znajduje się na drugim wejściu, zostanie zastąpiona tą wersją dzieloną, ale wielkość liter zostanie zachowana. W powyższej przykładowej liście, jeśli tekst zawiera słowo Excellent
, należy je zastąpić Ex~cel~lent
; nie Excellently
należy ich jednak modyfikować. Twój wynik będzie taki zmodyfikowany ciąg.
Szczegółowe zasady i punktacja
Możesz przyjąć następujące założenia dotyczące danych wejściowych:
- Pierwsze wejście nie zawiera tyldy i nie ma spacji wiodących, końcowych ani powtarzających się. Nie jest pusty.
- Drugie wejście zawiera co najmniej jedno słowo, a każde słowo zawiera co najmniej dwie sylaby. Każda sylaba jest niepusta.
- Drugie wejście nie zawiera słowa występującego jako sylaba w innym słowie.
W razie potrzeby możesz zmienić kolejność dwóch danych wejściowych i opcjonalnie dodać jeden końcowy znak nowej linii do wyniku.
Możesz napisać funkcję lub pełny program. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Przypadki testowe
Są one wymienione w formacie 1st input [newline] 2nd input [newline] output
.
Excellent programming abilities, you work excellently!
ex~cel~lent,pro~gram~ming,abil~i~ties
Ex~cel~lent pro~gram~ming abil~i~ties, you work excellently!
Superman (sometimes incorrectly spelled "Super-man") is super #&%@ing strong.
su~per,some~times,in~cor~rectly,spell~ing
Superman (some~times in~cor~rectly spelled "Su~per-man") is su~per #&%@ing strong.
IncONsISTent caPItalizATIon!
in~con~sis~tent,cap~i~tal~iza~tion
In~cON~sIS~Tent caP~I~tal~izA~TIon!
Such short words.
awk~ward
Such short words.
Digits123 are456cool789.
dig~its,dig~i~tal,are~cool
Dig~its123 are456cool789.
magic magic
ma~gic
ma~gic ma~gic
Ewentualny błąd dzielenia wyrazów w tym wyzwaniu wynika z tego narzędzia dzielenia wyrazów .
#programming!
Drugie wejście będzie nadal miało wpływ na drugie słowopro~gram~ming
)? Czy liczby też się nie liczą (tzn. Czy dozwolone są tylko znaki alfabetyczne)?Odpowiedzi:
Pip,
6054 bajtówRepozytorium GitHub dla Pip
Pobiera dane wejściowe jako argumenty wiersza poleceń (co wymaga cudzysłowów wokół danych wejściowych 1, zakładając, że zawiera spacje). Nie jest drukowany końcowy znak nowej linii (dodaj znak
x
na końcu programu, aby go dodać).Nieco niepohamowany, z komentarzami:
Przykładowy przebieg:
źródło
Siatkówka , 88 bajtów
Dla celów zliczania każda linia przechodzi do osobnego pliku,
\n
jest zastępowana rzeczywistymi znakami nowej linii i<empty>
jest pustym plikiem. Dla wygody możesz uruchomić powyższy kod z jednego pliku (gdzie<empty>
jest pusta linia), jeśli używasz-s
flagi interpretera.źródło
JavaScript ES6,
117141 znakówTest:
źródło
JavaScript (ES6),
173169Podstawowe wyszukiwanie wyrażeń regularnych i zamień
Skrzypce
Edycja: Naprawiono błąd dla przypadku testowego
magic magic
,ma~gic
źródło
f("magic magic", "ma~gic")
zwraca"ma~gic magic"
Perl, 146
Tylko pierwsza próba, wiele rzeczy można skrócić - będzie kontynuowana jutro!
źródło