Lípínguapua dopo Pêpê


20

Língua do Pê, або P Мова, - це мовна гра, яку розмовляють у Бразилії та Португалії з португальською мовою. Він також відомий іншими мовами, такими як голландська та африканська. ( Вікіпедія )

У цій мовній грі є деякі діалекти. Різні мови, в які грається, навіть мають свої унікальні діалекти. Деякі люди вільно володіють мовою P, і найкращі навіть можуть перевести будь-який текст на бажаний діалект на місці!

P Мова

У цьому виклику ми будемо використовувати діалект Double Double Talk .

Для перекладу тексту на мову P будь-яка послідовність голосних у тексті додається з одним pсимволом, а потім копія послідовності голосних звуків.

Виклик

Напишіть функцію або програму, яка приймає рядок як вхідний і виводить його переклад на мові P.

  • Вхід складається тільки з друкованих символів ASCII.
  • Вихід складається тільки з перекладеного вводу та, необов'язково, останнього нового рядка.
  • Голосні - це будь-який із наступних символів aeiouyAEIOUY.
  • Послідовність голосних обмежена будь-яким іншим символом. Рядок "Aa aa-aa"має три голосні послідовності.
  • Провідна та кінцева пробіли можуть бути опущені з перекладеного вихідного рядка.

Приклади

""                              =>   ""
"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
Я не впевнений, чи хтось привітав вас до стека, тож: ласкаво просимо до Exchange Golf Stack Exchange! Чудово вказаний перший виклик. :-)
Джузеппе

@Giuseppe Дякую за добрі слова!
Маартен Бамеліс

Також на іспанській es.wikipedia.org/wiki/Jerigonza
leonbloy

Відповіді:


9

JavaScript (ES6), 35 байт

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

Спробуйте в Інтернеті!

Якщо спеціальна схема заміни $&означає відповідність підрядків .


8
Я про це не знав $&. Всі ці роки я загортав цілу групу в групу захоплення. Хто сказав, що код гольфу недоцільно ?!
рекурсивна

2
Чи $&є більш поширеним способом? У Java це $0afaik, а 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

Пояснення 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 байт

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

Спробуйте в Інтернеті!


Sge 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і необов'язковий аргумент q. Якщо перший символ s( i) є голосним, він зберігається у черзі q. Якщо ні, то повертається рядок, що складається з qбукви 'p', qзнову ж таки, символу iта результату рекурсивної функції з відключеним першим символом рядка. Рекурсія припиняється, коли функція стикається з порожнім рядком s.


2
Любіть рішення без регулярного вираження!
Маартен Бамеліс

3

05AB1E , 22 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.
Grimmy

@Grimy Можливо, я повинен почати використовувати файл info.txt замість сторінки Вікі .. -_- '
Кевін Круїйсен

Вони обоє пропускають безліч команд, хоча і не однакові (сподіваюся. Іноді мені цікаво, чи відсутні секретні команди в обох).
Grimmy

1
@Grimy Так, можливо, ми повинні використовувати вихідний код замість info.txt або Wiki-сторінки. ;)
Кевін Круїссен

2

Сітківка 0,8,2 , 17 байт

i`[aeiouy]+
$&p$&

Спробуйте в Інтернеті! Посилання включає тестові випадки. Пояснення: Тривіальний підхід до регулярного виведення; то iпрапор витки по нечутливості до регістру (Retina вже дефолти в глобальній грі).



1

Червоний , 92 байти

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

Спробуйте в Інтернеті!

Звичайно, Red '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. Документація не розповість про використання блоку як заміни, але це все-таки робоча особливість.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.