Phân tích Esperanto của tôi!


21

Ngôn ngữ được xây dựng nổi tiếng Esperanto sử dụng bảng chữ cái Latinh (chủ yếu, xem trang wikipedia được liên kết để biết chi tiết). Tuy nhiên, có một số ký tự có dấu: ĉ, ĝ, ĥ, ĵ, và . (C-circumflex, g-circumflex, h-circumflex, j-circumflex, s-circumflex, và u- dấu ngân .) Đương nhiên, những nhân vật này rất vất vả khi gõ. Ngay cả đối với câu hỏi này, tôi đã phải tìm kiếm trong bộ chọn Unicode cho các ký tự. Do đó, một quy ước sử dụng chữ "x" đã được phát triển cho sử dụng điện tử. Ví dụ: "cxu" được sử dụng cho "ĉu". (Lưu ý: chữ "x" không được sử dụng bình thường trong bảng chữ cái Esperanto. "

Tuy nhiên, tôi là một người theo chủ nghĩa thuần túy ngôn ngữ! Điều này * trích dẫn không khí * x vô nghĩa đang giết chết tôi! Tôi cần một chương trình để sửa lỗi này, tốt nhất là càng ngắn càng tốt để tôi có thể nhập nó vào thiết bị đầu cuối của mình càng nhanh càng tốt!

Thử thách

Nhiệm vụ của bạn là lấy một chuỗi Esperanto bằng cách sử dụng quy ước x và chuyển đổi nó thành Esperanto thực sự.

Trong thực tế, bạn phải lập bản đồ:

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

Tất cả các ký tự ASCII có thể in khác phải được chấp nhận và không thay đổi. Unicode sẽ tốt, nhưng không cần thiết.

Đầu vào và đầu ra có thể ở bất kỳ định dạng nào hợp lý với ngôn ngữ của bạn. Chúc may mắn!

Tủ thử

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

Chấm điểm

Đây là . Câu trả lời được tính bằng số lượng nhỏ nhất trong mã hóa mặc định của ngôn ngữ.

Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

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

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành một liên kết mà sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

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

Chúc may mắn, vui chơi, và cảm thấy tự do để đề xuất cải tiến!

Làm rõ:

  • Bạn chỉ cần lo lắng về các ký tự ASCII có thể in được .

  • Bạn chỉ cần xuất một ký tự trông giống như đầu ra chính xác. Vâng, điều này có nghĩa là bạn có thể giải quyết trọng âm vào nhân vật tiêu chuẩn.


ASCII ở đây có nghĩa là 20-7E ký tự có thể in, 00-7F, hoặc gì?
dùng202729

Tất cả những cái có thể in được.
OldBunny2800

Lưu ý: Tôi đã thêm một làm rõ rằng bạn có thể sử dụng chữ cái và dấu sửa đổi.
OldBunny2800

5
Kết hợp tetflex là 0302 ̂và kết hợp breve là ở 0306 ̆.
dùng202729

^ Mỗi người lấy 2 byte trong UTF8 làm số lượng TIO .
dùng202729

Câu trả lời:


9

QuadR , 65 byte

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

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

.x thay thế bất kỳ char nào theo sau "x" bằng

3::⍵M khi lập chỉ mục lỗi, trở lại trận đấu chưa sửa đổi
 tại thử:
'ĉĝĥĵŝŭĈĜĤĴŜŬ'[... ] chỉ số vào chuỗi này với
  ⍵M của trận đấu
   chữ cái đầu tiên của
   chỉ số
  'cghjsuCGHJSU' trong chuỗi này

Điều này tương đương với chức năng ngầm của Dyalog APL:

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

Câu trả lời tốt đẹp! +1
OldBunny2800

Tôi không chắc làm thế nào byte được tính ở đây. Không phải việc sử dụng đơn giản ⎕R ngắn hơn sao? ('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
ngn

@ngn Đó là, nhưng pin của tôi đã hết trước khi tôi có cơ hội để đăng nó.
Adám

6

Võng mạc , 27 byte

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

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

Chương trình này được sáng tác bởi hai phiên âm. Do việc kết hợp các ký tự trong mã, điều này không thể hiện quá tốt, dòng đầu tiên thực sự trông tương tự như iT`x`^`[cghjs]x, trong đó ^đại diện cho ký tự kết hợp dấu thập phân. Điều này đang nói là nó nên Transliterate ( itrường hợp gnoring) tất cả các xs trong đầu vào thành một^ , bất cứ khi nào chúng theo sau bất kỳ chữ cái nào [cghjs].


Lưu ý: TIO đo không chính xác mã này là 25 byte. Trên thực tế, chương trình Retina này sử dụng mã hóa UTF-8 (các chương trình khác có thể sử dụng UTF-32 hoặc ISO 8859-1) và hai ký tự kết hợp có giá 2 byte mỗi ký tự.


5

C,  173  154 byte

Cảm ơn @Colera Su vì đã tiết kiệm 17 byte!

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

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

Giải trình:

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

Tốt đẹp! Tôi có thể có một lời giải thích xin vui lòng?
OldBunny2800

Có lẽ bạn có thể sử dụng byte null bằng chữ thay vì \0?
dùng202729

(nhưng thật không may, nó không hoạt động trên TIO)
user202729

Bạn có thể sử dụng write(1,"..."+i*2,2)để lưu 17 byte. Hãy thử trực tuyến!
Colera Su

5

Python 3 , 81 byte

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

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

Tạo và đánh giá chuỗi:

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 Outgolfer đã lưu một byte.


@EriktheOutgolfer Đẹp một, cảm ơn!
xnor

3

/// , 75 byte

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

Lưu ý: Vì yêu cầu OP tất cả các ký tự có thể in phải được xử lý, "ký tự đặc biệt" được chọn của tôi không được in. Vì vậy, tôi đã chọn tab và dòng mới thay vì, không thay đổi chức năng mã hoặc mã của tôi. Mã sẽ trông như sau:

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

Tuy nhiên, yêu cầu đầu vào không được chứa tab hoặc dòng mới.

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

///không thể lấy đầu vào, bạn nên đặt đầu vào sau mã.

Khá đơn giản. Tôi đoán nó không thể ngắn hơn vì ///cần xử lý đặc biệt cho từng nhân vật.

Giải trình:

/,/\/\//       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 byte

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

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

-10 byte nhờ vào WhatToDo
-1 byte nhờ Colera Su



@ user507295 oh ý tưởng thông minh. cảm ơn!
HyperNeutrino

Sử dụng và hoặc hoặc mẹo để lưu một byte: Hãy thử trực tuyến!
Colera Su

@ColeraSu ồ, cảm ơn. không chắc tại sao mánh khóe đó lại biến mất D:
HyperNeutrino

@HyperNeutrino Vì tôi không biết về mánh khóe đó. Lấy làm tiếc!
WhatToDo

2

Võng mạc , 55 byte

iT`CG\HJSUcg\hjsux`ĈĜĤĴŜŬĉĝĥĵŝŭ_`[cghjsux]x

Hãy thử trực tuyến! Cách tiếp cận không kết hợp. Byte có thể được lưu nếu không cho các xtrường hợp thử nghiệm độc lập .



1

JavaScript (ES6), 92 byte

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

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

Được sử dụng phương pháp chia tách được đề xuất ở đây để giảm số lượng byte vìnew RegExp(/*blah*/) tạo chiếm quá nhiều byte.

So sánh:

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

Ngắn hơn, kết hợp cách tiếp cận dấu (63 byte), nhưng với một số tạo tác có thể nhìn thấy.

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

Lưu ý: Tôi đang khẳng định câu trả lời của mình là 92 byte vì giải pháp 63 byte có các tạo phẩm có thể ảnh hưởng đến đầu ra.


1

APL (Dyalog Unicode) , 57 byte

Chức năng ngầm ẩn danh. Tập quán:

  1. Hàm tiền tố để chuỗi. Điều này phiên âm chuỗi.

  2. Chức năng tiền tố để liệt kê các chuỗi. Điều này phiên âm các chuỗi.

  3. Hàm Infix với số liên kết tệp đầu vào là đối số bên phải và số liên kết tệp đầu ra là đối số bên trái. Điều này điền vào tệp đầu ra với nội dung được chuyển ngữ của tệp đầu vào.

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

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

'cghjsuCGHJSU' những lá thư này

,¨'x' mỗi cái theo sau là một x

 … với…

,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ' mỗi chữ cái dưới dạng chuỗi

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


1

J , 64 63 byte

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

Làm thế nào nó hoạt động:

Với _2]\tôi sắp xếp lại chuỗi 'ĉĝĥĵŝŭĈĜĤĴŜŬ' thành một cột 12 hàng để phù hợp với hình dạng của chuỗi khác.

,. thêm 'x' vào mỗi ký tự của chuỗi 'cghjsuCGHJSU' và tạo một hàng 12 hàng bằng 2 cột

;~"1' lập danh sách các cặp được đóng hộp ở trên, "1 - xếp hạng 1 - áp dụng cho mỗi hàng.

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

rplc sử dụng các vật phẩm được đóng hộp này để thay thế cho mỗi lần xuất hiện của vật phẩm được đóng hộp bên trái từ một cặp với vật phẩm bên phải.

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


1

Befunge , 2x48 +1 = 99 byte

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

Dùng thử (TIO rất kỳ lạ về Befunge và tôi không thể có bất kỳ giải pháp nào để giải quyết vấn đề này)

Làm thế nào nó hoạt động

>~:1+!@_

Nhận đầu vào và kiểm tra nếu nó kết thúc. Kết thúc chương trình nếu có.

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

Kiểm tra xem ký tự có phải là "x" không. Nếu không, giữ một bản sao của nhân vật và in nó.

               >$ 11p0"cghjsuCGHJSU"1\

Lưu trữ ký tự cuối cùng tại (1,1). Đặt tất cả các ký tự để kiểm tra vào ngăn xếp.

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

So sánh ký tự cuối cùng với tất cả các giá trị trong ngăn xếp.

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

Nhân kiểm tra (0 hoặc 1) với ʊ (giá trị unicode 650). Kiểm tra xem nhân vật có phải là au (cho breve) không và thêm 4 vào stack nếu có. Cuối cùng, thêm giá trị ascii của x (100). Tổng cộng thêm vào dấu chính xác nếu cần hoặc chỉ là "x" nếu không.

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

Thêm tất cả các giá trị trong ngăn xếp lại với nhau, in nó và giữ một bản sao. Quay trở lại cho đầu vào tiếp theo.


1

R , 75 70 byte

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

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

-5 byte nhờ Giuseppe

Giải trình

  • gsub('(u)x','\\1\U306',s,T): thay thế trong smỗi lần xuất hiện chữ hoa hoặc chữ thường "u" (bằng cách sử dụng ignore.case=TRUEthông qua đối số thứ tư T) theo sau là "x" "u" theo sau là unicode cho một breve
  • gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T): lấy kết quả của điều đó và thay thế mọi lần xuất hiện của chữ hoa hoặc chữ thường (bằng cách sử dụng ignore.case=TRUEthông qua đối số thứ tư T) "c", "g", "h", "j" hoặc "s" theo sau là "x" bằng " chữ cái theo sau là unicode cho dấu mũ

