北朝鮮の辞書順


9

目的

ハングル音節の文字列を指定して、文字を北朝鮮の辞書順にソートします。

ハングル音節の紹介

ハングル(한글)は、世宗大王によって発明された韓国語の書記体系です。ハングル音節は、UnicodeポイントU + AC00 – U + D7A3で割り当てられます。ハングル音節は、最初の子音、母音、およびオプションの最後の子音で構成されます。

最初の子音は次のとおりです。

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

母音は次のとおりです。

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

最終的な子音は次のとおりです。

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

たとえば、には最初の子音、母音、最後の子音があります。

韓国語辞書順

上記の子音と母音は、韓国語の辞書順にソートされています。音節は、最初に最初の子音で、2番目に母音で、最後に(オプションの)最終子音でソートされます。

ハングル音節のUnicodeブロックには、すべての子音/母音の組み合わせが含まれており、完全に韓国語の辞書順にソートされています。

Unicodeブロックはここにあり、最初の256文字は説明のために表示されています。

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

たとえば、次の文(スペースと句読点なし):

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

並べ替え:

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

C ++では、文字列がの場合、std::wstring上記の並べ替えは単純std::sortです。

北朝鮮の辞書順

北朝鮮の辞書は、子音/母音の順序が異なります。

最初の子音は次のようにソートされます。

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

母音は次のようにソートされます。

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

最終的な子音は次のようにソートされます。

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

南と同様に、音節は最初に最初の子音で、2番目に母音で、最後に(オプションの)最終子音でソートされます。

上記の文が与えられた場合、出力は次のようになります。

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

ルール

  1. 入力にU + AC00〜U + D7A3内にない文字が含まれている場合、それはドントケア状態になります。

  2. これはコードゴルフなので、バイト単位の最も短いコードが優先されます。



それが理にかなっている場合は、最後の子音だけが原因で文字が異なる方法でソートされるテストケースを追加することをお勧めします(同じ最初の子音と同じ母音でㄲまたはㅆを使用)。
アーノールド、

(より一般的に言えば、さらにいくつかのテストケースを追加するのは素晴らしいことです。)
Arnauld

推奨されるテストケース:(가까나다따라마바빠사싸아자짜차카타파すべての最初の子音)、가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기(すべての母音)、가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛(すべての後続の子音)。
Grimmy

1
ええと、それだけです... 86種類の韓国語SQL照合。それらはすべて「韓国語」の方法でソートされます。いい質問ですね。
BradC

回答:


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])

オンラインでお試しください!

ハングル音節の分割

VF

=588 V=28モッド21 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の数値としてデコードしてから、最初の母音と0xAC00の588倍を追加します。それを序数とする入力からのすべての文字を出力します。


置換文字は有効な構文ですか?
Dannyu NDos

@DannyuNDos \xFFCharcoalのコードページのバイト値を表します。
ニール、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.