Lípínguapua dopo Pêpê


20

Língua do Pê, или P Language, это языковая игра, в которой говорят в Бразилии и Португалии на португальском языке. Это также известно на других языках, таких как голландский и африкаанс. ( Википедия )

В этой языковой игре есть несколько диалектов. Различные языки, на которых играется, даже имеют свои уникальные диалекты. Некоторые люди свободно говорят на языке P, и лучшие могут даже перевести любой текст на свой предпочитаемый диалект на месте!

Язык P

В этом вызове мы будем использовать диалект 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
Я не уверен, что кто-то еще приветствовал вас в стеке, так что: добро пожаловать на Code 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

Попробуйте онлайн!


Без регулярных выражений:

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 за то, что он показал мне константу, о которой я даже не подозревал (и отсутствовал на странице вики ..>.>)

Попробуйте онлайн или проверьте все контрольные примеры .

Объяснение:

               # 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
@ Грими Да, может быть, мы должны использовать исходный код вместо info.txt или вики-страниц. ;)
Кевин Круйссен

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 Спасибо! Да, красный (как и Ребол) - интересный язык.
Гален Иванов


1

Stax , 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.