Jest trochę ulepszonej gry rozgrzewkowej, w której ustawiasz się w kręgu i wysyłasz zamki błyskawiczne, zaps i zopsy, wskazując na osobę i wypowiadając następne słowo w sekwencji, a następnie robią to samo, dopóki wszyscy się nie rozgrzeją lub cokolwiek.
Twoim zadaniem jest stworzenie programu, który poda kolejne słowo w sekwencji, podając słowo wejściowe. (Zip -> Zap -> Zop -> Zip) Ponieważ istnieje wiele różnych sposobów wypowiedzenia tych trzech słów i sprytów, które można do nich dodać, twój program powinien naśladować powielanie liter i liter oraz nosić sufiksy.
W celu rozwinięcia, dane wejściowe będą wynosić jeden lub więcej Z
s, następnie jeden lub więcej I
s, A
s lub O
s (cała ta sama litera), następnie jeden lub więcej P
s (wszystkie litery do tego momentu mogą być pisane wielkimi literami), po których następuje jakiś dowolny sufiks (który może być pusty). Należy pozostawić serie Z
S i P
S, jak również przyrostek dokładnie tak odbierane, ale następnie zmień I
S do A
S, A
S do O
S lub O
S, aby I
s, przy zachowaniu sprawy na każdym kroku.
Przykładowe przypadki testowe
zip ==> zap
zAp ==> zOp
ZOP ==> ZIP
ZiiP ==> ZaaP
ZZaapp ==> ZZoopp
zzzzOoOPppP ==> zzzzIiIPppP
Zipperoni ==> Zapperoni
ZAPsky ==> ZOPsky
ZoPtOn ==> ZiPtOn
zipzip ==> zapzip
zapzopzip ==> zopzopzip
zoopzaap ==> ziipzaap
Zasady i uwagi
- Możesz użyć dowolnego wygodnego kodowania znaków dla danych wejściowych i wyjściowych, pod warunkiem, że obsługuje on wszystkie litery ASCII i że został utworzony przed tym wyzwaniem.
- Możesz założyć, że słowo wejściowe jest odmianą Zip, Zap lub Zop. Wszystkie pozostałe dane wejściowe powodują niezdefiniowane zachowanie.
- Prawidłowe dane wejściowe będą w pełni pasować do wyrażenia regularnego
Z+(I+|A+|O+)P+.*
(w przypadku mieszanym)
- Prawidłowe dane wejściowe będą w pełni pasować do wyrażenia regularnego
Wesołego golfa!
z
a pierwszymip
. Sufiks może zawierać wszystko.Odpowiedzi:
JavaScript (Node.js) ,
69 63 5754 bajtówWypróbuj online!
W jaki sposób?
Możemy przetwarzać ciąg wejściowys znak po znaku.
Ponownie wykorzystujemys jako flagę: jak tylko wartość liczbowa zostanie w nim zapisana, wiemy, że nie możemy aktualizować niczego innego.
Aby zidentyfikować4 i kody ASCII innych liter na początku łańcucha (
"p"
(112) i"P"
(80), używamy fakt, że ich kody ASCII są wielokrotnością"z"
,"Z"
i samogłoski) nie są.Obrócić samogłoskę kodzie ASCIIc do jego odpowiednika n pozostawiając
z
iZ
zmian używamy następujące funkcje:Skomentował
źródło
C (gcc) ,
81 ... 61 4846 bajtówZaoszczędź 2 bajty dzięki @Grimy
Port mojej odpowiedzi JS . Wyjście poprzez modyfikację ciągu wejściowego.
Wypróbuj online!
Skomentował
źródło
*++s%4
W pewnym momencie próbowałem, ale przeoczyłem wynikową optymalizację ...)Stax , 19 bajtów
Uruchom i debuguj
źródło
Retina 0.8.2 , 21 bajtów
Wypróbuj online! Transliteruje litery do pierwszej włącznie
p
, chociażz
ip
nie są w sekcji transliteracji, więc nie ma to wpływu. PierwszyO
jest cytowany, ponieważ zwykle się rozwija,13567
a drugio
jest cytowany, ponieważ również jest magiczny; w pierwszej części transliteracji rozwija się do drugiego łańcucha. Wynikowa transliteracja jest zatem odIAOIiaoi
doAOIiaoi
momentu usunięcia zduplikowanych liter źródłowych w wynikuIAOiao
doAOIaoi
.źródło
C, 43 bajty
Wypróbuj online!
Na podstawie odpowiedzi Arnaulda . Przeprowadziłem wyszukiwanie metodą brute-force, aby znaleźć najkrótszą formułę, która zmienia a => o, o => i, i => a, z => z.
źródło
Japt ,
2220 bajtów-2 bajty dzięki Oliverowi
Wypróbuj online!
źródło
R ,
11076 bajtów-36 bajtów dzięki Krillowi
Ta funkcja przyjmuje dane wejściowe jednego ciągu.
Wypróbuj online!
źródło
s
który będziemy tłumaczyć, a następnie zastępując go przetłumaczoną kopią: 76 bajtówPerl 6 ,
4133 bajtówWypróbuj online!
Proste podstawianie bez rozróżniania wielkości liter w celu przesunięcia sekcji samogłoski.
źródło
Python 3.8 (wersja wstępna) ,
8178 bajtówWypróbuj online!
Python 2 , 98 bajtów
Wypróbuj online!
źródło
Java (JDK) , 52 bajty
Wypróbuj online!
źródło
s->{for(int i=0;s[++i]%4>0;)s[i]^=s[i]%16*36%98%22;}
52 bajty .Perl 5, 31 bajtów
TIO
źródło
SNOBOL4 (CSNOBOL4) , 183 bajty
Wypróbuj online!
źródło
Python 2 , 84 bajtów
Wypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 60 bajtów
Na podstawie odpowiedzi C Grimy'ego.
Wypróbuj online!
źródło
aoi
-owowyki, a nie tylko te przed pierwszymp
/P
. Jedną rzeczą do golfa:("iao".IndexOf((char)(c|32))+1)%4
może być-~"iao".IndexOf((char)(c|32))%4
C / C ++ (kompilator VC ++) 192 bajty
jest to raczej naiwna próba, ale i tak
jest to nieco bardziej czytelna wersja
źródło
Rubinowy , 40 bajtów
Wypróbuj online!
źródło
05AB1E (starsza wersja) , 22 bajty
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Można zdecydowanie zagrać w golfa trochę więcej ..
Używa starszej wersji 05AB1E zamiast przepisywania Elixir, ponieważ
+
łączy pola na listach o tej samej długości, podczas gdy nowa wersja wymagałaby zamiast tego pary-zip-join‚øJ
.Wyjaśnienie:
źródło
PHP, 30 bajtów
zbyt proste jak na TiO:
Uruchom jako potok z
-nF
. W PHP 7.2 wstaw literały ciągów w cudzysłów.źródło
oia
samogłoski zamiast tylko tych przed pierwszymp
/P
, prawda?