Introdução
É um pouco como o layout do teclado DVORAK , mas muito mais difícil.
Vamos falar sobre o teclado coreano primeiro. Como você pode ver na Wikipedia , existe uma chave Kor / Eng para alternar entre os conjuntos de chaves coreano e inglês.
Às vezes, os coreanos digitam errado: eles tentam escrever em coreano em um teclado qwerty ou em inglês em um teclado de dois conjuntos.
Então, aqui está o problema: se os caracteres coreanos digitados no teclado de dois conjuntos forem convertidos para caracteres alfabéticos digitados no teclado qwerty. Se os caracteres alfabéticos digitados em qwerty forem alterados, mude para teclado de dois conjuntos.
Teclado de dois conjuntos
Aqui está o layout do teclado de dois conjuntos:
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
ㅋㅌㅊㅍㅠㅜㅡ
e com a tecla shift:
ㅃㅉㄸㄲㅆㅛㅕㅑㅒㅖ
apenas a linha superior muda enquanto as outras não.
Sobre caracteres coreanos
se terminasse aqui, poderia ser fácil, mas não. Quando você digita
dkssud, tprP!
a saída não é mostrada desta maneira:
ㅇㅏㄴㄴㅕㅇ, ㅅㅔㄱㅖ!
mas desta maneira:
안녕, 세계!(means Hello, World!)
e isso torna as coisas muito mais difíceis.
Os caracteres coreanos se separam em três partes: 'Choseong (consoante)', 'Jungseong (vogal)' e 'Jongseong (consoante no final da sílaba: pode ficar em branco)', e você deve separá-lo.
Felizmente, há uma maneira de fazer isso.
Como separar
Existem 19 Choseong, 21 Jungseong e 28 Jongseong (com espaço em branco), e 0xAC00 é '가', primeiro caractere dos caracteres coreanos. Usando isso, podemos separar caracteres coreanos em três partes. Aqui está a ordem de cada uma e sua posição no teclado de dois conjuntos.
ordem escolhida:
ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ
r R s e E f a q Q t T d w W c z x v g
ordem do jungseong:
ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ
k o i O j p u P h hk ho hl y n nj np nl b m ml l
ordem 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
Vamos dizer (unicode value of some character) - 0xAC00é Korean_code, eo índice de choseong, jungseong, Jongseong é Cho, Jung,Jong .
Então Korean_codeé(Cho * 21 * 28) + Jung * 28 + Jong
Aqui está o código javascript que separa o caractere coreano deste site coreano, para sua conveniência.
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 montado
- Note-se que
ㅘ,ㅙ,ㅚ,ㅝ,ㅞ,ㅟ,ㅢé uma combinação de outros jungseongs.
ㅗ+ㅏ=ㅘ, ㅗ+ㅐ=ㅙ, ㅗ+ㅣ=ㅚ, ㅜ+ㅓ=ㅝ, ㅜ+ㅔ=ㅞ, ㅜ+ㅣ=ㅟ, ㅡ+ㅣ=ㅢ
- Choseong é necessário. Isso significa que, se
frkfor dado, ou sejaㄹㄱㅏ, pode mudar de duas maneiras:ㄺㅏeㄹ가. Então, você deve convertê-lo de uma maneira que escolheu. Sejjjrjrdado, ou sejaㅓㅓㅓㄱㅓㄱ, os líderesㅓnão têm nada que possa ser escolhido, mas o quartoㅓtemㄱque pode ser escolhido, então é transformado emㅓㅓㅓ걱.
Outro exemplo: 세계( tprP). Pode ser alterado para 섹ㅖ( (ㅅㅔㄱ)(ㅖ)), mas, como é necessário escolher uma opção, ele é alterado para 세계()(ㅅㅔ)(ㄱㅖ) )
Exemplos
entrada 1
안녕하세요
saída 1
dkssudgktpdy
entrada 2
input 2
saída 2
ㅑㅞㅕㅅ 2
entrada 3
힘ㄴㄴ
saída 3
glass
entrada 4
아희(Aheui) is esolang which you can program with pure Korean characters.
saída 4
dkgml(모뎌ㅑ) ㅑㄴ ㄷ내ㅣ뭏 조ㅑ초 ㅛㅐㅕ ㅊ무 ㅔ갷ㄱ므 쟈소 ㅔㅕㄱㄷ ㅏㅐㄱㄷ무 촘ㄱㅁㅊㅅㄷㄱㄴ.
entrada 5
dkssud, tprP!
saída 5
안녕, 세계!
entrada 6
ㅗ디ㅣㅐ, 째깅! Hello, World!
saída 6
hello, World! ㅗ디ㅣㅐ, 째깅!
O menor código vence. (em bytes)
Nova regra para sua conveniência
Você pode descartar caracteres como os Aque não têm seu equivalente no teclado de dois conjuntos. de modo Aheuique Aㅗ뎌ㅑé OK. Mas, se você mudar Aheuipara 모뎌ㅑ, poderá obter -5 pontos e ganhar 5 bytes.
Você pode separar dois jungseongs (como ㅘa ㅗ+ㅏ). gosta rhkde 고ㅏou howpara ㅗㅐㅈ. Mas se você combiná-lo (como rhka 과ou howa ㅙㅈ), você pode ganhar -5 pontos adicionais.
fjfaupoderia ser interpretado como 럶ㅕou 럴며. Como resolvemos isso?
tprPno caso de teste 5: isso se transforma em ㅅㅔㄱㅖ, onde ㅅé umongo escolhido, ㅔé um jungseong e ㄱé um jongseong. Então isso não deveria se transformar em 섷ㅖ(agrupado como (ㅅㅔㄱ)(ㅖ)) em vez de 세계(agrupado como (ㅅㅔ)(ㄱㅖ))? Em um comentário anterior, você afirma que é interpretado digitando, então eu esperaria ㅅㅔㄱme transformar em 섷. Ou o coreano está digitando da direita para a esquerda em vez da esquerda para a direita?
ldepoismlpara o símbolo coreanoㅣ.