Pecahkan Esperanto saya!

21

Bahasa Esperanto yang dikonstruksikan yang terkenal menggunakan alfabet Latin (sebagian besar, lihat halaman wikipedia tertaut untuk detailnya). Namun, ada beberapa karakter dengan aksen: ĉ, ĝ, ĥ, ĵ, ŝ, dan ŭ . (C-circumflex, g-circumflex, h-circumflex, j-circumflex, s-circumflex, dan u- breve .) Secara alami, karakter ini sangat sulit untuk diketik. Bahkan untuk pertanyaan ini, saya harus mencari di pemilih Unicode untuk karakter. Karena itu, konvensi yang menggunakan huruf "x" telah dikembangkan untuk penggunaan elektronik. Misalnya, "cxu" digunakan untuk "ĉu". (Catatan: huruf "x" tidak digunakan secara normal dalam alfabet Esperanto. "

Namun, saya seorang purist bahasa! Ini * kutipan udara * x omong kosong membunuhku! Saya perlu program untuk memperbaikinya, sebaiknya sesingkat mungkin sehingga saya bisa mengetiknya di terminal saya secepat mungkin!

Tantangan

Misi Anda adalah mengambil string Esperanto menggunakan x-convention dan mengubahnya menjadi Esperanto nyata.

Akibatnya, Anda harus memetakan:

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

Semua karakter ASCII yang dapat dicetak lainnya harus diterima dan tidak diubah. Unicode akan menyenangkan, tetapi tidak perlu.

Input dan output dapat dalam format apa pun yang masuk akal untuk bahasa Anda. Semoga berhasil!

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"

Mencetak gol

Ini adalah . Jawaban diberi skor berdasarkan bytecount terkecil dalam pengkodean default bahasa.

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

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

Semoga berhasil, bersenang-senang, dan jangan ragu untuk menyarankan peningkatan!

Klarifikasi:

  • Anda hanya perlu khawatir tentang karakter ASCII yang dapat dicetak .

  • Anda hanya perlu menampilkan karakter yang terlihat seperti keluaran yang benar. Ya, ini berarti Anda dapat menempelkan aksen ke karakter standar.

OldBunny2800
sumber
ASCII di sini berarti 20-7E karakter yang dapat dicetak, 00-7F, atau apa?
user202729
Semua yang bisa dicetak.
OldBunny2800
Catatan: Saya menambahkan klarifikasi bahwa Anda dapat menggunakan huruf dan aksen pengubah.
OldBunny2800
5
Menggabungkan sirkomfleksi berada pada 0302 ̂, dan menggabungkan breve pada 0306 ̆.
user202729
^ Masing-masing mengambil 2 byte dalam UTF8 sebagai jumlah TIO .
user202729

Jawaban:

9

QuadR , 65 byte

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

Cobalah online!

.x ganti char yang diikuti oleh "x" dengan

3::⍵M setelah kesalahan pengindeksan, kembalikan pertandingan yang tidak dimodifikasi
 sekarang coba:
'ĉĝĥĵŝŭĈĜĤĴŜŬ'[... ] indeks ke dalam string ini dengan  indeks  huruf pertama
  ⍵M pertandingan  dalam string ini
  
  
  'cghjsuCGHJSU'

Ini setara dengan fungsi diam APL Dyalog:

'.x'R{3::⍵.Match'ĉĝĥĵŝŭĈĜĤĴŜŬ'['cghjsuCGHJSU'⍳⊃⍵.Match]}
Adm
sumber
Jawaban bagus! +1
OldBunny2800
Saya tidak yakin bagaimana byte dihitung di sini. Bukankah penggunaan ⎕R secara langsung lebih pendek? ('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
ngn
@ Ngn Memang, tapi baterai saya habis sebelum saya sempat memposting itu.
Adám
6

Retina , 27 byte

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

Cobalah online!

Program ini disusun oleh dua transliterasi. Karena memiliki menggabungkan karakter dalam kode ini tidak membuat terlalu baik, baris pertama harus benar-benar terlihat mirip iT`x`^`[cghjs]x, di mana ^singkatan dari karakter menggabungkan aksen sirkumfleksa. Apa yang dikatakan ini adalah bahwa ia harus Tmembaca ulang ( imencari kasus) semua yang ada xdi input menjadi ^, setiap kali mereka mengikuti huruf apa pun di [cghjs].


Catatan: TIO salah mengukur kode ini sebagai 25 byte. Sebenarnya, program Retina ini menggunakan pengkodean UTF-8 (program lain dapat menggunakan UTF-32 atau ISO 8859-1) dan dua karakter yang digabungkan masing-masing menghabiskan biaya 2 byte.

Leo
sumber
5

C,  173  154 byte

Terima kasih kepada @Colera Su karena telah menghemat 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);}

Cobalah online!

Penjelasan:

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);
}
Steadybox
sumber
Bagus! Bisakah saya punya penjelasan?
OldBunny2800
Mungkin Anda dapat menggunakan byte byte literal, bukan \0?
user202729
(tapi sayangnya itu tidak bekerja pada TIO)
user202729
Anda dapat menggunakannya write(1,"..."+i*2,2)untuk menghemat 17 byte. Cobalah online!
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(),))

Cobalah online!

Menghasilkan dan mengevaluasi string:

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 menyimpan satu byte.

Tidak
sumber
@EriktheOutgolfer Bagus, terima kasih!
xnor
3

/// , 75 byte

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

Catatan: Karena permintaan OP semua karakter yang dapat dicetak harus diproses, "karakter khusus" saya yang dipilih tidak boleh dicetak. Jadi saya memilih tab dan baris baru, yang tidak mengubah bytecount atau fungsi kode saya. Kode akan terlihat seperti:

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

Namun yang mengharuskan input tidak boleh mengandung tab atau baris baru.

Cobalah online!

Karena /// tidak dapat mengambil input, Anda harus memasukkan input setelah kode.

Cukup mudah. Saya kira itu tidak bisa lebih pendek karena/// perlu penanganan khusus setiap karakter.

Penjelasan:

/,/\/\//       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.
pengguna202729
sumber
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

Cobalah online!

-10 byte terima kasih kepada WhatToDo
-1 byte berkat Colera Su

HyperNeutrino
sumber
96 byte Cobalah online!
WhatToDo
@ user507295 oh ide cerdas. Terima kasih!
HyperNeutrino
Gunakan dan-atau trik untuk menghemat satu byte: Cobalah secara online!
Colera Su
@ ColeraSu oh keren, terima kasih. tidak yakin mengapa trik itu lenyap D:
HyperNeutrino
@HyperNeutrino Karena saya tidak tahu tentang trik itu. Maaf!
WhatToDo
2

Retina , 55 byte

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

Cobalah online! Pendekatan non-kombinasi. Bytes dapat disimpan jika bukan untuk xkasus uji mandiri .

Neil
sumber
1

Perl 5 , 101 + 1 ( -p) = 102 byte

%k=qw/c ĉ g ĝ h ĥ j ĵ s ŝ u ŭ C Ĉ G Ĝ H Ĥ J Ĵ S Ŝ U Ŭ/;$"=join"|",keys%k;s/($")x/$k{$1}/g

Cobalah online!

Xcali
sumber
1

JavaScript (ES6), 92 byte

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

Cobalah online!

Digunakan metode split-join yang direkomendasikan di sini untuk mengurangi jumlah byte karenanew RegExp(/*blah*/) konstruktor mengambil terlalu banyak byte.

Perbandingan:

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

Lebih pendek, menggabungkan pendekatan aksen (63 byte), tetapi dengan beberapa artefak terlihat.

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

Catatan Kaki: Saya mengklaim jawaban saya 92 byte karena solusi 63-byte memiliki artefak yang dapat memengaruhi output.

Shieru Asakoto
sumber
1

APL (Dyalog Unicode) , 57 byte

Fungsi diam-diam anonim. Penggunaan:

  1. Fungsi awalan ke string. Ini mentransliterasikan string.

  2. Fungsi awalan ke daftar string. Ini mentransliterasikan string.

  3. Fungsi infix dengan nomor ikat file input sebagai argumen kanan dan nomor ikat file output sebagai argumen kiri. Ini mengisi file output dengan konten transliterasi dari file input.

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

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

'cghjsuCGHJSU' surat-surat ini

,¨'x' masing-masing diikuti oleh x

 ... dengan ...

,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ' masing-masing surat ini sebagai string

Cobalah online!

Adm
sumber
1

J , 64 63 byte

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

Bagaimana itu bekerja:

Dengan _2]\saya mengatur ulang string 'ĉĝĥĵŝŭĈĜĤĴŜŬ' menjadi kolom 12-baris agar sesuai dengan bentuk string lainnya.

,. menambahkan 'x' ke setiap karakter dari string 'cghjsuCGHJSU' dan membuat larik 12 baris dengan 2 kolom

;~"1' membuat daftar pasangan kotak di atas, "1 - peringkat 1 - berlaku untuk setiap baris.

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

rplc menggunakan item kotak ini untuk menggantikan setiap kemunculan item kotak kiri dari pasangan dengan yang tepat.

Cobalah online!

Galen Ivanov
sumber
1

Befunge , 2x48 +1 = 99 byte

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

Cobalah (TIO sangat aneh tentang Befunge dan saya tidak bisa mendapatkan solusi apa pun untuk mengerjakannya)

Bagaimana itu bekerja

>~:1+!@_

Mendapat input dan memeriksa apakah itu akhirnya. Akhiri program jika ya.

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

Cek apakah karakternya adalah "x". Jika tidak, simpan salinan karakter tersebut dan cetaklah.

               >$ 11p0"cghjsuCGHJSU"1\

Simpan karakter terakhir di (1,1). Masukkan semua karakter untuk diperiksa ke dalam tumpukan.

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

Bandingkan karakter terakhir dengan semua nilai di stack.

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

Lipat gandakan cek (0 atau 1) dengan ʊ (nilai unicode 650). Periksa apakah karakternya au (untuk breve) dan tambahkan 4 ke tumpukan jika demikian. Akhirnya, tambahkan nilai ascii x (100) juga. Total menambahkan hingga aksen yang benar jika diperlukan atau hanya "x" jika tidak.

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

Tambahkan semua nilai dalam tumpukan bersama, cetak, dan simpan duplikat. Kembali ke atas untuk input selanjutnya.

Jo King
sumber
1

R , 75 70 byte

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

Cobalah online!

-5 byte terima kasih kepada Giuseppe

Penjelasan

  • gsub('(u)x','\\1\U306',s,T): ganti dalam ssetiap kemunculan huruf besar atau kecil "u" ​​(dengan menggunakan ignore.case=TRUEargumen keempat T) diikuti oleh "x" the "u" diikuti oleh unicode untuk breve
  • gsub('([cghjs])x','\\1\U302',gsub('(u)x','\\1\U306',s,T),T): ambil hasil dari itu dan ganti setiap kemunculan huruf besar atau kecil (dengan menggunakan ignore.case=TRUEargumen keempat T) "c", "g", "h", "j", atau "s" diikuti oleh "x" dengan surat diikuti oleh unicode untuk sirkumfleksa
duckmayr
sumber
menggunakan urutan argumen alih-alih penamaan menghemat 3 byte, dan dua lainnya menyingkirkan nol di depan \U0302dan \U0306: Coba online!
Giuseppe
@Giuseppe - ide bagus, terima kasih!
duckmayr
1

QuadR , 25 byte

Menggabungkan edisi diakritik.

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

i bendera

Cobalah online!

Menggantikan…

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

huruf i nsensitively

Setara dengan kode APL Dyalog berikut:

'(u)x' '([cghjs])x'R' ̆\1' ' ̂\1'
Adm
sumber
Mengapa ini 28 dan bukan 24 byte?
Erik the Outgolfer
@EriktheOutgolfer Konter SBCS TIO membuat saya bingung. Tetap. Terima kasih. Tunggu, apakah itu berarti saya menang?
Adám
Huh, sekarang sepertinya 27 byte (disalin dari TIO), tetapi 24 byte saat disalin dari sini. Apa itu pengodean QuadR, dan mana yang benar?
Erik the Outgolfer
@EriktheOutgolfer Kedua tautan melaporkan 24 pada FFQ / Win10 saya. QuadR menggunakan Dyalog Classic atau Unicode apa pun.
Adám
Jadi 24 byte atau apa?
Erik the Outgolfer
1

C, 145 144 byte

Pendekatan C lainnya. Kembali dengan menimpa input, menggunakan fakta bahwa circumflex / breve adalah 2 byte.

-1 byte, terima kasih kepada 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;}

Cobalah online!

Colera Su
sumber
1
Menggunakan t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;bukannya t^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;menghemat satu byte. Cobalah online!
Steadybox
1

Mathematica, 81 byte atau 57 byte

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

Ini menerapkan aturan penggantian di mana surat tanpa topi bersama dengan "x" diganti dengan surat itu.

Berikut ini adalah alternatif menggunakan karakter aksen yang ditambahkan: StringReplace[{"ux"->"ŭ","Ux"->"Ŭ",c_~~"x":>c<>"̂"}]

M. Stern
sumber
1

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

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

Cobalah online!

Disimpan 10 byte berkat Nahuel Fouilleul

Hati gelap
sumber
bisa menghemat 7 byte:s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
Nahuel Fouilleul
tampaknya itu berfungsi juga hanya dengan -Cdan tanpa -Cperingatan ( Wide character in print)
Nahuel Fouilleul
1
dari 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+@\/*}

Cobalah online!

Penjelasan:

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
}
Buah Esolanging
sumber
Apakah ini benar-benar 39 byte? Saya menghitung 39 karakter dan saya tidak berpikir CJam memiliki penyandian khusus.
user202729
@ user202729 Diubah (TIO dihitung byte sebagai karakter karena alasan tertentu)
Esolanging Fruit
Karena TIO percaya bahwa semua bahasa golf memiliki codepage karakter khusus, dan itu tidak mengganggu memeriksa apakah semua karakter berada dalam codepage yang benar.
user202729
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
iBug
sumber
Anda harus memformat kode sebagai kode dengan `...`atau <pre><code>...</code></pre>atau 4 indentasi.
user202729
@ user202729 Saya jelas tahu itu. Saya mengirimkan dari ponsel Android saya jadi saya tidak memformatnya dengan benar.
iBug
2
Panjangnya 119 byte.
Erik the Outgolfer
0

PowerShell, 58 byte

Ini 54 karakter dan menyimpannya di PowerShell ISE membuatnya UTF-8 + BOM selama 58 byte. Itu tidak merender dengan baik di browser:

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

regex menggantikan x dengan menggabungkan karakter Unicode dari komentar @ user202729.

misalnya

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

Clojure, 126 115 byte

-11 byte dengan mengubah peta pengganti ke partisi string.

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

Pengurangan atas peta penggantian yang harus dicari, dan untuk apa diganti.

Masih bekerja dengan cara mengompres peta pengganti.

(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Ŭ")))))
Carcigenicate
sumber
0

JavaScript (ES6), 91 byte

(i,s='cĉgĝhĥjĵsŝuŭCĈGĜHĤJĴSŜUŬ')=>i.replace(/.x/g,m=>s[1+s.search(m[0])||s]||m)

Cobalah online!

Patrick Stephansen
sumber
0

Scala , 110 byte

Solusi regex membosankan:

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

Solusi scala lama (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)

Tidak disatukan

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
)
AmazingDreams
sumber
0

JavaScript, 35 karakter, 36 byte

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