북한 사전 순서


9

목표

한글 음절 문자열이 제공되면 북한 사전 순서대로 문자를 정렬하십시오.

한글 음절 소개

한글 (한글)은 세종대왕이 발명 한 한국어 작문 체계입니다. 한글 음절은 유니 코드 포인트 U + AC00 – U + D7A3에 할당됩니다. 한글 음절은 초기 자음, 모음 및 선택적인 자음으로 구성됩니다.

초기 자음은 다음과 같습니다.

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

모음은 다음과 같습니다.

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

마지막 자음은 다음과 같습니다.

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

예를 들어, 초기 자음 , 모음 및 마지막 자음이 있습니다.

한국 사전 순서

위의 자음과 모음은 한국어 사전 순서로 정렬되어 있습니다. 음절은 먼저 초기 자음, 두 번째 모음, 마지막으로 (선택적) 최종 자음으로 정렬됩니다.

한글 음절의 유니 코드 블록에는 모든 자음 / 모음 조합이 포함되어 있으며 한국어 사전 순서로 완전히 정렬되어 있습니다.

유니 코드 블록은 여기에서 볼 수 있으며 설명을 위해 처음 256자가 표시됩니다.

가각 버퍼 갃 간갅 갆끔 갈갈 겁 거걱 걲걳 건걵 걶걷 걸걹 걺걻 걼걽 걾걿 검정적인 공포증 계곅 곆곇 곈곉 곊곋 곌곍 곎곏 곐곑 곒곓 곔곕 곖곗 곘곙 곚곛 곜곝 곞곟 고곡 곢곣 곤곥 곦곧 골곩 곪곫 곬곭 곮곯 곰곱 곲곳 곴공 곶곷 곸곹 곺곻과 곽 곾곿

예를 들어, 다음 문장 (공백과 문장 부호 제외) :

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

다음과 같이 정렬됩니다.

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

C ++에서 문자열이 in std::wstring이면 위의 정렬은 plain std::sort입니다.

북한 사전 순서

북한 사전은 자음 / 모음 순서가 다릅니다.

초기 자음은 다음과 같이 정렬됩니다.

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

모음은 다음과 같이 정렬됩니다.

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

마지막 자음은 다음과 같이 정렬됩니다.

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

South와 마찬가지로 음절은 첫 자음, 두 번째 모음, 마지막으로 (선택적) 최종 자음으로 정렬됩니다.

위의 문장이 제공되면 출력은 다음과 같아야합니다.

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

규칙

  1. 입력에 U + AC00 – U + D7A3 내에없는 문자가 포함되어 있으면 상관하지 않습니다 .

  2. 이것이 코드 골프이므로 바이트 단위의 가장 짧은 코드가 이깁니다.



이것이 의미가 있다면 최종 자음 때문에 문자가 다르게 정렬되는 테스트 사례를 추가하는 것이 좋습니다 (동일한 초기 자음과 같은 모음으로 ㄲ 또는 ㅆ 사용).
Arnauld '

(보다 일반적으로 말하면 테스트 사례를 몇 개 더 추가하는 것이 좋습니다.)
Arnauld

제안 된 테스트 사례 : 가까나다따라마바빠사싸아자짜차카타파(모든 초기 자음), 가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기(모든 모음), 가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛(후행 자음).
Grimmy

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)

7

자바 스크립트 (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 +의 한글 문자가 주어짐 n초기 자음 I모음 V 마지막 자음 F 에 의해 주어진다 :

I=n588, V=n28mod21, F=nmod28

댓글

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 숫자로 디코딩 한 다음 초기 모음과 5xAC00을 588 배 더합니다. 해당 문자를 서수로 입력에서 모든 문자를 인쇄하십시오.


대체 문자가 유효한 구문입니까?
Dannyu NDos

@DannyuNDos \xFFCharcoal의 코드 페이지에서 바이트 값 을 나타냅니다 .
Neil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.