Cel
Biorąc pod uwagę ciąg sylab Hangul, posortuj znaki w północno-koreańskiej słowniku.
Wprowadzenie do sylab Hangul
Hangul (한글) to koreański system pisania wymyślony przez Sejonga Wielkiego. Sylaby Hangul są przydzielane w punkcie Unicode U + AC00 - U + D7A3. Sylaba Hangul składa się z początkowej spółgłoski, samogłoski i opcjonalnej końcowej spółgłoski.
Początkowe spółgłoski to:
ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
Samogłoski to:
ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
Końcowe spółgłoski to:
(none) ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ
Na przykład 뷁
ma początkową spółgłoskę ㅂ
, samogłoskę ㅞ
i końcową spółgłoskę ㄺ
.
Porządek słownika Korei Południowej
Spółgłoski i samogłoski powyżej są posortowane w kolejności w słowniku Korei Południowej. Sylaby są najpierw sortowane według początkowych spółgłosek, następnie według samogłosek, a na końcu (opcjonalnie) spółgłosek spółgłosek.
Blok Unicode dla sylab Hangul zawiera wszystkie kombinacje spółgłoska / samogłoska i jest całkowicie posortowany w kolejności słownikowej w Korei Południowej.
Blok Unicode można zobaczyć tutaj, a pierwsze 256 znaków pokazano w celach ilustracyjnych:
가각 갂 갃간 갅갆 갇갈 갉갊 갋갌 갍갎 갏감 갑값 갓갔 강갖 강갖 갗갘 갛개 갡갢 갣갤 갣갤 갥갦 갧갨 갧갨 갩갪 갫갬 갭갮 갯갰 갱갲 갳갴 갵갶 갷갸 갹갺 갻갼 갻갼 갽갾 갽갾 걁걂 걃걄 걃걄 걇걈 걇걈 걉걊 걋걌 걍걎 걍걎 걏걐 걑걒 걓걔 걓걔 걕걖 걗걘 걙걚 걡걢 걝걞 걝걞 걣걤 걥걦 걧걨 걩걪 걫걬 걭걮 걯거 걱걲 걳건 걵걶 걷걸 걹걺 걹걺 걽걾 걿검 겄겅 겆겇 겆겇 겈겉 겊겋 겊겋 게겍 겎겏 겐겑 겒겓 겔겕 겖겗 겘겙 겚겛 겜겝 겞겟 겞겟 겠겡 겠겡 겤겥 겦겧 겦겧 겨격 겪겫 견겭 견겭 겮겯 결겱 겲겳 겴겵 겴겵 겶겷 겶겷 겺겻 곂곃 겾겿 겾겿 곀곁 겺겻 계곅 곆곇 곈곉 곊곋 곌곍 곎곏 곐곑 곒곓 곔곕 곖곗 곘곙 곚곛 곜곝 곞곟 고곡 곢곣 곤곥 곦곧 골곩 곪곫 곬곭 곮곯 곮곯 곲곳 곴공 곶곷 곸곹 곺곻 곺곻 과 곽 곾곿
Na przykład następujące zdanie (bez spacji i interpunkcji):
키스의고유조건은입술끼리만나야하고특별한기술은필요치않다
jest posortowane do:
건고고기끼나다리만별술술스않야요유은은의입조치키특필하한
W C ++, jeśli łańcuch jest w std::wstring
, powyższe sortowanie jest prostestd::sort
.
Kolejność słowników w Korei Północnej
Słownik Korei Północnej ma inną kolejność spółgłosek / samogłosek.
Początkowe spółgłosek są sortowane w następujący sposób:
ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ ㄲ ㄸ ㅃ ㅆ ㅉ ㅇ
Samogłoski są sortowane w następujący sposób:
ㅏ ㅑ ㅓ ㅕ ㅗ ㅛ ㅜ ㅠ ㅡ ㅣ ㅐ ㅒ ㅔ ㅖ ㅚ ㅟ ㅢ ㅘ ㅝ ㅙ ㅞ
Końcowe spółgłosek są sortowane w następujący sposób:
(none) ㄱ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ ㄲ ㅆ
Podobnie jak South, sylaby są najpierw sortowane według początkowych spółgłosek, następnie według samogłosek, a na końcu (opcjonalnie) spółgłosek spółgłosek.
Jeśli podano powyższe zdanie, wynikiem musi być:
건고고기나다리만별술술스조치키특필하한끼않야요유은은입의
Zasady
Jeśli dane wejściowe zawierają znak spoza U + AC00 - U + D7A3, to nie ma znaczenia .
Ponieważ jest to golfowy kod, wygrywa najkrótszy kod w bajtach.
가까나다따라마바빠사싸아자짜차카타파
(wszystkie spółgłoski początkowe),가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기
(wszystkie samogłosek),가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛
(wszystkie spółgłoski końcowe).Odpowiedzi:
05AB1E ,
474538 bajtówWypróbuj online!
źródło
JavaScript (ES6),
150 148137 bajtówZaoszczędź 10 bajtów dzięki @Grimy
I / O: tablice znaków.
Wypróbuj online!
Dzielenie sylab Hangul
Biorąc pod uwagę znak Hangul o punkcie kodowym 0xAC00 +n , początkowa spółgłoska ja samogłoska V. i ostatnia spółgłoska fa są podawane przez:
Skomentował
źródło
Węgiel drzewny , 80 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Objaśnienie: Działa poprzez wygenerowanie wszystkich 11172 sylab Hangul w kolejności słownikowej w Korei Północnej i sprawdzenie, które z nich są obecne na wejściu (więc wszystkie inne znaki są usuwane; również nieco wolniej: zajmuje 18 sekund na TIO). Wyjaśnienie:
Pętla nad skompresowanym łańcuchem
acdfghjmopqrsbeiknl
. Jest to lista początkowych spółgłosek południowokoreańskich (numerowanych za pomocą zachodniego alfabetu) w kolejności w słowniku północnokoreańskim.Pętla nad skompresowanym łańcuchem
02468cdhik1357bgj9eaf
. Reprezentuje listę samogłosek południowokoreańskich (numerowanych za pomocą cyfr ASCII i małych liter) w kolejności słownikowej w Korei Północnej.Pętla nad skompresowanym łańcuchem
013456789abcdefghijlmnopqr2k
. Jest to lista końcowych spółgłosek południowokoreańskich (wykorzystujących tę samą numerację co samogłoski) w kolejności słownikowej w Korei Północnej.Połącz samogłoskę i ostatnią spółgłoskę i zdekoduj jako podstawową liczbę 28, a następnie dodaj 588 razy początkową samogłoskę i 0xAC00. Wydrukuj wszystkie znaki z danych wejściowych, które mają tę liczbę porządkową.
źródło
\xFF
na stronie kodowej Charcoal.