내 에스페란토를 파싱하십시오!


21

유명한 구성 언어 인 에스페란토 는 라틴 알파벳을 사용합니다. 그러나 ĉ, characters , ĥ, ĵ, ŝ 및 ŭ 악센트가있는 문자가 있습니다 . (C-곡절, g-곡절, H-곡절, J-곡절 S-곡절 및 U- 브레 베이 .) 물론,이 문자를 입력하는 것이 매우 어렵다. 이 질문에도 불구하고 유니 코드 선택기에서 문자를 검색해야했습니다. 이로 인해 "x"문자를 사용하는 규칙이 전자 용으로 개발되었습니다. 예를 들어, "cxu"는 "ĉu"에 사용됩니다. (참고 : 문자 "x"는 에스페란토 알파벳에서 일반적으로 사용되지 않습니다. "

그러나 나는 언어 순수 주의자입니다! 이 * 공기 견적 * x 넌센스가 나를 죽이고 있습니다! 가능한 빨리 짧게 수정하여 가능한 빨리 터미널에 입력 할 수있는 프로그램이 필요합니다!

도전

당신의 임무는 x-convention을 사용하여 일련의 에스페란토를 취하여 그것을 실제 에스페란토로 변환하는 것입니다.

실제로 다음을 매핑해야합니다.

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

인쇄 가능한 다른 모든 ASCII 문자는 승인해야하며 변경해서는 안됩니다. 유니 코드는 좋지만 필요하지는 않습니다.

입력 및 출력은 사용자 언어에 적합한 형식 일 수 있습니다. 행운을 빕니다!

테스트 케이스

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

채점

이것은 입니다. 응답은 언어의 기본 인코딩에서 최소 바이트 수로 점수가 매겨집니다.

다음은 일반 리더 보드와 언어 별 수상자 개요를 생성하는 스택 스 니펫입니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

# 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
circumflex의 결합은 0302 ̂이고, 결합 breve는 0306 ̆입니다.
user202729

^ 각각은 TIO 수로 UTF8에서 2 바이트를 사용합니다 .
user202729

답변:


9

QuadR , 65 바이트

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

온라인으로 사용해보십시오!

.x char 뒤에 "x"를 붙여

3::⍵M 오류를 색인에 수정되지 않은 경기를 반환
 지금보십시오
'ĉĝĥĵŝŭĈĜĤĴŜŬ'[... ] 인덱스를이 문자열로와
  ⍵M 경기의
   첫 번째 문자의
   인덱스
  'cghjsuCGHJSU' 이 캐릭터

이것은 Dyalog APL 암묵 함수와 동일합니다.

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

좋은 대답입니다! +1
OldBunny2800 1

바이트 수가 어떻게 계산되는지 잘 모르겠습니다. ⎕R을 간단하게 사용하지 않습니까? ('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
ngn

@ngn 그래도 게시 할 기회가 있기 전에 배터리가 부족합니다.
Adám

6

망막 , 27 바이트

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

온라인으로 사용해보십시오!

이 프로그램은 두 음역으로 구성되어 있습니다. 이 때문에 너무 잘 렌더링하지 않는 코드에 결합 문자를 데, 첫 번째 줄은 실제로 비슷해야합니다 iT`x`^`[cghjs]x경우, ^문자를 결합 곡절 악센트를 의미합니다. 이것이 말하는 것은해야한다는 것입니다 T(ransliterate ignoring 경우) 모든 x에 입력에들 ^그들이 어떤 편지를 따르고 있습니다 때마다 [cghjs].


참고 : TIO는이 코드를 25 바이트로 잘못 측정합니다. 실제로이 Retina 프로그램은 UTF-8 인코딩 (다른 프로그램은 UTF-32 또는 ISO 8859-1을 사용할 수 있음)을 사용하며 두 결합 문자는 각각 2 바이트입니다.


5

C,  173  154 바이트

17 바이트를 절약 한 @Colera Su에게 감사합니다!

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

파이썬 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','Ŭ')

Outgolfer 에릭은 바이트를 저장했습니다.


@EriktheOutgolfer 좋은 하나 감사합니다!
xnor

3

/// , 75 바이트

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

참고 : OP 요청에 따라 인쇄 가능한 모든 문자를 처리해야하므로 선택한 "특수 문자"를 인쇄 할 수 없습니다. 따라서 바이트 대신 코드 기능을 변경하지 않는 탭 대신 줄 바꿈을 선택했습니다. 코드는 다음과 같습니다.

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

파이썬 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

온라인으로 사용해보십시오!

WhatToDo 덕분에 -10 바이트
Colera Su 덕분에 -1 바이트



@ user507295 오 똑똑한 아이디어. 감사!
HyperNeutrino

1 바이트를 절약하기 위해 트릭을 사용하십시오 : 온라인으로 시도하십시오!
Colera Su

@ColeraSu 아 멋지다, 고마워. 하지 않도록 그 트릭은 D 사라진 이유 :
HyperNeutrino

@HyperNeutrino 그 트릭에 대해 몰랐기 때문에. 죄송합니다!
WhatToDo



1

자바 스크립트 (ES6), 92 바이트

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

온라인으로 사용해보십시오!

생성자가 너무 많은 바이트를 차지 했기 때문에 여기 에서 권장되는 split-join 방법을 사용 하여 바이트 수를 줄 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");

각주 : 63 바이트 솔루션에는 출력에 영향을 줄 수있는 아티팩트가 있기 때문에 답이 92 바이트라고 주장하고 있습니다.


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]\I 다른 캐릭터의 형상을 맞추기 위해 12 행 열에 문자열 'ĉĝĥĵŝŭĈĜĤĴŜŬ'를 재 배열.

,. 'cghjsuCGHJSU'문자열의 각 문자에 'x'를 추가하고 12 행 x 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)에 ʊ (유니 코드 값 650)을 곱하십시오. 캐릭터가 au (간결한)인지 확인하고 스택에 4를 추가합니다. 마지막으로 x (100)의 ASCII 값을 추가하십시오. 필요한 경우 총계가 올바른 악센트에 추가되거나 그렇지 않으면 "x"가됩니다.

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

스택에있는 모든 값을 합산하여 인쇄하고 사본을 보관하십시오. 다음 입력으로 돌아갑니다.


1

R , 75 70 바이트

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

온라인으로 사용해보십시오!

주세페 덕분에 -5 바이트

설명

  • gsub('(u)x','\\1\U306',s,T): s대문자 또는 소문자 "u"가 발생할 때마다 ( ignore.case=TRUE네 번째 인수 를 통해 사용 T) "x", "u", 그 다음에 간단한 코드를위한 유니 코드를 바꿉니다.
  • gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T): 결과를 가져 와서 대문자 나 소문자가 나타날 때마다 ( ignore.case=TRUE네 번째 인수 를 통해 T) "c", "g", "h", "j"또는 "s"뒤에 "x"가 붙습니다. 곡절에 대한 유니 코드 뒤에 문자

이름보다는 인수 순서를 사용하여 3 바이트를 저장하고, 다른 두 사람의 앞에 0을 제거하기 \U0302\U0306: 온라인으로보십시오!
주세페

@ 주세페-좋은 생각, 감사합니다!
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)

케이스 I를 nsensitively

다음 Dyalog APL 코드와 동일합니다.

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

왜 이것이 24 바이트가 아닌 28입니까?
Outgolfer Erik

@EriktheOutgolfer TIO의 SBCS 카운터가 나를 혼란스럽게했습니다. 결정된. 감사. 잠깐, 그게 내가 이겼다는 뜻입니까?
Adám

허, 이제 27 바이트 (티오에서 복사) 인 것처럼 보이지만 여기에서 복사하면 24 바이트 입니다. QuadR의 인코딩은 무엇이며 어떤 것이 맞습니까?
Outgolfer Erik

@EriktheOutgolfer 두 링크 모두 내 FFQ / Win10에 대해 24를보고합니다. QuadR은 Dyalog Classic 또는 모든 유니 코드를 사용합니다.
Adám

그래서 그것은 24 바이트입니까?
Outgolfer Erik

1

C, 145144 바이트

또 다른 C 접근법. 곡절 / 브레이브가 2 바이트라는 사실을 사용하여 입력을 덮어 써서 반환합니다.

Steadybox 덕분에 -1 바이트 .

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;하면 1 바이트 가 절약됩니다. 온라인으로 사용해보십시오!
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

온라인으로 사용해보십시오!

Nahuel Fouilleul 덕분에 10 바이트 절약


: 7 바이트 절약 할 수s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
나우 Fouilleul

그와 함께 단지도 작동 보인다 -C및없이 -C(경고 Wide character in print)
나우 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는 바이트를 문자로 계산)
Esolanging Fruit

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

코드는 4 `...`<pre><code>...</code></pre>이상의 들여 쓰기 로 코드 형식을 지정해야합니다 .
user202729

@ user202729 분명히 알았습니다. Android 휴대 전화에서 제출하여 형식이 올바르게 지정되지 않았습니다.
iBug

2
길이가 119 바이트 인 것 같습니다.
Outgolfer Erik

0

PowerShell, 58 바이트

54 자이며 PowerShell ISE에 저장하면 UTF-8 + BOM 이 58 바이트가됩니다. 브라우저에서 제대로 렌더링되지 않습니다.

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

regex는 x를 @ user202729의 주석에서 결합 된 유니 코드 문자로 대체합니다.

예 :

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

0

클로저, 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 바이트

지루한 정규식 솔루션 :

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)

언 골프

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

자바 스크립트, 35 자, 36 바이트

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.