Lípínguapua dopo Pêpê


20

Língua do Pê, lub P Language, to gra językowa używana w Brazylii i Portugalii z portugalskim. Jest również znany w innych językach, takich jak holenderski i afrikaans. ( Wikipedia )

W tej grze językowej jest kilka dialektów. Różne języki, w które gra się, mają nawet własne, unikalne dialekty. Niektóre osoby biegle władają językiem P, a najlepsi potrafią natychmiast tłumaczyć dowolny tekst na wybrany przez siebie dialekt!

P Język

W tym wyzwaniu wykorzystamy dialekt Double Talk .

Aby przetłumaczyć tekst na język P, do dowolnej sekwencji samogłosek w tekście dołącza się pojedynczy pznak, a następnie kopię sekwencji samogłosek.

Wyzwanie

Napisz funkcję lub program, który przyjmuje ciąg znaków jako dane wejściowe i wysyła jego tłumaczenie w języku P.

  • Dane wejściowe składają się tylko z drukowalnych znaków ASCII.
  • Wynik składa się tylko z przetłumaczonego wejścia i opcjonalnie końcowego nowego wiersza.
  • Samogłoski to dowolne z następujących postaci aeiouyAEIOUY.
  • Sekwencja samogłosek jest wyznaczana przez dowolny inny znak. Ciąg "Aa aa-aa"ma trzy sekwencje samogłosek.
  • Początkowe i końcowe białe znaki można opcjonalnie pominąć w przetłumaczonym ciągu wyjściowym.

Przykłady

""                              =>   ""
"Lingua do Pe"                  =>   "Lipinguapua dopo Pepe"
"Hello world!"                  =>   "Hepellopo woporld!"
"Aa aa-aa"                      =>   "AapAa aapaa-aapaa"
"This should be easy, right?"   =>   "Thipis shoupould bepe eapeasypy, ripight?"
"WHAT ABOUT CAPS?"              =>   "WHApAT ApABOUpOUT CApAPS?"
"   Hi "                        =>   "   Hipi " or "Hipi"

Znak podwójnego cudzysłowu "jest używany do ograniczenia ciągów wejściowych i wyjściowych w przykładach, ale oczywiście znak ten może również pojawić się w dowolnym prawidłowym ciągu wejściowym.


2
Nie jestem pewien, czy ktoś jeszcze powitał cię na stosie, więc: witaj w Code Golf Stack Exchange! Ładnie określone pierwsze wyzwanie. :-)
Giuseppe

@Giuseppe Dzięki za miłe słowa!
Maarten Bamelis,

Również w języku hiszpańskim es.wikipedia.org/wiki/Jerigonza
leonbloy

Odpowiedzi:


9

JavaScript (ES6), 35 bajtów

s=>s.replace(/[aeiouy]+/gi,'$&p$&')

Wypróbuj online!

Gdzie specjalny wzór zastępczy $&oznacza dopasowane podłoże .


8
Nie wiedziałem o tym $&. Przez te wszystkie lata owijałem całe wyrażenie regularne w grupę przechwytującą. Kto powiedział, że golf jest niepraktyczny ?!
rekurencyjny

2
Czy jest $&to bardziej powszechny sposób? W Javie jest $0afaik, a Retina pozwala na jedno i drugie. Nie wiedziałem, że $&pochodzi z JavaScript. A może jest to regex o smaku .NET i JavaScript go używa?
Kevin Cruijssen


7

Japt , 10 bajtów

r"%y+"_+ip

Spróbuj

r"%y+"_+ip     :Implicit input of string
r              :Replace
 "%y+"         :RegEx /[aeiouy]+/gi
      _        :Pass each match through a function
       +       :  Append a copy of the match
        ip     :  Prepended with "p"

Cholera, 2 minuty za późno! Miałem dokładnie tę samą odpowiedź, z wyjątkiem tego, że użyłem krótkich wyrażeń regularnych Japt 2.0 "%v"->\v
of Ignorance

@EmbodimentofIgnorance, będziesz potrzebować \yzamiast \v.
Shaggy

6

Java 8, 40 bajtów

s->s.replaceAll("(?i)[aeiouy]+","$0p$0")

Wypróbuj online.

Wyjaśnienie:

s->                              // Method with String as both parameter and return-type
  s.replaceAll("(?i)[aeiouy]+",  //  Replace the regex matches
               "$0p$0")          //  With this replacement

Wyjaśnienie Regex:

(?i)[aeiouy]+                    // MATCH:
(?i)                             //  Enable case insensitivity
            +                    //  Match one or more
    [aeiouy]                     //  Adjacent vowel characters

