Северокорейский словарь заказа

9

Цель

Учитывая строку слогов хангыль, сортируйте символы в порядке словаря Северной Кореи.

Введение в слоги хангыль

Хангул (ul) - корейская система письма, изобретенная Седжоном Великим. Слоги хангыль выделяются в точке Unicode U + AC00 - U + D7A3. Слог хангул состоит из начального согласного, гласного и необязательного последнего согласного.

Начальные согласные:

ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ

Гласные:

ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ

Финальные согласные:

(none) ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ

Например, имеет начальную согласную , гласную и конечную согласную .

Южнокорейский словарь заказа

Согласные и гласные выше отсортированы в южнокорейском порядке словаря. Слоги в первую очередь сортируются по начальным согласным, во-вторых, по гласным и, наконец, (по желанию) по заключительным согласным.

Блок Unicode для слогов хангыль содержит все сочетания согласных и гласных и полностью отсортирован в южнокорейском словаре.

Здесь можно увидеть блок Unicode , и первые 256 символов показаны для наглядности:

가각 갂 갃간 갅갆 갇갈 갉갊 갋갌 갍갎 갏감 갑값 갓갔 강갖 갗갘 같갚 갛개 객갞 갟갠 갡갢 갣갤 갥갦 갧갨 갩갪 갫갬 갭갮 갯갰 갱갲 갳갴 갵갶 갷갸 갹갺 갻갼 갽갾 갿걀 걁걂 걃걄 걅걆 걇걈 걉걊 걋걌 걍걎 걏걐 걑걒 걓걔 걕걖 걗걘 걙걚 걛걜 걝걞 걟걠 걡걢 걣걤 걥걦 걧걨 걩걪 걫걬 걭걮 걯거 걱걲 걳건 걵걶 걷걸 걹걺 걻걼 걽걾 걿검 겁겂 것 겄겅 겆겇 겈겉 겊겋 게겍 겎겏 겐겑 겒겓 겔겕 겖겗 겘겙 겚겛 겜겝 겞겟 겠겡 겢겣 겤겥 겦겧 겨격 겪겫 견겭 겮겯 결겱 겲겳 겴겵 겶겷 겸겹 겺겻 겼경 겾겿 곀곁 곂곃 계곅 곆곇 곈곉 곊곋 곌곍 곎곏 곐곑 곒곓 곔곕 곖곗 곘곙 곚곛 곜곝 곞곟 고곡 곢곣 곤곥 곦곧 골곩 곪곫 곬곭 곮곯 곰곱 곲곳 곴공 곶곷 곸곹 곺곻 과 곽 곾곿

Например, следующее предложение (без пробелов и знаков препинания):

키스의고유조건은입술끼리만나야하고특별한기술은필요치않다

сортируется по:

건고고기끼나다리만별술술스않야요유은은의입조치키특필하한

В C ++, если строка в std::wstring, сортировка выше проста std::sort.

Северокорейский словарь заказа

Северокорейский словарь имеет другой порядок согласных / гласных.

Начальные согласные сортируются как:

ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ ㄲ ㄸ ㅃ ㅆ ㅉ ㅇ

Гласные сортируются как:

ㅏ ㅑ ㅓ ㅕ ㅗ ㅛ ㅜ ㅠ ㅡ ㅣ ㅐ ㅒ ㅔ ㅖ ㅚ ㅟ ㅢ ㅘ ㅝ ㅙ ㅞ

Окончательные согласные сортируются как:

(none) ㄱ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ ㄲ ㅆ

Как и на юге, слоги сначала сортируются по начальным согласным, во-вторых по гласным и, наконец, (по желанию) по последним согласным.

Если приведено предложение выше, вывод должен быть:

건고고기나다리만별술술스조치키특필하한끼않야요유은은입의

правила

  1. Если ввод содержит символ не в пределах U + AC00 - U + D7A3, он попадает в безразличную ситуацию.

  2. Поскольку это код-гольф, выигрывает самый короткий код в байтах.

Dannyu NDos
источник
Если это имеет смысл, я бы предложил добавить контрольный пример, в котором символы сортируются по-разному исключительно из-за конечного согласного (используя ㄲ или ㅆ с одинаковым начальным согласным и одним и тем же гласным).
Арно
(Вообще говоря, было бы здорово добавить еще несколько тестовых случаев.)
Арно
Предлагаемые тестовые случаи: 가까나다따라마바빠사싸아자짜차카타파(все начальные согласные), 가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기(все гласные), 가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛(все завершающие согласные).
Гримми
1
Ну, так много для этого ... 86 различных корейских SQL-сопоставлений; все они сортируются в «южнокорейской» манере. Хороший (сложный) вопрос.
BradC

