Introducción
Es algo así como el diseño del teclado DVORAK , pero MUCHO más difícil.
Hablemos primero del teclado coreano. Como puede ver en Wikipedia , hay una clave Kor / Eng para cambiar entre conjuntos de claves coreano e inglés.
Los coreanos a veces escriben mal: intentan escribir en coreano en un teclado qwerty o en inglés en un teclado de dos juegos.
Entonces, aquí está el problema: si se dan caracteres coreanos escritos en un teclado de dos juegos, conviértalos a caracteres alfabéticos escritos en el teclado qwerty. Si se le dan caracteres alfabéticos escritos en qwerty, cámbielo a teclado de dos juegos.
Teclado de dos juegos
Aquí está la distribución del teclado de dos conjuntos:
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
ㅋㅌㅊㅍㅠㅜㅡ
y con la tecla shift:
ㅃㅉㄸㄲㅆㅛㅕㅑㅒㅖ
solo la fila superior cambia mientras que las otras no.
Sobre caracteres coreanos
si terminara aquí, podría ser fácil, pero no. Cuando escribes
dkssud, tprP!
la salida no se muestra de esta manera:
ㅇㅏㄴㄴㅕㅇ, ㅅㅔㄱㅖ!
pero de esta manera:
안녕, 세계!(means Hello, World!)
y hace las cosas mucho más difíciles.
Los caracteres coreanos se separan en tres partes: 'Choseong (consonante)', 'Jungseong (Vocal)' y 'Jongseong (consonante al final de la sílaba: puede estar en blanco)', y debe separarlo.
Afortunadamente, hay forma de hacerlo.
Cómo separar
Hay 19 Choseong, 21 Jungseong y 28 Jongseong (en blanco), y 0xAC00 es '가', primer carácter de los caracteres coreanos. Con esto, podemos separar los caracteres coreanos en tres partes. Aquí está el orden de cada uno y su posición en el teclado de dos juegos.
Elige un pedido:
ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ
r R s e E f a q Q t T d w W c z x v g
orden de jungseong:
ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ
k o i O j p u P h hk ho hl y n nj np nl b m ml l
orden de 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
Digamos Vamos (unicode value of some character) - 0xAC00
es Korean_code
, y el índice de choseong, Jungseong, Jongseong es Cho
, Jung
, Jong
.
Entonces, Korean_code
es(Cho * 21 * 28) + Jung * 28 + Jong
Aquí está el código javascript que separa el carácter coreano de este sitio web coreano, para su conveniencia.
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]);
Cuando se ensambla
- Tenga en cuenta que
ㅘ
,ㅙ
,ㅚ
,ㅝ
,ㅞ
,ㅟ
,ㅢ
es una combinación de otros jungseongs.
ㅗ+ㅏ=ㅘ, ㅗ+ㅐ=ㅙ, ㅗ+ㅣ=ㅚ, ㅜ+ㅓ=ㅝ, ㅜ+ㅔ=ㅞ, ㅜ+ㅣ=ㅟ, ㅡ+ㅣ=ㅢ
- Choseong es necesario. Eso significa que, si
frk
se da, es decirㄹㄱㅏ
, puede cambiar de dos maneras:ㄺㅏ
yㄹ가
. Luego, debe convertirlo de una manera que haya elegido. Sijjjrjr
dada, que esㅓㅓㅓㄱㅓㄱ
, que conducenㅓ
s no tienen nada que pueda ser CHOSEONG, pero el cuartoㅓ
tieneㄱ
que se puede CHOSEONG, por lo que se transforma enㅓㅓㅓ걱
.
Otro ejemplo: 세계
( tprP
). Se puede cambiar a 섹ㅖ
( (ㅅㅔㄱ)(ㅖ)
), pero debido a que elegirong es necesario, se cambia a 세계
( (ㅅㅔ)(ㄱㅖ)
)
Ejemplos
entrada 1
안녕하세요
salida 1
dkssudgktpdy
entrada 2
input 2
salida 2
ㅑㅞㅕㅅ 2
entrada 3
힘ㄴㄴ
salida 3
glass
entrada 4
아희(Aheui) is esolang which you can program with pure Korean characters.
salida 4
dkgml(모뎌ㅑ) ㅑㄴ ㄷ내ㅣ뭏 조ㅑ초 ㅛㅐㅕ ㅊ무 ㅔ갷ㄱ므 쟈소 ㅔㅕㄱㄷ ㅏㅐㄱㄷ무 촘ㄱㅁㅊㅅㄷㄱㄴ.
entrada 5
dkssud, tprP!
salida 5
안녕, 세계!
entrada 6
ㅗ디ㅣㅐ, 째깅! Hello, World!
salida 6
hello, World! ㅗ디ㅣㅐ, 째깅!
El código más corto gana. (en bytes)
Nueva regla para tu conveniencia
Puede descartar caracteres como los A
que no tienen su contraparte en el teclado de dos conjuntos. así Aheui
que Aㅗ뎌ㅑ
está bien. Pero, si cambia Aheui
a 모뎌ㅑ
, puede obtener -5 puntos, por lo que puede ganar 5 bytes.
Se pueden separar dos jungseongs (como ㅘ
a ㅗ+ㅏ
). al igual rhk
que 고ㅏ
, o how
a ㅗㅐㅈ
. Pero si se combina (como rhk
al 과
o how
a ㅙㅈ
), usted puede ganar -5 puntos adicionales.
fjfau
podría interpretarse como 럶ㅕ
o 럴며
. ¿Cómo resolvemos esto?
tprP
en el caso de prueba 5: esto se transforma en ㅅㅔㄱㅖ
, donde ㅅ
es un elegido, ㅔ
es un jungseong y ㄱ
es un jongseong. Entonces, ¿no debería transformarse esto en 섷ㅖ
(agrupado como (ㅅㅔㄱ)(ㅖ)
) en lugar de 세계
(agrupado como (ㅅㅔ)(ㄱㅖ)
)? En un comentario anterior, usted afirma que se interpreta escribiendo, por lo que esperaría ㅅㅔㄱ
transformarme en 섷
. ¿O el coreano está escribiendo de derecha a izquierda en lugar de izquierda a derecha?
l
posteriorml
para el símbolo coreanoㅣ
.