sử dụng thứ tự đối số thay vì đặt tên sẽ tiết kiệm được 3 byte và hai cái khác thoát khỏi số 0 đứng đầu \U0302\U0306: Hãy thử trực tuyến!
Giuseppe

@Giuseppe - ý tưởng tuyệt vời, cảm ơn!
duckmayr

1

QuadR , 25 byte

Kết hợp phiên bản dấu phụ.

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

i cờ

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

Thay thế…

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

trường hợp tôi nhạy cảm

Tương đương với mã APL Dyalog sau:

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

Tại sao đây là 28 mà không phải 24 byte?
Erik the Outgolfer

@EriktheOutgolfer Bộ đếm SBCS của TIO làm tôi bối rối. Đã sửa. Cảm ơn. Đợi đã, điều đó có nghĩa là tôi thắng?
Adám

Huh, bây giờ có vẻ như là 27 byte (được sao chép từ TIO), nhưng 24 byte khi được sao chép từ đây. Mã hóa của QuadR là gì và cái nào đúng?
Erik the Outgolfer 28/11/17

@EriktheOutgolfer Cả hai liên kết báo cáo 24 trên FFQ / Win10 của tôi. QuadR sử dụng Dyalog Classic hoặc bất kỳ Unicode nào.
Adám

Vậy nó là 24 byte hay sao?
Erik the Outgolfer

