Lípínguapua dopo Pêpê


20

Língua do Pê, o P Language, es un juego de idiomas que se habla en Brasil y Portugal con portugués. También se conoce en otros idiomas, como el holandés y el afrikaans. ( Wikipedia )

Hay algunos dialectos en este juego de lenguaje. Los diferentes idiomas con los que se juega el juego incluso tienen sus propios dialectos únicos. Algunas personas hablan con fluidez el lenguaje P e incluso los mejores pueden traducir cualquier texto a su dialecto preferido en el acto.

Lengua P

En este desafío, utilizaremos el dialecto Double Talk .

Para traducir texto al lenguaje P, cualquier secuencia de vocales en el texto se agrega con un solo pcarácter seguido de una copia de la secuencia de vocales.

Desafío

Escriba una función o programa que acepte una cadena como entrada y genere su traducción en lenguaje P.

  • La entrada consta solo de caracteres ASCII imprimibles.
  • La salida consta solo de la entrada traducida y, opcionalmente, de una nueva línea final.
  • Las vocales son cualquiera de los siguientes caracteres aeiouyAEIOUY.
  • Una secuencia de vocales está delimitada por cualquier otro personaje. La cadena "Aa aa-aa"tiene tres secuencias vocales.
  • Los espacios en blanco iniciales y finales pueden omitirse opcionalmente de la cadena de salida traducida.

Ejemplos

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

El carácter de comillas dobles "se usa para delimitar las cadenas de entrada y salida en los ejemplos, pero obviamente este carácter también puede aparecer en cualquier cadena de entrada válida.


2
No estoy seguro de si alguien le ha dado la bienvenida a la pila todavía, así que: ¡bienvenido a Code Golf Stack Exchange! Primer desafío bien especificado. :-)
Giuseppe

@Giuseppe Gracias por las amables palabras!
Maarten Bamelis

Respuestas:


9

JavaScript (ES6), 35 bytes

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

Pruébalo en línea!

Donde el patrón de reemplazo especial $&significa una subcadena coincidente .


8
No lo sabía $&. Todos estos años, he estado envolviendo toda la expresión regular en un grupo de captura. ¿Quién dijo que el código de golf no es práctico?
recursivo

2
¿Es $&la forma más común? En Java es $0afaik, y Retina permite ambos. No sabía que $&venía de JavaScript. ¿O es una expresión regular con sabor a .NET y JavaScript también la usa?
Kevin Cruijssen


7

Japt , 10 bytes

r"%y+"_+ip

Intentalo

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"

¡Maldita sea, 2 minutos tarde! Tuve exactamente la misma respuesta, excepto que usó expresiones regulares cortas de Japt 2.0 "%v"->\v
Encarnación de la ignorancia

@EmbodimentofIgnorance, necesitarías en \ylugar de \v.
Shaggy

6

Java 8, 40 bytes

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

Pruébalo en línea.

Explicación:

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

Explicación de expresiones regulares:

(?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

Pruébalo en línea!


Sans regex:

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

Pruébalo en línea!

Python 3.8 (versión preliminar): 99 bytes

Explicación

Función recursiva, aceptando una cadena sy un argumento opcional q. Si el primer carácter de s( i) es una vocal, se almacena en la cola q. Si no, se devuelve una cadena que se compone de q, la letra 'p', qnuevamente, el carácter iy el resultado de la función recursiva con el primer carácter de la cadena eliminado. La recursión se detiene cuando la función encuentra una cadena vacía s.


2
Me encanta la solución sin expresiones regulares!
Maarten Bamelis

3

05AB1E , 22 20 bytes

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

05AB1E desafortunadamente no tiene expresiones regulares.
Realmente no me gusta el duplicado žÁyнå, pero actualmente estoy demasiado ocupado para buscar alternativas.

-2 bytes gracias a @Grimy por mostrarme una constante que ni siquiera sabía que existía (y que faltaba en la página Wiki ..>.>)

Pruébelo en línea o verifique todos los casos de prueba .

Explicación:

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

žÁen lugar de žOdejarte caer l.
Grimmy

@Grimy Quizás debería comenzar a usar el archivo info.txt en lugar de la página Wiki ... -_- '
Kevin Cruijssen

A ambos les faltan muchos comandos, aunque no los mismos (con suerte. A veces me pregunto si faltan comandos secretos en ambos).
Grimmy

1
@Grimy Sí, tal vez deberíamos usar el código fuente en lugar de las páginas info.txt o Wiki. ;)
Kevin Cruijssen

2

Retina 0.8.2 , 17 bytes

i`[aeiouy]+
$&p$&

Pruébalo en línea! El enlace incluye casos de prueba. Explicación: enfoque trivial regexp; la ibandera activa la insensibilidad a mayúsculas y minúsculas (Retina ya tiene una coincidencia global).



1

Rojo , 92 bytes

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

Pruébalo en línea!

Por supuesto Rojo 's Parsees mucho más detallado de lo regex.


1
Más detallado que regexseguro, pero quizás eso también lo haga más interesante. ¡Me gusta!
Maarten Bamelis

@MaartenBamelis ¡Gracias! Sí, el rojo (como Rebol) es un lenguaje interesante.
Galen Ivanov


1

Stax , 17 bytes

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

¡Ejecútelo y depúrelo en staxlang.xyz!

Desempaquetado (20 bytes) y explicación:

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

No hay expresiones regulares que no distingan entre mayúsculas y minúsculas en Stax, y las vocales incorporadas no incluyen Y. La documentación no le informará sobre el uso de un bloque como reemplazo, pero de todos modos es una característica funcional.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.