কোরিয়ান দ্বি-সেট কীবোর্ড এবং কিওয়ার্টি কীবোর্ডের মধ্যে রূপান্তর


14

ভূমিকা

এটি কিছুটা ডিভোরাক কীবোর্ড লেআউটের মতো তবে অনেক বেশি শক্ত।

প্রথমে কোরিয়ান কীবোর্ড সম্পর্কে কথা বলা যাক। আপনি উইকিপিডিয়ায় দেখতে পাচ্ছেন , কোরিয়ান এবং ইংরাজী কী সেটগুলির মধ্যে পরিবর্তন করার জন্য একটি কর / ইঞ্জিন কী রয়েছে।

কোরিয়ানরা কোনও সময় ভুল টাইপ করে: তারা কোয়ার্টি কিবোর্ডে বা ইংরেজিতে দ্বি-সেট কীবোর্ডে লেখার চেষ্টা করে।

সুতরাং, এখানে সমস্যাটি রয়েছে: যদি দ্বি-সেট কীবোর্ডে টাইপ করা কোরিয়ান অক্ষর দেওয়া হয় তবে এটিকে কিওয়ার্টি কীবোর্ডে টাইপ করা বর্ণমালার অক্ষরে রূপান্তর করুন। যদি কিউয়ারটিতে টাইপ করা বর্ণমালা বর্ণ থাকে তবে এটিকে দ্বি-সেট কীবোর্ডে পরিবর্তন করুন।

দ্বি-সেট কীবোর্ড

এখানে দ্বি-সেট কীবোর্ড লেআউটটি রয়েছে:

ㅂㅈㄷㄱㅅㅛㅕㅑㅐㅔ
 ㅁㄴㅇㄹㅎㅗㅓㅏㅣ
  ㅋㅌㅊㅍㅠㅜㅡ

এবং শিফট কী সহ:

ㅃㅉㄸㄲㅆㅛㅕㅑㅒㅖ

অন্যরা না করে ঠিক উপরের সারিতে পরিবর্তন হয়।

কোরিয়ান চরিত্র সম্পর্কে

যদি এটি এখানেই শেষ হয় তবে এটি সহজ হতে পারে তবে তা নয়। আপনি যখন টাইপ করুন

dkssud, tprP!

আউটপুট এইভাবে প্রদর্শিত হয় না:

ㅇㅏㄴㄴㅕㅇ, ㅅㅔㄱㅖ!

তবে এইভাবে:

안녕, 세계!(means Hello, World!)

এবং এটি জিনিসগুলিকে আরও শক্ত করে তোলে।

কোরিয়ান অক্ষরগুলি তিন ভাগে বিভক্ত: 'চোসিয়াং (ব্যঞ্জনবর্ণ)', 'জংসিয়ং (স্বর)', এবং 'জংসিওং (উচ্চারণের শেষে ব্যঞ্জনবর্ণ: ফাঁকা হতে পারে)', এবং আপনাকে এটি আলাদা করতে হবে।

ভাগ্যক্রমে, এটি করার উপায় আছে।

কীভাবে আলাদা করবেন

এখানে 19 টি চোসিয়াং, 21 জংসিওং এবং ২৮ জন জংসিয়ং (ফাঁকা সহ) রয়েছে এবং 0xAC00 '가', কোরিয়ান চরিত্রগুলির প্রথম চরিত্র। এটি ব্যবহার করে, আমরা কোরিয়ান অক্ষরগুলিকে তিনটি ভাগে ভাগ করতে পারি। এখানে প্রতিটি ক্রমের ক্রম এবং দ্বি-সেট কীবোর্ডে এর অবস্থান রয়েছে।

পছন্দসই অর্ডার:

ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ
r R s e E f a q Q t T d w W c z x v g

জাঙ্গসিয়ং আদেশ:

ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ
k o i O j p u P h hk ho hl y n nj np nl b m ml l

Jongseong আদেশ:

()ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ
()r R rt s sw sg e f fr fa fq ft fx fv fg a q qt t T d w c z x v g

