日语的罗马化将日语文本转换为拉丁字符。在此挑战中,将为您提供一串日文字符作为输入,并期望将其转换为正确的ASCII字符串。
您需要知道什么
日语有三种书写系统:平假名(弯曲的用于简短单词),片假名(用于从其他语言借来的声音和单词的角形)和汉字(最初来自中文的密集字符)。在这个挑战中,我们将只担心平假名。
平假名音节中有46个字符。每个字符代表一个音节。字符按第一声音(辅音)和第二声音(元音)组织。按顺序排列的列是aiueo
。
: あいうえお
k: かきくけこ
s: さしすせそ
t: たちつてと
n: なにぬねの
h: はひふへほ
m: まみむめも
y: や ゆ よ
r: らりるれろ
w: わ を
N: ん
(如果复制并粘贴此表,请注意,我已使用表意空格U + 3000来分隔y和w)
因此,例如あとめ应该产生的输出atome
。第一个是a
,第二个是to
,第三个是me
。
例外情况
像任何一种好的语言一样,日语也有其规则的例外,而平假名表也有几种例外。这些字符的发音与其在表中的位置所暗示的略有不同:
し:shi
,not si
ち:chi
,not ti
つ:tsu
,not tu
ふ:fu
,nothu
达库ten
“ dakuten”一词的意思是“泥泞的印记”:dakuten将声音转换成它们的浊音(通常);例如,かka
变成か゛ga
。更改的完整列表:
k
→交通g
s
→交通z
t
→交通d
h
→交通b
例外也会发生变化:し゛:(ji
或zhi
),不是zi
ち゛:ji
,不是di
つ゛:dzu
,而不是du
(ふ゛的行为符合您的预期;这不是例外)
handakuten是适用于该行的附加字符゜h
。如果放置在角色后面,则会将角色的声音更改为,p
而不是b
。
dakuten和handakuten都将作为单个字符给出。您将不需要处理预先组成的表格或组合字符。
小字
最后,有些字符有一些小版本。他们修改在其之前或之后的字符。
ゃゅょ
这些都是小的形式ya
,yu
和yo
。仅将它们放在- i
列中的声音之后;他们删除i
并添加声音。因此,きや变成kiya
;きゃ变成kya
。
如果放在chi
或shi
(或以其作废的形式)之后,则y
也会被删除。しゆ是shiyu
; しゅ是shu
。
您需要处理的最后一件事是小事务tsu
。っ无论如何,将其后的辅音加倍;它什么也没做。例如,きた是kita
; きった是kitta
。
摘要,输入和输出
您的程序必须能够音译:46种基本的平假名,其dakuten和handakuten形式以及它们与小字符的组合。
未定义行为包括:小ya
,yu
和yo
没有后一个字i
,小的tsu
在一个字符串的结尾,浊音标志上不受影响的人物,半浊音上非p
字符,和其他任何不在上述规格/介绍中提到。
您可以假定所有输入均有效,并且仅包含上述日语字符。
输出大小写无关紧要;您也可以替换r
为l
或单独n
使用m
。输出在每个音节之间可以有一个空格,也可以根本没有空格。
这是代码高尔夫球:以字节为单位的最短代码获胜。
测试用例
规范中为每个单独的部分提供了许多测试用例。其他一些情况:
ひらか゛な→ hiragana
かたかな→ katakana
た゛いき゛ゃくてんさいは゛ん→ daigyakutensaiban
ふ゜ろく゛らみんく゛は゜す゛るこうと゛こ゛るふ→ puroguramingupazurucoudogorufu
か゛んほ゛って→ ganbatte
笔记
除了我在这里写的东西外,我对日语也不太了解。如果我有任何错误,请告诉我。
我原本也打算将片假名也包含在内(因此我的英语音译测试用例可能会稍微准确一些),但这对于高尔夫编程挑战来说实在太多了。
Unicode名称分别包括每个字符的音译,但没有例外。这可能对您没有帮助。
感谢squeamishossifrage纠正了两个错别字!
如果时间太长,我感到抱歉。我试图使平假名的大多数怪癖适应挑战,但必须切掉某些事物(例如,仅元音的小平假名,在某些辅音之前将n更改为m,以及重复标记)以使挑战易于处理。
我完全不为这个标题感到抱歉。这是杰作。
っし
是sshi
还是shshi
?
I'm not at all sorry for the title. It's a masterpiece.
不赞成投票
きっった
?