Wprowadzenie
Jest trochę podobny do układu klawiatury DVORAK , ale DUŻO trudniejszy.
Porozmawiajmy najpierw o koreańskiej klawiaturze. Jak widać w Wikipedii , istnieje klucz Kor / Eng do zmiany między zestawami kluczy koreańskiego i angielskiego.
Koreańczycy czasami źle wpisują: próbują pisać po koreańsku na klawiaturze qwerty lub po angielsku na dwuczęściowej klawiaturze.
Oto problem: jeśli podano koreańskie znaki wpisywane na dwuczęściowej klawiaturze, przekonwertuj je na znaki alfabetyczne wpisane na klawiaturze qwerty. Jeśli podano znaki alfabetyczne wpisane w qwerty, zmień je na klawiaturę z dwoma zestawami.
Dwuczęściowa klawiatura
Oto dwuczęściowy układ klawiatury:
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
ㅋㅌㅊㅍㅠㅜㅡ
i klawiszem Shift:
ㅃㅉㄸㄲㅆㅛㅕㅑㅒㅖ
zmienia się tylko górny wiersz, a inne nie.
O koreańskich znakach
jeśli to się tu skończy, może być łatwo, ale nie. Kiedy piszesz
dkssud, tprP!
dane wyjściowe nie są wyświetlane w ten sposób:
ㅇㅏㄴㄴㅕㅇ, ㅅㅔㄱㅖ!
ale w ten sposób:
안녕, 세계!(means Hello, World!)
i to znacznie utrudnia.
Koreańskie znaki dzielą się na trzy części: „Choseong (spółgłoska)”, „Jungseong (samogłoska)” i „Jongseong (spółgłoska na końcu sylaby: może być pusta)”, i trzeba to rozdzielić.
Na szczęście jest na to sposób.
Jak oddzielić
Jest 19 Choseong, 21 Jungseong i 28 Jongseong (z pustym miejscem), a 0xAC00 to „가”, pierwszy znak koreańskich znaków. Korzystając z tego, możemy podzielić koreańskie znaki na trzy części. Oto kolejność każdego z nich i jego pozycja na dwuczęściowej klawiaturze.
wybierz zamówienie:
ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ
r R s e E f a q Q t T d w W c z x v g
zamówienie jungseong:
ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ
k o i O j p u P h hk ho hl y n nj np nl b m ml l
zamówienie jongseong:
()ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ
()r R rt s sw sg e f fr fa fq ft fx fv fg a q qt t T d w c z x v g
Powiedzmy Chodźmy (unicode value of some character) - 0xAC00jest Korean_code, a indeks CHOSEONG, Jungseong, Jongseong jest Cho, Jung, Jong.
Więc Korean_codejest(Cho * 21 * 28) + Jung * 28 + Jong
Oto kod javascript, który oddziela koreański znak od tej koreańskiej witryny, dla Twojej wygody.
var rCho = [ "ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" ];
var rJung =[ "ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ" ];
var rJong = [ "", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ","ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" ];
var cho, jung, jong;
var sTest = "탱";
var nTmp = sTest.charCodeAt(0) - 0xAC00;
jong = nTmp % 28; // Jeongseong
jung = ((nTmp - jong) / 28 ) % 21 // Jungseong
cho = ( ( (nTmp - jong) / 28 ) - jung ) / 21 // Choseong
alert("Choseong:" + rCho[cho] + "\n" + "Jungseong:" + rJung[jung] + "\n" + "Jongseong:" + rJong[jong]);
Po zmontowaniu
- Należy zauważyć, że
ㅘ,ㅙ,ㅚ,ㅝ,ㅞ,ㅟ,ㅢjest kombinacją innych jungseongs.
ㅗ+ㅏ=ㅘ, ㅗ+ㅐ=ㅙ, ㅗ+ㅣ=ㅚ, ㅜ+ㅓ=ㅝ, ㅜ+ㅔ=ㅞ, ㅜ+ㅣ=ㅟ, ㅡ+ㅣ=ㅢ
- Choseong jest konieczny. Oznacza to, że jeśli
frkzostanie podany, toㄹㄱㅏznaczy może się zmienić na dwa sposoby:ㄺㅏiㄹ가. Następnie musisz przekształcić go w sposób, który wybrał. Jeślijjjrjrpodano, to znaczyㅓㅓㅓㄱㅓㄱ, że wiodącyㅓnie mają niczego, co można by wybrać, ale czwartyㅓmaㄱto, co można wybrać, więc zostało zmienione naㅓㅓㅓ걱.
Kolejny przykład: 세계( tprP). Można go zmienić na 섹ㅖ( (ㅅㅔㄱ)(ㅖ)), ale ponieważ wybranie opcji jest konieczne, zmieniono na 세계( (ㅅㅔ)(ㄱㅖ))
Przykłady
wejście 1
안녕하세요
wyjście 1
dkssudgktpdy
wejście 2
input 2
wyjście 2
ㅑㅞㅕㅅ 2
wejście 3
힘ㄴㄴ
wyjście 3
glass
wejście 4
아희(Aheui) is esolang which you can program with pure Korean characters.
wyjście 4
dkgml(모뎌ㅑ) ㅑㄴ ㄷ내ㅣ뭏 조ㅑ초 ㅛㅐㅕ ㅊ무 ㅔ갷ㄱ므 쟈소 ㅔㅕㄱㄷ ㅏㅐㄱㄷ무 촘ㄱㅁㅊㅅㄷㄱㄴ.
wejście 5
dkssud, tprP!
wyjście 5
안녕, 세계!
wejście 6
ㅗ디ㅣㅐ, 째깅! Hello, World!
wyjście 6
hello, World! ㅗ디ㅣㅐ, 째깅!
Najkrótszy kod wygrywa. (w bajtach)
Nowa zasada dla Twojej wygody
Możesz odrzucić znaki, Aktóre nie mają swojego odpowiednika na dwuczęściowej klawiaturze. tak Aheuiaby Aㅗ뎌ㅑjest OK. Ale jeśli zmienisz Aheuina 모뎌ㅑ, możesz uzyskać -5 punktów, dzięki czemu możesz zarobić 5 bajtów.
Możesz oddzielić dwa jungseongi (lubię ㅘto ㅗ+ㅏ). jak rhkdo 고ㅏ, lub howdo ㅗㅐㅈ. Ale jeśli połączyć je (jak rhkna 과lub howdo ㅙㅈ), można zarobić dodatkowe -5 punktów.
fjfaumoże być interpretowany jako 럶ㅕlub 럴며. Jak to rozwiązać?
tprPw przypadku testowym 5: przekształca się w ㅅㅔㄱㅖ, gdzie ㅅjest choseong, ㅔjest jungseong i ㄱjest jongseong. Czy to nie powinno przekształcić się w 섷ㅖ(zgrupowane jak (ㅅㅔㄱ)(ㅖ)) zamiast 세계(zgrupowane jak (ㅅㅔ)(ㄱㅖ))? We wcześniejszym komentarzu stwierdzasz, że jest on interpretowany przez pisanie na klawiaturze, więc spodziewałbym ㅅㅔㄱsię, że przekształcę się w 섷. A może koreański pisze od prawej do lewej zamiast od lewej do prawej?
lpomlkoreańskim symboluㅣ.