แปลงสตริงให้เทียบเท่าRövarspråket


15

Rövarspråket

Rövarspråketเป็นเกมคำศัพท์ที่เล่นโดยเด็ก ๆ ชาวสวีเดนจากหนังสือเกี่ยวกับ Kalle Blomkvist โดย Astrid Lindgren

กฎพื้นฐานมีดังนี้ (จาก Wikipedia):

  • พยัญชนะทุกตัว (เรื่องการสะกดคำไม่ใช่การออกเสียง) เป็นสองเท่าและมีการแทรก o ในระหว่าง
  • เสียงสระจะยังคงอยู่

ตัวอย่างบางส่วน:

  • "สวัสดี" -> "hohelollolo"
  • "Min svävareär full med ål" -> "MoMinon sosvovävovaroreäror fofulollol momedod ålol"

ตัวอักษรสวีเดนเหมือนกันกับภาษาอังกฤษดังนั้นโปรแกรมควรทำงานกับทั้งภาษาสวีเดนและภาษาอังกฤษ

ตัวอักษร "y" ถูกนำมาเป็นพยัญชนะในกรณีนี้ - เป็นส่วนใหญ่


งานของคุณ:

เขียนโปรแกรมเพื่อแปลงสตริงของตัวอักษรสวีเดนป้อนข้อมูลผ่านฟังก์ชั่นหรือผ่าน stdin ให้เทียบเท่าRövarspråket คำตอบที่สั้นที่สุดในการชนะไบต์!


@ MartinBüttnerชี้แจงคำถามของฉันเพิ่มเติม - ควรใช้กับภาษาสวีเดน (เนื่องจากเป็นเกมคำศัพท์ภาษาสวีเดน)
James Williams

ความหมายของรายการตามตัวอักษรคืออะไร?
เครื่องมือเพิ่มประสิทธิภาพ

@Optimizer สตริงของอักขระที่เป็นตัวอักษรเท่านั้น ขออภัยฉันพูดไม่ดีฉันจะแก้ไข
James Williams

3
เราควรปฏิบัติต่อตัวอักษรที่ไม่ใช่อย่างไร? อย่างน้อยช่องว่างปรากฏในตัวอย่างที่สอง
nimi

2
ในหมายเหตุด้าน: 'Y' ถือเป็นสระในภาษาสวีเดน
leo

คำตอบ:


14

เรติน่า , 14 + 5 = 19 ไบต์

เรติน่าเป็นภาษาที่เป็นหลักเพียง. NET regex ด้วยค่าใช้จ่ายน้อยที่สุด รหัสสำหรับโปรแกรมนี้ประกอบด้วยสองไฟล์:

i`[b-z-[eiou]]
$0o$0

นี่อ่านอินพุตบน STDIN และพิมพ์เอาต์พุตไปที่ STDOUT

หากคุณเรียกใช้ไฟล์pattern.rgxและreplacement.rplคุณสามารถเรียกใช้โปรแกรมเช่นเดียวกับ

echo "hello" | ./Retina pattern.rgx replacement.rpl

คำอธิบาย

นี่เป็นเรื่องตรงไปตรงมา แต่ให้ฉันเพิ่มคำอธิบายต่อไป (ส่วนใหญ่เกี่ยวกับการทำงานของจอประสาทตา) หากมีการเรียกใช้ Retina 2 ไฟล์มันจะถูกสมมติให้ทำงานโดยอัตโนมัติใน "โหมดแทนที่" โดยที่ไฟล์แรกคือ regex และไฟล์ที่สองเป็นรูปแบบ

Retina สามารถกำหนดค่า (ซึ่งรวมถึงRegexOptionsและตัวเลือกอื่น ๆ ) โดยเตรียม regex ด้วย`และสตริงการกำหนดค่า ในกรณีนี้ฉันแค่ให้มันiซึ่งเป็นตัวแก้ไข regex ปกติสำหรับกรณีที่ไม่รู้สึก

สำหรับ regex นั้นมันใช้การลบคลาสอักขระ. NET เพื่อจับคู่พยัญชนะใด ๆ ในช่วง ASCII การแทนที่จากนั้นเพียงแค่เขียนการแข่งขันกลับมาสองครั้งด้วยoในระหว่าง


คุณหายไปaในชั้นอักขระสระของคุณหรือไม่
Brian Gordon

3
@BrianGordon ไม่ฉันเริ่มต้นตัวอักษรระดับจากดังนั้นฉันไม่จำเป็นต้องลบb a
Martin Ender

