Lípínguapua dopo Pêpê


20

Língua do Pêหรือ P Language เป็นเกมภาษาที่พูดในบราซิลและโปรตุเกสพร้อมโปรตุเกส มันเป็นที่รู้จักกันในภาษาอื่น ๆ เช่นดัตช์และแอฟริกาใต้ ( Wikipedia )

มีบางภาษาในเกมภาษานี้ ภาษาต่าง ๆ ที่เกมเล่นด้วยภาษาถิ่นของตัวเอง บางคนพูดภาษา P ได้คล่องและดีที่สุดยังสามารถแปลข้อความเป็นภาษาถิ่นที่ต้องการได้ทันที!

ภาษา P

ในความท้าทายนี้เราจะใช้ภาษาDouble Talk

ในการแปลข้อความเป็นภาษา 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! ความท้าทายแรกที่ระบุไว้อย่างดี :-)
จูเซปเป้

@iuseppe ขอบคุณสำหรับคำพูดดี ๆ !
Maarten Bamelis

นอกจากนี้ในภาษาสเปนes.wikipedia.org/wiki/Jerigonza
leonbloy

คำตอบ:


9

JavaScript (ES6), 35 ไบต์

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

ลองออนไลน์!

ในกรณีที่รูปแบบการเปลี่ยนพิเศษ$&หมายถึงการจับคู่ substring


8
$&ผมไม่ทราบเกี่ยวกับ ตลอดหลายปีที่ผ่านมาฉันได้รวบรวม regex ทั้งหมดไว้ในกลุ่มการจับกุม ใครบอกว่ารหัสกอล์ฟไม่สามารถใช้งานได้!
เรียกซ้ำ

2
เป็น$&วิธีที่พบบ่อยมากขึ้น? ใน Java เป็น$0afaik และ Retina อนุญาตให้ทั้งสอง ไม่รู้$&มาจาก JavaScript หรือมันคือ. regex ปรุงแต่งรสชวาและจาวาสคริปต์ก็ใช้มันเช่นกัน?
Kevin Cruijssen


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 regexes สั้น"%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

คำอธิบาย 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 ไบต์

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ถ้าตัวอักษรตัวแรกของs( i) qเป็นเสียงสระจะถูกเก็บไว้ในคิว ถ้าไม่สตริงจะถูกส่งกลับซึ่งประกอบด้วยqตัวอักษร'p', qอีกครั้ง, ตัวละครiและผลของฟังก์ชัน recursive กับตัวอักษรตัวแรกของสตริงถอด recursion sหยุดเมื่อฟังก์ชั่นพบสตริงที่ว่างเปล่า


2
รักการแก้ปัญหาโดยไม่ต้อง regex!
Maarten Bamelis

3

05AB1E , 22 20 ไบต์

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

05AB1E ไม่มี regexes แต่อย่างใด
ฉันไม่ชอบสิ่งที่ซ้ำกันจริงๆžÁ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 ;)
Kevin Cruijssen

2

เรติน่า 0.8.2 , 17 ไบต์

i`[aeiouy]+
$&p$&

ลองออนไลน์! ลิงค์มีกรณีทดสอบ คำอธิบาย: วิธีการ regexp เล็กน้อย การiตั้งค่าสถานะจะเปิดใช้งานการไม่สนใจขนาดตัวพิมพ์ (Retina เป็นค่าเริ่มต้นสำหรับการแข่งขันระดับโลก)



1

แดง , 92 ไบต์

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

ลองออนไลน์!

แน่นอนแดง 's มากขึ้นอย่างละเอียดกว่าParseregex


1
มากกว่า verbose regexแน่นอน แต่อาจทำให้น่าสนใจเช่นกัน ฉันชอบมัน!
Maarten Bamelis

@MaartenBamelis ขอบคุณ! ใช่แดง (เหมือน Rebol) เป็นภาษาที่น่าสนใจ
Galen Ivanov


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. เอกสารจะไม่บอกคุณเกี่ยวกับการใช้บล็อกแทน แต่มันเป็นคุณสมบัติที่ใช้งานได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.