রোমানীয় কোরিয়ান


12

হ্যাঁ, এটি মূলত আপনি একজন রোমানাইজার, বেবি , তবে আরও শক্ত । মত, পথ কঠিন।

কোরিয়ান ভাষা শেখা হার্ড। কমপক্ষে এশিয়ার বাইরের কোনও ব্যক্তির জন্য। তবে তাদের কমপক্ষে শেখার সুযোগ আছে, তাই না?

আপনি অবশ্যই করবেন

আপনাকে একটি কোরিয়ান বিবৃতি দেওয়া হবে। উদাহরণস্বরূপ 안녕하세요,। আপনাকে অবশ্যই ইনপুটটিকে এর রোমান উচ্চারণে রূপান্তর করতে হবে। প্রদত্ত উদাহরণের জন্য, আউটপুট হতে পারে annyeonghaseyo

এখন এটি প্রযুক্তিগত হয়

একটি কোরিয়ান চরিত্রের তিনটি অংশ রয়েছে, প্রারম্ভিক ব্যঞ্জন, স্বর এবং শেষ ব্যঞ্জনা। সমাপ্তি ব্যঞ্জনবর্ণের অক্ষরে উপস্থিত নাও থাকতে পারে।

উদাহরণস্বরূপ, হ'ল (ব্যঞ্জনাত্মক) এবং (স্বরবর্ণ), এবং এটি (শুরুর ব্যঞ্জনবর্ণ), (স্বর), এবং (ব্যঞ্জন শেষ)।

বিচ্ছিন্ন ব্যঞ্জনা এবং স্বর এর উচ্চারণ রয়েছে। প্রতিটি ব্যঞ্জনবর্ণের জন্য উচ্চারণ নিম্নরূপ:

Korean                 ㄱ   ㄲ  ㄴ  ㄷ   ㄸ  ㄹ  ㅁ  ㅂ  ㅃ  ㅅ  ㅆ  ㅇ   ㅈ   ㅉ  ㅊ ㅋ  ㅌ   ㅍ  ㅎ
Romanization Starting   g   kk  n   d   tt  r   m   b   pp  s   ss  –   j   jj  ch  k   t   p   h
               Ending   k   k   n   t   –   l   m   p   –   t   t   ng  t   –   t   k   t   p   h

(- এর অর্থ কোনও উচ্চারণ বা ব্যবহৃত হয়নি you এগুলি আপনাকে পরিচালনা করতে হবে না))

এবং প্রতিটি স্বর জন্য উচ্চারণ নিম্নরূপ:

Hangul          ㅏ  ㅐ  ㅑ  ㅒ   ㅓ  ㅔ  ㅕ  ㅖ  ㅗ   ㅘ   ㅙ  ㅚ ㅛ  ㅜ  ㅝ  ㅞ  ㅟ   ㅠ  ㅡ   ㅢ ㅣ
Romanization    a   ae  ya  yae eo  e   yeo ye  o   wa  wae oe  yo  u   wo  we  wi  yu  eu  ui  i

এখন এটি আসল হার্ড অংশ

ব্যঞ্জনবর্ণের উচ্চারণটি ইতিমধ্যে শেষ হওয়া ব্যঞ্জনবর্ণ দ্বারা পরিবর্তিত হয়। প্রতিটি সূচনা / সমাপ্তি ব্যঞ্জনবর্ণের উচ্চারণ নিম্নলিখিত চিত্র হিসাবে। ধন্যবাদ, উইকিপিডিয়া  যদি এটি না থাকে তবে আমাকে এই সমস্ত লিখতে হবে। (আপনাকে উচ্চারণের মধ্যে হাইফেনটি করতে হবে না Its এটি অপ্রয়োজনীয় a কোনও ঘরে যদি দুটি বা ততোধিক উচ্চারণ থাকে তবে একটি চয়ন করুন If যদি কোনও শেষ ব্যঞ্জনা থাকে না, মূল উচ্চারণটি ব্যবহার করুন))

উদাহরণ

Korean => English
안녕하세요 => annyeonghaseyo
나랏말싸미 듕귁에달아 => naranmalssami dyunggwigedara  //See how the ㅅ in 랏 changes from 't' to 'n'