1

C, 145 144 byte

Một cách tiếp cận C khác. Trả về bằng cách ghi đè đầu vào, sử dụng thực tế là dấu mũ / breve là 2 byte.

-1 byte nhờ 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;}

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


1
Sử dụng t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;thay vì t^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;tiết kiệm một byte. Hãy thử trực tuyến!
Steadybox

1

Mathicala, 81 byte hoặc 57 byte

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

Nó áp dụng quy tắc thay thế trong đó chữ cái không có mũ cùng với "x" được thay thế bằng chữ cái.

Đây là một thay thế bằng cách sử dụng ký tự dấu nhấn thêm: StringReplace[{"ux"->"ŭ","Ux"->"Ŭ",c_~~"x":>c<>"̂"}]


1

Perl 5 , 49 + 2 ( -p -C) = 61 51 byte

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

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

Đã lưu 10 byte nhờ Nahuel Fouilleul


có thể tiết kiệm 7 byte:s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
Nahuel Fouilleul

có vẻ như nó cũng hoạt động chỉ với -Cvà không -Ccó cảnh báo ( Wide character in print)
Nahuel Fouilleul

1
từ 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 byte

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

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

Giải trình:

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
}

Đây thực sự là 39 byte? Tôi đếm 39 ký tự và tôi không nghĩ rằng CJam có mã hóa đặc biệt.
dùng202729