2
น่าสนใจฉันไม่เคยเห็นตัวละครที่ซ้อนกันและหักลบกันมาก่อน นั่นเป็นเพียงสิ่ง. NET?
Steve Bennett

ฉันรู้สึกว่าคุณต้องนับอย่างน้อยหนึ่งตัวอักษรสำหรับการคั่นระหว่างสองไฟล์ นั่นจะเป็นเซมิโคลอนหรือขึ้นบรรทัดใหม่ในภาษาอื่น มันเป็นช่องว่างระหว่างชื่อไฟล์ถ้าคุณต้องการพิถีพิถันในเรื่องที่ตัวละครมาจากภาษานี้
Sparr

@ Sparr ใช่นั่นคือนโยบายในตอนนี้ แต่นโยบายนั้นใหม่กว่าคำตอบ / การท้าทายนี้ สำหรับการอ้างอิง (ในความเป็นจริงถ้าคุณดูที่การประทับเวลาคุณจะเห็นว่าฉันผลักดันนโยบายเนื่องจากคำตอบนี้ แต่การใช้กฎเช่นนั้นทั่วทั้งไซต์ย้อนหลังไม่สมเหตุสมผล)
Martin Ender

12

การใช้ Unix KSH 27 28 32 27 ไบต์ (หรือ 21 ถ้าเรานับเฉพาะในคำสั่ง sed)

ขอบคุณคำแนะนำของผู้อื่น :) ชื่นชม

.. ฉันลงมาที่นี่:

sed 's/[^AEIOUÅÄÖ ]/&o&/ig'

(อนุญาตสำหรับช่องว่างและตัวอักษรสวีเดน)

echo "hello" | sed 's/[BCDFGHJ-NP-TV-Z]/&o&/ig'
hohelollolo
echo "HELLO" | sed 's/[BCDFGHJ-NP-TV-Z]/&o&/ig'
HoHELoLLoLO
echo "QuIcKlY Now" | sed 's/[BCDFGHJ-NP-TV-Z]/&o&/ig'
QoQuIcocKoKlolYoY NoNowow

4
นอกจากนี้ฉันคิดว่ามันอนุญาตให้เรียกร้องคำตอบของคุณเป็นsedโปรแกรมและเพียงแค่นับไบต์ระหว่างคำพูดเดียว
Digital Trauma

1
s/[^AEIOU]/&o&/igดูเหมือนว่าจะทำงาน .. สำหรับคำเดียวอย่างน้อย ... คุณจะต้องยกเว้นช่องว่างเช่นกัน
Digital Trauma

1
ทุบตีแม้ว่าเชลล์จะไม่สำคัญตราบใดที่โปรแกรม sed ของคุณอยู่ในเครื่องหมายคำพูดเดียว
Digital Trauma

1
ยังดูออกสำหรับสระสวีเดนö, åฯลฯ - เหล่านี้จำเป็นที่จะต้องไม่รวมเกินไป อาจดีกว่าที่จะใช้บัญชีขาวของพยัญชนะs/[BCDFGHJ-NP-TV-Z]/&o&/ig
Digital Trauma

2
ฉันจะทำให้มัน 'sed' และใช้ "s / [^ AEIOUÅÄÖ] / & o & / ig" ซึ่งครอบคลุมสระสวีเดนและช่องว่าง 25 ไบต์
swstephe

7

CJam, 32 30 ไบต์

q{_eu'[,66>"EIOU"-#)g{'o1$}*}/

นี่คือการอ่านแบบเต็มโปรแกรมจาก STDIN และการพิมพ์ไปยัง STDOUT มันใช้งานได้กับอินพุต Unicode ที่กำหนดเองและใช้อักขระ 42 ตัวต่อไปนี้เป็นพยัญชนะ:

BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz

ทดสอบที่นี่

คำอธิบาย

q                              "Slurp STDIN.";
 {                          }/ "For each character...";
  _eu                          "Duplicate and convert to upper case.";
     '[,66>                    "Get a string from B to Z using range and slice.";
           "EIOU"-             "Remove the remaining four vowels.";
                  #            "Find the position of the character in this string or
                                -1 if the character can't be found.";
                   )g          "Increment, take signum, which gives 1 for consonants, 
                                and 0 otherwise.";
                     {    }*   "Repeat this block that many times, i.e. do nothing for
                                non-consonants.";
                      'o       "Push an 'o'.";
                        1$     "Copy the current character.";

5

JavaScript, 59 57 55 44ไบต์

