ゼリー、296264バイト
Ẏœṣjƭƒ
“ȮdȥŒ~ṙ7Ṗ:4Ȧịعʂ ="÷Ƥi-ẓdµ£f§ñỌ¥ẋaḣc~Ṡd1ÄḅQ¥_æ>VÑʠ|⁵Ċ³(Ė8ịẋs|Ṇdɼ⁼:Œẓİ,ḃṙɠX’ṃØẠs2ḟ€”A
“|zƒẉ“®6ẎẈ3°Ɠ“⁸)Ƙ¿’ḃ2’T€ị¢
¢ĖẈṪ$ÞṚƊ€
3£OŻ€3¦ŒpFḟ0Ɗ€J+“Ḥœ’,ƲyO2£OJ+⁽.[,Ʋ¤y¹ỌŒḊ?€µ¢ṖŒpZF€’ḋ588,28+“Ḥþ’Ʋ0;,ʋ/ṚƲ€ñṣ0ḊḢ+®Ṫ¤Ɗ;ṫ®$Ɗ¹Ḋ;⁶Ṫ⁼ṁ@¥¥Ƈ@¢ṪẈṪ‘;Ʋ€¤ḢƲ©?€ṭḢƲF2£żJ+⁽.[Ɗ$ẈṪ$ÞṚ¤ñỌ
オンラインでお試しください!
引数として文字列を取り、文字列を返す完全なプログラム(暗黙的に印刷されます)。これは3つのパスで機能します。最初に、すべての韓国語文字をラテン文字のコードポイントのリストに変換します。次に、複合韓国語文字を識別して構築します。最後に、残りの迷いラテン文字を韓国語の対応するものに変えます。仕様に含まれていない他の文字やラテン文字(例:)A
はそのまま残されます。
仕様外の大文字の小文字への変換が必要な場合、これは追加の10バイトのコストで実行できます。
説明
ヘルパーリンク1:引数xおよびyを使用したダイアディックリンク。xは、検索と置換のサブリストのペアのリストです。yは、各検索サブリストを対応する置換サブリストに置き換えます
Ẏ | Tighten (reduce to a single list of alternating search and replace sublists)
ƒ | Reduce using y as starting argument and the following link:
ƭ | - Alternate between using the following two links:
œṣ | - Split at sublist
j | - Join using sublist
ヘルパーリンク2:韓国語文字のUnicode順序に対応する順序でのラテン文字/文字ペアのリスト
“Ȯ..X’ | Base 250 integer 912...
ṃØẠ | Base decompress into Latin letters (A..Za..z)
s2 | Split into twos
ḟ€”A | Filter out A from each (used as filler for the single characters)
ヘルパーリンク3:Choseong、Jungseong、およびJongseongに使用されるラテン文字のリスト
“|...¿’ | List of base 250 integers, [1960852478, 2251799815782398, 2143287262]
ḃ2 | Convert to bijective base 2
’ | Decrease by 1
T€ | List of indices of true values for each list
ị¢ | Index into helper link 2
ヘルパーリンク4:上記のラテン文字のリストは、長さの降順で列挙およびソートされます
¢ | Helper link 3 as a nilad
Ɗ€ | For each list, the following three links as a monad
Ė | - Enumerate (i.e. prepend a sequential index starting at 1 to each member of the list)
$Þ | - Sort using, as a key, the following two links as a monad
Ẉ | - Lengths of lists
Ṫ | - Tail (this will be the length of the original character or characters)
Ṛ | - Reverse
メインリンク:Jelly文字列を引数として受け取り、翻訳されたJelly文字列を返すMonad
セクション1:形態素ブロックを対応するラテン文字のUnicodeコードポイントに変換する
セクション1.1:ブロックの作成に必要なラテン文字のリストを取得します
3£ | Helper link 3 as a nilad (lists of Latin characters used for Choseong, Jungseong and Jongseong)
O | Convert to Unicode code points
Ż€3¦ | Prepend a zero to the third list (Jongseong)
セクション1.2:これらの文字のすべての組み合わせを作成します(19×21×28 =適切な字句順で11,172の組み合わせ)
Œp | Cartesian product
Ɗ€ | For each combination:
F | - Flatten
ḟ0 | - Filter zero (i.e. combinations with an empty Jonseong)
セクション1.3:ブロックのUnicodeコードポイントをラテン文字の対応するリストとペアにし、これらを使用して入力文字列の形態素ブロックを変換します
Ʋ | Following as a monad
J | - Sequence from 1..11172
+“Ḥœ’ | - Add 44031
, | - Pair with the blocks themelves
y | Translate the following using this pair of lists
O | - The input string converted to Unicode code points
セクション2:セクション1からの出力の個々の韓国語文字をラテン語の同等のコードポイントに変換します
¤ | Following as a nilad
2£ | Helper link 2 (list of Latin characters/character pairs in the order that corresponds to the Unicode order of the Korean characters)
O | Convert to Unicode code points
Ʋ | Following as a monad:
J | - Sequence along these (from 1..51)
+⁽.[ | - Add 12592
, | - Pair with list of Latin characters
y | Translate the output from section 1 using this mapping
セクション3:セクション2からの出力で未翻訳の文字を整理します(韓国語から翻訳されたものはすべてサブリストに含まれ、そのため深さ1になるため機能します)
ŒḊ?€ | For each member of list if the depth is 1:
¹ | - Keep as is
Ọ | Else: convert back from Unicode code points to characters
µ | Start a new monadic chain using the output from this section as its argument
セクション4:ラテン文字の形態素ブロックを韓国語に変換する
セクション4.1:長城と中城の可能な組み合わせをすべて取得する
¢ | Helper link 4 (lists of Latin characters enumerated and sorted in decreasing order of length)
Ṗ | Discard last list (Jongseong)
Œp | Cartesian product
セクション4.2:ベースの形態素ブロックのUnicodeコードポイントで各組み合わせにラベルを付けます(つまり、ジョンソンなし)
Ʋ€ | For each Choseong/Jungseong combination
Z | - Transpose, so that we now have e.g. [[1,1],["r","k"]]
F€ | - Flatten each, joining the strings together
ʋ/ | - Reduce using the following as a dyad (effectively using the numbers as left argument and string of Latin characters as right)
Ʋ | - Following links as a monad
’ | - Decrease by 1
ḋ588,28 | - Dot product with 21×28,28
+“Ḥþ’ | - Add 44032
0; | - Prepend zero; used for splitting in section 4.3 before each morphemic block (Ż won’t work because on a single integer it produces a range)
, | - Pair with the string of Latin characters
Ṛ | - Reverse (so we now have e.g. ["rk", 44032]
セクション4.3:セクション3の出力のラテン文字のこれらの文字列を、基本形態素ブロックのUnicodeコードポイントに置き換えます
ñ | Call helper link 1 (effectively search and replace)
ṣ0 | Split at the zeros introduced in section 4.2
セクション4.4:各形態素ブロックの一部としてJongseongがあるかどうかを特定する
Ʋ | Following as a monad:
Ḋ | - Remove the first sublist (which won’t contain a morphemic block; note this will be restored later)
€ | - For each of the other lists Z returned by the split in section 4.3 (i.e. each will have a morphemic block at the beginning):
Ʋ©? | - If the following is true (capturing its value in the register in the process)
Ḋ | - Remove first item (i.e. the Unicode code point for the base morphemic block introduced in section 4.3)
;⁶ | - Append a space (avoids ending up with an empty list if there is nothing after the morphemic block code point)
| (Output from the above will be referred to as X below)
¤ | * Following as a nilad (call this Y):
¢ | * Helper link 4
Ṫ | * Jongseong
Ʋ€ | * For each Jongseong Latin list:
Ẉ | * Lengths of lists
Ṫ | * Tail (i.e. length of Latin character string)
‘ | * Increase by 1
; | * Prepend this (e.g. [1, 1, "r"]
¥Ƈ@ | - Filter Y using X from above and the following criteria
Ṫ | - Tail (i.e. the Latin characters for the relevant Jongseong
⁼ṁ@¥ | - is equal to the beginning of X trimmed to match the relevant Jongseong (or extended but this doesn’t matter since no Jongseong are a double letter)
Ḣ | - First matching Jongseong (which since they’re sorted by descending size order will prefer the longer one if there is a matching shorter one)
Ɗ | - Then: do the following as a monad (note this is now using the list Z mentioned much earlier):
Ɗ | - Following as a monad
Ḣ | - Head (the Unicode code point of the base morphemic block)
+®Ṫ¤ | - Add the tail of the register (the position of the matched Jongsepng in the list of Jongseong)
; | - Concatenate to:
ṫ®$ | - The rest of the list after removing the Latin characters representing the Jongseong
¹ | - Else: leave the list untouched (no matching Jongseong)
ṭ | - Prepend:
Ḣ | - The first sublist from the split that was removed at the beginning of this subsection
セクション5:韓国語の文字に一致するが、形態素ブロックの一部ではない残りのラテン文字を処理する
F | Flatten
¤ | Following as a nilad
2£ | - Helper link 2 (Latin characters/pairs of characters in Unicode order of corresponding Korean character)
$ | - Following as a monad
ż Ɗ | - zip with following as a monad
J | - Sequence along helper link 2 (1..51)
+⁽.[ | - Add 12592
$Þ | - Sort using following as key
Ẉ | - Lengths of lists
Ṫ | - Tail (i.e. length of Latin string)
Ṛ | - Reverse
ñ | Call helper link 1 (search Latin character strings and replace with Korean code points)
Ọ | Finally, convert all Unicode code points back to characters and implicitly output
l
後ml
にトライアルが欠落しているようだㅣ
。