Lípínguapua dopo Pêpê


20

Língua do Pê, ou P Language, é um jogo de idiomas falado no Brasil e em Portugal com português. Também é conhecido em outros idiomas, como holandês e africâner. ( Wikipedia )

Existem alguns dialetos neste jogo de idiomas. Os diferentes idiomas com os quais o jogo é jogado têm seus próprios dialetos exclusivos. Algumas pessoas falam fluentemente a língua P e o melhor pode até traduzir qualquer texto para o dialeto preferido na hora!

P Language

Neste desafio, usaremos o dialeto Double Talk .

Para traduzir o texto para o idioma P, qualquer sequência de vogais no texto é anexada com um único pcaractere seguido de uma cópia da sequência de vogais.

Desafio

Escreva uma função ou programa que aceite uma string como entrada e produz sua tradução na linguagem P.

  • A entrada consiste apenas em caracteres ASCII imprimíveis.
  • A saída consiste apenas na entrada traduzida e, opcionalmente, em uma nova linha final.
  • As vogais são um dos seguintes caracteres aeiouyAEIOUY.
  • Uma sequência de vogais é delimitada por qualquer outro caractere. A cadeia "Aa aa-aa"possui três seqüências de vogais.
  • Os espaços em branco à esquerda e à direita podem opcionalmente ser omitidos da sequência de saída traduzida.

Exemplos

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

O caractere de aspas duplas "é usado para delimitar as seqüências de entrada e saída nos exemplos, mas obviamente esse caractere também pode aparecer em qualquer sequência de entrada válida.


2
Não tenho certeza se alguém já o recebeu na pilha, então: bem-vindo ao Code Golf Stack Exchange! Primeiro desafio bem especificado. :-)
Giuseppe

@ Giuseppe Obrigado pelas amáveis ​​palavras!
Maarten Bamelis

Respostas:


9

JavaScript (ES6), 35 bytes

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

Experimente online!

Onde o padrão de substituição especial $&significa substring correspondente .


8
Eu não conhecia $&. Todos esses anos, envolvi todo o regex em um grupo de captura. Quem disse que o código de golfe é impraticável ?!
recursivo em

2
É $&a maneira mais comum? Em Java, está tudo bem $0, e o Retina permite os dois. Não sabia que $&vinha do JavaScript. Ou é um regex com sabor .NET, e o JavaScript também o usa?
Kevin Cruijssen 14/08


7

Japonês , 10 bytes

r"%y+"_+ip

Tente

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"

Droga, 2 minutos tarde demais! Eu tinha exatamente a mesma resposta, exceto que usava regexes curtas do Japt 2.0 "%v"->\v
Modalidade de ignorância

@EmbodimentofIgnorance, você precisaria em \yvez de \v.
Shaggy

6

Java 8, 40 bytes

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

Experimente online.

Explicação:

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

Explicação 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 bytes

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

Experimente online!


Sem expressão regular:

Python 3 , 101 bytes

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

Experimente online!

Python 3.8 (pré-lançamento): 99 bytes

Explicação

Função recursiva, aceitando uma string se um argumento opcional q. Se o primeiro caractere de s( i) for uma vogal, ele será armazenado na fila q. Caso contrário, é retornada uma string composta q, a letra 'p', qnovamente, o caractere ie o resultado da função recursiva com o primeiro caractere da string retirado. A recursão para quando a função encontra uma string vazia s.


2
Adoro a solução sem regex!
Maarten Bamelis

3

05AB1E , 22 20 bytes

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

Infelizmente, 05AB1E não tem nenhuma expressão regular.
Eu realmente não gosto do duplicado žÁyнå, mas atualmente estou um pouco ocupado demais para procurar alternativas.

-2 bytes graças ao @Grimy por me mostrar uma constante que eu nem sabia que existia (e estava ausente na página do Wiki ..>.>)

Experimente online ou verifique todos os casos de teste .

Explicação:

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

žÁem vez de žOdeixar você soltar o l.
Grimmy 14/08

@ Grimy Talvez eu devesse começar a usar o arquivo info.txt em vez da página da Wiki .. -_- '
Kevin Cruijssen

Ambos estão faltando muitos comandos, embora não sejam os mesmos (espero. Às vezes, eu me pergunto se há comandos secretos ausentes em ambos).
Grimmy 14/08

1
@ Grimy Sim, talvez devêssemos usar o código fonte em vez das páginas info.txt ou Wiki. ;)
Kevin Cruijssen 14/08

2

Retina 0.8.2 , 17 bytes

i`[aeiouy]+
$&p$&

Experimente online! O link inclui casos de teste. Explicação: Abordagem trivial de regexp; o isinalizador ativa a distinção entre maiúsculas e minúsculas (o Retina já tem como padrão uma correspondência global).



1

Vermelho , 92 bytes

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

Experimente online!

Claro Vermelho 's Parseé muito mais detalhado do que regex.


1
Mais detalhado do que regexcom certeza, mas talvez isso o torne mais interessante também. Eu gosto disso!
Maarten Bamelis

@MaartenBamelis Thank you! Sim, o vermelho (como o Rebol) é uma linguagem interessante.
Galen Ivanov


1

Stax , 17 bytes

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

Execute e depure-o em staxlang.xyz!

Descompactado (20 bytes) e explicação:

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

Não há expressões regulares que diferenciam maiúsculas de minúsculas no Stax e os componentes internos da vogal não incluem Y. A documentação não informa sobre o uso de um bloco como substituto, mas é um recurso funcional.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.