Romanisasi bahasa Jepang mengubah teks bahasa Jepang menjadi karakter Latin. Dalam tantangan ini, Anda akan diberikan string karakter Jepang sebagai input dan diharapkan untuk mengubahnya menjadi string ASCII yang benar.
Yang Perlu Anda Ketahui
Bahasa Jepang memiliki tiga sistem penulisan: hiragana (kurva yang digunakan untuk kata-kata pendek), katakana (sudut-y yang digunakan untuk bunyi dan kata-kata yang dipinjam dari bahasa lain), dan kanji (karakter padat yang berasal dari bahasa Cina). Dalam tantangan ini kita hanya akan mengkhawatirkan hiragana.
Ada 46 karakter di suku kata hiragana. Setiap karakter mewakili suku kata. Karakter diatur oleh bunyi pertama (konsonan) dan bunyi kedua (vokal). Kolom secara berurutan adalah aiueo
.
: あいうえお
k: かきくけこ
s: さしすせそ
t: たちつてと
n: なにぬねの
h: はひふへほ
m: まみむめも
y: や ゆ よ
r: らりるれろ
w: わ を
N: ん
(jika Anda menyalin dan menempel tabel ini, perhatikan bahwa saya telah menggunakan spasi ideografi U + 3000 untuk menghapus y dan w)
Jadi, misalnya, あ と め harus menghasilkan output atome
. Karakter pertama adalah a
, yang kedua adalah to
, dan yang ketiga adalah me
.
Pengecualian
Seperti bahasa yang bagus, bahasa Jepang memiliki pengecualian terhadap aturannya, dan tabel hiragana memiliki beberapa. Karakter-karakter ini diucapkan sedikit berbeda dari yang ditunjukkan oleh lokasinya dalam tabel:
し: shi
, bukan si
ち: chi
, bukan ti
つ: tsu
, bukan tu
ふ: fu
, tidakhu
Dakuten ゛
Kata 'dakuten' berarti 'tanda berlumpur': sang dakuten mengubah suara menjadi padanan suaranya (biasanya); misalnya, かka
berubah menjadi か ゛ga
. Daftar lengkap perubahan:
k
→ g
s
→ z
t
→ d
h
→b
Pengecualian juga berubah: し ゛: ji
(atau zhi
), bukan zi
ち ゛: ji
, bukan di
つ ゛: dzu
, tidak du
(ふ ゛ bertindak seperti yang Anda harapkan; ini bukan pengecualian)
Handakuten adalah karakter tambahan゜ yang berlaku untuk h
baris. Jika ditempatkan setelah karakter, itu mengubah suara karakter menjadi p
daripada b
.
Baik dakuten dan handakuten akan diberikan sebagai karakter individu. Anda tidak perlu berurusan dengan formulir yang dikomposisi sebelumnya atau karakter yang menggabungkan.
Karakter kecil
Akhirnya, ada versi kecil dari beberapa karakter. Mereka memodifikasi karakter yang datang sebelum atau sesudahnya.
ゃ ゅ ょ
Ini adalah bentuk kecil ya
, yu
dan yo
. Mereka hanya ditempatkan setelah suara di i
kolom; mereka menghapus i
dan menambahkan suara mereka. Jadi, き や berubah menjadi kiya
; き ゃ berubah menjadi kya
.
Jika ditempatkan setelah chi
atau shi
(atau bentuk dakuten-ed mereka), y
itu dihapus juga. し ゆ adalah shiyu
; し ゅ adalah shu
.
Hal terakhir yang harus Anda tangani adalah hal kecil tsu
. っ menggandakan konsonan yang datang setelah itu, tidak peduli apa; tidak melakukan apa-apa lagi. Misalnya, き た adalah kita
; き っ た adalah kitta
.
Ringkasan, Input, dan Output
Program Anda harus bisa transliterasi: 46 hiragana dasar, bentuk dakuten dan handakuten mereka, dan kombinasinya dengan karakter kecil.
Perilaku tidak terdefinisi meliputi: kecil ya
, yu
dan yo
tidak setelah karakter dengan i
, kecil tsu
di akhir string, dakuten pada karakter yang tidak terpengaruh, handakuten pada p
karakter non- , dan apa pun yang tidak disebutkan dalam spesifikasi / pengantar di atas.
Anda dapat menganggap semua input valid dan hanya berisi karakter Jepang yang disebutkan di atas.
Kasus tidak menjadi masalah dalam output; Anda juga dapat mengganti r
dengan l
atau sendirian n
dengan m
. Output dapat memiliki satu ruang antara setiap suku kata atau tanpa spasi sama sekali.
Ini adalah kode-golf : kode terpendek dalam byte menang.
Uji Kasus
Banyak kasus uji untuk masing-masing bagian diberikan dalam spesifikasi. Beberapa kasus tambahan:
ひ ら か ゛ な → hiragana
か た か な → katakana
た ゛ い き ゛ ゃ く て て ん い い は ん → daigyakutensaiban
ふ ゜ ろ く ゛ ら み ん く く ゛ は ゜ ゛ る る こ こ う と ゛ ゛ こ る る ふ → puroguramingupazurucoudogorufu
か ゛ ん ほ ゛ っ て → ganbatte
Catatan
Saya tidak tahu banyak bahasa Jepang selain apa yang saya tulis di sini. Tolong beri tahu saya jika saya melakukan kesalahan.
Saya awalnya berencana untuk memasukkan katakana juga (jadi kasus tes transliterasi bahasa Inggris saya bisa sedikit lebih akurat), tetapi itu akan terlalu banyak untuk tantangan kode golf.
Nama-nama Unicode termasuk transliterasi setiap karakter secara individual, tetapi tanpa pengecualian. Ini mungkin atau mungkin tidak bermanfaat bagi Anda.
Berkat squeamishossifrage untuk mengoreksi dua kesalahan ketik!
Maaf jika ini terlalu panjang; Saya berusaha memasukkan sebagian besar keanehan hiragana ke dalam tantangan, tetapi beberapa hal (seperti hiragana yang hanya menggunakan vokal kecil, ganti n ke m di depan beberapa konsonan, dan tanda pengulangan) harus dipotong untuk menjaga agar tantangan dapat dikelola.
Saya sama sekali tidak menyesal dengan judulnya. Itu adalah sebuah mahakarya.
sumber
きっった
?っし
menjadisshi
ataushshi
?I'm not at all sorry for the title. It's a masterpiece.
DownvotedJawaban:
Python 2, 638 byte
Mengambil input sebagai string unicode.
Uji di Ideone
sumber
print ''.join(R)
keprint''.join(R)
Python 2, 447 byte
Ini mengambil input Unicode secara langsung, yang membuat saya kehilangan beberapa byte karena
decode('utf-8')
tapi saya pikir lebih dalam semangat tantangan.Saya mulai dengan mengganti setiap karakter dengan dua karakter terakhir dari nama unicode-nya, seperti yang disarankan dalam catatan puzzle. Sayangnya, ini tidak membedakan antara versi alternatif dari karakter yang sama, jadi saya harus membuat retas jelek untuk menambahkan 'x' sebelum karakter kecil dan handakuten.
Sisa loop for hanya memperbaiki pengecualian, dalam rangka:
Saya berharap saya bisa menggabungkan lebih banyak langkah, tetapi dalam beberapa kasus langkah-langkah harus dilakukan untuk menghindari konflik.
Cobalah online! (versi multisaluran dengan lebih banyak contoh dapat ditemukan di sini ).
sumber
for b in'AEIOU'
menjadi tab atau satu ruang untuk menghemat 3 byte. Anda juga dapat menggunakanfrom unicodedata import*
untuk menyimpan beberapa byte - tidak yakin.Cepat 3,
6764 karakterbiarkan r = {(s: String) di s.applyingTransform (.toLatin, membalikkan: false)}sumber
s:String)
dan.toLatin,
?Foundation
sudah.Python 3 , 259 byte
Cobalah online!
Penjelasan
Kami beruntung dengan format input ini! Lihat apa yang terjadi jika saya meneruskan input melalui normalisasi NFKC :
Dakuten digantikan oleh spasi dan dakuten gabungan. Sekarang hanya ruang yang memisahkan は dari dakutennya. Jadi kita menyingkirkannya dan menormalkan lagi :
Bingo. Baris kelima mengubah input menjadi sesuatu seperti
Lalu kami menerapkan 9 penggantian membosankan membosankan dijejalkan
r
, dan kami selesai:(Jonathan French menyimpan 4 byte,
import re,unicodedata as u
alih-alih menulisimport re;from unicodedata import*
. Terima kasih!)sumber
import re,unicodedata as u
seperti pada Kirill L. jawaban untuk tantangan terkait menghemat 4 byte .