วิเคราะห์ภาษาของฉัน!


21

ภาษาที่สร้างชื่อเสียงภาษาใช้อักษรละติน (ส่วนใหญ่ดูที่หน้าวิกิพีเดียที่เชื่อมโยงสำหรับรายละเอียด) แต่มีบางตัวละครด้วยสำเนียง: C, G, H, J, S และ U (C-circumflex, g-circumflex, h-circumflex, j-circumflex, s-circumflex และ u- breve .) โดยธรรมชาติแล้วตัวละครเหล่านี้ยากที่จะพิมพ์ แม้แต่คำถามนี้ฉันต้องค้นหาตัวเลือก Unicode เพื่อหาตัวอักษร ด้วยเหตุนี้จึงมีการพัฒนารูปแบบการใช้ตัวอักษร "x" เพื่อการใช้งานอิเล็กทรอนิกส์ ตัวอย่างเช่น "cxu" ใช้สำหรับ "ĉu" (หมายเหตุ: ตัวอักษร "x" ไม่ได้ใช้ตามปกติในตัวอักษรภาษาเอสเปรันโต)

อย่างไรก็ตามฉันเป็นคนเจ้าระเบียบภาษา! * ใบเสนอราคาทางอากาศ * x ไร้สาระกำลังฆ่าฉัน! ฉันต้องการโปรแกรมเพื่อแก้ไขปัญหานี้ให้สั้นที่สุดเท่าที่จะทำได้เพื่อให้ฉันสามารถพิมพ์ลงในเทอร์มินัลของฉันได้โดยเร็วที่สุด!

ท้าทาย

ภารกิจของคุณคือใช้สตริงของภาษาเอสเปรันโตโดยใช้การประชุม x แล้วแปลงเป็นเอสเปรันโตที่แท้จริง

ผลคุณต้องทำแผนที่:

cx: ĉ
gx: ĝ
hx: ĥ
jx: ĵ
sx: ŝ
ux: ŭ
Cx: Ĉ
Gx: Ĝ
Hx: Ĥ
Jx: Ĵ
Sx: Ŝ
Ux: Ŭ

ควรยอมรับอักขระ ASCII ที่พิมพ์ได้อื่นและไม่เปลี่ยนแปลง Unicode จะดี แต่ไม่จำเป็น

อินพุตและเอาต์พุตสามารถอยู่ในรูปแบบที่เหมาะสมกับภาษาของคุณ โชคดี!

Testcases

"input" : "output"
_____________
"gxi estas varma" : "ĝi estas varma"
"Cxu sxi sxatas katojn aux hundojn?" : "Ĉu ŝi ŝatas katojn aŭ hundojn?"
"Uxcxsxabcd(hxSx)efg{};" : "Ŭĉŝabcd(ĥŜ)efg{};"
"qwertyuiop" : "qwertyuiop"
" " : " "
"" : ""
"x" : "x"
"xc" : "xc"
"xcx" : "xĉ"
"cxx" : "ĉx"

เกณฑ์การให้คะแนน

นี่คือรหัสกอล์ฟคำตอบจะได้คะแนนน้อยที่สุดในการเข้ารหัสภาษาเริ่มต้น

นี่คือตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

# Ruby, <s>104</s> <s>101</s> 96 bytes

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

# Perl, 43 + 2 (-p flag) = 45 bytes

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

ขอให้โชคดีสนุกและอย่าลังเลที่จะแนะนำการปรับปรุง!

ชี้แจง:

  • คุณต้องกังวลเกี่ยวกับอักขระ ASCII ที่พิมพ์ได้

  • คุณจะต้องส่งออกอักขระที่ดูเหมือนผลลัพธ์ที่ถูกต้อง ใช่นี่หมายความว่าคุณสามารถเน้นสำเนียงอักขระมาตรฐานได้


ASCII ที่นี่หมายถึงอักขระที่พิมพ์ได้ 20-7E, 00-7F หรืออะไร
user202729

สิ่งที่พิมพ์ได้ทั้งหมด
OldBunny2800

