তুর্কি ক্রিয়া সংহত করুন


11

ইনপুট

  • ক্রিয়া , নিয়মিত প্রকাশের সাথে মেলে এমন একটি স্ট্রিং([a-pr-vyzıöüçğş]*[aeıioöuü][bcçdfgğhj-nprsştvyz]+|([a-pr-vyzıöüçğş]*[aeıioöuü]){2})(mak|mek)
  • বহুবচন , সত্যবাদী বা মিথ্যা মান
  • ব্যক্তি , একটি পূর্ণসংখ্যা যার মান 1, 2 বা 3 হয়
  • কাল , একটি পূর্ণসংখ্যা যার মান 1, 2 বা 3 হয়

আউটপুট

তুর্কি ক্রিয়া ক্রিয়াটির সংশ্লেষিত রূপ , ব্যক্তিগতভাবে st / nd / rd ব্যক্তি, বহুবচন যদি বহুবচন হয় TRUEএবং একক না হয় তবে

  • যদি কাল 1 হয়, সহজ বর্তমান;
  • যদি কাল 2 হয়, অবিরত উপস্থিত থাকে;
  • যদি কাল 3 হয়, ভবিষ্যত।

বিধি

তুর্কি ক্রিয়াগুলি তিনটি উপাদানে সংমিশ্রিত হয়, যা ক্রমযুক্ত:

  • স্টেম , অপসারণ দ্বারা গঠিত makবা mek: infinitive শেষ প্রান্ত থেকে;
  • কাল চিহ্ন , যা:

    • সাধারণ উপস্থিতির জন্য:

      • -আর যদি স্টেমটি স্বরবর্ণে শেষ হয়;
      • স্বরবৃত্তির সংগত নিয়ম অনুসারে (নীচে দেখুন) যদি কান্ডে একাধিক উচ্চারণযুক্ত (অর্থাত্ স্বর) থাকে, বা নীচের একটি অনিয়মিত ক্রিয়া থেকে থাকে: আলমাক, বিল্মেক, বাল্মাক, দুরমাক, জেলমেक, গর্মেক, কলমাক, ওলমাক, meলমেেক, সনমাক, ভার্মেক, ভার্মাক, বর্মক ;
      • -er অনুযায়ী স্বরবর্ণ সাদৃশ্য নিয়ম যদি স্টেম এক শব্দাংশ রয়েছে এবং উপরে irregular ক্রিয়া তালিকাভুক্ত করা না থাকে।
    • অব্যাহত উপস্থিত জন্য -iyor , যেখানে আমি অনুযায়ী পরিবর্তন স্বরবর্ণ সাদৃশ্য নিয়ম । একটি স্বরবর্ণের শেষে যে কান্ডগুলি এই প্রত্যয়টি যুক্ত করার আগে এই স্বরটি বাদ দেয়, তারপরে প্রত্যয়টি শব্দের পরবর্তী-শেষ-শেষ স্বরটির সাথে মিলিত হয় (নিয়মিত অভিব্যক্তির দ্বারা গ্যারান্টিযুক্ত)।

    • ভবিষ্যতের জন্য:
      • স্বরবৃত্তির সামঞ্জস্যের নিয়ম অনুসারে অনুসন্ধান করুন যদি স্টেমটি কোনও ব্যঞ্জনায় শেষ হয়;
      • -স্বরে সামঞ্জস্যের নিয়ম অনুসারে যদি স্টেমটি স্বরতে শেষ হয়।
  • ব্যক্তিগত প্রত্যয় অনুযায়ী কর্মের অভিনয়কারী ইঙ্গিত, সব ক্ষেত্রেই স্বরবর্ণ সাদৃশ্য নিয়ম :

        |Singular|Plural|
    |---|--------|------|
    |1st|    -im |   -iz|
    |2nd|   -sin |-siniz|
    |3rd| (none) |  -ler|
    

    চূড়ান্ত ভবিষ্যত কাল এর হয়ে G আগে -im এবং -iz সুতরাং উদাহরণস্বরূপ, (almak, TRUE, 1, 3)উত্পাদ হবে alacağız

স্বরবৃত্তির সামঞ্জস্যের নিয়ম

তুর্কি স্বরগুলি দুটি দলে বিভক্ত: পিছনে ( a ı o u) এবং সামনের ( e i ö ü) মুখের দ্বারা যেখানে তারা উচ্চারণ হয়। শব্দের প্রত্যয়গুলি মূলের স্বর অনুসারে স্বর পরিবর্তন করে।

