Esperanto'umu ayrıştır!


21

Meşhur yapılı dil Esperanto Latin alfabesini kullanıyor (daha fazla bilgi için bağlantılı wikipedia sayfasına bakınız). Ancak, aksanlı bazı karakterler vardır: ĉ, ĝ, ĥ, ĵ, ŝ ve ŭ . (Cı-sirkumfleks, g-sirkumfleks, h-sirkumfleks, J-sirkumfleks, s-sirkumfleks ve u breve ). Doğal olarak, bu karakterler yazmak için çok zordur. Bu soru için bile, Unicode seçicisinde karakter aramak zorunda kaldım. Bu nedenle, elektronik kullanım için "x" harfini kullanan bir sözleşme geliştirilmiştir. Örneğin, "xu" için "cxu" kullanılır. (Not: "x" harfi Esperanto alfabesinde normal olarak kullanılmaz. "

Ancak ben bir dil uzmanıyım! Bu * hava teklifi * x saçmalık beni öldürüyor! Bunu düzeltmek için bir programa ihtiyacım var, tercihen mümkün olduğu kadar kısa, böylece terminalime mümkün olduğunca hızlı yazabiliyorum!

Meydan okuma

Göreviniz x-Convention kullanarak bir dizi Esperanto almak ve onu gerçek Esperanto'ya dönüştürmek.

Sonuçta, haritalandırmanız gerekir:

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

Diğer tüm yazdırılabilir ASCII karakterleri kabul edilmeli ve değiştirilmemelidir. Unicode iyi olurdu, ama gerekli değil.

Giriş ve çıkış, dilinize uygun herhangi bir biçimde olabilir. İyi şanslar!

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"

puanlama

Bu . Cevaplar, dilin varsayılan kodlamasında en küçük bytecount ile puanlanır.

Burada hem düzenli bir lider tablosu hem de kazananların dile göre genel bir bakış oluşturması için bir Stack Snippet'i var.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

# Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra büyük afiş snippet'inde görünecek bir bağlantı da yapabilirsiniz:

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

İyi şanslar, eğlenin ve iyileştirmeler önermekten çekinmeyin!

Açıklamalar:

  • Yalnızca yazdırılabilir ASCII karakterleri hakkında endişelenmeniz gerekir .

  • Sadece doğru çıktıya benzeyen bir karakter çıkarmanız gerekir . Evet, bu aksanı standart karaktere bağlayabileceğiniz anlamına gelir.


Burada ASCII, 20-7E basılabilir karakter, 00-7F veya ne anlamına gelir?
user202729

Tüm yazdırılabilir olanlar.
OldBunny2800

Not: Harf ve değiştirici aksanı kullanabileceğinize dair bir açıklama ekledim.
OldBunny2800

5
Birleştirilen sirkumfleks 0302'de ̂ve birleştirme breve 0306'dadır ̆.
user202729

^ Her biri UTF8'de TIO sayısı olarak 2 bayt alır .
user202729

Yanıtlar:


9

QuadR , 65 bayt

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

Çevrimiçi deneyin!

.x Herhangi bir karakterin ardından "x" ile değiştirin

3::⍵M hatayı endekslenmesi üzerine, değiştirilmemiş maçı döndürmek
 şimdi deneyin:
'ĉĝĥĵŝŭĈĜĤĴŜŬ'[... ] endeksini bu dizeye sahip
  ⍵M eşlemenin
   ilk mektubun
   endeksinde
  'cghjsuCGHJSU' bu dizede

Bu, Dyalog APL tacit işlevine eşdeğerdir:

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

Güzel cevap! +1
OldBunny2800

Baytların burada nasıl sayıldığından emin değilim. ⎕R'nin basit kullanımı daha kısa değil mi? ('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
ngn

@ Evet, ama bunu gönderme şansım olmadan pilim bitmişti.
Adám

6

Retina , 27 bayt

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

Çevrimiçi deneyin!

Bu program iki harf çevirisi içermektedir. Kodda karakterleri bir araya getirme işleminin bu kadar iyi sonuçlanmadığı için, ilk satır aslında surround işaret aksanı birleştirme karakterinin iT`x`^`[cghjs]xolduğu yere benzemelidir ^. Bunun söylediği şey, Tgirişteki itüm xs harflerini ^ne zaman bir harf takip ederse, bir harf haline getirmelidir ( goring case) [cghjs].


Not: TIO hatalı olarak bu kodu 25 bayt olarak ölçer. Aslında, bu Retina programı UTF-8 kodlamasını kullanır (diğer programlar UTF-32 veya ISO 8859-1 kullanabilir) ve iki birleştirici karakter her birinin maliyetini 2 bayt olarak gösterir.


5

C,  173  154 bayt

17 byte tasarruf ettiğin için @ Colera Su'ya teşekkürler!

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

Çevrimiçi deneyin!

Açıklama:

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

Güzel! Bir açıklama yapabilir miyim lütfen?
OldBunny2800

Muhtemelen yerine değişmez boş bayt kullanabilir \0?
user202729

(ancak bu ne yazık ki
TIO'da

write(1,"..."+i*2,2)17 bayt kaydetmek için kullanabilirsiniz . Çevrimiçi deneyin!
Colera Su

5

Python 3 , 81 bayt

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

Çevrimiçi deneyin!

Dize oluşturur ve değerlendirir:

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'lı Erik bir bayt kurtardı.


@EriktheOutgolfer Güzel olan, teşekkürler!
Xnor

3

/// , 75 bayt

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

Not: OP isteğinin yazdırılabilir tüm karakterlerin işlenmesi gerektiğinden, seçilen "özel karakter" lerimin yazdırılmaması gerekir. Bu yüzden bytecount veya kod fonksiyonelliğimi değiştirmeyen, tab ve newline yerine seçtim. Kod şöyle görünür:

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

Ancak giriş gerektiren sekme veya yeni satırlar içermemelidir.

Çevrimiçi deneyin!

///Giriş alamıyor çünkü giriş kodundan sonra koymak gerekir.

Oldukça basit. Sanırım daha kısa olamaz çünkü ///her karakterin özel olarak ele alınması gerekir.

Açıklama:

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

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

Çevrimiçi deneyin!


Colera Su sayesinde WhatToDo -1 byte sayesinde -10 bayt



@ user507295 oh akıllı bir fikir. Teşekkürler!
HyperNeutrino,

Bir bayttan tasarruf etmek için ve-veya hile kullanın: Çevrimiçi deneyin!
Colera Su

@ColeraSu oh cool, teşekkürler. Bu numara D:
HyperNeutrino

@HyperNeutrino Çünkü bu numarayı bilmiyordum. Üzgünüm!
WhatToDo

2

Retina , 55 bayt

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

Çevrimiçi deneyin! Birleştirmeyen yaklaşım. Bağımsız xtest durumlarında olmasa bile bayt kaydedilebilir .



1

JavaScript (ES6), 92 bayt

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

Çevrimiçi deneyin!

Yapıcı çok fazla bayt aldığından bayt sayısını azaltmak için burada önerilen split-join yöntemi kullanılır new RegExp(/*blah*/).

karşılaştırma:

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

Aksan yaklaşımını (63 bayt) birleştiren daha kısa, ancak bazı eserler görülebilir.

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

Dipnot: Cevabımın 92 bayt olduğunu iddia ediyorum, çünkü 63 baytlık çözüm çıktıyı etkileyebilecek eserler içeriyor.


1

APL (Dyalog Unicode) , 57 bayt

Anonim tacit işlevi. Usages:

  1. Dizeye önek işlevi. Bu dize çevirir.

  2. Önek işlevi dizelerin listesine Bu dizeleri çevirir.

  3. Giriş dosyası bağlanma numarası ile sağ argüman olarak infix işlevi ve çıktı dosyası bağlanma numarası ile sol argüman olarak girilir. Bu, çıktı dosyasını girdi dosyasının çevrilmiş içeriği ile doldurur.

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

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

'cghjsuCGHJSU' bu harfler

,¨'x' her biri bir x izliyor

 … ile…

,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ' bu harflerin her biri dize olarak

Çevrimiçi deneyin!


1

J , 64 63 bayt

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

Nasıl çalışır:

İle _2]\I diğer dize şeklini uyması için 12 satır sütuna dize 'ĉĝĥĵŝŭĈĜĤĴŜŬ' yeniden düzenlemek.

,. 'cghjsuCGHJSU' dizesinin her karakterine 'x' ekler ve 12 satır 2 sütun dizisi yapar

;~"1' Yukarıdaki kutulu çiftlerin bir listesini yapar, "1 - 1. sıra - her satıra uygulanır.

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

rplc sol kutulu öğenin her bir oluşumunu sağdaki ile bir çiftten değiştirmek için bu kutulu öğeleri kullanır.

Çevrimiçi deneyin!


1

Befunge , 2x48 +1 = 99 bayt

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

Denemek (TIO, Befunge için çok garip ve üzerinde çalışmak için hiçbir çözüm alamadım)

Nasıl çalışır

>~:1+!@_

Girdiyi alır ve son olup olmadığını kontrol eder. Varsa programı sonlandırın.

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

Karakterin "x" olup olmadığını kontrol eder. Değilse, karakterin bir kopyasını saklayın ve yazdırın.

               >$ 11p0"cghjsuCGHJSU"1\

Son karakteri (1,1) olarak saklayın. Tüm karakterleri yığına yerleştirir.

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

Son karakteri, yığındaki tüm değerlerle karşılaştırın.

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

Çeki (0 veya 1) ʊ ile çarpın (unicode değeri 650). Karakterin au (breve için) olup olmadığını kontrol edin ve varsa yığına 4 ekler. Son olarak, x'in (100) ascii değerini de ekleyin. Toplam, gerekirse doğru aksana, yoksa sadece bir "x" ekler.

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

Yığındaki tüm değerleri birlikte ekleyin, yazdırın ve bir kopyasını saklayın. Bir sonraki giriş için geri gidin.


1

R , 75 70 bayt

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

Çevrimiçi deneyin!

Giuseppe sayesinde -5 bayt

açıklama

  • gsub('(u)x','\\1\U306',s,T): sBir büyük harf veya küçük harf "u" ' ignore.case=TRUEnun (dördüncü argüman kullanılarak T) her durumda "ardından" x "" u "ve ardından bir breve için unicode
  • gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T): bunun sonucunu alın ve büyük veya küçük harflerin her tekrarlamasını değiştirin ( ignore.case=TRUEdördüncü argüman kullanarak T) "c", "g", "h", "j" veya "s" ve ardından "x" ile bir sirkumfleks için unicode tarafından takip edilen harf

isimlendirmek yerine argüman sırasını kullanmak 3 bayt, bir diğer ikisini de baştaki sıfırdan kurtularak kurtarır \U0302ve \U0306: Çevrimiçi deneyin!
Giuseppe

@Giuseppe - harika bir fikir, teşekkürler!
duckmayr

1

QuadR , 25 bayt

Dinamik baskıyı birleştiriyor.

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

i bayrak

Çevrimiçi deneyin!

Değiştir ...

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

harfe i nsensitively

Aşağıdaki Dyalog APL koduna eşittir:

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

Neden bu 28 ve 24 bayt değil?
Outgolfer Erik,

@EriktheOutgolfer TIO'nun SBCS sayacı kafamı karıştırdı. Sabit. Teşekkürler. Bekle, bu kazandığım anlamına mı geliyor?
Adám

Huh, şimdi 27 bayt (TIO'dan kopyalandı), ama buradan kopyalandığında 24 bayt gibi görünüyor . QuadR'nin kodlaması nedir ve hangisi doğrudur?
Outgolfer Erik, 28:17

@EriktheOutgolfer Her iki bağlantı da FFQ / Win10'umda 24 rapor veriyor. QuadR, Dyalog Classic veya herhangi bir Unicode kullanır.
Adám

Yani 24 bayt mı, ne?
Outgolfer Erik

1

C, 145 144 bayt

Başka bir C yaklaşımı. Circumflex / breve öğesinin 2 bayt olduğu gerçeğini kullanarak girişin üzerine yazarak geri dönün.

Steadybox sayesinde -1 bayt .

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

Çevrimiçi deneyin!


1
Bir bayt t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;yerine yerine kullanılır t^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;. Çevrimiçi deneyin!
Steadybox kasımda

1

Mathematica, 81 bayt veya 57 bayt

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

Şapka içermeyen harfin bir "x" ile birlikte harfin yerine geçeceği yer değiştirme kuralını uygular.

Eklenen aksan karakterini kullanarak bir alternatif: StringReplace[{"ux"->"ŭ","Ux"->"Ŭ",c_~~"x":>c<>"̂"}]


1

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

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

Çevrimiçi deneyin!

Nahuel Fouilleul sayesinde 10 bayt kurtardı


7 bayt kurtarabilir:s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
Nahuel Fouilleul

sadece uyarı ile -Cve -Cuyarı olmadan da çalışıyor gibi görünüyor ( 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 bayt

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

Çevrimiçi deneyin!

Açıklama:

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
}

Bu gerçekten 39 bayt mı? 39 karakter sayıyorum ve CJam'ın özel bir kodlaması olduğunu sanmıyorum.
user202729

@ user202729 Değişti (TIO nedense karakter olarak bayt olarak sayıldı)
Esolanging Meyve

Çünkü TIO, tüm golf dillerinin özel karakter kod sayfasına sahip olduğuna inanıyor ve tüm karakterlerin doğru kod sayfasında olup olmadıklarını kontrol etmekten rahatsız olmuyor.
user202729

0

sed, 108 bayt

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

Kodu, kod olarak `...`veya <pre><code>...</code></pre>veya 4 girintiyle formatlamanız gerekir .
user202729

@ user202729 Açıkçası bunu biliyordum. Android telefonumdan gönderiyorum, bu yüzden doğru biçimlendirmedim.
iBug

2
Bu 119 bayt uzunluğunda gibi görünüyor.
Outgolfer Erik, 28:17

0

PowerShell, 58 bayt

54 karakterdir ve PowerShell'e kaydetmek ISE yapar 58 bayt için UTF-8 + BOM . Bir tarayıcıda o kadar iyi görünmüyor:

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

regex, x'i @ user202729'un yorumundaki Unicode karakterlerini birleştiren ile değiştirir.

Örneğin

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

0

Clojure, 126 115 bayt

-11 değiştirme bayt yerine bir dize bir bölümünü değiştirerek.

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

Arayacağınız yer değiştirme haritasındaki azalma ve bunların yerini alacaklar.

Hala yeni haritayı sıkıştırmanın bir yolu üzerinde çalışıyor.

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

Sıkıcı regex çözümü:

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

Eski ölçek çözümü (116 bayt)

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
)

0

JavaScript, 35 karakter, 36 bayt

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.