หมายเหตุ: ฉันเพิ่มคำอธิบายที่คุณสามารถใช้ตัวอักษรและสำเนียงปรับปรุง
OldBunny2800

5
รวมหมวกที่ 0302 ̂และรวม Breve ที่ ̆0306
user202729

^ แต่ละคนใช้เวลา 2 ไบต์ใน UTF8 เป็นนับ TIO
user202729

คำตอบ:


9

QuadR , 65 ไบต์

.x
3::⍵M'ĉĝĥĵŝŭĈĜĤĴŜŬ'['cghjsuCGHJSU'⍳⊃⍵M]

ลองออนไลน์!

.x แทนที่ถ่านตามด้วย "x" ด้วย

3::⍵M เมื่อเกิดข้อผิดพลาดในการทำดัชนีให้คืนค่าการจับคู่ที่ไม่ได้แก้ไข
 แล้วลอง:
'ĉĝĥĵŝŭĈĜĤĴŜŬ'[... ] ดัชนีลงในสตริงนี้ด้วย ดัชนี ตัวอักษรตัวแรก
  ⍵M ของการจับคู่ ในสตริงนี้
  
  
  'cghjsuCGHJSU'

นี่เทียบเท่ากับฟังก์ชัน Dyalog APL โดยปริยาย:

'.x'R{3::⍵.Match'ĉĝĥĵŝŭĈĜĤĴŜŬ'['cghjsuCGHJSU'⍳⊃⍵.Match]}

คำตอบที่ดี! +1
OldBunny2800

