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) - 0xAC00es Korean_code, y el índice de choseong, Jungseong, Jongseong es Cho, Jung, Jong.
Entonces, Korean_codees(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
frkse da, es decirㄹㄱㅏ, puede cambiar de dos maneras:ㄺㅏyㄹ가. Luego, debe convertirlo de una manera que haya elegido. Sijjjrjrdada, 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 Aque no tienen su contraparte en el teclado de dos conjuntos. así Aheuique Aㅗ뎌ㅑestá bien. Pero, si cambia Aheuia 모뎌ㅑ, puede obtener -5 puntos, por lo que puede ganar 5 bytes.
Se pueden separar dos jungseongs (como ㅘa ㅗ+ㅏ). al igual rhkque 고ㅏ, o howa ㅗㅐㅈ. Pero si se combina (como rhkal 과o howa ㅙㅈ), usted puede ganar -5 puntos adicionales.
fjfaupodría interpretarse como 럶ㅕo 럴며. ¿Cómo resolvemos esto?
tprPen 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?
lposteriormlpara el símbolo coreanoㅣ.