আসুন বলে (unicode value of some character) - 0xAC00হয় Korean_code, এবং চোসেং, জাংসেং সূচী, Jongseong হয় Cho, Jung, Jong

তারপর, Korean_codeহয়(Cho * 21 * 28) + Jung * 28 + Jong

এখানে জাভাস্ক্রিপ্ট কোড যা আপনার সুবিধার্থে এই কোরিয়ান ওয়েবসাইট থেকে কোরিয়ান চরিত্রকে পৃথক করে ।

var rCho = [ "ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" ];
var rJung =[ "ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ" ];
var rJong = [ "", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ","ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" ];
var cho, jung, jong;
var sTest = "탱";
var nTmp = sTest.charCodeAt(0) - 0xAC00;
jong = nTmp % 28; // Jeongseong
jung = ((nTmp - jong) / 28 ) % 21 // Jungseong
cho = ( ( (nTmp - jong) / 28 ) - jung ) / 21 // Choseong

alert("Choseong:" + rCho[cho] + "\n" + "Jungseong:" + rJung[jung] + "\n" + "Jongseong:" + rJong[jong]);

যখন একত্রিত হয়

  1. মনে রাখবেন যে, , , , , , , অন্যান্য jungseongs একটি সংমিশ্রণ।
ㅗ+ㅏ=ㅘ, ㅗ+ㅐ=ㅙ, ㅗ+ㅣ=ㅚ, ㅜ+ㅓ=ㅝ, ㅜ+ㅔ=ㅞ, ㅜ+ㅣ=ㅟ, ㅡ+ㅣ=ㅢ
  1. Choseong প্রয়োজন। তার অর্থ, যদি frkদেওয়া হয়, যা ㄹㄱㅏ, এটি দুটি উপায়ে পরিবর্তিত হতে পারে: ㄺㅏএবং ㄹ가। তারপরে, আপনাকে এটিকে এমনভাবে রূপান্তর করতে হবে যা বেছে নিয়েছে। যদি jjjrjrদেওয়া, যা ㅓㅓㅓㄱㅓㄱশীর্ষস্থানীয় গুলি যে কিছু চোসেং করা যায় না, কিন্তু চতুর্থ হয়েছে , যে চোসেং করা যাবে, সুতরাং মধ্যে পরিবর্তন হয়েছে ㅓㅓㅓ걱

আর একটি উদাহরণ: 세계( tprP)। এটি 섹ㅖ( (ㅅㅔㄱ)(ㅖ)) এ পরিবর্তন করা যেতে পারে , তবে যেহেতু বেছে নেওয়া প্রয়োজন, এটি 세계( (ㅅㅔ)(ㄱㅖ)) এ পরিবর্তিত হতে পারে

উদাহরণ

ইনপুট 1

안녕하세요

আউটপুট 1

dkssudgktpdy

ইনপুট 2

input 2

আউটপুট 2

ㅑㅞㅕㅅ 2

ইনপুট 3

힘ㄴㄴ

আউটপুট 3

glass

ইনপুট 4

아희(Aheui) is esolang which you can program with pure Korean characters.

আউটপুট 4

dkgml(모뎌ㅑ) ㅑㄴ ㄷ내ㅣ뭏 조ㅑ초 ㅛㅐㅕ ㅊ무 ㅔ갷ㄱ므 쟈소 ㅔㅕㄱㄷ ㅏㅐㄱㄷ무 촘ㄱㅁㅊㅅㄷㄱㄴ.

ইনপুট 5

dkssud, tprP!

আউটপুট 5

안녕, 세계!

ইনপুট 6

ㅗ디ㅣㅐ, 째깅! Hello, World!

আউটপুট 6

hello, World! ㅗ디ㅣㅐ, 째깅!

সংক্ষিপ্ততম কোড জয়ী। (বাইটে)

আপনার সুবিধার জন্য নতুন নিয়ম

আপনি এমন অক্ষরগুলি বরখাস্ত করতে পারেন যাগুলির Aদ্বি-সেট কীবোর্ডে এর সদৃশ নেই । তাই Aheuiথেকে Aㅗ뎌ㅑঠিক। তবে, আপনি যদি পরিবর্তিত Aheuiহন 모뎌ㅑ, আপনি -5 পয়েন্ট পেতে পারেন, যাতে আপনি 5 বাইট উপার্জন করতে পারেন।

আপনি দুটি জাঙ্গসিয়াং পৃথক করতে পারেন (পছন্দ করতে পারেন ㅗ+ㅏ)। মত rhkকরতে 고ㅏ, অথবা howকরার ㅗㅐㅈ। তবে আপনি যদি এটি একত্রিত করেন (পছন্দ rhkকরতে বা howকরতে চান ㅙㅈ), আপনি অতিরিক্ত -5 পয়েন্ট অর্জন করতে পারেন।


ইন জাংসেং অর্ডার বর্ণের অধ্যায় এক অনুপস্থিত। আমি 21 টি কোরিয়ান প্রতীক দেখতে পাচ্ছি, তবে কেবলমাত্র 20 টি বর্ণ (-যুক্ত) এস। সম্পাদনা: কোরিয়ান প্রতীকটির lপরে কোনও পরীক্ষার অভাব অনুভব করছে । ml
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন সম্পাদিত। আমি for জন্য।
লেজেনডিএসটি

1
কখনও কখনও একাধিক ব্যাখ্যা হতে পারে। উদাহরণস্বরূপ, fjfauহিসাবে 럶ㅕবা হিসাবে ব্যাখ্যা করা যেতে পারে 럴며। আমরা কীভাবে এটি সমাধান করব?
নিক কেনেডি

1
@ লেজেনডেএসটি আচ্ছা, আমি কোরিয়ার একটি শব্দও পড়তে পারি না, তাই আপনার ব্যাখ্যা দিয়ে আমাকে যেতে হবে। ; পি tprPপরীক্ষার ক্ষেত্রে 5 হিসাবে: এটি রূপান্তরিত হয় ㅅㅔㄱㅖ, যেখানে একটি নির্বাচিত, এটি একটি জংসিয়ং এবং একটি জংসিয়ং । তাই এই রুপান্তর should't 섷ㅖ(যেমন দলবদ্ধ (ㅅㅔㄱ)(ㅖ)) পরিবর্তে 세계(যেমন দলবদ্ধ (ㅅㅔ)(ㄱㅖ))? পূর্বের একটি মন্তব্যে আপনি লিখেছেন যে এটি টাইপ করে ব্যাখ্যা করা হয়েছে, তাই আমি ㅅㅔㄱরূপান্তর করার আশা করব । বা কোরিয়ান বাম থেকে ডানে পরিবর্তে ডান থেকে বামে টাইপ করছে?
কেভিন ক্রুইজসেন

1
ইউনিকোড.অর্গ থেকে কেভিন ক্রুজসেন পিডিএফ ফাইলটি ডাউনলোড করুন । AC00 ( ) থেকে ডি 7 এএফ ( )।
লেজেনডিএসটি

উত্তর:


6

জেলি , 296 264 বাইট

Ẏœṣ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+⁽.[Ɗ$ẈṪ$ÞṚ¤ñỌ

এটি অনলাইন চেষ্টা করুন!

একটি সম্পূর্ণ প্রোগ্রাম যা তার আর্গুমেন্ট হিসাবে স্ট্রিং নেয় এবং একটি স্ট্রিং দেয় (যা স্পষ্টভাবে মুদ্রিত হয়)। এটি তিনটি পাসে কাজ করে: প্রথমে এটি কোরিয়ান সমস্ত অক্ষরকে লাতিন বর্ণের কোড পয়েন্টের তালিকায় রূপান্তর করে। তারপরে এটি যৌগিক কোরিয়ান অক্ষরগুলি সনাক্ত করে এবং তৈরি করে। অবশেষে, এটি কোরিয়ার সমতুল্যে কোনও অবশিষ্ট বিপথগামী ল্যাটিন অক্ষরকে পরিণত করে। নোট করুন যে অন্যান্য অক্ষর এবং লাতিন বর্ণগুলি যা অনুমেয় (উদাহরণস্বরূপ A) তে উপস্থিত হয় না সেগুলি একা বাকি রয়েছে।

যদি বিশেষের বাইরে মূল অক্ষরের ছোট ক্ষেত্রে রূপান্তর প্রয়োজন হয় তবে এটি অতিরিক্ত 10 বাইট ব্যয়ে করা যেতে পারে ।

ব্যাখ্যা

সহায়ক লিঙ্ক 1 : এক্স এবং y এর যুক্তিগুলির সাথে ডায়াডিক লিঙ্ক। এক্স হল অনুসন্ধানের জোড়গুলির তালিকা এবং সাবলিস্টগুলি প্রতিস্থাপন। 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 : কোরিয়ান অক্ষরের ইউনিকোড ক্রমের সাথে সঙ্গতিপূর্ণ ল্যাটিন অক্ষর / অক্ষর জোড়ার তালিকা

“Ȯ..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 : চ্যাসাওং, জংসিওং এবং জংসিয়ংয়ের জন্য ব্যবহৃত লাতিন অক্ষরের তালিকা

“|...¿’        | 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

প্রধান লিঙ্ক : মোনাড যা জেলি স্ট্রিংটিকে তার আর্গুমেন্ট হিসাবে গ্রহণ করে এবং অনুবাদকৃত জেলি স্ট্রিংটি প্রদান করে

বিভাগ 1 : মরফেমিক ব্লকগুলিকে সংশ্লিষ্ট ল্যাটিন অক্ষরের ইউনিকোড কোডপয়েন্টে রূপান্তর করুন

বিভাগ 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)

বিভাগ ১.২ : এই বর্ণগুলির সমস্ত সংমিশ্রণগুলি তৈরি করুন (যথাযথ বর্ণিত ক্রমে 19 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 : লাতিন বর্ণগুলির সাথে সম্পর্কিত তালিকার সাথে ব্লকের ইউনিকোড কোড পয়েন্টগুলি যুক্ত করুন এবং ইনপুট স্ট্রিংয়ে মরফেমিক ব্লকগুলি অনুবাদ করতে এটি ব্যবহার করুন

       Ʋ   | 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 : লাতিন অক্ষরের মোর্ফেমিক ব্লকগুলিকে কোরিয়ান রূপান্তর করুন

বিভাগ ৪.১ : চোসিয়াং এবং জংসিয়ংয়ের সমস্ত সম্ভাব্য সংমিশ্রণ পান

¢    | Helper link 4 (lists of Latin characters enumerated and sorted in decreasing order of length)
 Ṗ   | Discard last list (Jongseong)
  Œp | Cartesian product

বিভাগ ৪.২ : বেস মরফেমিক ব্লকের জন্য ইউনিকোড কোড পয়েন্টের সাথে প্রতিটি সংমিশ্রণ লেবেল করুন (অর্থাত জংসিয়ং নেই)

                       Ʋ€ | 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]

বিভাগ ৪.৩ : বেস মোর্ফেমিক ব্লকের ইউনিকোড কোড পয়েন্টের সাথে বিভাগ 3 থেকে আউটপুটটিতে ল্যাটিন অক্ষরের এই স্ট্রিংগুলি প্রতিস্থাপন করুন

ñ   | Call helper link 1 (effectively search and replace)
 ṣ0 | Split at the zeros introduced in section 4.2

বিভাগ ৪.৪: প্রতিটি মরফেমিক ব্লকের অংশ হিসাবে একটি জঙ্গসং রয়েছে কিনা তা সনাক্ত করুন

                                        Ʋ | 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

1
আউটপুটটি ভুল: যখন আমি রাখি , আমি ব্যতীত cor, তবে তা দেয় cBor। এবং এটা পরিবর্তন করে না cথেকে canরূপান্তর করতে হয়েছিল ㅊ무, কিন্তু এটি রূপান্তরিত হয়েছিল c무। এবং আমি বড় আকারের অক্ষরগুলিও বাদ দিয়েছি যা অনুমানগুলিতে প্রদর্শিত হয় না তা ছড়িয়ে পড়ে, তবে এটি সূক্ষ্ম হতে পারে।
লেজেনডিএসটি

@ লেজেনডিএসএসটি সি সমস্যাটি স্থির হয়েছে। আমি Aএকক অক্ষরের দ্বিতীয় চরিত্রের জন্য একটি স্থানধারক হিসাবে ব্যবহার করেছি এবং কোনও কারণে একটি পরে cএকটি হিসাবে প্রকাশিত হচ্ছে B। অন্যান্য চিঠির ছোট আকারে রূপান্তর করা যেতে পারে তবে ইতিমধ্যে একটি কঠিন চ্যালেঞ্জ কী তা অহেতুক জটিলতার মতো মনে হয়।
নিক কেনেডি

আমি বুঝতে পারছি এটি কঠিন। সুতরাং আমি নতুন নিয়ম যুক্ত করেছি: আপনি যদি decapitalize করেন তবে আপনি 5 বাইট উপার্জন করতে পারবেন। তবে এটা ঠিক আছে।
লেজেনডিএসটি

3

জাভাস্ক্রিপ্ট (নোড.জেএস) , 587 582 575 569 557 554 550 549 বাইট

tfw আপনি জানেন না যে string.charCodeAt() == string.charCodeAt(0)

s=>s.replace(eval(`/[ㄱ-힣]|${M="(h[kol]?|n[jpl]?|ml?|[bi-puyOP])"}|([${S="rRseEfaqQtTdwWczxvg"}])(${M}((s[wg]|f[raqtxvg]|qt|[${S}])(?!${M}))?)?/g`,L="r,R,rt,s,sw,sg,e,E,f,fr,fa,fq,ft,fx,fv,fg,a,q,Q,qt,t,T,d,w,W,c,z,x,v,g,k,o,i,O,j,p,u,P,h,hk,ho,hl,y,n,nj,np,nl,n,m,ml,l".split`,`,l=L.filter(x=>!/[EQW]/.test(x)),I="indexOf"),(a,E,A,B,C,D)=>a<"~"?E?X(E):A&&C?F(43193+S[I](A)*588+L[I](C)*28+l[I](D)):X(A)+X(C)+X(D):(b=a.charCodeAt()-44032)<0?L[b+31439]||a:S[b/588|0]+L[30+b/28%21|0]+["",...l][b%28],F=String.fromCharCode,X=n=>n?F(L[I](n)+12593):"")

এটি অনলাইন চেষ্টা করুন!

547 যদি বর্ণমালা এবং কোরিয়ান জামোর বাইরের অক্ষর উপেক্ষা করা যায়।

ঠিক আছে আমি এগুলি লিখতে এত দিন সংগ্রাম করেছি, তবে এটি কাজ করা উচিত। কোনও কোরিয়ান জামো / সিলেবল ব্যবহার করা হয় না কারণ সেগুলি খুব ব্যয়বহুল (প্রতি ব্যবহারে 3 বাইট)। বাইটস সংরক্ষণ করতে নিয়মিত অভিব্যক্তিতে ব্যবহৃত হয়।

s=>                                                    // Main Function:
 s.replace(                                            //  Replace all convertible strings:
  eval(
   `/                                                  //   Matching this regex:
    [ㄱ-힣]                                             //   ($0) All Korean jamos and syllables
    |${M="(h[kol]?|n[jpl]?|ml?|[bi-puyOP])"}           //   ($1) Isolated jungseong codes
    |([${S="rRseEfaqQtTdwWczxvg"}])                    //   ($2) Choseong codes (also acts as lookup)
     (                                                 //   ($3) Jungseong and jongseong codes:
      ${M}                                             //   ($4)  Jungseong codes
      (                                                //   ($5)  Jongseong codes:
       (                                               //   ($6)
        s[wg]|f[raqtxvg]|qt                            //          Diagraphs unique to jongseongs
        |[${S}]                                        //          Or jamos usable as choseongs
       ) 
       (?!${M})                                        //         Not linked to the next jungseong
      )?                                               //        Optional to match codes w/o jongseong
     )?                                                //       Optional to match choseong-only codes
   /g`,                                                //   Match all
   L="(...LOOKUP TABLE...)".split`,`,                  //   Lookup table of codes in jamo order
   l=L.filter(x=>!/[EQW]/.test(x)),                    //   Jongseong lookup - only first half is used
   I="indexOf"                                         //   [String|Array].prototype.indexOf
  ),
  (a,E,A,B,C,D)=>                                      //   Using this function:
   a<"~"?                                              //    If the match is code (alphabets):
    E?                                                 //     If isolated jungseongs code:
     X(E)                                              //      Return corresponding jamo
    :A&&C?                                             //     Else if complete syllable code:
     F(43193+S[I](A)*588+L[I](C)*28+l[I](D))           //      Return the corresponding syllable
    :X(A)+X(C)+X(D)                                    //     Else return corresponding jamos joined
   :(b=a.charCodeAt()-44032)<0?                        //    Else if not syllable:
    L[b+31439]||a                                      //     Return code if jamo (if not, ignore)
   :S[b/588|0]+L[30+b/28%21|0]+["",...l][b%28],        //    Else return code for the syllable
  F=String.fromCharCode,                               //   String.fromCharCode
  X=n=>                                                //   Helper function to convert code to jamo
   n?                                                  //    If not undefined:
    F(L[I](n)+12593)                                   //     Return the corresponding jamo
   :""                                                 //    Else return empty string
 )

2

ওল্ফ্রাম ভাষা (গণিত) , 405 401 400 বাইট

c=CharacterRange
p=StringReplace
q=StringReverse
r=Reverse
t=Thread
j=Join
a=j[alphabet@"Korean",4520~c~4546]
x=j[#,r/@#]&@t[a->Characters@"rRseEfaqQtTdwWczxvgkoiOjpuPh"~j~StringSplit@"hk ho hl y n nj np nl b m ml l r R rt s sw sg e f fr fa fq ft fx fv fg a q qt t T d w c z x v g"]
y=t[""<>r@#&/@Tuples@TakeList[Insert[a,"",41]~p~x~p~x,{19,21,28}]->44032~c~55203]
f=q@p[q@#,#2]&
g=f[#,r/@y]~p~x~f~y&

এটি অনলাইন চেষ্টা করুন!

খানিকটা উচ্ছৃঙ্খল

ম্যাথামেটিকাল এই পরীক্ষা করার জন্য শুধু প্রতিস্থাপন alphabetসঙ্গে Alphabet; তবে, টিআইও ওল্ফ্রাম ক্লাউডকে সমর্থন করে না তাই আমি Alphabet["Korean"]শিরোনামে সংজ্ঞায়িত করেছি ।

আমরা প্রথমে সমস্ত হাঙ্গুলের সিলেবলগুলিকে হ্যাঙ্গুল বর্ণমালাতে পচন করি, তারপরে লাতিন এবং হাঙ্গুল বর্ণগুলি অদলবদল করি, তারপরে অক্ষরগুলি পুনরায় সংশ্লেষ করব।


1
আপনার টিআইওর পরিবর্তে পরীক্ষার ক্ষেত্রে input 2ফলাফল । যদিও আমি যে সমাধানে কাজ করছিলাম সে ক্ষেত্রে একই ঘটনা ঘটেছে, যেহেতু উভয়ই এবং জাঙ্গসিয়াং, এবং আমি কেবলমাত্র জংসং + জংসিওং বা জংসিয়ং + খালি বেছে নিয়ে একত্রিত হব impression আমি ওপিকে কেন হয়ে গেল যাচাইয়ের জন্য জিজ্ঞাসা করেছি । ㅑㅜㅔㅕㅅ 2ㅑㅞㅕㅅ 2ㅜㅔ
কেভিন ক্রুইজসেন

@KevinCruijssen ㅞ (NP) একটি নিজস্ব ডানদিকে একটি জাংসেং হয়
নিক কেনেডি

1
এটি দুটি চরিত্রের ব্যঞ্জনবর্ণ বা স্বরগুলির জন্য সঠিকভাবে কাজ করছে বলে মনে হয় না। উদাহরণস্বরূপ fnpfaএকটি একক চরিত্র হওয়া উচিত তবে পরিবর্তে শেষ হবে루ㅔㄹㅁ
নিক কেনেডি

প্রগতিতে স্থির করুন। এটির জন্য খুব বেশি খরচ করা উচিত নয়।
lirtosiast

2

জাভা 19, 1133 1126 1133 বাইট

s->{String r="",k="ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ",K[]=k.split(" "),a="r R s e E f a q Q t T d w W c z x v g k o i O j p u P h hk ho hl y n nj np nl b m ml l r R rt s sw sg e f fr fa fq ft fx fv fg a q qt t T d w c z x v g";var A=java.util.Arrays.asList(a.split(" "));k=k.replace(" ","");int i,z,y,x=44032;for(var c:s.toCharArray())if(c>=x&c<55204){z=(i=c-x)%28;y=(i=(i-z)/28)%21;s=s.replace(c+r,r+K[0].charAt((i-y)/21)+K[1].charAt(y)+(z>0?K[2].charAt(z-1):r));}for(var c:s.split(r))r+=c.charAt(0)<33?c:(i=k.indexOf(c))<0?(i=A.indexOf(c))<0?c:k.charAt(i):A.get(i);for(i=r.length()-1;i-->0;r=z>0?r.substring(0,i)+(char)(K[0].indexOf(r.charAt(i))*588+K[1].indexOf(r.charAt(i+1))*28+((z=K[2].indexOf(r.charAt(i+2)))<0?0:z+1)+x)+r.substring(z<0?i+2:i+3):r)for(z=y=2;y-->0;)z&=K[y].contains(r.charAt(i+y)+"")?2:0;for(var p:"ㅗㅏㅘㅗㅐㅙㅗㅣㅚㅜㅓㅝㅜㅔㅞㅜㅣㅟㅡㅣㅢ".split("(?<=\\G...)"))r=r.replace(p.substring(0,2),p.substring(2));return r;}

মূলধন অক্ষরের আউটপুট ASDFGHJKLZXCVBNMঅপরিবর্তিত, যেহেতু .toLowerCase()-5 বোনাসের চেয়ে বেশি দাম।

ইউনিকোড মান ২০,০০০ এর উপরে অ-কোরিয়ান অক্ষরগুলির জন্য বাগ-ফিক্স হিসাবে ব্যাক +7 বাইট ( অনুগ্রহ করে @ নিক কেনেডি ধন্যবাদ )

এটি অনলাইনে চেষ্টা করুন।

ব্যাখ্যা:

s->{                         // Method with String as both parameter and return-type
  String r="",               //  Result-String, starting empty
         k="ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ",
                             //  String containing the Korean characters
         K[]=k.split(" "),   //  Array containing the three character-categories
         a="r R s e E f a q Q t T d w W c z x v g k o i O j p u P h hk ho hl y n nj np nl b m ml l r R rt s sw sg e f fr fa fq ft fx fv fg a q qt t T d w c z x v g"; 
                             //  String containing the English characters
  var A=java.util.Arrays.asList(a.split(" "));
                             //  List containing the English character-groups
  k=k.replace(" ","");       //  Remove the spaces from the Korean String
  int i,z,y,                 //  Temp integers
      x=44032;               //  Integer for 0xAC00
  for(var c:s.toCharArray()) //  Loop over the characters of the input:
    if(c>=x&c<55204){        //   If the unicode value is in the range [44032,55203]
                             //   (so a Korean combination character):
      z=(i=c-x)%28;          //    Set `i` to this unicode value - 0xAC00,
                             //    And then `z` to `i` modulo-28
      y=(i=(i-z)/28)%21;     //    Then set `i` to `i`-`z` integer divided by 28
                             //    And then `y` to `i` modulo-21
      s=s.replace(c+r,       //    Replace the current non-Korean character with:
        r+K[0].charAt((i-y)/21)
                             //     The corresponding choseong
         +K[1].charAt(y)     //     Appended with jungseong
         +(z>0?K[2].charAt(z-1):r));}
                             //     Appended with jongseong if necessary
  for(var c:s.split(r))      //  Then loop over the characters of the modified String:
    r+=                      //   Append to the result-String:
       c.charAt(0)<33?       //    If the character is a space:
        c                    //     Simply append that space
       :(i=k.indexOf(c))<0?  //    Else-if the character is NOT a Korean character:
         (i=A.indexOf(c))<0? //     If the character is NOT in the English group List:
          c                  //      Simply append that character
         :                   //     Else:
          k.charAt(i)        //      Append the corresponding Korean character
       :                     //    Else:
        A.get(i);            //     Append the corresponding letter
  for(i=r.length()-1;i-->0   //  Then loop `i` in the range (result-length - 2, 0]:
      ;                      //    After every iteration:
       r=z>0?                //     If a group of Korean characters can be merged:
          r.substring(0,i)   //      Leave the leading part of the result unchanged
          +(char)(K[0].indexOf(r.charAt(i))
                             //      Get the index of the first Korean character,
                   *588      //      multiplied by 588
                  +K[1].indexOf(r.charAt(i+1))
                             //      Get the index of the second Korean character,
                   *28       //      multiplied by 28
                  +((z=K[2].indexOf(r.charAt(i+2)))
                             //      Get the index of the third character
                    <0?      //      And if it's a Korean character in the third group:
                      0:z+1) //       Add that index + 1
                  +x         //      And add 0xAC00
                 )           //      Then convert that integer to a character
          +r.substring(z<0?i+2:i+3) 
                             //      Leave the trailing part of the result unchanged as well
         :                   //     Else (these characters cannot be merged)
          r)                 //      Leave the result the same
     for(z=y=2;              //   Reset `z` to 2
         y-->0;)             //   Inner loop `y` in the range (2, 0]:
       z&=                   //    Bitwise-AND `z` with:
         K[y].contains(      //     If the `y`'th Korean group contains
           r.charAt(i+y)+"")?//     the (`i`+`y`)'th character of the result
          2                  //      Bitwise-AND `z` with 2
         :                   //     Else:
          0;                 //      Bitwise-AND `z` with 0
                             //   (If `z` is still 2 after this inner loop, it means
                             //    Korean characters can be merged)
  for(var p:"ㅗㅏㅘㅗㅐㅙㅗㅣㅚㅜㅓㅝㅜㅔㅞㅜㅣㅟㅡㅣㅢ".split("(?<=\\G...)"))
                             //  Loop over these Korean character per chunk of 3:
    r=r.replace(p.substring(0,2),
                             //   Replace the first 2 characters in this chunk
         p.substring(2));    //   With the third one in the result-String
  return r;}                 //  And finally return the result-String

1
এগুলি 44032 থেকে 55203 এর মধ্যে। আপনি ইতিমধ্যে কোডের কোডটি শুরু করে পেয়েছেন। 44032 + 19×21×28 - 1
নিক কেনেডি

এখন ভাল কাজ করে। ভেবেছিলাম আমি ইতিমধ্যে আপনাকে upvated করেছি কিন্তু না, তাই আপনি এখানে যান!
নিক কেনেডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.