উপরে বর্ণিত সমস্ত প্রত্যয় যা এর পরিবর্তে স্বর হিসাবে আমি ব্যবহার করি:

  • - যদি প্রত্যয়টির আগে শেষ স্বরবর্ণ হয় ıবা a(এই উভয় স্বর পিছনে এবং ভিত্তিহীন);
  • -আই যদি প্রত্যয়টির আগে শেষ স্বরবর্ণ হয় iবা e(এই উভয় স্বরগুলি সামনের এবং ভিত্তিহীন; এখানে বিন্দু এবং বিন্দুবিহীন মধ্যে তুর্কি পার্থক্য লক্ষ করুন );
  • -উ যদি প্রত্যয়টির আগে শেষ স্বরবর্ণ হয় uবা o(এই উভয় স্বর পিছনে এবং বৃত্তাকার হয়); অথবা
  • - যদি প্রত্যয়টির আগে শেষ স্বরবর্ণ হয় üবা ö(এই উভয় স্বরগুলি সামনে এবং বৃত্তাকার হয়)।

বর্তমান ক্রমাগত প্রত্যয় আইওর যত্ন সহকারে নোট নিন । iসমন্বয় করে, কিন্তু oপরিবর্তন করে না। ব্যক্তিগত প্রত্যয়টি সুতরাং এর সাথে মিলিত হবে o

উপরে বর্ণিত সমস্ত প্রত্যয় যা এর স্বর হিসাবে ব্যবহার করে:

  • - প্রত্যয়টির আগে যদি শেষ স্বরবর্ণটি সামনের স্বর হয়; অথবা
  • -এ প্রত্যয়ের পূর্বে শেষ স্বরবর্ণটি যদি পিছনের স্বর হয়।

অনিয়মিত ক্রিয়াগুলি

ক্রিয়া gitmek , tatmak , ditmek , gütmek এবং etmek পরিবর্তন চূড়ান্ত tএকটি থেকে dকোন শেষা w শ করে একটি স্বরবর্ণ দিয়ে শুরু (যা এই প্রতিদ্বন্দ্বিতায় সব শেষা w শ অন্তর্ভুক্ত) আগে। কোন ক্রিয়া যে প্রান্ত -etmek একইভাবে পরিবর্তন tএকটি থেকে d, এবং appends -er সহজ বর্তমানে (যদিও এই তাই অন্যান্য ক্রিয়া জন্য নয়)।

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

gütmek, FALSE, 1, 2 -> güdüyorum
almak, TRUE, 3, 3 -> alacaklar
boğmak, TRUE, 2, 1 -> boğarsınız
ölmek, FALSE, 3, 1 -> ölür
boyamak, TRUE, 1, 2 -> boyuyoruz
affetmek, FALSE, 2, 1 -> affedersin
söylemek, TRUE, 3, 1 -> söylerler
söylemek, FALSE, 3, 2 -> söylüyor
söylemek, FALSE, 1, 3 -> söyleyeceğim

আপনি কি -etmekনিয়মের জন্য একটি পরীক্ষার কেস সরবরাহ করতে পারেন ?
আর্নল্ড

@ আরনাউল্ড হয়ে গেছে এটি করার সময় আমি আবিষ্কার করেছি যে স্পেসিফিকেশনটিতে আমি একটি ত্রুটি করেছি, যা আমি "অনিয়মিত ক্রিয়াগুলি" বিভাগে যুক্ত করেছি।
ইমপ্লেম

এটি আরও অনেক পরীক্ষার ক্ষেত্রে করতে পারে, যেহেতু অনুমানটি বেশ জটিল।
ডেভ

@ ডেভ আমি আরও 3 টি যুক্ত করেছি, যা আমাকে মোবাইলে যথেষ্ট সময় নিয়েছিল। আমি আরও পরে যোগ করব।
EMBLEM

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6), 466 456 451 446 বাইট

(v,p,w,t)=>(R=g=>g.exec(s),T=r=>s=s.slice(0,-1)+r,Z=s=>s.replace(/\d/g,c=>l=['ıuiü'[(n='aıoueiöü'.search(l))>>1],'ae'[n>>2]][c]),(s=v.slice(k=l=0,-3)).replace(/[aıoueiöü]/g,c=>(L=l,l=c,k++)),(R(/^(gi|ta|di|gü)t$/)||(R(/et$/)&&(k=1)))&&T`d`,((E=R(/[aıoueiöü]$/))&&t==2?(l=L,T``):s)+Z([(E?'':k<2&!R(/^((k?a|bi|bu|ge|o|ö)l)|dur|gör|san|v[aeu]r$/))+'r','0yor',(E?'y1c1':'1c1')+'ğkk'[--w]][t-1])+Z('0m|0z|s0n|s0n0z||l1r'.split`|`[w+w+p],t-2||(l='o')))

অবহেলিত এবং মন্তব্য

