朝鲜语字典顺序


9

目标

给定一串韩文音节,按朝鲜语字典顺序对字符进行排序。

韩文音节简介

朝鲜文(한글)是世宗大王发明的朝鲜文书写系统。韩文音节分配在Unicode点U + AC00 – U + D7A3中。韩文音节由初始辅音,元音和可选的最终辅音组成。

初始辅音为:

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

元音是:

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

最后的辅音是:

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

例如,具有初始辅音,元音和最终辅音

韩国字典顺序

上面的辅音和元音按韩国字典顺序排序。音节首先按初始辅音排序,其次按元音排序,最后按(可选)最终辅音排序。

韩文音节的Unicode块包含每个辅音/元音组合,并且完全按照韩国字典顺序排序。

可以在此处看到Unicode块并且出于说明目的显示了前256个字符:

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

例如,以下句子(不带空格和标点符号):

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

排序为:

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

在C ++中,如果字符串在其中std::wstring,则上面的排序是简单的std::sort

朝鲜语字典顺序

朝鲜语字典的辅音/元音顺序不同。

初始辅音的排序方式如下:

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

元音的排序方式如下:

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

最终的辅音排序如下:

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

像South一样,音节首先按初始辅音排序,其次按元音排序,最后按(可选)最终辅音排序。

如果给出了以上句子,则输出必须为:

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

规则

  1. 如果输入的字符不在U + AC00 – U + D7A3之内,则属于无关位

  2. 由于这是一个代码高尔夫球,因此以字节为单位的最短代码为准。



如果这是有道理的,我建议添加一个测试用例,其中的字符仅根据最终辅音(使用ㄲ或ㅆ具有相同的初始辅音和相同的元音)进行不同的排序。
阿纳尔德

(更笼统地说,添加更多的测试用例会很好。)
Arnauld

建议的测试用例:(가까나다따라마바빠사싸아자짜차카타파所有初始辅音),가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기(所有元音),가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛(所有尾随辅音)。
Grimmy

1
好吧,那么多... 86种不同的韩文SQL排序规则;它们全部以“韩国”方式排序。好的(艰难的)问题。
BradC

Answers:


1

05AB1E47 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)

7

的JavaScript(ES6), 150个148  137字节

@Grimy节省了10个字节

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的韩文字符+ ñ,初始辅音 一世元音 V 最后的辅音 F 由:

一世=ñ588 V=ñ2821 F=ñ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

1

木炭,80字节

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

在线尝试!链接是详细版本的代码。说明:通过按朝鲜语字典顺序生成所有11172个韩文音节并检查输入中存在哪些音节来工作(因此所有其他字符都被删除;也有些慢:在TIO上花费18秒)。说明:

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木炭代码页中的字节值。
尼尔,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.