@ user202729 Đã thay đổi (TIO tính byte theo ký tự vì một số lý do)
Esolanging Fruit 28/11/17

Bởi vì TIO tin rằng tất cả các ngôn ngữ chơi gôn đều có bảng mã ký tự đặc biệt và không cần kiểm tra xem tất cả các ký tự có nằm trong bảng mã chính xác hay không.
dùng202729

0

sed, 108 byte

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

Bạn nên định dạng mã như mã bằng `...`hoặc <pre><code>...</code></pre>hoặc 4 indents.
dùng202729

@ user202729 Tôi rõ ràng biết điều đó. Tôi đã gửi từ điện thoại Android của mình vì vậy tôi đã không định dạng chính xác.
iBug

2
Cái này trông giống như nó dài 119 byte.
Erik the Outgolfer 28/11/17

0

PowerShell, 58 byte

Đó là 54 ký tự và lưu nó trong PowerShell ISE làm cho nó UTF-8 + BOM cho 58 byte. Nó không hiển thị độc đáo trong trình duyệt:

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

regex thay thế x bằng các ký tự Unicode kết hợp từ nhận xét của @ user202729.

ví dụ

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

0

Clojure, 126 115 byte

-11 byte bằng cách thay đổi bản đồ thay thế thành phân vùng của chuỗi.

#(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Ŭ")) 

Giảm bản đồ thay thế để tìm kiếm, và những gì để thay thế chúng.

Vẫn đang làm việc để nén bản đồ thay thế.

(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

Scala , 110 byte

Giải pháp regex nhàm chán:

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

Giải pháp scala cũ (116 byte)

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)

Ung dung

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
)

0

JavaScript, 35 ký tự, 36 byte

s=>s.replace(/([cghjsu])x/gi,"$1̂")

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.