एक तुर्की क्रिया को पूरा करें


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 है

उत्पादन

तुर्की क्रिया के संयुग्मित प्रपत्र क्रिया , में व्यक्ति अनुसूचित जनजाति / nd / वां व्यक्ति, बहुवचन अगर बहुवचन है TRUEऔर विलक्षण अगर यह नहीं है, में

  • यदि तनाव 1 है, तो सरल वर्तमान;
  • यदि तनाव 2 है, तो निरंतर मौजूद;
  • यदि तनाव 3 है, तो भविष्य।

नियम

तुर्की क्रियाएं तीन तत्वों में संयुग्मित होती हैं, जो क्रम में हैं:

  • स्टेम , को हटाने के द्वारा गठित makया mekक्रिया के साधारण के अंत से;
  • काल का चिह्न , जो है:

    • सरल वर्तमान के लिए:

      • -यदि तना एक स्वर में समाप्त होता है;
      • - स्वर सामंजस्य नियमों के अनुसार (नीचे देखें) यदि तने में एक से अधिक शब्दांश (अर्थात स्वर) हैं, या निम्न अनियमित क्रियाओं में से एक है: अलमक, बिल्मेक, बुलमक, दुर्यक, गाल्मेक, गौमेक, कलमक, ओलमक, ölmek, sanmak, vermek, varmak, vurmak ;
      • -वैद्य सामंजस्य के नियमों के अनुसार यदि तने में एक शब्दांश हो और ऊपर अनियमित क्रियाओं में सूचीबद्ध न हो।
    • निरंतर वर्तमान के लिए, -ओर , जहां मैं स्वर सद्भाव नियमों के अनुसार बदलता है । एक स्वर में समाप्त होने वाले तने इस प्रत्यय को जोड़ने से पहले इस स्वर को छोड़ देते हैं, जिससे प्रत्यय शब्द में अगले-से-अंतिम स्वर (नियमित अभिव्यक्ति द्वारा मौजूद होने की गारंटी) के साथ मेल खाता है।

    • भविष्य के लिए:
      • -वैसे स्वर सामंजस्य नियमों के अनुसार यदि तना एक व्यंजन में समाप्त होता है;
      • -वैसे स्वर के सामंजस्य के अनुसार नियम करें यदि स्वर एक स्वर में समाप्त होता है।
  • व्यक्तिगत प्रत्यय के अनुसार कार्रवाई की कलाकार इंगित करने के लिए, सभी मामलों में स्वर सद्भाव नियम :

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

    भविष्य काल का अंतिम k -im और -iz से पहले ğ हो जाता है , इसलिए उदाहरण के लिए उपज होगा ।(almak, TRUE, 1, 3)alacağız

स्वर सामंजस्य नियम

तुर्की स्वरों को दो समूहों में विभाजित किया गया है: पीछे ( a ı o u) और सामने ( e i ö ü) मुंह में जहां वे उच्चारण करते हैं। एक शब्द के प्रत्यय जड़ के स्वर के अनुसार स्वर बदलते हैं।

उपर्युक्त सभी प्रत्यय जिसका उपयोग करने के बजाय स्वर के रूप में मेरे पास है :

  • -यदि प्रत्यय से पहले अंतिम स्वर है ıया a(ये दोनों स्वर वापस आ गए हैं और अनारक्षित हैं);
  • -यदि प्रत्यय से पहले अंतिम स्वर है iया e(ये दोनों स्वर सामने और अलक्षित हैं, तो यहाँ ध्यान दें और डॉटलेस I के बीच तुर्की का अंतर );
  • -अगर प्रत्यय से पहले अंतिम स्वर है uया o(ये दोनों स्वर पीछे और गोल हैं); या
  • यदि प्रत्यय से पहले अंतिम स्वर है üया ö(ये दोनों स्वर सामने और गोल हैं)।

वर्तमान निरंतर प्रत्यय-ध्यान का ध्यान रखेंiHarmonizes, लेकिन oनहीं बदलता है। इस प्रकार व्यक्तिगत प्रत्यय के साथ सामंजस्य होगा o

उपर्युक्त सभी प्रत्यय जो उपयोग के बजाय स्वर के रूप में हैं:

  • -यदि प्रत्यय से पहले अंतिम स्वर सामने स्वर है; या
  • -यदि प्रत्यय से पहले अंतिम स्वर एक पिछला स्वर है।

अनियमित क्रियाएं

क्रिया gitmek , tatmak , ditmek , gütmek , और etmek किसी भी अंत से पहले अंतिम tको बदलते हैं dजो एक स्वर से शुरू होता है (जिसमें इस चुनौती में सभी अंत शामिल हैं)। किसी भी क्रिया है कि में समाप्त होता है -etmek वैसे ही बदल जाता है tएक करने के लिए d, और संलग्न कर देता है -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नियम के लिए एक परीक्षण मामला प्रदान कर सकते हैं ?
अरनुलद

@ अरनुलड डन। ऐसा करने पर मुझे पता चला कि मैंने विनिर्देश में एक त्रुटि की है, जिसे मैंने "अनियमित क्रिया" अनुभाग में जोड़ा है।
EMBLEM

यह बहुत अधिक परीक्षण मामलों के साथ कर सकता है, क्योंकि कल्पना काफी जटिल है।
डेव

@ मैंने 3 और जोड़े, जो मुझे मोबाइल पर लंबे समय तक ले गए। मैं और भी बाद में जोड़ूंगा।
EMBLEM

जवाबों:


4

जावास्क्रिप्ट (ईएस 6), 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-मीक में समाप्त होने वाली सभी क्रियाओं पर -mutation के लिए है ? मैं जावास्क्रिप्ट नहीं जानता, लेकिन जो मैं इकट्ठा कर सकता हूं, वह ऐसा लगता है कि यह दूसरों के साथ बस टकरा गया है।
EMBLEM

@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'

बारीकी से संबंधित Dactylic Hexameter प्रश्न के लिए मेरे उत्तर की तरह , यह वास्तव में नियमों का अनुवाद कर रहा है जैसा कि नियमित अभिव्यक्तियों में दिया गया है।

उपयोग:

फार्म में इनपुट लेता है:

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

आप एफेडेरसिन के बारे में सही हैं। मैंने कई बार सर्वनामों को स्विच करते हुए लिखा है कि
EMBLEM

केस 2 पर ध्यान दें; यह एल्क लार होना चाहिए , न कि चिकना ।
EMBLEM

@EMBLEM तय; मेरी कीमत 2 और बाइट्स है (लेकिन 600 में 2 बाइट्स क्या हैं?)
डेव

आप हटा सकते हैं sed -E '', क्योंकि आपने sed को भाषा के रूप में निर्दिष्ट किया है और बैश नहीं किया है, इसलिए स्क्रिप्ट को sed स्रोत कोड के रूप में समझें। फिर आप इसे चला सकते हैं जैसे: printf ...|sed -Ef filenameई झंडे के लिए 1 बाइट अधिक जोड़ना, अंत में 8 बाइट्स की बचत करना। Btw, आज तक कभी नहीं पता था कि -E बराबर -r है!
शीशमारा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.