Copodope Gopolopfop

15

The Language: Oppification

Zabawny język do mówienia jest tworzony przez zastosowanie następującego procesu do każdego słowa:

  1. Umieść oppo każdej spółgłosce. Tak się Codestaje Copodope.

Tak, to jest to. Na potrzeby tego wyzwania yzawsze 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
mbomb007
źródło
8
Żaden z przypadków testowych nie zawiera samogłoski, po której następuje odpowiedź op, więc replace(/(.)op/, '\1')żadna z nich nie zawiedzie. Proponuję dodać słowo podobne hooplub loopeddo przypadków testowych.
Klamka
@ mbomb007 Dodałem kilka trudniejszych przypadków testowych.
xnor
Czy odpowiedź musi działać tylko w przypadku wstępnie zatwierdzonych danych wejściowych lub wszystkich danych wejściowych?
CalculatorFeline
@CalculatorFeline „Biorąc pod uwagę słowo przeciwne”
mbomb007
2
Czy możemy dodać „mopmopmopbopopop” jako przypadek testowy? :)
user2390246

Odpowiedzi:

10

V , 12 , 5 bajtów

Í.“op

Wypróbuj online!

00000000: cd2e 936f 70                             ...op

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.

James
źródło
Hmm, wydaje się to takie trudne do pokonania ...
Erik the Outgolfer
4
The hex dump: ...op
Rozśmiesza
12

Siatkówka , 9 bajtów

(?!\G)op

Wypróbuj online!

Zamiast sprawdzać, czy poprzedni znak jest spółgłoską, po prostu upewniamy się, że prąd opnie sąsiaduje ani z początkiem łańcucha, ani z poprzednim dopasowaniem. Jedyny przypadek, w którym możemy dopasować niepoprawny, opto jeśli oryginalny ciąg zawierał op(powodujący opop) Ale w takim przypadku usuniemy pierwszy opzamiast drugiego, a wynik będzie taki sam.

Martin Ender
źródło
Czy to nie dałoby niepoprawnej odpowiedzi na takie dane wejściowe loop?
Leo
4
@Leo loopnie jest prawidłowym wejściem, ponieważ nie można uzyskać go poprzez przeciwstawienie się innemu słowu.
Martin Ender,
@MartinEnder Ale lopoop(przeciwna wersja loop) jest ważna i nie można jej się sprzeciwić loop.
Imus
@Imus nie, przeciwna wersja loopto lopoopop.
Martin Ender
zorientowałem się, że mój błąd również wkrótce po opublikowaniu go :) był zbyt powolny w usuwaniu. Słuszna uwaga.
Imus
10

Python , 42 bajty

lambda s:re.sub('(.)op',r'\1',s)
import re

Wypróbuj online!

Jeśli się nie mylę, można po prostu zastąpić wszystko ?opz ?nie dbając o samogłosek. Jeśli oryginalny ciąg zawiera op, oznacza to, że jest on przeciwny opop, a zamiana zwraca go do opi nie dalej. Wynika to z tego, że dopasowanie wzorca dla ?opnie może się pokrywać, więc tylko jeden opjest usuwany.

Rozwiązanie inne niż wyrażenia regularne jest o 5 bajtów dłuższe.

Python , 47 bajtów

f=lambda s:s and s[0]+f(s[1+2*(s[1:3]=='op'):])

Wypróbuj online

xnor
źródło
3
Możesz zaimportować re po odwołaniu‽
Adám
4
@ Adám Python nie ocenia go, gdy funkcja jest zdefiniowana, tylko gdy jest wywoływana.
xnor
4
Wow, minęło trochę czasu, odkąd widziałem, jak ktoś używa interrobangu. Myślę, że jest to sposób na odrobinę golfa w twoim komentarzu.
Baldrickk
1
@Baldrickk Ale w bajtach interrobang ma> = bajty niż tylko ciąg „?!”
MilkyWay90
5

Perl 5 , 10 + 1 = 11 bajtów

