LípínguapuadopoPêpê


20

“LínguadoPê”(或P语言)是在巴西和葡萄牙与葡萄牙语一起使用的语言游戏。它也以其他语言(例如荷兰语和南非荷兰语)而闻名。(维基百科

这个语言游戏中有一些方言。玩游戏时使用的不同语言甚至都有自己独特的方言。有些人会说流利的P语言,最好的人甚至可以当场将任何文本翻译成他们喜欢的方言!

P语言

在此挑战中,我们将使用双向通话方言。

要将文本翻译成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感谢您的客气话!
Maarten Bamelis

Answers:


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

正则表达式说明:

(?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和可选参数q。如果si)的第一个字符是元音,则将其存储在队列中q。如果不是,则返回一个字符串,该字符串再次由q,字母'p'q字符i和递归函数的结果组成,其中字符串的第一个字符被去除。当函数遇到空字符串时,递归停止s


2
爱无正则表达式的解决方案!
Maarten Bamelis

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
Grimmy

@Grimy也许我应该开始使用info.txt文件而不是Wiki页面。
'– Kevin Cruijssen,

他们都丢失了很多命令,尽管不是相同的命令(希望。有时我想知道两者是否都缺少秘密命令)。
Grimmy

1
@Grimy是的,也许我们应该使用源代码而不是info.txt或Wiki页面。;)
凯文·克鲁伊森





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。文档不会告诉您使用块作为替换,但这仍然是一个有效的功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.