উদাহরণ প্রস্তাব স্বাগত। আপনি এখানে নিজের ইনপুটগুলির জন্য উত্তর পেতে পারেন । ("সাধারণ পাঠ্য" -এর একটি, সংশোধিত যা আমি বলছি)


ইনপুটটিতে কি সর্বদা ইউনিকোড অক্ষর AC00-D7AF + স্থান থাকবে?
আরনৌল্ড

1
বেশ কয়েকটি বিশেষ ㅎ + এক্স সংমিশ্রণ রয়েছে যা হলুদে হাইলাইট করা হয়নি (যেমন ㅎ + ㅈ = ch)। তার মানে কি আমাদের তাদের সমর্থন করতে হবে না? (এছাড়াও, ㅎ হিসাবে 'রোমান হরফে লেখা' টি পরিবর্তে ছবি, যা একটি বিট বিভ্রান্তিকর মধ্যে।)
Arnauld

1
পরীক্ষার কেসগুলি: gist.github.com/perey/563282f8d62c2292d11aabcde0b94d2d @ অর্ণাড্ড যেমন বলেছেন, বিশেষ সংমিশ্রণে কিছু অদ্ভুততা রয়েছে; এটি টেবিলে আমি যেগুলি পেয়েছি তার সবার জন্য পরীক্ষা রয়েছে, হাইলাইট হয়েছে কি না। যেখানে একাধিক বিকল্প উপস্থিত রয়েছে, সেগুলি স্থান থেকে পৃথক। লোকেদের গল্ফ করে দেওয়ার আশা করি বলে কোনও হাইফেন ব্যবহার করা হয় না।
টিম পেডেরিক