ฉันไม่แน่ใจว่านับเป็นไบต์ที่นี่ได้อย่างไร การใช้⎕Rตรงไปตรงมานั้นสั้นลงหรือไม่ ('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
ngn

@ng มันเป็น แต่แบตเตอรี่ของฉันหมดก่อนที่ฉันจะมีโอกาสโพสต์นั้น
Adám

6

เรติน่า 27 ไบต์

iT`x`̂`[cghjs]x
iT`x`̆`ux

ลองออนไลน์!

โปรแกรมนี้ประกอบด้วยตัวแปลสองตัว เนื่องจากมีตัวอักษรรวมในรหัสนี้ไม่ได้ทำให้ดีเกินไปบรรทัดแรกจริงควรมีลักษณะคล้ายกับiT`x`^`[cghjs]xที่^ย่อมาจากหมวกตัวอักษรสำเนียงรวม สิ่งนี้จะบอกก็คือว่ามันควรTransliterate ( iกรณี gnoring) ทั้งหมดxในการป้อนข้อมูลที่เป็น^เมื่อใดก็ตามที่พวกเขาจะได้ดังต่อไปนี้ตัวอักษรใด ๆ [cghjs]ใน


หมายเหตุ: TIO วัดรหัสนี้ไม่ถูกต้องเป็น 25 ไบต์ ที่จริงแล้วโปรแกรม Retina นี้ใช้การเข้ารหัส UTF-8 (โปรแกรมอื่นสามารถใช้ UTF-32 หรือ ISO 8859-1) และตัวละครสองตัวที่รวมกันนั้นมีราคา 2 ไบต์ต่อตัว


5

C,  173  154 ไบต์

ขอบคุณ @Colera Su สำหรับการบันทึก 17 ไบต์!

p,c,i;f(char*s){for(char*l="cghjsuCGHJSU";p=*s;~c&&putchar(p))for(c=*++s,i=0;c=='x'&&l[i];++i)l[i]-p||write(1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+i*2,2,c=-1,++s);}

ลองออนไลน์!

คำอธิบาย:

p,c,i;
f(char*s)
{
    // The outer loop and an array of characters that are modified by a trailing 'x'.
    // The array/string is used for getting the index for the accented character later.
    for (char*l="cghjsuCGHJSU";

                                // Store the current character of the input string in 'p'.
                                // If it is '\0', the loop terminates.
                                p=*s;

                                      // The last statement in the loop.
                                      // If 'c==-1', it outputs the char stored in 'p'. 
                                      ~c&&putchar(p))

        // Store the character following 'p' in 'c' and increment the string pointer.
        for(c=*++s, i=0;

                        // If 'c' is not the letter 'x', the inner loop terminates
                        // immediately. Otherwise it loops through the characters of
                        // string 'l'.
                        c=='x'&&l[i]; ++i)

            // If the character stored in 'p' is found inside the string 'l'...
            l[i]-p ||

                      // ...then print the accented character corresponding to 'p'.
                      // 'i' is the index of 'p' in 'l', and, because the characters
                      // with accents are two bytes each, the index is multiplied by 2.
                      write(1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+i*2,2,

                      // Finally set 'c' to -1 so that the non-accented character doesn't
                      // get printed too, and increment the string pointer so that the
                      // letter 'x' doesn't get printed either.
                                                    c=-1, ++s);
}

ดี! ฉันขอคำอธิบายได้ไหม
OldBunny2800

อาจเป็นไปได้ว่าคุณสามารถใช้ null ตัวอักษรแทนได้\0?
user202729

(แต่น่าเสียดายที่ไม่สามารถใช้งานได้ใน TIO)
user202729

คุณสามารถใช้write(1,"..."+i*2,2)เพื่อบันทึก 17 ไบต์ ลองออนไลน์!
Colera Su

5

Python 3 , 81 ไบต์

lambda s,T="cĉgĝhĥjĵsŝuŭ":eval("s"+".replace('%sx',%r)"*12%(*T+T.upper(),))

ลองออนไลน์!

สร้างและประเมินสตริง:

s.replace('cx','ĉ').replace('gx','ĝ').replace('hx','ĥ').replace('jx','ĵ').replace('sx','ŝ').replace('ux','ŭ').replace('Cx','Ĉ').replace('Gx','Ĝ').replace('Hx','Ĥ').replace('Jx','Ĵ').replace('Sx','Ŝ').replace('Ux','Ŭ')

Erik the Outgolfer บันทึกข้อมูลเป็นไบต์


@EriktheOutgolfer ขอขอบคุณ!
xnor

3

/// , 75 ไบต์

/,/\/\///>/x\,/c>ĉ,g>ĝ,h>ĥ,j>ĵ,s>ŝ,u>ŭ,C>Ĉ,G>Ĝ,H>Ĥ,J>Ĵ,S>Ŝ,U>Ŭ/

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

/
/\/\/// /x\
/c  ĉ
g   ĝ
h   ĥ
j   ĵ
s   ŝ
u   ŭ
C   Ĉ
G   Ĝ
H   Ĥ
J   Ĵ
S   Ŝ
U   Ŭ/

อย่างไรก็ตามสิ่งที่ต้องป้อนข้อมูลจะต้องไม่มีแท็บหรือการขึ้นบรรทัดใหม่

ลองออนไลน์!

เนื่องจาก///ไม่สามารถรับอินพุตคุณควรใส่อินพุตตามรหัส

ตรงไปตรงมาสวย ฉันคิดว่ามันไม่สามารถสั้นลงได้เพราะ///ต้องการการจัดการตัวละครแต่ละตัวเป็นพิเศษ

คำอธิบาย:

/,/\/\//       Replace all `,` in the code by `//`
               (two slashes are represented as two backslash-ed slashes)
/>/x\,         (in original code) becomes
/>/x\//        (because `,` is replaced by `//`) - replace all occurence of 
               `>` by `x/`.
/cx/ĉ//gx/ĝ//hx/ĥ//jx/ĵ//sx/ŝ//ux/ŭ//Cx/Ĉ//Gx/Ĝ//Hx/Ĥ//Jx/Ĵ//Sx/Ŝ//Ux/Ŭ/
               ^ The remaining part of the code should look like this.
               Straightforward replacement.

3

Python 3 , 95 ไบต์

f=lambda x,v="cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ":v and f(x.replace(v[0]+"x",v[1]),v[2:])or x

ลองออนไลน์!

-10 ไบต์ขอบคุณ WhatToDo
-1 ไบต์ขอบคุณ Colera Su



@ user507295 โอ้ความคิดที่ฉลาด ขอบคุณ!
HyperNeutrino

ใช้และหรือหรือเคล็ดลับในการบันทึกหนึ่งไบต์: ลองออนไลน์!
Colera Su

@ColeraSu โอ้ยอดเยี่ยมขอบคุณ ไม่แน่ใจว่าทำไมเคล็ดลับนั้นถึงหายไป D:
HyperNeutrino

@HyperNeutrino เพราะฉันไม่รู้เกี่ยวกับเคล็ดลับนั้น ขออภัย!
WhatToDo



1

JavaScript (ES6), 92 ไบต์

s=>[..."cghjsuCGHJSU"].reduce((a,v,i)=>a.split(v+"x").join("ĉĝĥĵŝŭĈĜĤĴŜŬ"[i]),s)

ลองออนไลน์!

วิธีการแบ่งเข้าร่วมที่ใช้แล้วแนะนำใน ที่นี้เพื่อลดจำนวนไบต์เนื่องจากตัวnew RegExp(/*blah*/)สร้างใช้จำนวนไบต์มากเกินไป

เปรียบเทียบ:

Original: a.replace(new RegExp(v+"x", "g"), "ĉĝĥĵŝŭĈĜĤĴŜŬ"[i])
New     : a.split(v+"x").join("ĉĝĥĵŝŭĈĜĤĴŜŬ"[i])

ตัวย่อรวมวิธีการเน้นเสียง (63 ไบต์) แต่มีบางสิ่งที่มองเห็นได้

s=>s.replace(/([cghjs])x/gi," ̂$1").replace(/(u)x/gi," ̌$1");

เชิงอรรถ: ฉันอ้างสิทธิ์คำตอบของฉัน 92 ไบต์เนื่องจากโซลูชัน 63- ไบต์มีส่วนที่อาจส่งผลกระทบต่อผลลัพธ์


1

APL (Dyalog Unicode) , 57 ไบต์

ฟังก์ชั่นเงียบโดยไม่ระบุชื่อ ประเพณี:

  1. ฟังก์ชั่นคำนำหน้ากับสตริง สิ่งนี้แปลสตริง

  2. ฟังก์ชั่นคำนำหน้าเพื่อรายการของสตริง สิ่งนี้แปลสตริง

  3. ฟังก์ชั่นมัดที่มีหมายเลขผูกไฟล์อินพุตเป็นอาร์กิวเมนต์ที่ถูกต้องและหมายเลขผูกไฟล์ที่ส่งออกเป็นอาร์กิวเมนต์ซ้าย สิ่งนี้จะป็อปปูเลตไฟล์เอาต์พุตด้วยเนื้อหาที่ทับศัพท์ของไฟล์อินพุต

('cghjsuCGHJSU',¨'x')⎕R(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')

(... )⎕R(... ) PCRE R eplace

'cghjsuCGHJSU' ตัวอักษรเหล่านี้

,¨'x' แต่ละคนตามด้วย x

 ... กับ ...

,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ' ตัวอักษรแต่ละตัวเหล่านี้เป็นสตริง

ลองออนไลน์!


1

J , 64 63 ไบต์

rplc((_2]\'ĉĝĥĵŝŭĈĜĤĴŜŬ');~"1'cghjsuCGHJSU',.'x')"0

มันทำงานอย่างไร:

ด้วย_2]\ฉันจัดเรียงสตริง 'ĉĝĥĵŝŭĈĜĤĴŜŬ' ลงในคอลัมน์ 12 แถวเพื่อให้พอดีกับรูปร่างของสตริงอื่น

,. เพิ่ม 'x' ให้กับอักขระแต่ละตัวของสตริง 'cghjsuCGHJSU' และสร้างอาร์เรย์ 12 แถวคูณ 2 คอลัมน์

;~"1' ทำรายการคู่ของกล่องข้างบน "1 - อันดับ 1 - ใช้กับแต่ละแถว

┌──┬──┐
│cx│ĉ │
├──┼──┤
│gx│ĝ │
├──┼──┤
│hx│ĥ │
├──┼──┤
│jx│ĵ │
├──┼──┤
│sx│ŝ │
├──┼──┤
│ux│ŭ │
├──┼──┤
│Cx│Ĉ │
├──┼──┤
│Gx│Ĝ │
├──┼──┤
│Hx│Ĥ │
├──┼──┤
│Jx│Ĵ │
├──┼──┤
│Sx│Ŝ │
├──┼──┤
│Ux│Ŭ │
└──┴──┘

rplc ใช้ไอเท็มแบบบรรจุกล่องเหล่านี้เพื่อแทนที่แต่ละไอเท็มที่บรรจุอยู่ในกล่องด้านซ้ายจากคู่ด้วยสิ่งที่ถูกต้อง

ลองออนไลน์!


1

Befunge , 2x48 +1 = 99 ไบต์

>~:1+!#@_:"x"-v>$ 11p0"cghjsuCGHJSU"1\ >\31p11g-v
^ # #, : ++$\ _^#1"x"0*4!-"u"g11*"ʊ"!\_^#!:\*g13<

ลองดูสิ (TIO แปลกมากเกี่ยวกับ Befunge และฉันไม่สามารถหาทางแก้ไขได้)

มันทำงานอย่างไร

>~:1+!@_

รับอินพุตและตรวจสอบว่าเป็นจุดสิ้นสุดหรือไม่ จบโปรแกรมถ้าเป็น

          "x"-v>
^ # #, : ++$\ _^

ตรวจสอบว่าตัวละครเป็น "x" หากไม่มีให้เก็บสำเนาของอักขระและพิมพ์

               >$ 11p0"cghjsuCGHJSU"1\

เก็บอักขระตัวสุดท้ายที่ (1,1) วางอักขระทั้งหมดเพื่อตรวจสอบในสแต็ก

                                       >\31p11g-v
                                      _^#!:\*g13<

เปรียบเทียบอักขระตัวสุดท้ายกับค่าทั้งหมดในสแต็ก

                 1"x"0*4!-"u"g11*"ʊ"!\

ทวีคูณเช็ค (0 หรือ 1) ด้วยʊ (ค่า Unicode 650) ตรวจสอบว่าตัวละครเป็น au (สำหรับ breve) และเพิ่ม 4 ลงในสแต็กหากใช่ สุดท้ายเพิ่มค่า ascii ของ x (100) เช่นกัน ยอดรวมจะเพิ่มขึ้นเป็นสำเนียงที่ถูกต้องถ้าจำเป็นหรือเพียงแค่ "x" ถ้าไม่

>~:1+!#@_  
^ # #, : ++$\ _^#

เพิ่มค่าทั้งหมดในสแต็คเข้าด้วยกันพิมพ์และเก็บซ้ำ ย้อนกลับไปหาอินพุตต่อไป


1

R , 75 70 ไบต์

function(s)gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T)

