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 kode-golf . 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 N
ukuran 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
var QUESTION_ID=149292,OVERRIDE_USER=47670;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
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.
̂
, dan menggabungkan breve pada 0306̆
.Jawaban:
QuadR , 65 byte
Cobalah online!
.x
ganti char yang diikuti oleh "x" dengan3::⍵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:
sumber
('cghjsuCGHJSU',¨'x')⎕r(,¨'ĉĝĥĵŝŭĈĜĤĴŜŬ')
Retina , 27 byte
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 harusT
membaca ulang (i
mencari kasus) semua yang adax
di 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.
sumber
C,
173154 byteTerima kasih kepada @Colera Su karena telah menghemat 17 byte!
Cobalah online!
Penjelasan:
sumber
\0
?write(1,"..."+i*2,2)
untuk menghemat 17 byte. Cobalah online!Python 3 , 81 byte
Cobalah online!
Menghasilkan dan mengevaluasi string:
Erik the Outgolfer menyimpan satu byte.
sumber
/// , 75 byte
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:
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:
sumber
Python 3 , 95 byte
Cobalah online!
-10 byte terima kasih kepada WhatToDo
-1 byte berkat Colera Su
sumber
Retina , 55 byte
Cobalah online! Pendekatan non-kombinasi. Bytes dapat disimpan jika bukan untuk
x
kasus uji mandiri .sumber
Perl 5 , 101 + 1 (
-p
) = 102 byteCobalah online!
sumber
JavaScript (ES6), 92 byte
Cobalah online!
Digunakan metode split-join yang direkomendasikan di sini untuk mengurangi jumlah byte karena
new RegExp(/*blah*/)
konstruktor mengambil terlalu banyak byte.Perbandingan:
Lebih pendek, menggabungkan pendekatan aksen (63 byte), tetapi dengan beberapa artefak terlihat.
Catatan Kaki: Saya mengklaim jawaban saya 92 byte karena solusi 63-byte memiliki artefak yang dapat memengaruhi output.
sumber
APL (Dyalog Unicode) , 57 byte
Fungsi diam-diam anonim. Penggunaan:
Fungsi awalan ke string. Ini mentransliterasikan string.
Fungsi awalan ke daftar string. Ini mentransliterasikan string.
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 stringCobalah online!
sumber
J ,
6463 byteBagaimana 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.rplc
menggunakan item kotak ini untuk menggantikan setiap kemunculan item kotak kiri dari pasangan dengan yang tepat.Cobalah online!
sumber
Befunge , 2x48 +1 = 99 byte
Cobalah (TIO sangat aneh tentang Befunge dan saya tidak bisa mendapatkan solusi apa pun untuk mengerjakannya)
Bagaimana itu bekerja
Mendapat input dan memeriksa apakah itu akhirnya. Akhiri program jika ya.
Cek apakah karakternya adalah "x". Jika tidak, simpan salinan karakter tersebut dan cetaklah.
Simpan karakter terakhir di (1,1). Masukkan semua karakter untuk diperiksa ke dalam tumpukan.
Bandingkan karakter terakhir dengan semua nilai di stack.
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.
Tambahkan semua nilai dalam tumpukan bersama, cetak, dan simpan duplikat. Kembali ke atas untuk input selanjutnya.
sumber
R ,
7570 byteCobalah online!
-5 byte terima kasih kepada Giuseppe
Penjelasan
gsub('(u)x','\\1\U306',s,T)
: ganti dalams
setiap kemunculan huruf besar atau kecil "u" (dengan menggunakanignore.case=TRUE
argumen keempatT
) diikuti oleh "x" the "u" diikuti oleh unicode untuk brevegsub('([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 menggunakanignore.case=TRUE
argumen keempatT
) "c", "g", "h", "j", atau "s" diikuti oleh "x" dengan surat diikuti oleh unicode untuk sirkumfleksasumber
\U0302
dan\U0306
: Coba online!QuadR , 25 byte
Menggabungkan edisi diakritik.
i
benderaCobalah online!
Menggantikan…
huruf i nsensitively
Setara dengan kode APL Dyalog berikut:
sumber
C,
145144 bytePendekatan C lainnya. Kembali dengan menimpa input, menggunakan fakta bahwa circumflex / breve adalah 2 byte.
-1 byte, terima kasih kepada Steadybox .
Cobalah online!
sumber
t^1&&memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1;
bukannyat^1?memcpy(s-1,"ĉĝĥĵŝŭĈĜĤĴŜŬ"+t,2),t=1:0;
menghemat satu byte. Cobalah online!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<>"̂"}]
sumber
Perl 5 , 49 + 2 (
-p -C
) =6151 byteCobalah online!
Disimpan 10 byte berkat Nahuel Fouilleul
sumber
s/[CGHJScghjs]\Kx/\x{0302}/g;s/[Uu]\Kx/\x{0306}/g
-C
dan tanpa-C
peringatan (Wide character in print
)-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.
CJam , 51 byte
Cobalah online!
Penjelasan:
sumber
sed, 108 byte
sumber
`...`
atau<pre><code>...</code></pre>
atau 4 indentasi.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:
regex menggantikan x dengan menggabungkan karakter Unicode dari komentar @ user202729.
misalnya
sumber
Clojure,
126115 byte-11 byte dengan mengubah peta pengganti ke partisi string.
Pengurangan atas peta penggantian yang harus dicari, dan untuk apa diganti.
Masih bekerja dengan cara mengompres peta pengganti.
sumber
JavaScript (ES6), 91 byte
Cobalah online!
sumber
Scala , 110 byte
Solusi regex membosankan:
Solusi scala lama (116 byte)
Tidak disatukan
sumber
JavaScript, 35 karakter, 36 byte
sumber
sed, 40 byte (38 karakter)
Cobalah online!
Saya percaya ini cukup berbeda dari jawaban iBug .
sumber