Ответы:

1

05AB1E , 47 45 38 байт

Σ•¡®šúIтÝ„Š’#„λ†x!·“•4B33¡€.ā`ââyÇ68+è

Попробуйте онлайн!

Σ                        # sort characters of the input by:
 •...•                   #  compressed integer 13096252834522000035292405913882127943177557
      4B                 #  converted to base 4: 211211121231211111033010101010231002310010331121111111111111111121111111
        33¡              #  split on 33: [2112111212312111110, 010101010231002310010, 1121111111111111111121111111]
           €.ā           #  enumerate each (pairs each digit with its index)
              `ââ        #  reduce by cartesian product (yields a list with 11172 elements)
                 yÇ      #  codepoint of the current character
                   68+   #  + 68
                      è  #  index into the large list (with wraparound)
Grimmy
источник
7

JavaScript (ES6),  150 148  137 байт

Сохранено 10 байтов благодаря @Grimy

I / O: массивы символов.

a=>a.map(c=>"ANBCODEFPGQSHRIJKLM"[(n=c.charCodeAt()-44032)/588|0]+"AKBLCMDNERTOFGSUPHIQJ"[n/28%21|0]+~(n%28%18==2)+c).sort().map(s=>s[4])

Попробуйте онлайн!

Расщепление слогов хангыль

Дан символ хангул кодовой точки 0xAC00 + N, начальная согласная я, гласный звук В и последний согласный F предоставляются:

язнак равноN588, Взнак равноN28модификация21, Fзнак равноNмодификация28

комментарии

a => a.map(c =>                  // for each character c in the input:
  "ANBCODEFPGQSHRIJKLM"[         //   start with a letter from 'A' to 'S'
    (n = c.charCodeAt() - 44032) //   for the initial consonant
    / 588 | 0                    //
  ] +                            //
  "AKBLCMDNERTOFGSUPHIQJ"[       //   append a letter from 'A' to 'U'
    n / 28 % 21 | 0              //   for the vowel
  ] +                            //
  ~(                             //   append "-2" for ㄲ or ㅆ (the only North
    n % 28 % 18 == 2             //   Korean final consonants that are sorted
  ) +                            //   differently) or "-1" otherwise
  c                              //   append the original character
)                                // end of map()
.sort()                          // sort in lexicographical order
.map(s => s[4])                  // isolate the original characters
Arnauld
источник
1

Древесный уголь , 80 байтов

F”&→∧⁶⍘⎚%γD¦ρJG”F”E⎇↓Nη⊙��⭆Ws@}4”F”E↖hY9 t⟧⊙γIO↶5ε∧¬⁶⦃”Φθ⁼℅μΣ⟦⁴⁴⁰³²×⌕βι⁵⁸⁸⍘⁺κλ²⁸

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение: Работает путем генерации всех слогов 11172 хангыльского языка в порядке северокорейского словаря и проверки того, какие из них присутствуют во входных данных (поэтому все другие символы удаляются; также несколько медленно: занимает 18 секунд на TIO). Объяснение:

F”&→∧⁶⍘⎚%γD¦ρJG”

Цикл над сжатой строкой acdfghjmopqrsbeiknl. Это представляет список исходных согласных в Южной Корее (пронумерованных с использованием западного строчного алфавита) в порядке словаря Северной Кореи.

F”E⎇↓Nη⊙��⭆Ws@}4”

Цикл над сжатой строкой 02468cdhik1357bgj9eaf. Это представляет список южнокорейских гласных (пронумерованных с использованием цифр ASCII и строчных букв) в порядке словаря Северной Кореи.

F”E↖hY9 t⟧⊙γIO↶5ε∧¬⁶⦃”

Цикл над сжатой строкой 013456789abcdefghijlmnopqr2k. Это представляет список южнокорейских окончательных согласных (используя ту же нумерацию, что и гласные) в порядке словаря в Северной Корее.

Φθ⁼℅μΣ⟦⁴⁴⁰³²×⌕βι⁵⁸⁸⍘⁺κλ²⁸

Объедините гласный и последний согласный и расшифруйте как базовое число 28, затем добавьте 588 раз начальный гласный и 0xAC00. Выведите все символы из входных данных, которые имеют это как их порядковый номер.

Нил
источник
Являются ли символы замены допустимым синтаксисом?
Dannyu NDos
@DannyuNDos Представляет значение байта \xFFв кодовой странице Charcoal.
Нил