Lípínguapua dopo Pêpê


20

Língua do Pê, oder P-Sprache, ist ein Sprachspiel, das in Brasilien und Portugal mit Portugiesisch gesprochen wird. Es ist auch in anderen Sprachen wie Niederländisch und Afrikaans bekannt. ( Wikipedia )

Es gibt einige Dialekte in diesem Sprachspiel. Die verschiedenen Sprachen, mit denen das Spiel gespielt wird, haben sogar ihre eigenen einzigartigen Dialekte. Manche sprechen fließend P-Sprache und die Besten können sogar jeden Text sofort in ihren bevorzugten Dialekt übersetzen!

P Sprache

In dieser Herausforderung werden wir den Double Talk- Dialekt verwenden.

Um Text in die Sprache P zu übersetzen, wird jeder Folge von Vokalen im Text ein einzelnes pZeichen angehängt, gefolgt von einer Kopie der Folge von Vokalen.

Herausforderung

Schreiben Sie eine Funktion oder ein Programm, das einen String als Eingabe akzeptiert und dessen Übersetzung in P-Sprache ausgibt.

  • Die Eingabe besteht nur aus druckbaren ASCII-Zeichen.
  • Die Ausgabe besteht nur aus der übersetzten Eingabe und optional einer nachfolgenden Newline.
  • Vokale sind alle folgenden Zeichen aeiouyAEIOUY.
  • Eine Folge von Vokalen wird durch ein beliebiges anderes Zeichen begrenzt. Die Saite"Aa aa-aa" hat drei Vokalfolgen.
  • Führende und nachfolgende Leerzeichen können optional in der übersetzten Ausgabezeichenfolge weggelassen werden.

Beispiele

""                              =>   ""
"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"

Das doppelte Anführungszeichen "wird verwendet, um die Eingabe- und Ausgabezeichenfolgen in den Beispielen abzugrenzen, aber dieses Zeichen kann natürlich auch in einer gültigen Eingabezeichenfolge vorkommen.


2
Ich bin mir nicht sicher, ob Sie noch jemand zum Stack eingeladen hat. Willkommen bei Code Golf Stack Exchange! Schön spezifizierte erste Herausforderung. :-)
Giuseppe

@ Giuseppe Danke für die freundlichen Worte!
Maarten Bamelis

Antworten:


9

JavaScript (ES6), 35 Byte

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

Probieren Sie es online!

Wobei das spezielle Ersetzungsmuster $&eine übereinstimmende Teilzeichenfolge bedeutet .


8
Ich wusste es nicht $&. In all den Jahren habe ich den gesamten regulären Ausdruck in eine Erfassungsgruppe eingepackt. Wer sagt, dass Codegolf unpraktisch ist ?!
rekursiver

2
Ist $&der üblichere Weg? In Java ist es $0afaik und Retina erlaubt beides. Wusste nicht, $&kam von JavaScript. Oder ist es ein .NET-Regex, der auch von JavaScript verwendet wird?
Kevin Cruijssen


7

Japt , 10 Bytes

r"%y+"_+ip

Versuch es

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"

Verdammt, 2 Minuten zu spät! Ich hatte genau die gleiche Antwort, außer dass ich kurze reguläre Ausdrücke für Japt 2.0 verwendete "%v"->\v
Verkörperung der Ignoranz

@EmbodimentofIgnorance, würden Sie \yanstelle von benötigen \v.
Shaggy

6

Java 8, 40 Bytes

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

Probieren Sie es online aus.

Erläuterung:

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

Regex Erklärung:

(?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 Bytes

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

Probieren Sie es online!


Sans Regex:

Python 3 , 101 Bytes

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))

Probieren Sie es online!

Python 3.8 (Vorabversion): 99 Byte

Erläuterung

Rekursive Funktion, die eine Zeichenfolge sund ein optionales Argument akzeptiert q. Wenn das erste Zeichen von s( i) ein Vokal ist, wird es in der Warteschlange gespeichert q. Andernfalls wird eine Zeichenfolge zurückgegeben, die aus qdem Buchstaben 'p', qdem Zeichen iund dem Ergebnis der rekursiven Funktion besteht, wobei das erste Zeichen der Zeichenfolge entfernt wird. Die Rekursion wird beendet, wenn die Funktion auf eine leere Zeichenfolge stößt s.


2
Ich liebe die Lösung ohne Regex!
Maarten Bamelis

3

05AB1E , 22 20 Bytes

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

05AB1E hat leider keine regulären Ausdrücke.
Ich mag das duplizierte nicht wirklich žÁyнå, aber ich bin momentan ein bisschen zu beschäftigt, um nach Alternativen zu suchen.

-2 Bytes dank @Grimy für die einer Konstante, von der ich nicht einmal wusste, dass sie existiert (und die auf der Wiki-Seite fehlte ..>.>)

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

               # 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)

žÁstatt žOlassen Sie die fallen l.
Grimmy

@Grimy Vielleicht sollte ich anfangen, die info.txt-Datei anstelle der Wiki-Seite zu verwenden. -_- '
Kevin Cruijssen

Beiden fehlen viele Befehle, wenn auch nicht dieselben (hoffentlich. Manchmal frage ich mich, ob in beiden geheime Befehle fehlen).
Grimmy

1
@Grimy Ja, vielleicht sollten wir den Quellcode anstelle der info.txt- oder Wiki-Seiten verwenden. ;)
Kevin Cruijssen

2

Retina 0.8.2 , 17 Bytes

i`[aeiouy]+
$&p$&

Probieren Sie es online! Link enthält Testfälle. Erläuterung: Trivialer Regexp-Ansatz; Das iFlag aktiviert die Unterscheidung zwischen Groß- und Kleinschreibung (Retina verwendet standardmäßig eine globale Übereinstimmung).



1

Rot , 92 Bytes

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

Probieren Sie es online!

Natürlich Red ‚s Parseist viel ausführlicher als regex.


1
Ausführlicher als regexmit Sicherheit, aber das macht es vielleicht auch interessanter. Ich mag das!
Maarten Bamelis

@ MaartenBamelis Danke! Ja, Rot (wie Rebol) ist eine interessante Sprache.
Galen Ivanov


1

Stax , 17 Bytes

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

Führen Sie es aus und debuggen Sie es unter staxlang.xyz!

Entpackt (20 Bytes) und Erklärung:

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

In Stax gibt es keine regulären Ausdrücke, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird. In der Dokumentation wird nicht beschrieben, wie ein Block als Ersatz verwendet wird, aber es funktioniert trotzdem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.