introduzione
È un po 'come il layout della tastiera DVORAK , ma MOLTO più difficile.
Parliamo prima della tastiera coreana. Come puoi vedere in Wikipedia , c'è una chiave Kor / Eng per cambiare tra le chiavi coreane e inglesi.
I coreani a volte digitano male: tentano di scrivere in coreano su una tastiera qwerty o in inglese su una tastiera a due set.
Quindi, ecco il problema: se dati caratteri coreani digitati in tastiera a due set, convertilo in caratteri alfabetici digitati in tastiera qwerty. Se vengono indicati i caratteri alfabetici digitati in qwerty, cambiarlo in tastiera a due set.
Tastiera a due set
Ecco il layout della tastiera a due set:
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
ㅋㅌㅊㅍㅠㅜㅡ
e con il tasto Maiusc:
ㅃㅉㄸㄲㅆㅛㅕㅑㅒㅖ
cambia solo la riga superiore mentre le altre no.
Informazioni sui personaggi coreani
se finisse qui, potrebbe essere facile, ma no. Quando si digita
dkssud, tprP!
l'output non viene mostrato in questo modo:
ㅇㅏㄴㄴㅕㅇ, ㅅㅔㄱㅖ!
ma in questo modo:
안녕, 세계!(means Hello, World!)
e rende le cose molto più difficili.
I personaggi coreani si separano in tre parti: "Choseong (consonante)", "Jungseong (vocale)" e "Jongseong (consonante alla fine della sillaba: può essere vuoto)", e devi separarlo.
Fortunatamente, c'è un modo per farlo.
Come separare
Ci sono 19 Choseong, 21 Jungseong e 28 Jongseong (con spazio vuoto), e 0xAC00 è '가', primo personaggio dei personaggi coreani. Usando questo, possiamo separare i caratteri coreani in tre parti. Ecco l'ordine di ciascuno e la sua posizione nella tastiera a due set.
ordine scelto:
ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ
r R s e E f a q Q t T d w W c z x v g
ordine jungseong:
ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ
k o i O j p u P h hk ho hl y n nj np nl b m ml l
ordine 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
Diciamo di Let (unicode value of some character) - 0xAC00
è Korean_code
, e l'indice di Choseong, jungseong, Jongseong è Cho
, Jung
, Jong
.
Quindi lo Korean_code
è(Cho * 21 * 28) + Jung * 28 + Jong
Ecco il codice javascript che separa il carattere coreano da questo sito Web coreano, per comodità.
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]);
Quando assemblato
- Si noti che
ㅘ
,ㅙ
,ㅚ
,ㅝ
,ㅞ
,ㅟ
,ㅢ
è una combinazione di altri jungseongs.
ㅗ+ㅏ=ㅘ, ㅗ+ㅐ=ㅙ, ㅗ+ㅣ=ㅚ, ㅜ+ㅓ=ㅝ, ㅜ+ㅔ=ㅞ, ㅜ+ㅣ=ㅟ, ㅡ+ㅣ=ㅢ
- Choseong è necessario. Ciò significa che, se
frk
viene dato, ovveroㄹㄱㅏ
, può cambiare in due modi:ㄺㅏ
eㄹ가
. Quindi, devi convertirlo in un modo che ha sceltoong. Sejjjrjr
dato, che èㅓㅓㅓㄱㅓㄱ
, leaderㅓ
s non hanno tutto ciò che può essere CHOSEONG, ma il quartoㅓ
haㄱ
che può essere CHOSEONG, quindi è cambiato inㅓㅓㅓ걱
.
Un altro esempio: 세계
( tprP
). Può essere modificato in 섹ㅖ
( (ㅅㅔㄱ)(ㅖ)
), ma poiché è necessario scegliereong, viene modificato in 세계
( (ㅅㅔ)(ㄱㅖ)
)
Esempi
input 1
안녕하세요
uscita 1
dkssudgktpdy
ingresso 2
input 2
uscita 2
ㅑㅞㅕㅅ 2
input 3
힘ㄴㄴ
uscita 3
glass
ingresso 4
아희(Aheui) is esolang which you can program with pure Korean characters.
uscita 4
dkgml(모뎌ㅑ) ㅑㄴ ㄷ내ㅣ뭏 조ㅑ초 ㅛㅐㅕ ㅊ무 ㅔ갷ㄱ므 쟈소 ㅔㅕㄱㄷ ㅏㅐㄱㄷ무 촘ㄱㅁㅊㅅㄷㄱㄴ.
input 5
dkssud, tprP!
uscita 5
안녕, 세계!
input 6
ㅗ디ㅣㅐ, 째깅! Hello, World!
uscita 6
hello, World! ㅗ디ㅣㅐ, 째깅!
Il codice più corto vince. (in byte)
Nuova regola per la tua convenienza
Puoi eliminare caratteri come quelli A
che non hanno la loro controparte in una tastiera a due set. in modo Aheui
da Aㅗ뎌ㅑ
è OK. Ma, se cambi Aheui
a 모뎌ㅑ
, puoi ottenere -5 punti, quindi puoi guadagnare 5 byte.
Puoi separare due jungseong (come ㅘ
a ㅗ+ㅏ
). come rhk
a 고ㅏ
, o how
a ㅗㅐㅈ
. Ma se lo combini (come rhk
a 과
o how
a ㅙㅈ
), puoi guadagnare ulteriori 5 punti.
fjfau
potrebbe essere interpretato come 럶ㅕ
o 럴며
. Come lo risolviamo?
tprP
nel caso di test 5: questo si trasforma in ㅅㅔㄱㅖ
, dove ㅅ
è scelto, ㅔ
è un jungseong ed ㄱ
è un jongseong. Quindi questo non dovrebbe trasformarsi in 섷ㅖ
(raggruppato come (ㅅㅔㄱ)(ㅖ)
) invece di 세계
(raggruppato come (ㅅㅔ)(ㄱㅖ)
)? In un commento precedente affermi che è interpretare digitando, quindi mi aspetto ㅅㅔㄱ
di trasformarmi in 섷
. O sta scrivendo il coreano da destra a sinistra anziché da sinistra a destra?
l
dopoml
per il simbolo coreanoㅣ
.