$0p$0                            // REPLACEMENT:
$0                               //  The entire match (the vowel 'sequence')
  p                              //  Appended with a literal "p"
   $0                            //  Appended with the entire match again


3

Python 3 , 55 bajtów

lambda s:re.sub('([aeiouy]+)',r'\1p\1',s,0,2)
import re

Wypróbuj online!


Sans regex:

Python 3 , 101 bajtów

def f(s,q=''):i=s[:1];t=i in{*'aeiouyAEIOUY'};return(q+(q!='')*'p'+q+i)*0**t+(s and f(s[1:],(q+i)*t))

Wypróbuj online!

Python 3.8 (wersja wstępna): 99 bajtów

Wyjaśnienie

Funkcja rekurencyjna, przyjmująca ciąg si opcjonalny argument q. Jeśli pierwszym znakiem s( i) jest samogłoska, jest ona przechowywana w kolejce q. Jeśli nie, zwracany jest ciąg znaków, który składa się z qlitery 'p', qznaku ii wyniku funkcji rekurencyjnej, przy czym pierwszy znak łańcucha zostaje usunięty. Rekursja zatrzymuje się, gdy funkcja napotka pusty ciąg s.


2
Uwielbiam rozwiązanie bez wyrażeń regularnych!
Maarten Bamelis

3

05AB1E , 22 20 bajtów

.γžÁyå}vyžÁyнåi'py}J

05AB1E niestety nie ma żadnych wyrażeń regularnych.
Nie podoba mi się ten duplikat žÁyнå, ale obecnie jestem zbyt zajęty, aby szukać alternatyw…

-2 bajty dzięki @Grimy za pokazanie mi stałej, o której istnieniu nawet nie wiedziałem (i której brakowało na stronie Wiki ..>.>)

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

               # Group the characters in the (implicit) input-string by:
  žÁ             #  Push vowels builtin: "aeiouyAEIOUY"
    yå           #  And check if the current character is in this string
 }v              # After grouping: loop over each group `y`:
   y             #  Push group `y`
    žÁyнåi   }   #  If the first character of the group is a vowel:
          'p    '#   Push a "p"
            y    #   And push group `y` again
              J  #  Join everything on the stack together to a single string
                 # (after the loop, implicitly output the result)

žÁzamiast žOpozwala upuścić l.
Grimmy

@Grimy Może powinienem zacząć używać pliku info.txt zamiast strony Wiki .. -_- '
Kevin Cruijssen

W obu brakuje wielu poleceń, choć nie tych samych (mam nadzieję. Czasami zastanawiam się, czy brakuje obu tajnych poleceń).
Grimmy

1
@Grimy Tak, może powinniśmy użyć kodu źródłowego zamiast stron info.txt lub Wiki. ;)
Kevin Cruijssen

2

Retina 0.8.2 , 17 bajtów

i`[aeiouy]+
$&p$&

Wypróbuj online! Link zawiera przypadki testowe. Objaśnienie: Trywialne podejście wyrażenia regularnego; gdy iobroty flaga niewrażliwości na obudowie (Retina już domyślnie na globalnym meczu).



1

Czerwony , 92 bajty

func[s][v: charset"aeiouyAEIOUY"parse s[any[to v copy t any v insert(rejoin["p"t])| skip]]s]

Wypróbuj online!

Oczywiście Red 's Parsejest dużo bardziej gadatliwy niż regex.


1
Bardziej gadatliwy niż regexna pewno, ale może to też czyni go ciekawszym. Lubię to!
Maarten Bamelis

@MaartenBamelis Dziękujemy! Tak, czerwony (jak Rebol) jest interesującym językiem.
Galen Iwanow


1

Stax , 17 bajtów

àº`≈Zö=q╦ⁿ↔èblTï÷

Uruchom i debuguj go na staxlang.xyz!

Rozpakowane (20 bajtów) i objaśnienie:

Vv'y+c^+:}'++{'pnL}R
                   R    Regex replace using
                        Pattern:
Vv'y+                     Push "aeiou", push "y", and concatenate
     c^+                  Copy, convert copy to all caps, and concatenate
        :}                Enclose in []
          '++             Push "+" and concatenate
                        And replacement:
             {    }       Block:
              'p            Push "p"
                n           Copy second item (matching substring) to top
                 L          Listify
                          Implicit concatenate
                        Implicit print

Brak wyrażeń regularnych bez rozróżniania wielkości liter w Stax, a wbudowane samogłoski nie zawierają Y. Dokumentacja nie powie ci o używaniu bloku jako zamiennika, ale mimo to jest działającą funkcją.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.