The Language: Oppification
Zabawny język do mówienia jest tworzony przez zastosowanie następującego procesu do każdego słowa:
- Umieść
op
po każdej spółgłosce. Tak sięCode
stajeCopodope
.
Tak, to jest to. Na potrzeby tego wyzwania y
zawsze jest spółgłoską.
Wyzwanie: przeciwdziałanie opresji
Podane słowo przeciwne, zwróć słowo oryginalne. Dane wejściowe będą zawierać tylko litery. Pierwsza litera może być pisana wielkimi literami. Oryginalne słowo nigdy nie będzie puste i zawsze będzie zawierać samogłoskę.
Przypadki testowe:
Oppified -> Original
a a
I I
itop it
opop op
Opop Op
popopop pop
Copopop Cop
opopopop opop
Kopicopkop Kick
Asopia Asia
soptopopop stop
hopoopopsop hoops
hopoopopedop hooped
ooooohop oooooh
aaaopopaaa aaaopaaa
Popopopsopicoplope Popsicle
gopaloplopopopinopgop galloping
aopopbopopopcopopop aopbopcop
code-golf
string
natural-language
mbomb007
źródło
źródło
op
, więcreplace(/(.)op/, '\1')
żadna z nich nie zawiedzie. Proponuję dodać słowo podobnehoop
lublooped
do przypadków testowych.Odpowiedzi:
V ,
12, 5 bajtówWypróbuj online!
Zaoszczędzono 7 bajtów dzięki uświadomieniu @ Xnor, że ponieważ dane wejściowe muszą być zawsze wyłączone, nie musimy sprawdzać samogłosek.
źródło
...op
Siatkówka , 9 bajtów
Wypróbuj online!
Zamiast sprawdzać, czy poprzedni znak jest spółgłoską, po prostu upewniamy się, że prąd
op
nie sąsiaduje ani z początkiem łańcucha, ani z poprzednim dopasowaniem. Jedyny przypadek, w którym możemy dopasować niepoprawny,op
to jeśli oryginalny ciąg zawierałop
(powodującyopop
) Ale w takim przypadku usuniemy pierwszyop
zamiast drugiego, a wynik będzie taki sam.źródło
loop
?loop
nie jest prawidłowym wejściem, ponieważ nie można uzyskać go poprzez przeciwstawienie się innemu słowu.lopoop
(przeciwna wersjaloop
) jest ważna i nie można jej się sprzeciwićloop
.loop
tolopoopop
.Python , 42 bajty
Wypróbuj online!
Jeśli się nie mylę, można po prostu zastąpić wszystko
?op
z?
nie dbając o samogłosek. Jeśli oryginalny ciąg zawieraop
, oznacza to, że jest on przeciwnyopop
, a zamiana zwraca go doop
i nie dalej. Wynika to z tego, że dopasowanie wzorca dla?op
nie może się pokrywać, więc tylko jedenop
jest usuwany.Rozwiązanie inne niż wyrażenia regularne jest o 5 bajtów dłuższe.
Python , 47 bajtów
Wypróbuj online
źródło
re
po odwołaniu‽Perl 5 , 10 + 1 = 11 bajtów
Wypróbuj online!
Uruchom z
-p
(kara 1 bajtowa); języki gry w golfa mogą automatycznie wykonywać ukryte operacje we / wy, ale Perl potrzebuje takiej opcji.Kiedy zobaczyłem odpowiedź @ xnor , zdałem sobie sprawę, że można ją poprawić za pomocą funkcji wyrażenia regularnego specyficznego dla Perla;
s/a\Kb/c/g
jest równoważnes/ab/ac/g
(innymi słowy,s///
jedyne zastępuje rzeczy po pierwszym\K
). Oto, jak to wygląda w Perlu.źródło
Siatkówka ,
158 bajtówWypróbuj online!
-7 bajtów dzięki Kevin Cruijssen
źródło
[^aeiou]
je.
. Zobacz wyjaśnienie @xnor w jego odpowiedzi na Python .Idź ,
10392 bajtyMusi ... skompilować ... Wbudowane funkcje Go mają dziwne nazwy. : P
Wypróbuj online!
źródło
Haskell (
936261 bajtów)dzięki sugestiom @nimi w komentarzach!
źródło
v
io
tylko raz możesz ją wstawić.notElem
jest krótszy niżnot(...elem...)
. Możesz zastąpić&&
strażnika symbolem,
. Ostatni przypadeka
może być zapisany jakoa x=x
. Nie ma potrzeby()
wx:(a r)
.=="op"
można zastąpić dosłownym dopasowaniem wzorca:a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
x
i"
.PHP , 36 bajtów
Wypróbuj online!
źródło
preg_replace
aby naprawić.$argn
jest zmienną zastrzeżoną, która jest dostępna, gdy PHP jest uruchamiane z-R
opcją z wiersza poleceńJapt , 9 bajtów
Wypróbuj online
źródło
JavaScript (ES6), 35 bajtów
Dodaj
f=
na początku i wywołaj jakf(arg)
.Dziwi mnie, że nikt jeszcze nie opublikował rozwiązania JavaScript ...
Test Snippet
źródło
C (gcc) , 83 bajty
Wypróbuj online!
źródło
/// , 18 bajtów
Wypróbuj online!
Zauważ, że ten fragment chce zastąpić
op
z.
, ale później nie jest zamiennikiem zdefiniowane gdzieop
wystawiona jest z powrotem do łańcucha. Ta druga instrukcjaop
zastąpiłaby.
(a więc wstawiłaby.
wynik końcowy), więc użyłem znaku\
pomiędzyo
i,p
aby przerwać wzór.źródło
APL (Dyalog) , 13 bajtów
Wypróbuj online!
Wystarczy PCRE R EUmieãæ dowolny znak, a następnie „OP” z samego charakteru.
źródło
Kryształ, 39 bajtów
Jak to działa
Po prostu wyszukuje każdą spółgłoskę, a następnie sekwencję
op
. Jeśli tak, wymień tę sekwencję tylko spółgłoska znaleziony przed:([^aeiou])
.Wypróbuj online
źródło
Java 8,
3626 bajtów-10 bajtów zastępując
[^aeiou]
ze.
dzięki @xnor „s wyjaśnienia jego Python odpowiedź .Wypróbuj tutaj.
źródło
Rubinowy ,
342722 + 1 = 23 bajty-4 bajty dzięki RJHunter.
+1 bajt dla
-p
flagi.Wypróbuj online!
źródło
-p
opcji Ruby będzie kosztowało bajt, ale pozwoli na rozpoczęcie skryptu bezpośredniogsub
.sed, 22 bajty
Odczytuje ze STDIN do EOF i wyprowadza ciąg przeciwstawny
Używa tej samej techniki redukcji długości z odpowiedzi Python @ xnor
źródło
R , 29 bajtów
Wypróbuj online!
Podobnie jak większość innych rozwiązań tutaj, przechwytuje postać, po której następuje op, zastępuje ją samą postacią.
źródło