Lípínguapua dopo Pêpê


20

Língua do Pê, hay P Language, là một trò chơi ngôn ngữ được nói ở Brazil và Bồ Đào Nha với tiếng Bồ Đào Nha. Nó cũng được biết đến trong các ngôn ngữ khác, chẳng hạn như tiếng Hà Lan và tiếng Nam Phi. ( Wikipedia )

Có một số phương ngữ trong trò chơi ngôn ngữ này. Các ngôn ngữ khác nhau mà trò chơi được chơi với thậm chí có phương ngữ độc đáo của riêng họ. Một số người thông thạo ngôn ngữ P và người giỏi nhất thậm chí có thể dịch bất kỳ văn bản nào sang phương ngữ ưa thích của họ ngay tại chỗ!

Ngôn ngữ P

Trong thử thách này, chúng tôi sẽ sử dụng phương ngữ Double Talk .

Để dịch văn bản sang Ngôn ngữ P, bất kỳ chuỗi nguyên âm nào trong văn bản đều được gắn thêm một pký tự theo sau là một bản sao của chuỗi nguyên âm.

Thử thách

Viết hàm hoặc chương trình chấp nhận một chuỗi làm đầu vào và xuất bản dịch của nó bằng Ngôn ngữ P.

  • Đầu vào chỉ bao gồm các ký tự ASCII có thể in được.
  • Đầu ra chỉ bao gồm đầu vào được dịch và tùy chọn một dòng mới.
  • Nguyên âm là bất kỳ ký tự nào sau đây aeiouyAEIOUY.
  • Một chuỗi các nguyên âm được phân định bởi bất kỳ ký tự nào khác. Chuỗi "Aa aa-aa"có ba chuỗi nguyên âm.
  • Không gian hàng đầu và dấu kiểm có thể được bỏ qua tùy ý từ chuỗi đầu ra được dịch.

Ví dụ

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

Ký tự dấu ngoặc kép "được sử dụng để phân định các chuỗi đầu vào và đầu ra trong các ví dụ nhưng rõ ràng ký tự này cũng có thể xuất hiện trong bất kỳ chuỗi đầu vào hợp lệ nào.


2
Tôi không chắc có ai đã chào đón bạn vào stack chưa, vì vậy: chào mừng bạn đến với Code Golf Stack Exchange! Chỉ định thử thách đầu tiên. :-)
Giuseppe

@Giuseppe Cảm ơn những lời tốt đẹp!
Maarten Bamelis

Cũng trong tiếng Tây Ban Nha es.wikipedia.org/wiki/Jerigonza
leonbloy

Câu trả lời:


9

JavaScript (ES6), 35 byte

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

Hãy thử trực tuyến!

Trong đó mẫu thay thế đặc biệt $&có nghĩa là chuỗi con phù hợp .


8
Tôi không biết về $&. Trong suốt những năm qua, tôi đã bao bọc toàn bộ regex trong một nhóm bắt giữ. Ai nói golf mã là không thực tế?!
đệ quy

2
$&cách phổ biến hơn? Trong Java, $0afaik và Retina cho phép cả hai. Không biết $&đến từ JavaScript. Hoặc nó là một regex có hương vị .NET và JavaScript cũng sử dụng nó?
Kevin Cruijssen


7

Japt , 10 byte

r"%y+"_+ip

Thử nó

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"

Chết tiệt, 2 phút quá muộn! Tôi đã có câu trả lời chính xác tương tự, ngoại trừ nó sử dụng các biểu thức ngắn Japt 2.0 "%v"->\v
Hiện thân của sự thiếu hiểu biết

@EmbodimentofIgnorance, bạn cần \ythay thế \v.
Xù xì

6

Java 8, 40 byte

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

Hãy thử trực tuyến.

Giải trình:

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

Regex giải thích:

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

Hãy thử trực tuyến!


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

Hãy thử trực tuyến!

Python 3.8 (tiền phát hành): 99 byte

Giải trình

Hàm đệ quy, chấp nhận một chuỗi svà một đối số tùy chọn q. Nếu ký tự đầu tiên của s( i) là nguyên âm, nó được lưu trong hàng đợi q. Nếu không, một chuỗi được trả về bao gồm q, chữ cái 'p', qmột lần nữa, ký tự ivà kết quả của hàm đệ quy với ký tự đầu tiên của chuỗi bị loại bỏ. Đệ quy dừng lại khi hàm gặp một chuỗi rỗng s.


2
Yêu giải pháp mà không cần regex!
Maarten Bamelis

3

05AB1E , 22 20 byte

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

05AB1E không có bất kỳ regexes nào.
Tôi thực sự không thích sự trùng lặp žÁyнå, nhưng hiện tại tôi hơi bận rộn để tìm giải pháp thay thế ..

-2 byte cảm ơn @Grimy đã cho tôi thấy một hằng số mà tôi thậm chí không biết đã tồn tại (và bị thiếu trong trang Wiki ..>.>)

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

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

žÁthay vì žOcho phép bạn thả l.
Grimmy

@Grimy Có lẽ tôi nên bắt đầu sử dụng tệp info.txt thay vì trang Wiki .. -_- '
Kevin Cruijssen

Cả hai đều thiếu rất nhiều lệnh, mặc dù không giống nhau (hy vọng. Đôi khi tôi tự hỏi liệu có thiếu lệnh bí mật nào từ cả hai không).
Grimmy

1
@Grimy Vâng, có lẽ chúng ta nên sử dụng mã nguồn thay vì các trang info.txt hoặc Wiki. ;)
Kevin Cruijssen

2

Võng mạc 0.8.2 , 17 byte

i`[aeiouy]+
$&p$&

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải thích: Cách tiếp cận regrec tầm thường; các ilượt cờ trên trường hợp vô hồn (Retina đã mặc định là một trận đấu toàn cầu).



1

Màu đỏ , 92 byte

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

Hãy thử trực tuyến!

Tất nhiên Red 's Parsedài hơn nhiều regex.


1
Dài dòng hơn regexchắc chắn, nhưng có lẽ điều đó cũng làm cho nó thú vị hơn. Tôi thích nó!
Maarten Bamelis

@MaartenBamelis Cảm ơn bạn! Vâng, Red (như Rebol) là một ngôn ngữ thú vị.
Galen Ivanov


1

Stax , 17 byte

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

Chạy và gỡ lỗi nó tại staxlang.xyz!

Giải nén (20 byte) và giải thích:

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

Không có biểu thức chính quy không phân biệt chữ hoa chữ thường trong Stax và các phần tử nguyên âm không bao gồm Y. Tài liệu sẽ không cho bạn biết về việc sử dụng một khối thay thế, tuy nhiên đó là một tính năng hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.