El objetivo
Dada una cadena de sílabas de Hangul, ordena los caracteres en el orden de los diccionarios de Corea del Norte.
Introducción a las sílabas de Hangul
Hangul (한글) es el sistema de escritura coreano inventado por Sejong el Grande. Las sílabas de Hangul se asignan en el punto Unicode U + AC00 - U + D7A3. Una sílaba Hangul consiste en una consonante inicial, una vocal y una consonante final opcional.
Las consonantes iniciales son:
ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
Las vocales son:
ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
Las consonantes finales son:
(none) ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ
Por ejemplo, 뷁
tiene consonante inicial ㅂ
, vocal ㅞ
y consonante final ㄺ
.
Orden de diccionario de Corea del Sur
Las consonantes y vocales anteriores están ordenadas en el orden del diccionario de Corea del Sur. Las sílabas se ordenan primero por consonantes iniciales, luego por vocales y finalmente por consonantes finales (opcionales).
El bloque Unicode para las sílabas de Hangul contiene todas las combinaciones de consonantes / vocales, y está completamente ordenado en el orden del diccionario de Corea del Sur.
El bloque Unicode se puede ver aquí, y los primeros 256 caracteres se muestran con fines ilustrativos:
가각 갂 갃간 갅갆 갇갈 갉갊 갋갌 갍갎 갏감 갑값 갓갔 강갖 갗갘 같갚 갛개 객갞 갟갠 갡갢 갣갤 갥갦 갧갨 갩갪 갫갬 갭갮 갯갰 갱갲 갳갴 갵갶 갷갸 갹갺 갻갼 갽갾 갿걀 걁걂 걃걄 걅걆 걇걈 걉걊 걋걌 걍걎 걏걐 걑걒 걓걔 걕걖 걗걘 걙걚 걛걜 걝걞 걟걠 걙걚 걣걤 걥걦 걧걨 걩걪 걫걬 걭걮 걯거 걱걲 걳건 걵걶 걷걸 걹걺 걻걼 걽걾 걿검 겁겂 것 겄겅 겆겇 겈겉 겊겋 게겍 겎겏 겐겑 겒겓 겔겕 겖겗 겘겙 겚겛 겜겝 겞겟 겠겡 겢겣 겤겥 겦겧 겨격 겪겫 견겭 겮겯 결겱 겲겳 겴겵 겶겷 겸겹 겺겻 겼경 겾겿 곀곁 곂곃 겼경 계곅 곆곇 곈곉 곊곋 곌곍 곎곏 곐곑 곒곓 곔곕 곖곗 곘곙 곚곛 곜곝 곞곟 고곡 곢곣 곤곥 곦곧 골곩 곪곫 곬곭 곮곯 곰곱 곲곳 곴공 곶곷 곸곹 곺곻 과 곽 곾곿
Por ejemplo, la siguiente oración (sin espacios y signos de puntuación):
키스의고유조건은입술끼리만나야하고특별한기술은필요치않다
se ordena a:
건고고기끼나다리만별술술스않야요유은은의입조치키특필하한
En C ++, si la cadena está dentro std::wstring
, la clasificación anterior es simple std::sort
.
Orden del diccionario norcoreano
El diccionario de Corea del Norte tiene diferente orden de consonantes / vocales.
Las consonantes iniciales se ordenan como:
ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ ㄲ ㄸ ㅃ ㅆ ㅉ ㅇ
Las vocales se ordenan como:
ㅏ ㅑ ㅓ ㅕ ㅗ ㅛ ㅜ ㅠ ㅡ ㅣ ㅐ ㅒ ㅔ ㅖ ㅚ ㅟ ㅢ ㅘ ㅝ ㅙ ㅞ
Las consonantes finales se ordenan como:
(none) ㄱ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ ㄲ ㅆ
Al igual que South, las sílabas se ordenan primero por consonantes iniciales, luego por vocales y finalmente por consonantes finales (opcionales).
Si se da la oración anterior, la salida debe ser:
건고고기나다리만별술술스조치키특필하한끼않야요유은은입의
Reglas
Si la entrada contiene un carácter que no está dentro de U + AC00 - U + D7A3, cae en una situación de no importa .
Como se trata de un código de golf, gana el código más corto en bytes.
가까나다따라마바빠사싸아자짜차카타파
(todas las consonantes iniciales),가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기
(todas las vocales),가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛
(todas las consonantes finales).Respuestas:
05AB1E ,
474538 bytesPruébalo en línea!
fuente
JavaScript (ES6),
150 148137 bytesGuardado 10 bytes gracias a @Grimy
I / O: matrices de caracteres.
Pruébalo en línea!
División de sílabas Hangul
Comentado
fuente
Carbón , 80 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación: Funciona generando todas las sílabas Hangul 11172 en el orden de los diccionarios de Corea del Norte y verificando cuáles están presentes en la entrada (por lo que todos los demás caracteres se eliminan; también algo lento: toma 18 segundos en TIO). Explicación:
Pase sobre la cuerda comprimida
acdfghjmopqrsbeiknl
. Esto representa la lista de consonantes iniciales de Corea del Sur (numeradas usando el alfabeto en minúscula occidental) en el orden de los diccionarios de Corea del Norte.Pase sobre la cuerda comprimida
02468cdhik1357bgj9eaf
. Esto representa la lista de vocales de Corea del Sur (numeradas usando dígitos ASCII y alfabeto en minúsculas) en el orden del diccionario de Corea del Norte.Pase sobre la cuerda comprimida
013456789abcdefghijlmnopqr2k
. Esto representa la lista de consonantes finales de Corea del Sur (usando la misma numeración que las vocales) en el orden de los diccionarios de Corea del Norte.Concatene la vocal y la consonante final y decodifique como un número base 28, luego agregue 588 veces la vocal inicial y 0xAC00. Imprima todos los caracteres de la entrada que tienen eso como su ordinal.
fuente
\xFF
en la página de códigos de Charcoal.