Lípínguapua dopo Pêpê


20

Língua do Pê, o P Language, è un gioco linguistico parlato in Brasile e Portogallo con il portoghese. È anche conosciuto in altre lingue, come olandese e afrikaans. ( Wikipedia )

Ci sono alcuni dialetti in questo gioco linguistico. Le diverse lingue con cui viene giocato il gioco hanno persino i loro dialetti unici. Alcune persone parlano fluentemente la lingua P e i migliori possono persino tradurre sul posto qualsiasi testo nel loro dialetto preferito!

P Language

In questa sfida, useremo il dialetto Double Talk .

Per tradurre il testo in linguaggio P, ogni sequenza di vocali nel testo viene aggiunta con un singolo pcarattere seguito da una copia della sequenza di vocali.

Sfida

Scrivi una funzione o un programma che accetta una stringa come input e produce la sua traduzione in P Language.

  • L'input consiste solo di caratteri ASCII stampabili.
  • L'output è costituito solo dall'input tradotto e facoltativamente da una nuova riga finale.
  • Le vocali sono uno dei seguenti personaggi aeiouyAEIOUY.
  • Una sequenza di vocali è delimitata da qualsiasi altro personaggio. La stringa "Aa aa-aa"ha tre sequenze vocali.
  • Gli spazi bianchi iniziali e finali possono essere facoltativamente omessi dalla stringa di output tradotta.

Esempi

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

Il carattere tra virgolette doppie "viene utilizzato per delimitare le stringhe di input e output negli esempi, ma ovviamente questo carattere può apparire anche in qualsiasi stringa di input valida.


2
Non sono sicuro che qualcuno ti abbia ancora accolto nello stack, quindi: benvenuti allo scambio di code code stack! Prima sfida ben specificata. :-)
Giuseppe,

@Giuseppe Grazie per le belle parole!
Maarten Bamelis,

Risposte:


9

JavaScript (ES6), 35 byte

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

Provalo online!

Dove lo schema di sostituzione speciale $&significa sottostringa abbinata .


8
Non lo sapevo $&. In tutti questi anni, ho avvolto l'intera regex in un gruppo di cattura. Chi ha detto che il codice golf non è pratico ?!
ricorsivo il

2
È $&il modo più comune? In Java è $0afaik e Retina consente entrambi. Non sapevo $&venisse da JavaScript. O è un regex basato su .NET e anche JavaScript lo usa?
Kevin Cruijssen,


7

Japt , 10 byte

r"%y+"_+ip

Provalo

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"

Dannazione, 2 minuti in ritardo! Ho avuto la stessa identica risposta, tranne per il fatto che utilizzava regex brevi di Japt 2.0 "%v"->\v
Embodiment of Ignorance

@EmbodimentofIgnorance, dovresti \yinvece \v.
Shaggy,

6

Java 8, 40 byte

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

Provalo online.

Spiegazione:

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

Spiegazione 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 byte

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

Provalo online!


Sans regex:

Python 3 , 101 byte

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

Provalo online!

Python 3.8 (pre-release): 99 byte

Spiegazione

Funzione ricorsiva, accettando una stringa se un argomento opzionale q. Se il primo carattere di s( i) è una vocale, viene memorizzato nella coda q. In caso contrario, viene restituita una stringa composta da q, di nuovo , la lettera 'p', qil carattere ie il risultato della funzione ricorsiva con il primo carattere della stringa rimosso. La ricorsione si interrompe quando la funzione incontra una stringa vuota s.


2
Adoro la soluzione senza regex!
Maarten Bamelis,

3

05AB1E , 22 20 byte

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

Sfortunatamente 05AB1E non ha regex.
Non mi piace molto il duplicatožÁyнå , ma al momento sono un po 'troppo impegnato per cercare alternative ..

-2 byte grazie a @Grimy per avermi mostrato una costante che non sapevo nemmeno esistesse (e mancava dalla pagina Wiki ..>.>)

Provalo online o verifica tutti i casi di test .

Spiegazione:

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

žÁinvece di žOlasciarti cadere l.
Grimmy,

@Grimy Forse dovrei iniziare a utilizzare il file info.txt invece della pagina Wiki .. -_- '
Kevin Cruijssen

Entrambi mancano molti comandi, anche se non gli stessi (si spera. A volte mi chiedo se mancano comandi segreti da entrambi).
Grimmy,

1
@Grimy Sì, forse dovremmo usare il codice sorgente invece delle pagine info.txt o Wiki. ;)
Kevin Cruijssen,

2

Retina 0.8.2 , 17 byte

i`[aeiouy]+
$&p$&

Provalo online! Il link include casi di test. Spiegazione: approccio regexp triviale; la ibandiera attiva la distinzione tra maiuscole e minuscole (Retina è già impostata su una corrispondenza globale).



1

Rosso , 92 byte

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

Provalo online!

Naturalmente Red s' Parseè molto più dettagliato rispetto regex.


1
Più prolisso che regexdi sicuro, ma forse questo lo rende anche più interessante. Mi piace!
Maarten Bamelis,

@MaartenBamelis Grazie! Sì, il rosso (come Rebol) è una lingua interessante.
Galen Ivanov,


1

Stax , 17 byte

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

Eseguilo e esegui il debug su staxlang.xyz!

Spacchettato (20 byte) e spiegazione:

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

Nessuna espressione regolare senza distinzione tra maiuscole e minuscole in Stax e i vocali incorporati non includono Y. La documentazione non ti dirà sull'uso di un blocco come sostituto, ma è comunque una funzionalità funzionante.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.