ลองออนไลน์!

-5 ไบต์ขอบคุณGiuseppe

คำอธิบาย

  • gsub('(u)x','\\1\U306',s,T): แทนที่sทุกครั้งที่มีตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก "u" (โดยใช้ignore.case=TRUEอาร์กิวเมนต์ที่สี่T) ตามด้วย "x" the "u" ตามด้วย unicode สำหรับ breve
  • gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T): รับผลลัพธ์ของสิ่งนั้นและแทนที่การเกิดขึ้นของตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กทุกครั้ง (โดยใช้ignore.case=TRUEอาร์กิวเมนต์ที่สี่T) "c", "g", "h", "h", "j" หรือ "s" ตามด้วย "x" ด้วย จดหมายตามด้วยยูนิโค้ดสำหรับหมวก

โดยใช้เพื่อการโต้แย้งมากกว่าการตั้งชื่อบันทึก 3 ไบต์และอีกสองการกำจัดของศูนย์นำใน\U0302และ\U0306: ลองออนไลน์!
Giuseppe

@iuseppe - ความคิดที่ดีขอบคุณ!
duckmayr

1

QuadR , 25 ไบต์

การรวมฉบับกำกับ

ux
([cghjs])x
 ̆&
 ̂\1

i ธง

ลองออนไลน์!

