LípínguapuadopoPêpê


20

LínguadoPê、またはP Languageは、ブラジルとポルトガルでポルトガル語で話される言語ゲームです。オランダ語やアフリカーンス語など、他の言語でも知られています。(ウィキペディア

この言語ゲームにはいくつかの方言があります。ゲームで使用されるさまざまな言語には、独自の方言があります。一部の人々はP言語を話すことに堪能で、最高の人はその場で好きな方言にテキストを翻訳することさえできます!

P言語

この課題では、Double Talk方言を使用します。

テキストをP言語に翻訳するには、テキスト内の母音のシーケンスに1 p文字を追加し、その後に母音のシーケンスのコピーを追加します。

チャレンジ

文字列を入力として受け入れ、その翻訳をP言語で出力する関数またはプログラムを作成します。

  • 入力は、印刷可能なASCII文字のみで構成されます。
  • 出力は、翻訳された入力とオプションで末尾の改行のみで構成されます。
  • 母音は、次の文字のいずれかですaeiouyAEIOUY
  • 母音のシーケンスは、他の文字で区切られます。文字列に"Aa aa-aa"は3つの母音シーケンスがあります。
  • オプションで、変換された出力文字列から先頭と末尾の空白を省略できます。

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

例では、二重引用符文字"を使用して入力文字列と出力文字列を区切りますが、明らかにこの文字は有効な入力文字列にも表示されます。


2
誰かがあなたをスタックにまだ歓迎しているかどうかはわかりませんので、Code Golf Stack Exchangeへようこそ!うまく指定された最初のチャレンジ。:-)
ジュゼッペ

@ジュゼッペ優しい言葉をありがとう!
マールテンバメリス

回答:


9

JavaScript(ES6)、35バイト

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

オンラインでお試しください!

特別な置換パターン$&は、一致した部分文字列を意味ます。


8
私は知りませんでした$&。ここ何年もの間、私は正規表現全体をキャプチャグループにまとめてきました。コードゴルフは非実用的だと誰が言ったのでしょうか?!
再帰的

2
$&、より一般的な方法は?Javaではそれは$0不名誉であり、Retinaは両方を許可します。$&JavaScriptから来たことを知りませんでした。それとも.NET風味の正規表現であり、JavaScriptも使用していますか?
ケビンクルーッセン


7

Japt、10バイト

r"%y+"_+ip

それを試してみてください

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"

ちょっと待って、2分遅すぎる!Japt 2.0の短い正規表現を使用したことを除いて、まったく同じ答えがありました"%v"->\v
無知の

@EmbodimentofIgnorance、の\y代わりに必要になり\vます。
シャギー

6

Java 8、40バイト

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

オンラインでお試しください。

説明:

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

正規表現の説明:

(?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バイト

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

オンラインでお試しください!


Sans regex:

Python 3、101バイト

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

オンラインでお試しください!

Python 3.8(プレリリース):99バイト

説明

文字列sとオプションの引数を受け入れる再帰関数qsi)の最初の文字が母音の場合、キューに保存されますq。そうでない場合、文字列が構成されて返されるq文字、'p'q再び、文字iと文字列の最初の文字と再帰関数の結果が剥ぎ取ら。関数が空の文字列を検出すると、再帰が停止しますs


2
正規表現のないソリューションが大好きです!
マールテンバメリス

3

05AB1E22 20 バイト

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

05AB1Eには残念ながら正規表現はありません。
私は複製されたがあまり好きではありませんが、žÁyнå現在は代替手段を探すには忙しすぎます。

-2バイトは、存在すら知らなかった定数を表示してくれた@Grimyに感謝します(そして、Wikiページから欠落していました。..>)

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

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

žÁ代わりにžOあなたがドロップすることができますl
グリムミー

@Grimy Wikiページの代わりにinfo.txtファイルの使用を開始する必要があるかもしれません。
_-

両方とも同じコマンドではありませんが、多くのコマンドが欠落しています(うまくいけば、両方から欠落している秘密のコマンドがあるのではないかと思います)。
グリムミー

1
@Grimyはい、info.txtまたはWikiページの代わりにソースコードを使用する必要があります。;)
Kevin Cruijssen



1

、92バイト

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

オンラインでお試しください!

もちろんレッドParseほうがもっと冗長ですregex


1
regex確かに冗長ですが、おそらくそれもまた興味深いものになります。私はそれが好きです!
マールテンバメリス

@maartenBamelisありがとうございます!はい、レッド(Rebolなど)は興味深い言語です。
ガレンイワノフ


1

スタックス、17 バイト

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

staxlang.xyzで実行してデバッグしてください!

アンパック(20バイト)および説明:

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

Staxには大文字と小文字を区別しない正規表現はなく、母音ビルトインにはYは含まれていません。ドキュメントでは、ブロックを置換として使用することについては説明していませんが、それでも機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.