s=>s.replace(/(?![eiou])[b-z]/gi,"$&o$&")

ขอบคุณ Masterzagh ที่เตือนฉันว่าฟังก์ชั่นจะเป็นที่ยอมรับเช่นกันและสำหรับเคล็ดลับ regex ของเขาเกี่ยวกับการตอบกลับโดยไม่ต้องจับ!

รุ่นที่ยาวกว่าพร้อมอินพุต / เอาต์พุต:

alert(prompt().replace(/(?![eiou])[b-z]/gi,"$&o$&"));

แสดงกล่องข้อความแจ้งเพื่อป้อนสตริงจากนั้นแสดงไดอะล็อกที่มีเอาต์พุตRövarspråket รหัสใช้ regex เพื่อเพิ่มพยัญชนะเป็นสองเท่าและใส่os


"เขียนโปรแกรมเพื่อแปลงสตริงของตัวอักษรสวีเดนป้อนผ่านฟังก์ชั่นหรือผ่าน stdin" คุณสามารถสร้างมันได้s=>alert(s.replace(/(?![eiou])([b-z])/gi,"$1o$1"));

และเนื่องจากมันไม่ได้ถูกขอให้ส่งออกคุณไม่ต้องการการแจ้งเตือนเช่นกัน

อีกสิ่งหนึ่งที่คุณสามารถbackreference โดยไม่ต้องจับ โดยทั่วไปs=>s.replace(/(?![eiou])[b-z]/gi,"$&o$&")แล้วเนื่องจาก$&หมายถึงการจับคู่ปัจจุบันคุณสามารถลบวงเล็บที่จับจดหมายของคุณและในขณะที่คุณกำลังบันทึกไบต์อื่นโดยการลบเครื่องหมายอัฒภาคในตอนท้าย

@Masterzagh เยี่ยมมากขอบคุณอีกครั้ง!
ProgramFOX

4

Mathematica, 84 73 72 ไบต์