แทนที่ ...

(u)x         u followed by x and
([cghjs])x   any of these letters followed by x 
 ̆\1          by a breve followed by the first group (the u) and
 ̂\1          a circumflex followed by the first group (the letter)

กรณีฉัน nsensitively

เทียบเท่ากับรหัส Dyalog APL ต่อไปนี้:

'(u)x' '([cghjs])x'R' ̆\1' ' ̂\1'

ทำไม 28 และไม่ใช่ 24 ไบต์
Erik the Outgolfer

@EriktheOutgolfer ตัวนับ SBCS ของ TIO ทำให้ฉันสับสน คงที่ ขอบคุณ เดี๋ยวก่อนนั่นหมายความว่าฉันชนะเหรอ?
Adám

ตอนนี้ดูเหมือนว่าจะเป็น27 ไบต์ (คัดลอกมาจาก TIO) แต่24 ไบต์เมื่อคัดลอกมาจากที่นี่ การเข้ารหัส QuadR คืออะไรและถูกต้อง?
Erik the Outgolfer

@EriktheOutgolfer ลิงก์ทั้งสองรายงาน 24 บน FFQ / Win10 ของฉัน QuadR ใช้ Dyalog Classic หรือ Unicode ใด ๆ
Adám

ดังนั้น 24 ไบต์หรืออะไร
Erik the Outgolfer

