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) - 0xAC00
jest Korean_code
, a indeks CHOSEONG, Jungseong, Jongseong jest Cho
, Jung
, Jong
.
Więc Korean_code
jest(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
frk
zostanie podany, toㄹㄱㅏ
znaczy może się zmienić na dwa sposoby:ㄺㅏ
iㄹ가
. Następnie musisz przekształcić go w sposób, który wybrał. Jeślijjjrjr
podano, 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, A
które nie mają swojego odpowiednika na dwuczęściowej klawiaturze. tak Aheui
aby Aㅗ뎌ㅑ
jest OK. Ale jeśli zmienisz Aheui
na 모뎌ㅑ
, możesz uzyskać -5 punktów, dzięki czemu możesz zarobić 5 bajtów.
Możesz oddzielić dwa jungseongi (lubię ㅘ
to ㅗ+ㅏ
). jak rhk
do 고ㅏ
, lub how
do ㅗㅐㅈ
. Ale jeśli połączyć je (jak rhk
na 과
lub how
do ㅙㅈ
), można zarobić dodatkowe -5 punktów.
fjfau
może być interpretowany jako 럶ㅕ
lub 럴며
. Jak to rozwiązać?
tprP
w 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?
l
poml
koreańskim symboluㅣ
.