StringReplace[#,a:RegularExpression@"(?i)[BCDFGHJ-NP-TV-Z]":>a<>"o"<>a]&

คำอธิบาย:

  • RegularExpression@"(?i)[BCDFGHJ-NP-TV-Z]" เป็น regex ที่ตรงกับพยัญชนะทุกตัว
  • a:*..*:>a<>"o"<>aสร้างกฎล่าช้าในการผูกพยัญชนะเหล่านั้นaและแทนที่ด้วยและ o ล้อมรอบด้วยตัวเอง
  • สุดท้ายStringReplace[#,*..*]&สร้างฟังก์ชั่นที่บริสุทธิ์โดยใช้กฎนั้นกับตัวอักษรที่ตรงกันทุกตัวในอาร์กิวเมนต์

@ MartinBüttnerขอบคุณ! ยังใหม่กับ Mathematica golfing ...
LegionMammal978

@ MartinBüttnerกำลังจะทำอะไรต่อไป แต่ได้ฟุ้งซ่านโดยการแจ้งเตือนบางอย่าง: P
LegionMammal978

4

จูเลีย46 46ไบต์

t->replace(t,r"(?![eiou])[b-z]"i,s->s*"o"*s)

สิ่งนี้จะสร้างฟังก์ชั่นที่ไม่ระบุชื่อซึ่งรับอินพุตสตริงเดียวและพิมพ์Rövarspråketที่เทียบเท่า f=t->...เรียกว่าให้มันชื่อเช่น

ไม่ค่อยมีการเล่นกอล์ฟที่นี่จริง ๆ นอกเหนือจากช่องว่างหลังจากเครื่องหมายจุลภาคใน replace()ไม่มากได้รับจริงๆแข็งแรงเล่นกอล์ฟที่นี่นอกเหนือจากช่องว่างหลังเครื่องหมายจุลภาคใน

ที่นี่เราใช้อาร์กิวเมนต์ 3 ข้อในreplace()ฟังก์ชั่น: สตริงป้อนเข้า, นิพจน์ปกติสำหรับระบุสตริงย่อยและการแทนที่ r"..."จูเลียหมายถึงรูปแบบการแสดงออกโดยปกติ การเพิ่มiไปยังจุดสิ้นสุดทำให้ไม่คำนึงถึงขนาดตัวพิมพ์ regex นี้ตรงกับพยัญชนะ หากมีการใช้ฟังก์ชั่นสำหรับการเปลี่ยนผลลัพธ์คือฟังก์ชันนั้นใช้กับสตริงย่อยที่ตรงกันแต่ละอัน ฟังก์ชั่นที่เราใช้ที่นี่ต้องใช้สตริงsและส่งคืนsosเนื่องจาก*ทำการเชื่อมต่อสตริงในจูเลีย ดังนั้นผลลัพธ์สุดท้ายคือสตริงอินพุตที่มีตัวอักษรแต่ละตัวเป็นสองเท่าด้วย "o" ระหว่าง

ตัวอย่าง:

julia> f("Min svävare är full med ål")
"MoMinon sosvovävovarore äror fofulollol momedod ålol"

julia> f("hello")
"hohelollolo"

julia> f("Rövarspråket")
"RoRövovarorsospoproråkoketot"

โปรดทราบว่านี่จะเป็น 9 ไบต์อีกต่อไปหากเราต้องพิมพ์ผลลัพธ์แทนที่จะส่งคืน รอการยืนยันจาก OP


แก้ไข:บันทึก 2 ไบต์ขอบคุณ Martin Büttner!


3

Haskell, 81 ไบต์

x n|elem n"bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"=[n,'o',n]|1<2=[n]
f=(>>=x)

การใช้งาน: f "Hello there!" ->"HoHelollolo tothoherore!" ->

ฉันไม่สามารถชาญฉลาดสร้างรายชื่อของพยัญชนะโดยไม่ต้องมีราคาแพงimports แม้แต่การหมุนตัวอักษรเพื่อตรวจสอบตัวพิมพ์เล็กก็ต้องใช้ไบท์มากกว่าเพียงแค่แสดงพยัญชนะทั้งบนและล่าง



2

Perl, 33 ไบต์

คำตอบนี้ส่วนใหญ่เป็นแบบ regex เท่านั้นโดยมีโค้ดพิเศษจำนวนเล็กน้อยเพื่อดำเนินการ I / O

$_=<>;s/[^aeiou\W]/$&o$&/gi;print

เป็นเวลานานแล้วที่ฉันใช้ Perl regexes ดังนั้นนี่อาจปรับปรุงได้

$_=<>;                              This takes input from STDIN `<>` and stores
                                    it into the default variable $_
      s/          /     /gi;        This is a case-(i)nsentive, (g)lobal, 
                                    (s)ubstitution regex.  Since no other
                                    variable is specified, it is applied to
                                    the default variable $_.
        [^aeiou\W]                  This matches any single character that 
                                    is a consonant, by using a double-
                                    negative ^\W to match only alphanumeric 
                                    characters excluding vowels.  Accented 
                                    vowels are not considered alphanumeric 
                                    by Perl.
                   $&o$&            This forms the replacement.  $& contains the 
                                    match (the consonant), so this replaces each 
                                    consonant with two copies of itself with 
                                    an 'o' in between.
                            print   This prints the result.  With no arguments, 
                                    it prints $_ by default.

จะ[^aeiou]ยังไม่จับคู่åและสระที่ไม่ใช่ ASCII อื่น ๆ หรือไม่
Alex A.

@AlexA ฉันสังเกตเห็นปัญหาแล้ว มันเป็นตัวแก้ไขศูนย์ ( \sถึง\W)
PhiNotPi

+1, คำอธิบายที่ละเอียดที่สุดสำหรับโค้ด Perl ที่ฉันเคยเห็นในเว็บไซต์นี้
Zgarb

2

C (รุ่น ideone.com) - 133

โอเคนี่มันใหญ่มาก แต่ C ไม่มีนิพจน์ทั่วไป โปรดบอกฉันว่าคุณเห็นอะไรที่ทำให้สั้นกว่านี้ ...

#define x (*c<66||*c>90)&&(*c<98||*c>122)||strchr("EIOUeiou",*c)?"":
c[2];main(){while(0<(*c=getchar()))printf("%s%s%s",c,x"o",x c);}

ตัวแปรโลคอลcได้รับการประกาศอย่างไร
wjl

@wjl ตัวแปรส่วนกลางใน C เป็นค่าเริ่มต้นเป็นศูนย์ ตัวแปรโลคัลอยู่บนสแต็กและไม่ได้เตรียมข้อมูลเบื้องต้น ดูstackoverflow.com/questions/3553559/… ตัวแปรโดยไม่ต้องพิมพ์ค่าเริ่มต้นเป็น int และเนื่องจาก printf ทำงานบนตัวอักษรรหัสอาจมีปัญหา endian - ฉันจะตรวจสอบในวันพรุ่งนี้
Jerry Jeremiah

ใช่ฉันเข้าใจการเริ่มต้น ผมก็แค่พยายามที่จะเป็นอย่างดีชี้ให้เห็นว่ารหัสนี้ไม่ได้รวบรวมตั้งแต่cไม่ได้ประกาศout.c:2:18: error: ‘c’ undeclared (first use in this function)ที่ทุกคนเช่น
wjl

@wjl ฉันเดาว่ามันขึ้นอยู่กับคอมไพเลอร์ มันรวบรวมและทำงานที่ ideone.com ideone.com/s7M5mZเมื่อคุณเลือก C - มีความคิดอะไรที่แตกต่างกันบ้าง?
Jerry Jeremiah

ดูเหมือนว่าบั๊กกับคอมไพเลอร์ของ ideone หากคุณแก้ไขบรรทัดใหม่ระหว่างc[2];main(จำเป็นเพราะ#defineไม่ได้จบด้วยเครื่องหมายอัฒภาค) จะทำให้เกิดข้อผิดพลาดคล้ายกับ GCC อย่างไรก็ตามไม่มีเรื่องใหญ่มันยังคงเป็นเกมกอล์ฟที่สนุก แต่คุณอาจต้องการตัวละครเพิ่มอีกสองสามตัวเพื่อให้ถูกต้อง C. =)
wjl

2

ชุด Windows, 235 ไบต์

@echo off
setlocal enabledelayedexpansion
set d=qwrtypsdfghjklzxcvbnm
set #=%1
:x
if defined # (
for /l %%i in (0,1,20)do (
set m=!d:~%%i,1!
if /i !m!==%#:~0,1% set g=!g!!m!o)
set g=!g!%#:~0,1%
set #=%#:~1%
goto x)
echo %g%

การใช้งาน:

script.bat hello

เอาท์พุท:

hohelollolo

คุณอาจสงสัยว่าทำไมฉันไม่ตั้ง d เป็น "aoui" การตรวจสอบว่าไม่เท่ากันต้องแยกจากลูป ไม่ใช่ทุกอย่างที่ควรทำงานทำงานได้เป็นชุด สคริปต์จัดการอักขระ 1 คำ [ตามที่ปรากฏบนแป้นพิมพ์ของคุณ] ช่องว่างและการขึ้นบรรทัดใหม่ทั้งหมดที่ยังคงมีอยู่จำเป็นต้องมีเพื่อให้สคริปต์ทำงาน

ต้องการ Windows XP หรือสูงกว่า ไม่ได้ทดสอบใน Windows 8 ขึ้นไป


2

PowerShell - 35 ไบต์

เพียงเพื่อแสดงให้เห็นว่า PowerShell สามารถแข่งขันในบางครั้งเช่นกันและด้วย regex ที่ถูกขโมยอย่างไร้จุดหมายจากคำตอบของ Retina Büttnerของ Martin:

%{$_-replace'[b-z-[eiou]]','$0o$0'}

ยอมรับอินพุตสตริงจาก stdin


1

Pyth - 28 ไบต์

วิธีนี้ใช้งานได้อย่างชัดเจนโดยสร้างรายการพยัญชนะได้ทันทีโดยใช้ความแตกต่างที่ตั้งไว้อย่างชาญฉลาด

FNzpk+N?+\oN}rNZ-{G{"aeiou"k

คำอธิบายจะมาเร็ว ๆ นี้

ลองได้ที่นี่


คุณสามารถบันทึก 4 บิตโดยการลบ 4 ตัวอักษรและแทนที่อักขระหนึ่งรายการด้วยอักขระอื่น
Jakube



1

Python 61

ฉันไม่สามารถรับสหภาพแรงงานระดับตัวละครหรือการลบได้ดังนั้นฉันจึงไม่คิดว่า Python มีคุณสมบัติดังกล่าว ฉันต้องใช้ lookahead เชิงลบแทน

import re;f=lambda s:re.sub('(?i)(?![eiou])([b-z])',r'\1o\1',s)

เรียกใช้ที่นี่: http://repl.it/fQ5

เชื่อมโยงไปยังสิ่งที่ตรงกันข้าม: /codegolf//a/48182/34718


1

K, 38 ตัวอักษร

f:{,/(1+2*~(_x)in"aeiouåäö ")#'x,'"o"}

-1 f"Min svävare är full med ål";
MoMinon sosvovävovarore äror fofulollol momedod ålol

1

K, 31 ไบต์

,/{(x,"o",x;x)9>" aeiouåäö"?x}'

การแก้ปัญหาที่ตรงไปตรงมาดูเหมือนว่าจะแข่งขันได้ค่อนข้างดีเนื่องจาก K ขาด regexes เลือกระหว่างฟอร์ม "XoX" และ "X" ตามว่าพบอักขระแต่ละตัวในตารางการค้นหาของสระที่ถูกละเว้นและเข้าร่วมรายการผลลัพธ์

คุณสามารถลองใช้เบราว์เซอร์ของคุณโดยใช้oK :

http://johnearnest.github.io/ok/index.html?run=%20%2C%2F%7B(x%2C%22o%22%2Cx%3Bx)9%3E%22%20aeiouåäö%22%3Fx%7D'%22Min%20svävare%20är%20full%20med%20ål%22

(น่าเสียดายที่ฉันไม่สามารถให้ลิงค์ที่คลิกได้เพราะกองล้นไม่ปรากฏเพื่ออนุญาตให้ใช้อักขระเน้นเสียงใน URL)


0

Golfscript, 35 ไบต์

{."aeiouåäö\n "?-1={."o"\}{}if}%

คาดว่าอินพุตจะอยู่ในสแต็ก ด้วยอินพุต (50 ไบต์):

"#{STDIN.gets}"{."aeiouåäö\n "?-1={."o"\}{}if}%

ทำงานร่วมกับ vovels สวีเดนå, äและö


2
การป้อนข้อมูลจะวางซ้อนบน GS เสมอ
เครื่องมือเพิ่มประสิทธิภาพ

0

Sed (บนบรรทัดคำสั่ง), 28 ไบต์

sed 's/\([^aeiou]\)/\1o\1/g'

ไพพ์ข้อความหรือพิมพ์โดยตรง รหัสเซดเท่านั้นเองคือ 22 ไบต์


3
äนี้ซ้ำช่องว่างและตัวอักษรเช่น
ProgramFOX

0

R, 45 ตัวอักษร

gsub("([^aeiouäöå ])","\\1o\\1",readline(),i=T)

regex ง่าย อ่านจาก stdin i=Tย่อมาจากignore.case=TRUE(ด้วยการจับคู่บางส่วนของชื่ออาร์กิวเมนต์) ซึ่งทำให้gsubกรณีตาย

การใช้งาน:

> gsub("([^aeiouäöå ])","\\1o\\1",readline(),i=T)
Min svävare är full med ål
[1] "MoMinon sosvovävovarore äror fofulollol momedod ålol"
> gsub("([^aeiouäöå ])","\\1o\\1",readline(),i=T)
hello
[1] "hohelollolo"
> gsub("([^aeiouäöå ])","\\1o\\1",readline(),i=T)
hElLo
[1] "hohElolLoLo"


0

golflua, 36 ไบต์

B=I.r():g("[^aeiou%W ]","%1o%1")w(B)

การจับคู่รูปแบบง่าย ๆ : ใช้ stdin จากนั้นหาสระที่%Wไม่ใช่ตัวอักษร( ดูแลตัวอักษรที่ไม่ใช่ตัวอักษรและตัวเลข) และใส่oระหว่างสองตัวแทนที่ น่าเศร้าที่การทำทั้งหมดนี้ในการเขียน (เช่นw(I.r():g(....))) ก็เอาท์พุทจำนวนการแทรกแม้ว่ามันจะบันทึกไว้ 3 ตัวอักษร Lua จะเทียบเท่า

line = io.read()
rovar = line:gsub("[^aeiou%W ]","%1o%1")
print(rovar)

0

REXX, 107 ไบต์

parse arg s
v='aeiouåäö '
o=
do until s=''
  parse var s l 2 s
  if verify(l,v)>0 then l=l'o'l
  o=o||l
  end
say o

"MoMinon sosvovävovaroreäror fofulollol momedod ålol"


0

JavaScript 43

Thanks to @Masterzagh for saving on function syntax.

x=>x.replace(/[bcdfghj-np-tv-z]/gi,"$&o$&")

JavaScript 62

function E(x){return x.replace(/[bcdfghj-np-tv-z]/gi,"$&o$&")}

Your function can be in the form of an anonymous arrow function like x=>x.replace(/[bcdfghj-np-tv-z]/gi,"$&o$&"). Arrow functions work like this name=(arg1, arg2)=>{code}. () are not needed if there's only one argument and {} are not needed if there's only one line of code. Return is also not needed if the one line returns something.

And I forgot to say. You don't need to give it a name to solve the problem which only asked you to create a function.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.