1

C, 145 144 ไบต์

อีกวิธี C ส่งคืนโดยเขียนทับอินพุตโดยใช้ความจริงที่ว่า circumflex / breve คือ 2 ไบต์

-1 ไบต์ขอบคุณที่Steadybox

i,t;f(char*s){for(t=1;*s;s++)if(*s^'x')for(i=12,t=1;i--;)t="cghjsuCGHJSU"[i]-*s?t:i*2;else t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;}

ลองออนไลน์!


1
ใช้t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;แทนการt^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;บันทึกหนึ่งไบต์ ลองออนไลน์!
Steadybox

1

Mathematica, 81 ไบต์หรือ 57 ไบต์

StringReplace[RemoveDiacritics@#<>"x"->#&/@Characters@"ĉĝĥĵŝŭĈĜĤĴŜŬ"]

มันใช้กฎการแทนที่ที่ตัวอักษรที่ไม่มีหมวกพร้อมกับ "x" จะถูกแทนที่ด้วยตัวอักษร

นี่เป็นอีกทางเลือกหนึ่งโดยใช้อักขระเน้นเสียงที่เพิ่มเข้ามา: StringReplace[{"ux"->"ŭ","Ux"->"Ŭ",c_~~"x":>c<>"̂"}]


1

Perl 5 , 49 + 2 ( -p -C) = 61 51 ไบต์

s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g

ลองออนไลน์!

บันทึก 10 ไบต์ขอบคุณNahuel Fouilleul


สามารถบันทึกได้ 7 ไบต์:s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
Nahuel Fouilleul

ดูเหมือนว่าการทำงานก็เป็นเพียงแค่ที่มี-Cและไม่มี-Cการเตือน ( Wide character in print)
Nahuel Fouilleul

1
จาก perlrun-C on its own (not followed by any number or option list), or the empty string "" for the PERL_UNICODE environment variable, has the same effect as -CSDL.
Nahuel Fouilleul

0

CJam , 51 ไบต์

q"ĉĝĥĵŝŭĈĜĤĴŜŬ""cghjsuCGHJSU".{'x+@\/*}

ลองออนไลน์!

คำอธิบาย:

q                   Read input
"ĉĝĥĵŝŭĈĜĤĴŜŬ"      String literal
"cghjsuCGHJSU"      Another string literal
.{                  Iterate over the strings in parallel
  'x+                 Add an 'x to the normal character
  @                   Rotate to bring the input to the top of stack
  \                   Swap to bring the "cx" to the top
  /                   Split the input on instances of "cx"
  *                   Join the input on instances of the accented character
}

นี่เป็น 39 ไบต์จริงเหรอ? ฉันนับ 39 ตัวอักษรและฉันไม่คิดว่า CJam มีการเข้ารหัสพิเศษ
user202729

@ user202729 เปลี่ยนแล้ว (TIO นับเป็นตัวอักษรด้วยเหตุผลบางอย่าง)
ผลไม้ที่ได้รับผลกระทบ

เนื่องจาก TIO เชื่อว่าภาษากอล์ฟทั้งหมดมีรหัสเพจพิเศษและไม่ต้องตรวจสอบว่าอักขระทั้งหมดอยู่ในเพจรหัสที่ถูกต้องหรือไม่
user202729

0

sed, 108 ไบต์

s/cx/ĉ/g
s/gx/ĝ/g
s/hx/ĥ/g
s/jx/ĵ/g
s/sx/ŝ/g
s/ux/ŭ/g
s/Cx/Ĉ/g
s/Gx/Ĝ/g
s/Hx/Ĥ/g
s/Jx/Ĵ/g
s/Sx/Ŝ/g
s/Ux/Ŭ/g

คุณควรจัดรูปแบบรหัสเป็นรหัสตาม`...`หรือ<pre><code>...</code></pre>หรือเยื้อง 4
user202729

@ user202729 ฉันรู้อย่างชัดเจนว่า ฉันกำลังส่งจากโทรศัพท์ Android ของฉันดังนั้นฉันจึงจัดรูปแบบไม่ถูกต้อง
iBug

2
ดูเหมือนว่าจะมีความยาว 119 ไบต์
Erik the Outgolfer

0

PowerShell, 58 ไบต์

มี 54 ตัวอักษรและบันทึกใน PowerShell ISE ทำให้เป็นUTF-8 + BOM 58 ไบต์ มันไม่ได้แสดงผลอย่างดีในเบราว์เซอร์:

$args-replace'(?<=u)x','̆'-replace'(?<=[cghjs])x','̂'

regex แทนที่ x ด้วยการรวมอักขระ Unicode จากความคิดเห็นของ @ user202729

เช่น

PS C:\> .\eo.ps1 "Cxu vi sxatas la cxapelliterojn? Mi ankaux."
Ĉu vi ŝatas la ĉapelliterojn? Mi ankaŭ.

0

Clojure, 126 115 ไบต์

-11 ไบต์โดยเปลี่ยนการแมปการแทนที่เป็นพาร์ติชันของสายอักขระ

#(reduce(fn[a[f r]](clojure.string/replace a(str f\x)(str r)))%(partition 2"cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ")) 

การลดแผนที่แทนที่ที่จะมองหาและสิ่งที่จะแทนที่ด้วย

ยังคงทำงานเกี่ยวกับวิธีการบีบอัดแผนที่ทดแทน

(defn translate [^String esperanto]
  (reduce (fn [acc [f r]] (clojure.string/replace
                            acc ; Replace the translation so far by
                            (str f \x) ; adding a x after each character, search for it in the string,
                            (str r))) ; and replace it with a stringified accented char

          esperanto ; Before the reduction happens, the accumulator is the original string

          ; A list of [char-to-find what-to-replace-with] pairs
          (partition 2"cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ")))))


0

สกาลา , 110 ไบต์

วิธีการแก้ปัญหา regex น่าเบื่อ:

def?(s:String)="(.)x".r.replaceAllIn(s,m=>m.group(0)(0)+(if(m.group(0)(0).toUpper=='U')"\u0306"else"\u0302"))

ตัวแก้ปัญหาแบบเก่า (116 ไบต์)

def?(s:String)=s.foldLeft("")((r,c)=>if(c=='x')r.init+r.last+(if(r.last.toUpper=='U')"\u0306"else"\u0302")else r+c)

Ungolfed

def?(s:String)=
  s.foldLeft("")((r,c)=>  // 'Fold' string with empty string as first result
    if(c=='x')            // If current character is x
      r.init+             // Take the every character from result but the last
        r.last+           // The last character from result and add
          (if(r.last.toUpper=='U')
            "\u0306"      // combining breve if 'u' or 'U'
          else"\u0302")   // combining circumflex in any other case
 else r+c                 // Otherwise return result + character
)


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