Lípínguapua dopo Pêpê


20

Língua do Pê, atau P Language, adalah permainan bahasa yang digunakan di Brazil dan Portugal dengan Bahasa Portugis. Ia juga dikenal dalam bahasa lain, seperti Belanda dan Afrika. ( Wikipedia )

Ada beberapa dialek dalam permainan bahasa ini. Berbagai bahasa permainan dimainkan dengan bahkan memiliki dialek unik mereka sendiri. Beberapa orang fasih berbicara Bahasa P dan yang terbaik bahkan dapat menerjemahkan teks apa pun ke dialek pilihan mereka di tempat!

Bahasa P

Dalam tantangan ini, kita akan menggunakan dialek Bicara Ganda .

Untuk menerjemahkan teks ke dalam Bahasa P, urutan vokal apa pun dalam teks ditambahkan dengan satu pkarakter diikuti oleh salinan urutan vokal.

Tantangan

Tulis fungsi atau program yang menerima string sebagai input dan output terjemahannya dalam Bahasa P.

  • Input hanya terdiri dari karakter ASCII yang dapat dicetak.
  • Output hanya terdiri dari input yang diterjemahkan dan secara opsional sebuah trailing newline.
  • Vokal adalah salah satu dari karakter berikut aeiouyAEIOUY.
  • Urutan vokal dibatasi oleh karakter lain. String "Aa aa-aa"memiliki tiga urutan vokal.
  • Leading dan trailing whitespace secara opsional dapat dihilangkan dari string output yang diterjemahkan.

Contohnya

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

Karakter tanda kutip ganda "digunakan untuk membatasi string input dan output dalam contoh, tetapi jelas karakter ini juga dapat muncul dalam string input yang valid.


2
Saya tidak yakin apakah ada yang menyambut Anda di stack, jadi: selamat datang di Code Golf Stack Exchange! Tantangan pertama yang ditentukan dengan baik. :-)
Giuseppe

@Giuseppe Terima kasih atas kata-kata baiknya!
Maarten Bamelis

Juga dalam bahasa Spanyol es.wikipedia.org/wiki/Jerigonza
leonbloy

Jawaban:


9

JavaScript (ES6), 35 byte

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

Cobalah online!

Di mana pola penggantian khusus $&berarti substring yang cocok .


8
Saya tidak tahu $&. Bertahun-tahun, saya telah membungkus seluruh regex dalam kelompok penangkap. Siapa bilang golf kode tidak praktis ?!
Rekursif

2
Apakah $&cara yang lebih umum? Di Jawa itu $0afaik, dan Retina memungkinkan keduanya. Tidak tahu $&berasal dari JavaScript. Atau apakah itu regex beraroma .NET, dan JavaScript juga menggunakannya?
Kevin Cruijssen


7

Japt , 10 byte

r"%y+"_+ip

Cobalah

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"

Sialan, 2 menit terlambat! Saya memiliki jawaban yang sama persis, kecuali menggunakan regex pendek Japt 2.0 "%v"->\v
Perwujudan Ketidaktahuan

@EmbodimentofIgnorance, Anda akan perlu \ybukan \v.
Shaggy

6

Java 8, 40 byte

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

Cobalah online.

Penjelasan:

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

Penjelasan 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 byte

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

Cobalah online!


Sans regex:

Python 3 , 101 byte

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

Cobalah online!

Python 3.8 (pra-rilis): 99 byte

Penjelasan

Fungsi rekursif, menerima string sdan argumen opsional q. Jika karakter pertama dari s( i) adalah vokal, itu disimpan dalam antrian q. Jika tidak, sebuah string dikembalikan yang terdiri dari q, huruf 'p', qsekali lagi, karakter idan hasil dari fungsi rekursif dengan karakter pertama dari string yang dilepas. Rekursi berhenti ketika fungsi menemukan string kosong s.


2
Cinta solusinya tanpa regex!
Maarten Bamelis

3

05AB1E , 22 20 byte

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

Sayangnya, 05AB1E tidak memiliki regex.
Saya tidak begitu suka duplikat žÁyнå, tapi saya saat ini agak terlalu sibuk untuk mencari alternatif ..

-2 byte terima kasih kepada @Grimy karena menunjukkan saya sebuah konstanta yang saya bahkan tidak tahu ada (dan hilang dari halaman Wiki ..>.>)

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

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

žÁ dari pada žO membiarkan Anda menjatuhkan l.
Grimmy

@Grimy Mungkin saya harus mulai menggunakan file info.txt alih-alih halaman Wiki .. -_- '
Kevin Cruijssen

Mereka berdua kehilangan banyak perintah, meskipun tidak sama (mudah-mudahan. Kadang-kadang saya bertanya-tanya apakah ada perintah rahasia yang hilang dari keduanya).
Grimmy

1
@Grimy Ya, mungkin kita harus menggunakan kode sumber alih-alih halaman info.txt atau Wiki. ;)
Kevin Cruijssen

2

Retina 0.8.2 , 17 byte

i`[aeiouy]+
$&p$&

Cobalah online! Tautan termasuk kasus uji. Penjelasan: Pendekatan regexp sepele; yang iternyata bendera pada kasus ketidakpekaan (Retina sudah default untuk pertandingan global).



1

Merah , 92 byte

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

Cobalah online!

Tentu saja Merah 's Parsejauh lebih verbose dari regex.


1
Lebih banyak bertele-tele daripada regexpasti, tapi mungkin itu membuatnya lebih menarik juga. Saya suka itu!
Maarten Bamelis

@ MaartenBamelis Terima kasih! Ya, Red (seperti Rebol) adalah bahasa yang menarik.
Galen Ivanov


1

Stax , 17 byte

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

Jalankan dan debug di staxlang.xyz!

Dibongkar (20 byte) dan penjelasan:

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

Tidak ada ekspresi reguler yang tidak peka huruf besar-kecil di Stax, dan vokal bawaan tidak menyertakan Y. Dokumentasi tidak akan memberi tahu Anda tentang menggunakan blok sebagai pengganti, tetapi tetap merupakan fitur yang berfungsi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.