Вступление
Это немного похоже на раскладку DVORAK Keyboard , но НАМНОГО сложнее.
Давайте сначала поговорим о корейской клавиатуре. Как вы можете видеть в Википедии , есть ключ Kor / Eng для переключения между корейским и английским наборами ключей.
Корейцы иногда пишут неправильно: они пытаются писать на корейском языке с помощью qwerty-клавиатуры или на английском языке с помощью двухкомпонентной клавиатуры.
Итак, вот в чем проблема: если заданные корейские символы набраны на клавиатуре с двумя наборами, преобразуйте ее в буквенные символы, набранные на клавиатуре qwerty. Если даны буквенные символы, набранные в qwerty, измените его на клавиатуру с двумя наборами.
Клавиатура с двумя наборами
Вот две раскладки клавиатуры:
ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
ㅋㅌㅊㅍㅠㅜㅡ
и с клавишей Shift:
ㅃㅉㄸㄲㅆㅛㅕㅑㅒㅖ
меняется только верхний ряд, а остальные нет.
О корейских персонажах
если это закончится здесь, это может быть легко, но нет. Когда вы печатаете
dkssud, tprP!
вывод не показан таким образом:
ㅇㅏㄴㄴㅕㅇ, ㅅㅔㄱㅖ!
но так:
안녕, 세계!(means Hello, World!)
и это делает вещи намного сложнее.
Корейские символы разделены на три части: «Чосонг (согласный)», «Чунгсон (гласный)» и «Чонсонг (согласный в конце слога: может быть пустым)», и вы должны разделить его.
К счастью, есть способ сделать это.
Как отделить
Есть 19 Choseong, 21 Jungseong и 28 Jongseong (с пробелом), и 0xAC00 - это «가», первый символ корейских символов. Используя это, мы можем разделить корейские символы на три части. Вот порядок каждого и его положение в двух наборах клавиатуры.
выбрал порядок:
ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ
r R s e E f a q Q t T d w W c z x v g
заказ jungseong:
ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ
k o i O j p u P h hk ho hl y n nj np nl b m ml l
заказ 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
Скажем Давайте (unicode value of some character) - 0xAC00
есть Korean_code
, и индекс ЧОСОН, юнсон, Jongseong есть Cho
, Jung
, Jong
.
Тогда Korean_code
это(Cho * 21 * 28) + Jung * 28 + Jong
Вот код JavaScript, который отделяет корейский символ от этого корейского сайта, для вашего удобства.
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]);
Когда собран
- Следует отметить , что
ㅘ
,ㅙ
,ㅚ
,ㅝ
,ㅞ
,ㅟ
,ㅢ
представляет собой сочетание других jungseongs.
ㅗ+ㅏ=ㅘ, ㅗ+ㅐ=ㅙ, ㅗ+ㅣ=ㅚ, ㅜ+ㅓ=ㅝ, ㅜ+ㅔ=ㅞ, ㅜ+ㅣ=ㅟ, ㅡ+ㅣ=ㅢ
- Choseong необходимо. Это означает, что если
frk
дано, то естьㄹㄱㅏ
, оно может измениться двумя способами:ㄺㅏ
иㄹ가
. Затем вы должны преобразовать его в способ, который выбрал. Еслиjjjrjr
дано, то естьㅓㅓㅓㄱㅓㄱ
ведущиеㅓ
s не имеют ничего, что можно выбрать, но четвертоеㅓ
имеетㄱ
то, что можно выбрать, поэтому оно заменено наㅓㅓㅓ걱
.
Другой пример: 세계
( tprP
). Это может быть изменено на 섹ㅖ
( (ㅅㅔㄱ)(ㅖ)
), но так как необходимо выбратьong, оно заменено на 세계
( (ㅅㅔ)(ㄱㅖ)
)
Примеры
вход 1
안녕하세요
выход 1
dkssudgktpdy
вход 2
input 2
выход 2
ㅑㅞㅕㅅ 2
вход 3
힘ㄴㄴ
выход 3
glass
вход 4
아희(Aheui) is esolang which you can program with pure Korean characters.
выход 4
dkgml(모뎌ㅑ) ㅑㄴ ㄷ내ㅣ뭏 조ㅑ초 ㅛㅐㅕ ㅊ무 ㅔ갷ㄱ므 쟈소 ㅔㅕㄱㄷ ㅏㅐㄱㄷ무 촘ㄱㅁㅊㅅㄷㄱㄴ.
вход 5
dkssud, tprP!
выход 5
안녕, 세계!
вход 6
ㅗ디ㅣㅐ, 째깅! Hello, World!
выход 6
hello, World! ㅗ디ㅣㅐ, 째깅!
Самый короткий код выигрывает. (в байтах)
Новое правило для вашего удобства
Вы можете отклонить символы, подобные A
которым не имеют своего аналога в двух наборах клавиатуры. так что все Aheui
в Aㅗ뎌ㅑ
порядке. Но если вы измените Aheui
на 모뎌ㅑ
, вы можете получить -5 баллов, то есть вы можете заработать 5 байтов.
Вы можете выделить два jungseongs (как ㅘ
в ㅗ+ㅏ
). как rhk
к 고ㅏ
, или how
к ㅗㅐㅈ
. Но если объединить его (например , rhk
в 과
или how
на ㅙㅈ
), вы можете заработать дополнительные -5 баллов.
fjfau
можно интерпретировать как 럶ㅕ
или 럴며
. Как мы решаем это?
tprP
в тестовом примере 5: он трансформируется в ㅅㅔㄱㅖ
, где ㅅ
есть selectedong, ㅔ
jungseong и ㄱ
jongseong. Так не должно ли это преобразоваться в 섷ㅖ
(сгруппированные как (ㅅㅔㄱ)(ㅖ)
) вместо 세계
(сгруппированные как (ㅅㅔ)(ㄱㅖ)
)? В более раннем комментарии вы утверждаете, что он интерпретируется путем ввода текста, поэтому я ожидал ㅅㅔㄱ
бы преобразоваться в 섷
. Или корейский печатает справа налево, а не слева направо?
l
послеml
корейского символаㅣ
.