Lípínguapua dopo Pêpê


20

Língua do Pê, ou P Language, est un jeu de langue parlé au Brésil et au Portugal avec le portugais. Il est également connu dans d'autres langues, comme le néerlandais et l'afrikaans. ( Wikipedia )

Il y a quelques dialectes dans ce jeu de langage. Les différentes langues avec lesquelles le jeu est joué ont même leurs propres dialectes uniques. Certaines personnes parlent couramment la langue P et les meilleurs peuvent même traduire n'importe quel texte dans leur dialecte préféré sur place!

Langue P

Dans ce défi, nous utiliserons le dialecte Double Talk .

Pour traduire du texte en langue P, toute séquence de voyelles dans le texte est accompagnée d'un seul pcaractère suivi d'une copie de la séquence de voyelles.

Défi

Écrivez une fonction ou un programme qui accepte une chaîne en entrée et génère sa traduction en langage P.

  • L'entrée se compose uniquement de caractères ASCII imprimables.
  • La sortie se compose uniquement de l'entrée traduite et éventuellement d'une nouvelle ligne de fin.
  • Les voyelles sont l'un des personnages suivants aeiouyAEIOUY.
  • Une séquence de voyelles est délimitée par tout autre caractère. La chaîne "Aa aa-aa"a trois séquences de voyelles.
  • Les espaces de début et de fin peuvent éventuellement être omis de la chaîne de sortie traduite.

Exemples

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

Le caractère guillemets doubles "est utilisé pour délimiter les chaînes d'entrée et de sortie dans les exemples, mais évidemment ce caractère peut également apparaître dans n'importe quelle chaîne d'entrée valide.


2
Je ne sais pas si quelqu'un vous a encore accueilli dans la pile, alors: bienvenue à Code Golf Stack Exchange! Premier défi bien spécifié. :-)
Giuseppe

@Giuseppe Merci pour les aimables paroles!
Maarten Bamelis

Réponses:


9

JavaScript (ES6), 35 octets

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

Essayez-le en ligne!

Où le motif de remplacement spécial $&signifie une sous-chaîne assortie .


8
Je n'en savais rien $&. Toutes ces années, j'ai enveloppé toute l'expression régulière dans un groupe de capture. Qui a dit que le code golf n'était pas pratique?!
récursif

2
Est-ce $&la façon la plus courante? En Java, c'est $0afaik, et Retina autorise les deux. Je ne savais pas que cela $&venait de JavaScript. Ou s'agit-il d'une expression rationnelle .NET, et JavaScript l'utilise également?
Kevin Cruijssen


7

Japt , 10 octets

r"%y+"_+ip

Essayez-le

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"

Bon sang, 2 minutes trop tard! J'ai eu exactement la même réponse, sauf qu'il a utilisé des expressions courtes Japt 2.0 "%v"->\v
Embodiment of Ignorance

@EmbodimentofIgnorance, vous auriez besoin \yau lieu de \v.
Shaggy

6

Java 8, 40 octets

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

Essayez-le en ligne.

Explication:

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

Explication de l'expression régulière:

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

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

Essayez-le en ligne!


Sans regex:

Python 3 , 101 octets

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

Essayez-le en ligne!

Python 3.8 (pré-version): 99 octets

Explication

Fonction récursive, acceptant une chaîne set un argument facultatif q. Si le premier caractère de s( i) est une voyelle, il est stocké dans la file d'attente q. Sinon, une chaîne est retournée qui est composée de qla lettre 'p', qencore une fois, du caractère iet du résultat de la fonction récursive avec le premier caractère de la chaîne supprimé. La récursivité s'arrête lorsque la fonction rencontre une chaîne vide s.


2
Aimez la solution sans regex!
Maarten Bamelis

3

05AB1E , 22 20 octets

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

05AB1E n'a malheureusement pas de regex.
Je n'aime pas vraiment le doublon žÁyнå, mais je suis actuellement un peu trop occupé pour chercher des alternatives ..

-2 octets merci à @Grimy de m'avoir montré une constante dont je ne savais même pas qu'elle existait (et qui était absente de la page Wiki ..>.>)

Essayez-le en ligne ou vérifiez tous les cas de test .

Explication:

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

žÁau lieu de žOvous permet de supprimer le l.
Grimmy

@Grimy Je devrais peut-être commencer à utiliser le fichier info.txt au lieu de la page Wiki .. -_- '
Kevin Cruijssen

Il manque à la fois beaucoup de commandes, mais pas les mêmes (j'espère. Parfois, je me demande s'il manque des commandes secrètes des deux).
Grimmy

1
@Grimy Oui, nous devrions peut-être utiliser le code source au lieu des pages info.txt ou Wiki. ;)
Kevin Cruijssen

2

Retina 0.8.2 , 17 octets

i`[aeiouy]+
$&p$&

Essayez-le en ligne! Le lien inclut des cas de test. Explication: approche d'expression rationnelle triviale; le idrapeau active l'insensibilité à la casse (Retina utilise déjà par défaut une correspondance globale).



1

Rouge , 92 octets

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

Essayez-le en ligne!

Bien sûr , Red « s Parseest beaucoup plus bavard regex.


1
Plus verbeux que regexsûr, mais peut-être que cela le rend aussi plus intéressant. Je l'aime!
Maarten Bamelis

@MaartenBamelis Merci! Oui, le rouge (comme Rebol) est une langue intéressante.
Galen Ivanov


1

Stax , 17 octets

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

Exécutez-le et déboguez-le sur staxlang.xyz!

Déballé (20 octets) et explication:

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

Pas d'expressions régulières insensibles à la casse dans Stax, et les voyelles intégrées n'incluent pas Y. La documentation ne vous expliquera pas comment utiliser un bloc en remplacement, mais c'est néanmoins une fonctionnalité qui fonctionne.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.