切換
舊版
前往
大廳
主題

ZeroJudge - e620: 輸入法切換 解題心得

Not In My Back Yard | 2020-09-28 00:00:09 | 巴幣 2 | 人氣 180

題目連結:


題目大意:
輸入有多列,每列給定一組英數模式的輸入,請將其轉成注音輸入(不會包含中文標點符號或是空格且保證拼音正確)。

值得注意的是,輸入順序不會影響拼音之正確性。例如「gjp4」代表「ㄕㄨㄣˋ」,而「pjg4」、「jpg4」等也代表「ㄕㄨㄣˋ」。

並給定標準中文鍵盤與英數模式對照表(含聲調):
char keyboard[42] = {
'1', 'q', 'a', 'z', '2', 'w', 's', 'x', 'e', 'd', 'c', 'r', 'f', 'v',
'5', 't', 'g', 'b', 'y', 'h', 'n', 'u', 'j', 'm', '8', 'i', 'k', ',',
'9', 'o', 'l', '.', '0', 'p', ';', '/', '-', ' ', '6', '3', '4', '7' };
string bopomofo[42] = {
"ㄅ", "ㄆ", "ㄇ", "ㄈ", "ㄉ", "ㄊ", "ㄋ", "ㄌ", "ㄍ", "ㄎ", "ㄏ", "ㄐ", "ㄑ", "ㄒ",
"ㄓ", "ㄔ", "ㄕ", "ㄖ", "ㄗ", "ㄘ", "ㄙ", "ㄧ", "ㄨ", "ㄩ", "ㄚ", "ㄛ", "ㄜ", "ㄝ",
"ㄞ", "ㄟ", "ㄠ", "ㄡ", "ㄢ", "ㄣ", "ㄤ", "ㄥ", "ㄦ", " ", "ˊ", "ˇ", "ˋ", "˙" };



範例輸入:
c9 284ru8 cl3
5k4wu6g4gj bj4z83fu, jc04
pjg4mv4j14/u3;uv3puq pu


範例輸出:
ㄏㄞ ㄉㄚˋㄐㄧㄚ ㄏㄠˇ
ㄓㄜˋㄊㄧˊㄕˋㄕㄨ ㄖㄨˋㄈㄚˇㄑㄧㄝ ㄏㄨㄢˋ
ㄕㄨㄣˋㄒㄩˋㄅㄨˋㄧㄥˇㄒㄧㄤˇㄆㄧㄣ ㄧㄣ


解題思維:
因為保證拼音正確性,而所有中文字必定有「聲調」。因此,可以用「聲調」作為一個中文字的輸入結尾,例如「pjg4」的 4 。

輸出對應注音應該沒什麼問題,就是掃過陣列(或是用雜湊表(Hash Table)建一個對照表)然後找到該字元對應的注音符號後輸出即可。但是重點是順序不影響結果。

可以看到注音的順序是:先聲母(ㄅ ~ ㄙ),再介音(ㄧ 、 ㄨ 、 ㄩ),韻母(ㄚ ~ ㄦ)為後,最後加上聲調(「 」、「ˊ」、「ˇ」、「ˋ」、「˙」,依序為一聲、二聲、三聲、四聲以及輕聲)。

因此,可以將聲母編號為 0 、 介音為 1 、 韻母為 2 、聲調為 3 (不一定真的要 0123),然後大小排序。例如「pjg4」編碼為「2103」,將編碼部分重新排為「0123」後,對應之原本的英數輸入變為「gjp4」,即直接對應到「ㄕㄨㄣˋ」。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作