ลำดับพจนานุกรมภาษาเกาหลีเหนือ


9

วัตถุประสงค์

ระบุสตริงของพยางค์อังกูลเรียงลำดับตัวอักษรตามลำดับพจนานุกรมของเกาหลีเหนือ

พยางค์อังกูลเบื้องต้น

อังกูล (한글) เป็นระบบการเขียนภาษาเกาหลีที่คิดค้นโดย Sejong the Great พยางค์ฮันกึลได้รับการจัดสรรในจุด Unicode U + AC00 - U + D7A3 พยางค์อังกูลประกอบด้วยพยัญชนะเริ่มต้นสระและพยัญชนะตัวสุดท้าย

พยัญชนะเริ่มต้นคือ:

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

เสียงสระคือ:

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

พยัญชนะสุดท้ายคือ:

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

ตัวอย่างเช่นมีพยัญชนะเริ่มต้นสระและพยัญชนะสุดท้าย

คำสั่งพจนานุกรมของเกาหลีใต้

พยัญชนะและสระข้างต้นเรียงตามพจนานุกรมของเกาหลีใต้ พยางค์จะถูกจัดเรียงตามพยัญชนะเริ่มต้นอันดับที่สองโดยเสียงสระและท้ายที่สุดโดยพยัญชนะตัวสุดท้าย

บล็อก Unicode สำหรับพยางค์ฮันกึลประกอบด้วยชุดพยัญชนะ / สระทุกตัวและเรียงลำดับตามพจนานุกรมของเกาหลีใต้ทั้งหมด

บล็อก Unicode สามารถดูได้ที่นี่และแสดงอักขระ 256 ตัวแรกเพื่อจุดประสงค์:

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

ตัวอย่างเช่นประโยคต่อไปนี้ (ไม่มีช่องว่างและเครื่องหมายวรรคตอน):

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

เรียงลำดับเป็น:

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

ใน C ++ ถ้าสตริงที่อยู่ในการเรียงลำดับข้างต้นเป็นธรรมดาstd::wstringstd::sort

ลำดับพจนานุกรมภาษาเกาหลีเหนือ

พจนานุกรมเกาหลีเหนือมีลำดับพยัญชนะ / สระที่แตกต่างกัน

พยัญชนะเริ่มต้นเรียงตาม:

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

เสียงสระเรียงลำดับดังนี้:

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

พยัญชนะสุดท้ายเรียงตาม:

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

เช่นเดียวกับภาคใต้พยางค์จะถูกจัดเรียงตามพยัญชนะเริ่มต้นรองจากสระและท้ายที่สุดโดยพยัญชนะสุดท้าย

หากได้รับประโยคข้างต้นผลลัพธ์จะต้อง:

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

กฎระเบียบ

  1. หากอินพุตมีอักขระที่ไม่ใช่ภายใน U + AC00 - U + D7A3 ข้อมูลนั้นจะตกอยู่ในสถานการณ์ที่ไม่สนใจ

  2. เช่นนี้เป็นรหัสกอล์ฟรหัสที่สั้นที่สุดเป็นไบต์ชนะ


ที่เกี่ยวข้องบางส่วน
Arnauld

ถ้าเป็นไปได้ผมขอแนะนำให้เพิ่มกรณีทดสอบที่ตัวอักขระถูกเรียงต่างกันเนื่องจากพยัญชนะสุดท้ายโดยเฉพาะ (ใช้ㄲหรือㅆกับพยัญชนะเริ่มต้นเดียวกันและสระเสียงเดียวกัน)
Arnauld

(โดยทั่วไปแล้วการพูดเพิ่มอีกสองสามกรณีทดสอบจะดีมาก)
Arnauld

กรณีทดสอบที่แนะนำ: 가까나다따라마바빠사싸아자짜차카타파(พยัญชนะเริ่มต้นทั้งหมด), 가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기(สระทั้งหมด), 가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛(พยัญชนะท้ายทั้งหมด)
Grimmy

1
ทีนี้มากสำหรับ ... การเปรียบเทียบ SQL ภาษาเกาหลี 86 ครั้ง; ทั้งหมดจัดเรียงในลักษณะ "เกาหลีใต้" คำถามที่ดี (ยาก)
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

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พยัญชนะต้น 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 ทั้งหมดในลำดับพจนานุกรมภาษาเกาหลีเหนือและตรวจสอบเพื่อดูว่ามีตัวอักษรใดอยู่ในอินพุต คำอธิบาย:

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
Neil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.