1
আমি আপনার প্রস্তাবিত আউটপুট-চেকিং লিঙ্কে "সাধারণ পাঠ্য" দেখতে পাচ্ছি না; আপনার অর্থ "সাধারণ জিনিস"? যদি তা হয় তবে তিনজনের মধ্যে কোনটি আমাদের ব্যবহার করা উচিত (সংশোধিত, ম্যাককুন, ইয়েল)? কেউ আপনার টেবিলের সাথে মেলে না বলে মনে হচ্ছে; উদাহরণস্বরূপ, আপনার অনুসারে ㅈ এর পরে "এনএন" হওয়া উচিত তবে সেই লিঙ্কটিতে "টিআর" বা "সিএল" হওয়া উচিত। (নোট করুন যে পূর্ববর্তী মন্তব্যে আমার পরীক্ষার কেসগুলি প্রশ্নের
উত্তরে লিখিতভাবে লিখিত হয়েছে

দ্বারা অনুসরণ ㄱ, ㄷ, ㅈএছাড়াও বিশেষ ক্ষেত্রে হয় (তারা aspirated হয়ে ㅋ, ㅌ, ㅈ(ট, টি, জে)) যারা খুব হাইলাইট করা উচিত নয়।
জংহওয়ান মিন

উত্তর:


8

পাইথন 3.6, 400 394 বাইট

সম্পাদনা: রুটটোকে -6 বাইটের জন্য ধন্যবাদ ।

কোডগল্ফে এটি আমার প্রথম জমা, সুতরাং আমি এটি নিশ্চিত যে এটি গল্ফ করার আরও ভাল উপায় আছে তবে আমি ভেবেছিলাম যে আমি এখনও এটি পোস্ট করব, কারণ এখনও কেউ মূল ধারণাটি উল্লেখ করেনি, এবং এটি এখনও অন্যান্য সমাধানগুলির তুলনায় উল্লেখযোগ্যভাবে খাটো ।

import re,unicodedata as u
t='-'.join(u.name(i)[16:]for i in input()).lower()
for i in range(19):t=re.sub('h-[gdb]|(?<!n)([gdbsjc]+)(?!\\1)(?!-?[aeiouyw]) gg dd bb -- - h(?=[nmrcktp])|hh hj l(?=[aeiouyw]) l[nr] [nt][nr] tm pm [pm][nr] km kn|kr|ngr c yi weo'.split()[i],([lambda m:'ktpttt'['gdbsjc'.index(m[0][-1])]]+'kk,tt,pp, ,,t,c,r,ll,nn,nm,mm,mn,ngm,ngn,ch,ui,wo'.split(","))[i],t)
print(t)

কিভাবে এটা কাজ করে

সমাধানটি সত্যটি (যেটি মূল জাপানি রোমানাইজেশন চ্যালেঞ্জ থেকে শিখেছি) কাজে লাগানোর চেষ্টা করে যে রোম্যানাইজড চরিত্রের নাম পাইথনের ইউনিকোডেডা মডিউলের মাধ্যমে অ্যাক্সেসযোগ্য। কোরিয়ান ভাষার জন্য তারা রূপ নেয় HANGUL SYLLABLE <NAME>। দুর্ভাগ্যক্রমে, সরবরাহিত স্পেসিফিকেশন মেটাতে এবং সমস্ত সিলেবল সংমিশ্রণের দৃশ্যাবলী কভার করার জন্য এই নামগুলি প্রক্রিয়াকরণ করতে এখনও কিছুটা প্রচেষ্টা (এবং বাইটস) প্রয়োজন।

প্রাপ্ত চরিত্রের নাম শব্দাংশ তাদের স্বরিত ফর্ম যে কোন জায়গায়, যেমন সমস্ত ব্যঞ্জনবর্ণ তালিকা GGAGGজন্য , R/Lহিসাবে (শুরু অভিপ্রেত প্রতিলিপি করা হয় R, শেষ L), এবং CHহিসাবে দেওয়া হয় C(এই আসলে আমাদের মাথা ব্যাথা একটি বিট সংরক্ষণ)।

প্রথমত, আমরা HANGUL SYLLABLEঅংশটি (প্রথম 16 টি অক্ষর) -কেড়ে ফেলি, এর সাথে উচ্চারণের সীমানা চিহ্নিত করি এবং তারপরে রূপান্তরগুলি করতে RegEx'es এর একটি সিরিজ প্রয়োগ করি।

প্রথম RegEx বিশেষত খারাপ লাগছে। এটি মূলত যা করে তা হ'ল ব্যঞ্জনবিন্যাসকে তাদের শেষ সমতুল্যে রূপান্তরিত করা (দ্বিগুণ ব্যঞ্জনার ক্ষেত্রে অতিরিক্ত বর্ণও সরিয়ে দেওয়া), যখন তারা স্বর অনুসরণ না করে বা কোনও অক্ষরের জন্য - যখন এর আগে থাকে h(?<!n)Lookbehind প্রতিরোধ ম্যাচিং gযা অংশ ng, এবং (?!\\1)lookahead নিশ্চিত করে যে আমরা রুপান্তর করবেন না, যেমন, ssaথেকে tsa

পরবর্তী কয়েকটি RegEx'es ডাবল ব্যঞ্জনবস্তুকে তাদের উদোক্ত সমতুল্যে রূপান্তর করে। এখানে কোথায় -বিভাজক এছাড়াও উপকারে আসা হিসাবে তারা সীমানা দুর্ঘটনায় বিচক্ষণ (সহায়তা g-g) ডবল ব্যঞ্জনবর্ণ থেকে ( gg)। এখন সেগুলিও সরানো যেতে পারে।

এরপরে, আমরা স্বরগুলির আগে এবং অন্যান্য বিশেষ ক্ষেত্রে বাকী h+consonantসংমিশ্রণগুলি পরিচালনা করি l->r

পরিশেষে, আমরা পুনরুদ্ধার cকরতে ch, এবং যেমন আমাদের অন্তর্মুখী গৃহস্থালির কাজ নামের অন্য কিছু pecularities, সমাধান yiপরিবর্তে uiএবং weoপরিবর্তে wo

আমি কোরিয়ান ভাষায় বিশেষজ্ঞ নই এবং আরও বেশি মন্তব্য করতে পারছি না, তবে এটি টাস্কে এবং গিথুব-এ পোস্ট করা সমস্ত পরীক্ষায় উত্তীর্ণ বলে মনে হচ্ছে। স্পষ্টতই, আউটপুট বড়হাতে গ্রহণযোগ্য হলে আরও কয়েকটি বাইট মুভ করা যেতে পারে, কারণ এটিই আমরা নাম ফাংশন থেকে পাই।


পিপিসিজিতে আপনাকে স্বাগতম! দুর্দান্ত প্রথম উত্তর।
ফ্যানটাসি

1
চমৎকার উত্তর. অজগর 3.6 হিসাবে, m[0]একই m.group(0); 6 বাইট সংরক্ষণ
রুটটো

5

জাভাস্ক্রিপ্ট (ES6), 480 বাইট (ডাব্লুআইপি)

বল রোলিংয়ের জন্য বর্তমান চশমাগুলির উপর ভিত্তি করে এটি প্রাথমিক প্রচেষ্টা। মন্তব্যগুলির প্রশ্নগুলি সম্বোধন করা হলে এটি কিছুটা ঠিক করার প্রয়োজন হতে পারে।

s=>[...s].map(c=>c<'!'?c:(u=c.charCodeAt()-44032,y='1478ghjlmnpr'.search((p=t).toString(36)),t=u%28,u=u/28|0,v=u%21,x=[2,5,6,11,18].indexOf(u=u/21|0),~x&~y&&(z=parseInt(V[y+68][x],36))>10?V[z+69]:V[p+40]+V[u+21])+V[v],t=0,V='8a6y8ye6e46ye4y64w8wa6o6y4u/w4w6wi/yu/eu/ui/i/g/k21d/t7r/3b/p0s/ss95j5ch/270h922/197l999930/77ng/77270h/bbcd6afaa8gghi5ffak8alaa8llmn4gghp8abaa8gghq5gghr5ggha5gghs8ng1ng3g/2ll/n1n3d/7r/m1m3b/0s/5ch/h'.replace(/\d/g,n=>'pnkmojeta/'[n]+'/').split`/`).join``

পরীক্ষার মামলা

কিভাবে?

একবার সঙ্কোচিত হয়ে গেলে অ্যারে ভিতে নিম্নলিখিত ডেটা থাকে:

00-20 vowels
a/ae/ya/yee/eo/e/yeo/ye/o/wa/wae/oe/yo/u/wo/we/wi/yu/eu/ui/i

21-39 starting consonants
g/kk/n/d/tt/r/m/b/pp/s/ss//j/jj/ch/k/t/p/h

40-67 ending consonants
/k/k//n///t/l////////m/p//t/t/ng/t/t/k/t/p/h

68-79 indices of substitution patterns for consecutive consonants
      ('a' = no substitution, 'b' = pattern #0, 'c' = pattern #1, etc.)
bbcde/afaaa/gghij/ffaka/alaaa/llmno/gghpa/abaaa/gghqj/gghrj/gghaj/gghsa

80-97 substitution patterns
ngn/ngm/g/k/ll/nn/nm/d/t/r/mn/mm/b/p/s/j/ch/h

আমরা প্রতিটি হ্যাঙ্গুল চরিত্রকে ব্যঞ্জনবর্ণ, স্বরবর্ণ এবং শেষ ব্যঞ্জনবঞ্জনে বিভক্ত করি। আমরা ফলাফল সংযোজন:

  • V[80 + substitution] + V[vowel] যদি একটি বিকল্প আছে
  • V[40 + previousEndingConsonant] + V[21 + startingConsonant] + V[vowel] অন্যভাবে

হতে পারে '!'না 33?
জোনাথন ফ্রেচ

@ জোনাথানফ্রেচ cএকটি বাইট নয়। এটি একটি 1-বর্ণের স্ট্রিং। এটি বলেছিল , একটি গাণিতিক ক্রিয়াকলাপ প্রয়োগ করার 0সময় , একটি স্থান জোর করে যখন অন্য অ-অঙ্কের অক্ষরগুলিকে জোর করা হয় NaN। যার অর্থ c<1প্রত্যাশা মতো আসলে কাজ করা উচিত। (এবং c<33এটি অ-অঙ্কের চরিত্রগুলির জন্যও কাজ করবে, যদিও এটি এক ধরণের দুর্ভাগ্যজনক))
আর্নল্ড

@ c<1জোনাথনফ্রেচ অ্যাডেনডাম : এটিও সত্য হবে "0"(এটি সম্ভবত ঠিক আছে যদি ইনপুটটিতে কোনও আরবি সংখ্যা না রাখার নিশ্চয়তা দেওয়া হয়।)
আর্নাউল্ড

ধন্যবাদ। আমি মনে করি না যে জাভাস্ক্রিপ্টটিতে অক্ষরগুলি একক বাইট হিসাবে প্রয়োগ করা হবে, তবে তা চেষ্টা করার পরেও। এটি অবশ্য কাজ করে বলে মনে হয়েছিল। কেন জানি এখন খুশি।
জোনাথন ফ্রেচ

2

Tcl, 529 বাইট

fconfigure stdin -en utf-8
foreach c [split [read stdin] {}] {scan $c %c n
if {$n < 256} {append s $c} {incr n -44032
append s [string index gKndTrmbPsS-jJCktph [expr $n/588]][lindex {a ae ya yae eo e yeo ye o wa wae oe yo u wo we wi yu eu ui i} [expr $n%588/28]][string index -Ak-n--tl-------mp-BGQDEkFph [expr $n%28]]}}
puts [string map {nr nn
A- g An ngn Ar ngn Am ngm A kk
t- d p- b B- s D- j
nr ll l- r ln ll lr ll
A k B t G t D t E t F t
K kk T tt P pp S ss J jj C ch Q ng
- ""} [regsub -all -- {[tpBDEFh]([nrm])} $s n\\1]]

অ্যালগরিদম

  1. সীসা, স্বরবর্ণ এবং লেজ সূচকগুলিতে পচন
  2. মধ্যবর্তী বর্ণমালা উপস্থাপনা প্রথম লুক
  3. সমস্ত xn → nn / xm → nm রূপান্তরগুলির জন্য প্রাথমিক পাস প্রয়োগ করুন
  4. বাকি রূপান্তরগুলির জন্য একটি চূড়ান্ত পাস প্রয়োগ করুন

এই অ্যালগরিদম চ্যালেঞ্জের উদ্দেশ্যে কাটা হয়েছে; ট্রেড-অফ হওয়ায় ইনপুটটি কোনও লাতিন বর্ণমালার অক্ষর ধারণ করে না , বা চ্যালেঞ্জটিতে বর্ণিত U + AC00 হ্যাঙ্গুল ব্লকের বাইরে অক্ষর ব্যবহার করবে না বলে ধারণা করা হচ্ছে । এই আসল কোডটি ছিল, আমি চূড়ান্ত পাস না হওয়া পর্যন্ত জামোর সমস্ত রূপান্তর রাখতাম।

আমি মনে করি যে আমি সেই স্বরগুলি সঙ্কুচিত করতে এবং আরও কিছু পুনরাবৃত্তি অনুসন্ধান সারণিতে ফেলে দিতে পারতাম, তবে এটি আমার কাছ থেকে আজকের মতোই দুর্দান্ত।

পরীক্ষামূলক

আপনি টিসিএল দোভাষীকে ইউটিএফ -8 ইনপুট সরবরাহ করতে পারেন তা নিশ্চিত করুন। এটি একটি সাধারণ ইউটিএফ -8 পাঠ্য ফাইলের সাহায্যে খুব সহজেই সম্পন্ন হয়। হায়, টিসিএল এখনও ইউটিএফ -8 এ ডিফল্টরূপে ডিফল্ট হয় না; এই আমার 33 বাইট খরচ।

আমার (বর্তমানে করুণ) পরীক্ষার ফাইলটি এখানে:

한
안녕하세요
나랏말싸미 듕귁에달아

মন্তব্য

আমি কোরিয়ান ভাষা সম্পর্কে কিছুই জানি না (আমি এখানে যা শিখেছি তা বাদ দিয়ে)। এটি একটি প্রথম প্রচেষ্টা, প্রশ্নের স্পেসিফিকেশনের আপডেটের কারণে সম্ভাব্য সংশোধনী মুলতুবি রয়েছে।

এবং, সে সম্পর্কে, কিছু অতিরিক্ত তথ্য দরকারী। বিশেষত, সীসা এবং লেজযুক্ত ব্যঞ্জনবর্ণের মধ্যে 1: 1 যোগাযোগ নেই বলে মনে হয় যে চ্যালেঞ্জে প্রস্তাবিত হয়েছে। নিম্নলিখিত দুটি সাইট এটিকে খুঁজে বের করতে প্রচুর পরিমাণে সহায়তা করেছে:
উইকিপিডিয়া: কোরিয়ান ভাষা, হাঙ্গুল
উইকিপিডিয়া: হাঙ্গুল জামো (ইউনিকোড ব্লক)

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