s/.\Kop//g

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/gjest równoważne s/ab/ac/g(innymi słowy, s///jedyne zastępuje rzeczy po pierwszym \K). Oto, jak to wygląda w Perlu.


źródło
3

Idź , 103 92 bajty

Musi ... skompilować ... Wbudowane funkcje Go mają dziwne nazwy. : P

import."regexp"
func f(s string)string{return MustCompile("(.)op").ReplaceAllString(s,"$1")}

Wypróbuj online!

całkowicie ludzki
źródło
3

Haskell (93 62 61 bajtów)

a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
a(x:r)=x:a r
a x=x

dzięki sugestiom @nimi w komentarzach!

Davide Spataro
źródło
2
Kilka wskazówek: w trakcie używania vi otylko raz możesz ją wstawić. notElemjest krótszy niż not(...elem...). Możesz zastąpić &&strażnika symbolem ,. Ostatni przypadek amoże być zapisany jako a x=x. Nie ma potrzeby ()w x:(a r).
nimi
1
... och, a test na =="op"można zastąpić dosłownym dopasowaniem wzorca:a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
nimi
Zaktualizowano dzięki @nimi
Davide Spataro
1
Jeszcze jeden bajt do zapisania: możesz pominąć spację między xi ".
nimi
3

PHP , 36 bajtów

<?=preg_replace("#.\Kop#","",$argn);

Wypróbuj online!

Jörg Hülsermann
źródło
Jak to ma być uruchomione?
Titus
Nie udaje się to w dwóch pierwszych przypadkach testowych. Użyj, preg_replaceaby naprawić.
Tytus
Możesz zapisać 3 bajty, zmieniając nazwę zmiennej na dowolny pojedynczy znak, na przykład $ a
junkfoodjunkie
@junkfoodjunkie $argnjest zmienną zastrzeżoną, która jest dostępna, gdy PHP jest uruchamiane z -Ropcją z wiersza poleceń
Jörg Hülsermann
Ach, dobra, nie wiedziałem o tym. Tester online nie bierze tego pod uwagę. :-)
junkfoodjunkie
1

JavaScript (ES6), 35 bajtów

Dodaj f=na początku i wywołaj jak f(arg).

s=>s.replace(/([^aeiou])op/gi,"$1")

Dziwi mnie, że nikt jeszcze nie opublikował rozwiązania JavaScript ...

Test Snippet

let f=
s=>s.replace(/([^aeiou])op/gi,"$1")

console.log("a" + " -> " + f("a"));
console.log("I" + " -> " + f("I"));
console.log("itop" + " -> " + f("itop"));
console.log("opop" + " -> " + f("opop"));
console.log("Opop" + " -> " + f("Opop"));
console.log("popopop" + " -> " + f("popopop"));
console.log("Copopop" + " -> " + f("Copopop"));
console.log("opopopop" + " -> " + f("opopopop"));
console.log("Kopicopkop" + " -> " + f("Kopicopkop"));
console.log("Asopia" + " -> " + f("Asopia"));
console.log("soptopopop" + " -> " + f("soptopopop"));
console.log("hopoopopsop" + " -> " + f("hopoopopsop"));
console.log("hopoopopedop" + " -> " + f("hopoopopedop"));
console.log("ooooohop" + " -> " + f("ooooohop"));
console.log("aaaopopaaa" + " -> " + f("aaaopopaaa"));
console.log("Popopopsopicoplope" + " -> " + f("Popopopsopicoplope"));
console.log("gopaloplopopopinopgop" + " -> " + f("gopaloplopopopinopgop"));
console.log("aopopbopopopcopopop" + " -> " + f("aopopbopopopcopopop"));

Arjun
źródło
0

/// , 18 bajtów

/op/.//../o\p//.//

Wypróbuj online!

Zauważ, że ten fragment chce zastąpić opz ., ale później nie jest zamiennikiem zdefiniowane gdzie opwystawiona jest z powrotem do łańcucha. Ta druga instrukcja opzastąpiłaby .(a więc wstawiłaby .wynik końcowy), więc użyłem znaku \pomiędzy oi, paby przerwać wzór.

Steenbergh
źródło
0

Kryształ, 39 bajtów

def o(s)s.gsub(/([^aeiou])op/,"\\1")end

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

Domii
źródło
0

Rubinowy , 34 27 22 + 1 = 23 bajty

-4 bajty dzięki RJHunter.

+1 bajt dla -pflagi.

$_.gsub!(/(.)op/,'\1')

Wypróbuj online!

całkowicie ludzki
źródło
Użycie -popcji Ruby będzie kosztowało bajt, ale pozwoli na rozpoczęcie skryptu bezpośrednio gsub.
RJHunter
0

sed, 22 bajty

sed -E 's/(.)op/\1/g'

Odczytuje ze STDIN do EOF i wyprowadza ciąg przeciwstawny
Używa tej samej techniki redukcji długości z odpowiedzi Python @ xnor

Arc676
źródło
0

R , 29 bajtów

gsub("(.)op","\\1",scan(,''))

Wypróbuj online!

Podobnie jak większość innych rozwiązań tutaj, przechwytuje postać, po której następuje op, zastępuje ją samą postacią.

Sumner18
źródło