// Parameters:
//   - 'v' = verb
//   - 'p' = plural flag
//   - 'w' = person
//   - 't' = tense
(v, p, w, t) => (
  // R() - Helper function to execute a regular expression on the stem.
  R = g => g.exec(s),

  // T() - Helper function to replace the last character of the stem with 'r'.
  T = r => s = s.slice(0, -1) + r,

  // Z() - Function that applies vowel harmony to the string 's', assuming
  //       '0' = 'i' and '1' = 'e' and using the last encountered vowel 'l'.
  Z = s => s.replace(
    /\d/g,
    c => l = [
      'ıuiü' [(n = 'aıoueiöü'.search(l)) >> 1],
      'ae' [n >> 2]
    ][c]
  ),

  // Computes:
  //   - 's' = stem
  //   - 'k' = number of vowels in stem
  //   - 'l' = last vowel in stem
  //   - 'L' = penultimate vowel in stem
  (s = v.slice(k = l = 0, -3)).replace(/[aıoueiöü]/g, c => (L = l, l = c, k++)),

  // Applies ending 't' => 'd' for irregular verbs and those ending in -et(mek).
  (R(/^(gi|ta|di|gü)t$/) || (R(/et$/) && (k = 1))) && T `d`,

  // Computes 'E' = truthy value if the stem ends in a vowel.
  // If 'E' is truthy and the tense is the continuing present, drops this vowel.
  ((E = R(/[aıoueiöü]$/)) && t == 2 ? (l = L, T ``) : s) +

  // Appends sign of tense with vowel harmony.
  Z([
    // t = 1: simple present -> either '-er', '-ir' or '-r'
    (E ? '' : k < 2 & !R(/^((k?a|bi|bu|ge|o|ö)l)|dur|gör|san|v[aeu]r$/) + 'r',

    // t = 2: continuing present -> always '-iyor'
    '0yor',

    // t = 3: future -> either '-yecek', '-ecek', '-yeceğ' or '-eceğ'
    (E ? 'y1c1' : '1c1') + 'ğkk' [--w]
  ][t - 1]) +

  // Appends personal suffix with vowel harmony,
  // forcing last vowel to 'o' for continuing present.
  Z(
    '0m|0z|s0n|s0n0z||l1r'.split `|` [w + w + p],
    t - 2 || (l = 'o')
  )
)

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

let f =
(v,p,w,t)=>(R=g=>g.exec(s),T=r=>s=s.slice(0,-1)+r,Z=s=>s.replace(/\d/g,c=>l=['ıuiü'[(n='aıoueiöü'.search(l))>>1],'ae'[n>>2]][c]),(s=v.slice(k=l=0,-3)).replace(/[aıoueiöü]/g,c=>(L=l,l=c,k++)),(R(/^(gi|ta|di|gü)t$/)||(R(/et$/)&&(k=1)))&&T`d`,((E=R(/[aıoueiöü]$/))&&t==2?(l=L,T``):s)+Z([(E?'':k<2&!R(/^((k?a|bi|bu|ge|o|ö)l)|dur|gör|san|v[aeu]r$/))+'r','0yor',(E?'y1c1':'1c1')+'ğkk'[--w]][t-1])+Z('0m|0z|s0n|s0n0z||l1r'.split`|`[w+w+p],t-2||(l='o')))

console.log(f("gütmek", false, 1, 2));    // -> güdüyorum
console.log(f("almak", true, 3, 3));      // -> alacaklar
console.log(f("boğmak", true, 2, 1));     // -> boğarsınız
console.log(f("ölmek", false, 3, 1));     // -> ölür
console.log(f("boyamak", true, 1, 2));    // -> boyuyoruz
console.log(f("affetmek", false, 2, 1));  // -> affedersin
console.log(f("söylemek", true, 3, 1));   // -> söylerler
console.log(f("söylemek", false, 3, 2));  // -> söylüyor
console.log(f("söylemek", false, 1, 3));  // -> söyleyeceğim


এই অ্যাকাউন্টটি কী d-মেটকে শেষ হয়ে যাওয়া সমস্ত ক্রিয়া- বিন্যাসের জন্য রয়েছে ? আমি জাভাস্ক্রিপ্ট জানি না তবে আমি যা সংগ্রহ করতে পারি তার থেকে দেখে মনে হচ্ছে এটি অন্যদের সাথে কেবল বন্ধ হয়ে গেছে।
EMBLEM

@ এমবিলেম - এটি ঠিক করা উচিত।
আর্নল্ড

4

সেড, 583 বাইট

sed -E 's/^((bul|dur|k?al|ol|san|v[au]r)ma|(bil|gel|gör|öl|ver)me)k( . .) 1/\2\3Ir\4/;s/etmek( . .) 1/edEr\1/;s/etmek /ed /;s/^((ta)tma|([dg]i|gü)tme)k /\2\3d /;s/m[ae]k / /;s/([aıoueiöüEI])/V\1/g;s/(V.)( . .) 1/\1r\2/;s/(V.+V.+)( . .) 1/\1VIr\2/;s/( . .) 1/VEr\1/;s/(V.)?( . .) 2/VIyVor\2/;s/(V.)( . . 3)/\1y\2/;s/( . .) 3/VEcVEk\1/;s/k( . 1)/ğ\1/;s/ 0 1/VIm/;s/ 1 1/VIz/;s/ 0 2/sVIn/;s/ 1 2/sVInVIz/;s/ 0 3//;s/ 1 3/lVEr/;:l
s/([ıa][^V]*V)I/\1ı/;s/([ie][^V]*V)I/\1i/;s/([uo][^V]*V)I/\1u/;s/([üö][^V]*V)I/\1ü/;s/([aıou][^V]*V)E/\1a/;s/(V[^aEI][^V]*V)E/\1e/;t l
s/V//g'

ঘনিষ্ঠভাবে সম্পর্কিত ড্যাকটাইলিক হেক্সাসমিন প্রশ্নের আমার উত্তরটির মতো , এটি নিয়মিত প্রকাশের হিসাবে দেওয়া নিয়মগুলি সত্যিই অনুবাদ করছে।

ব্যবহার:

আকারে ইনপুট নেয়:

word [01] [123] [123]

সুতরাং পরীক্ষার কেসগুলি হ'ল:

printf 'gütmek 0 1 2
almak 1 3 3
boğmak 1 2 1
ölmek 0 3 1
boyamak 1 1 2
affetmek 0 2 1
söylemek 1 3 1
söylemek 0 3 2
söylemek 0 1 3' | sed -E '<...>';

ভাঙ্গন:

sed -E "
# special cases for simple present tense
 s/^((bul|dur|k?al|ol|san|v[au]r)ma|(bil|gel|gör|öl|ver)me)k( . .) 1/\2\3Ir\4/;

# stemming
# always uses -er rule if simple present
 s/etmek( . .) 1/edEr\1/;
 s/etmek /ed /;
 s/^((ta)tma|([dg]i|gü)tme)k /\2\3d /;
 s/m[ae]k / /;

# mark vowels for easier expressions later
 s/([aıoueiöüEI])/V\1/g;

# simple present
 s/(V.)( . .) 1/\1r\2/;
 s/(V.+V.+)( . .) 1/\1VIr\2/;
 s/( . .) 1/VEr\1/;

# continuing present
 s/(V.)?( . .) 2/VIyVor\2/;

# future
 s/(V.)( . . 3)/\1y\2/;
 s/( . .) 3/VEcVEk\1/;

# personal suffix
 s/k( . 1)/ğ\1/;
 s/ 0 1/VIm/;
 s/ 1 1/VIz/;
 s/ 0 2/sVIn/;
 s/ 1 2/sVInVIz/;
 s/ 0 3//;
 s/ 1 3/lVEr/;

# vowel harmony
 :l
 s/([ıa][^V]*V)I/\1ı/;
 s/([ie][^V]*V)I/\1i/;
 s/([uo][^V]*V)I/\1u/;
 s/([üö][^V]*V)I/\1ü/;

 s/([aıou][^V]*V)E/\1a/;
 s/(V[^aEI][^V]*V)E/\1e/;
# keep looping until all vowels are known
 t l

# unmark vowels
 s/V//g
"

পরীক্ষার ক্ষেত্রে ফলাফল:

güdüyorum
alacaklar
boğarsınız
ölür
boyuyoruz
affedersin
söylerler
söylüyor
söyleyeceğim

আপনি affedersin সম্পর্কে সঠিক। লিখতে গিয়ে আমি বেশ কয়েকবার সর্বনাম পরিবর্তন করেছি
EMBLEM

কেস 2 নোট নিন; এটা alacak হওয়া উচিত Lar , Ler না।
EMBLEM

@ এমবিএলএম স্থির; যদিও আমার আরও 2 বাইট খরচ (তবে 600 এ 2 বাইট কি?)
ডেভ

আপনি মুছে ফেলতে পারেন sed -E '', যেহেতু আপনি সেডকে ভাষা হিসাবে উল্লেখ করেছেন এবং বাশ নয়, সুতরাং স্ক্রিপ্টটিকে সেড সোর্স কোড হিসাবে বিবেচনা করুন। এরপরে আপনি এটি চালিয়ে যেতে পারেন: printf ...|sed -Ef filenameই পতাকার জন্য আরও 1 বাইট যোগ করুন, শেষে 8 টি বাইট সংরক্ষণ করুন। বিটিডব্লিউ, আজ অবধি কখনই জানতেন না যে, -আর-র সমতুল্য!
সেশোমারা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.