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
frk
for dado, ou sejaㄹㄱㅏ
, pode mudar de duas maneiras:ㄺㅏ
eㄹ가
. Então, você deve convertê-lo de uma maneira que escolheu. Sejjjrjr
dado, 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 A
que não têm seu equivalente no teclado de dois conjuntos. de modo Aheui
que Aㅗ뎌ㅑ
é OK. Mas, se você mudar Aheui
para 모뎌ㅑ
, poderá obter -5 pontos e ganhar 5 bytes.
Você pode separar dois jungseongs (como ㅘ
a ㅗ+ㅏ
). gosta rhk
de 고ㅏ
ou how
para ㅗㅐㅈ
. Mas se você combiná-lo (como rhk
a 과
ou how
a ㅙㅈ
), você pode ganhar -5 pontos adicionais.
fjfau
poderia ser interpretado como 럶ㅕ
ou 럴며
. Como resolvemos isso?
tprP
no 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?
l
depoisml
para o símbolo coreanoㅣ
.