Wprowadzenie
Wszyscy - zwłaszcza maniacy wśród nas, którzy są fanami - wszyscy pamiętamy tę starą kreskówkę z Far Side :
Najwyraźniej profesor Schwartzman mógł odrobinę poprawić swoje umiejętności programistyczne, zanim zastosuje swój wynalazek. Ale czy możesz to samodzielnie odtworzyć ... używając jak najmniej bajtów?
Dane wejściowe
Musisz stworzyć skrypt, który tłumaczy odgłosy psa na odpowiednio intonowane „Hej”. To jest czysty golf; najniższa liczba bajtów wygrywa.
Twój wkład będzie składał się z kombinacji następujących tokenów:
Bark
,Baark
,Baaark
,Baaaark
, ... (to znaczyB*rk
co najmniej 1a
zastępując gwiazdka)Woof
,Wooof
,Woooof
... (W*f
z co najmniej 2o
a zastąpienie gwiazdka)Grr
,Grrr
,Grrrr
, ..., (G
po co najmniej 2r
S)- Dowolna liczba
.
(kropka),!
(wykrzyknik) i / lub?
(znak zapytania), które mogą wystąpić w dowolnym miejscu na wejściu
Zauważ ponownie, że tokeny Woof
oparte i Grr
oparte zawsze zawsze wymagają co najmniej dwóch o
si r
; Wof
i nieGr
są prawidłowymi tokenami.
Nie ma ograniczenia co do długości tokenów (np. Ile powtórzeń a
może znajdować się w Bark
tokenie); Jednak twój dekoder musi pracować poprawnie tylko dla żetonów wejściowych o wysokości do 10 sumy a
s, o
S lub r
S, aby przejść to wyzwanie.
Dane wyjściowe
Wierny projektowi Schwartzmana, twój program dekodera dla psów musi przetworzyć go na tekst wyjściowy w następujący sposób:
Bark
,Woof
IGrr
staćHey
;Baark
,Wooof
IGrrr
staćHeyy
;Baaark
,Woooof
IGrrrr
staćHeyyy
; itp.- W przypadku wszystkich
Bark
tokenów liczbay
s wHey
tokenie opartym na danych wyjściowych musi być równa liczbiea
s; - W przypadku wszystkich
Woof
tokenów liczbay
s naHey
tokenie opartym na danych wyjściowych musi być o jeden mniejsza niż liczbao
s; - W przypadku wszystkich
Grr
tokenów liczbay
s naHey
tokenie opartym na danych wyjściowych musi być o jeden mniejsza niż liczbar
s; - Cała interpunkcja (
.
,!
i?
) pozostaje niezmieniona.
Pamiętaj, aby usunąć jeden y
z danych wyjściowych tylko dla Woof
s i Grr
s! Wejście Baaaaaaaark?
z 8 a
s stanie się Heyyyyyyyy?
z pasującym zestawem 8 y
s. Jednak Woooooooof?
staje się tylko Heyyyyyyy?
, z 7 y
s.
Ponownie, jeśli możesz sprawić, aby Twój program działał dla tokenów wejściowych o nieograniczonym rozmiarze, to świetnie, ale na potrzeby tego wyzwania Twój program zostanie sprawdzony tylko pod kątem prawidłowego działania tokenów wejściowych, które nie zawierają więcej niż 10 powtarzających się liter .
Zakłada się, że wszystkie Bark
-, Woof
- i Grr
oparte na tokenach w danych wejściowych zaczynają się od wielkich liter. Dlatego nie ma potrzeby radzenia sobie ze zmienianiem się Bark grrr
w Hey heyy
coś podobnego.
Przykładowe wejścia i wyjścia
- Wkład:
Bark. Bark! Bark!!
- Wydajność:
Hey. Hey! Hey!!
- Wkład:
- Dane wejściowe:
Baaaaaark?
(sześća
s) - Wyjście:
Heyyyyyy?
(sześćy
s)
- Dane wejściowe:
- Dane wejściowe:
Grrrrrrrr...
(osiemr
s) - Wyjście:
Heyyyyyyy...
( siedemy
s)
- Dane wejściowe:
- Wkład:
?...!
- Wydajność:
?...!
- Wkład:
- Wkład:
Wooof Woof? Grrrr. Baaaark Grr!
- Wydajność:
Heyy Hey? Heyyy. Heyyyy Hey!
- Wkład:
Odpowiedzi:
Siatkówka ,
24181716 bajtów1 bajt zapisany na podstawie pomysłu w odpowiedzi MT0.
Wypróbuj online!
Wyjaśnienie
To po prostu zamienia wszystkie litery w
y
, ale jeśli są one poprzedzone znakiemf
lubk
, również natychmiast je zastępujemy. Usuwającf
ik
„normalizujemy” długości słów, tak aby wszystkie miały teraz o dwa więcejy
s niż potrzebują.To zamienia pierwsze dwa
y
każdego słowaHe
, kończąc transformację.źródło
Perl,
514139 bajtówStosowanie
Wkład
Wydajność
Jak to działa
Proste podstawianie wyrażeń regularnych za pomocą automatycznego drukowania,
-p
dodając 1 bajt do liczby./ge
wykonuje podstawienie dla każdego wzorca i uruchamia zamianę jako kod.Starsza wersja używała wykrywania trójstronnego, ale Martin Ender zauważył, że nie byłem wystarczająco agresywny, co pozwoliło mi zaoszczędzić 10 bajtów.
msh210 poinformował mnie, że nie potrzebujesz cudzysłowów wokół ciągu
He
, oszczędzając dwa bajty.źródło
He
.Python, 106 bajtów
Próbny
https://repl.it/C6Rr
źródło
JavaScript (ES6) -
57555251 bajtówTest:
Dzięki @MartinEnder za bajty 56 i 51 oraz inspirację dla niektórych innych wiórów.
źródło
Vimscript,
51393733322928 bajtów,Kredyty Regex na golenie 9 kolejnych bajtów: MT0, Martin Ender, msh210
Próbny
Wyjaśnienie:
źródło
\<yy
zamiast\<\hy
?Perl 5, 25 bajtów
Perlowa kopia odpowiedzi Martina Endera na siatkówkę . 24 bajty plus 1 za
-pe
zamiast-e
.źródło
JavaScript,
726664 bajtówEdycja: oddzielone
f=
i funkcja + zmniejszona liczba bajtówźródło
f=
(domyślnie PPCG), więc działa 64 bajtów.Pyke, 35 bajtów
Wypróbuj tutaj!
Generuje Hej, Generuje interpunkcję, zamyka razem, łączy
źródło
Python 3,
140135134 bajtówUżywanie wyrażenia regularnego do znajdowania wystąpień znaków wymiennych.
Edycja: Golfed 1 bajtowy biały znak i 4 bajty po uzyskaniu wartości z wyniku wyszukiwania.
Edycja2 : 1 bajt w golfa („a” Bark nie został poprawnie policzony)
źródło