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


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.