Pleasanortmanteaus


32

একটি পোর্টম্যানট্যু শব্দটি এমন দুটি শব্দের সংমিশ্রণ যা প্রতিটি শব্দের অংশ নেয় এবং এগুলিকে একক নতুন শব্দে পরিণত করে। উদাহরণস্বরূপ, সিংহ + বাঘ => লাইগার

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

(উদাহরণগুলির জন্য এখানে উপসর্গ এবং প্রত্যয়গুলির মধ্যে পৃথককারীর সাথে স্পষ্টতার জন্য দেখানো হয়েছে: li|gerতবে প্রোগ্রামটির আসল আউটপুটগুলিতে পৃথককারী হওয়া উচিত নয় liger।)

  • প্রতিটি পোর্টম্যান্টিউতে প্রথম শব্দের একটি অজানা উপসর্গটি থাকে যা দ্বিতীয় শব্দের একটি প্রত্যয়যুক্ত প্রত্যয়কে বোঝায়: হ্যাঁ li|ger, না |iger
  • উপসর্গটি যদি একটি স্বর দিয়ে শেষ হয় তবে প্রত্যয়টি অবশ্যই একটি ব্যঞ্জনবর্ণ দিয়ে শুরু করা উচিত এবং তদ্বিপরীত: হ্যাঁ lio|gerবা না l|er, না lio|igerবা l|gerস্বর বা ব্যঞ্জনবর্ণ হিসাবে গণনা yকরা যায় কিনা তা আপনি সিদ্ধান্ত নিতে পারেন । তবে আপনার সমাধান অবশ্যই একটি বিকল্প বাছাই করতে হবে এবং এটির সাথে আটকে থাকবে।
  • হ্যাঁ করুন: ফলে শব্দ পারেন পূর্ণ মূল শব্দের থাকতে পারবে না lio|ger, কোন থেকে lion|igerবা li|tiger
    • উভয় শব্দের অংশ থেকে প্রশ্নের অংশটি গঠিত হয়ে থাকলেও এই নিয়মটি ধরে রেখেছে: two+ ইনপুট সহ words, আউটপুট tw|ordsএখনও অবৈধ কারণ এটিতে স্ট্রিং রয়েছে words। (এই জুটির একমাত্র বৈধ আউটপুট হবে t|ords))

আপনার প্রোগ্রাম বা ফাংশনটিতে অবশ্যই দুটি শব্দ লাগবে এবং আউটপুট / সমস্ত মনোরম পোর্টম্যান্টিয়াসের একটি তালিকা প্রত্যাবর্তন করতে হবে যা সেই শব্দগুলি থেকে সেই ক্রমে তৈরি হতে পারে।

বিস্তারিত

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

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

> lion, tiger
< liger, ler, liger, lir, lioger, lior

> tiger, lion
< tion, ton, tin, tigion, tigon, tigen

> spoon, fork
< sork, spork, spork, spok, spoork, spook

> smoke, fog
< sog, smog, smog, smokog

> gallop, triumph
< giumph, gumph, gariumph, gamph, gaph, gah, galiumph, galumph, galliumph, gallumph, galloriumph, gallomph, galloh

> breakfast, lunch
< bunch, brunch, brench, brech, breh, breanch, breach, breah, breakunch, breakfunch, breakfanch, breakfach, breakfah, breakfasunch

> two, words
< tords

> harry, ginny (if y is treated as a consonant)
< hinny, hanny, hany, hay, harinny, harrinny

> harry, ginny (if y is treated as a vowel)
> hinny, hy, hanny, hany, harinny, hary, harrinny

রেফারেন্স সমাধান

পিপ-এ এখানে একটি রেফারেন্স সমাধান রয়েছে (ব্যঞ্জনা yহিসাবে বিবেচনা করে )।


এটি : প্রতিটি ভাষায় সংক্ষিপ্ত উত্তর জিততে পারে!



ডিলিমিটারটি অবশ্যই ধ্রুবক হওয়া উচিত বা আমি শব্দের মধ্যে একটি গুচ্ছ ফাঁক রাখতে পারি?
অসোন তুহিদ

@ অ্যাসোনতুহিড শিওর, সাদা জায়গার পরিবর্তনশীল পরিমাণ একটি গ্রহণযোগ্য ডিলিমিটার হবে। একমাত্র প্রয়োজনীয়তা "এটি একটি স্পষ্ট যেখানে একটি পোর্টম্যান্টিউ শব্দটি শেষ হয় এবং পরেরটি শুরু হয়।"
ডিএলস্ক

উত্তর:


5

05 এ বি 1 ই , 28 বাইট

y একটি স্বরবর্ণ (যদিও ব্যঞ্জন হিসাবে একই বাইট গণনা)।

нη¨sθ.s¨âʒ`нsθ‚žOsåË_}Jʒs¢Z_

এটি অনলাইন চেষ্টা করুন! অথবা সামান্য পরিবর্তিত টেস্ট স্যুট হিসাবে


2
চমৎকার উত্তর! মজাদার কীভাবে শেষ ফিল্টারটির জন্য বেশ কয়েকটি বিকল্প রয়েছে, তবে দুর্ভাগ্যক্রমে সমস্ত একই বাইট-কাউন্ট .. ʒs¢Z_! ʒsåO_; ʒsм__; ইত্যাদি
কেভিন ক্রুইজসেন

4

রেটিনা , 72 বাইট

L$w`(?<=[aeiou]()|.())((.+),(.+))\B(?!\4)(?<!\5\3)(?([aeiou])\2|\1)
$`$'

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


বাহ, আমি যতদূর পেরেছি Lw$`(?<=[aeiou])(.+),(.+)(?<!^\2\1,\2)(?!\1)(?=[^aeiou])|(?<=[^aeiou])(.+),(.+)(?<!^\4\3,\4)(?!\3)(?=[aeiou])কিন্তু মাথা ব্যথার কারণে আমি এটি গল্ফ করাতে মনোনিবেশ করতে পারিনি।
নিল

আমার প্রথম প্রয়াসটি বেশ অনুরূপ ছিল, যদিও আমি স্বর / ব্যঞ্জনবর্ণের জিনিসটি শেষের মতো কিছু দিয়ে পরীক্ষা করে কেন্দ্রের অংশটি পুনরাবৃত্তি করা এড়িয়ে (?=.(?<=[aeiou]\1[^aeiou]|[^aeiou]\1[aeiou]))গিয়েছিলাম এবং এটি এখন যেখানে রয়েছে সেখানে নামার জন্য সম্ভবত কমপক্ষে ছয়টি পুনরাবৃত্তি প্রয়োজন।
মার্টিন ইন্ডার

( ^আমার আগের মন্তব্যে থাকা ভ্রান্ত) সত্যিই, আমি কখনই সেই ()|.()কৌশলটি ভাবতাম না , আমি সম্ভবত থেমে থাকতাম Lw$`(?<=([aeiou])|.)((.+),(.+))(?<!\4\2)(?!\3)(?=(?(1)[^aeiou]|[aeiou]))
নিল

3

পাইথ , 38 বাইট

f!s}RTQm+hd_edfxFm}ed"aeiou"T*._hQ.__e

ইনপুট দুটি শব্দের একটি তালিকা এবং y ব্যঞ্জনবর্ণ হিসাবে বিবেচিত হয় না।

এটি এখানে অনলাইনে চেষ্টা করুন , বা এখানে একবারে সমস্ত পরীক্ষার কেস যাচাই করুন

f!s}RTQm+hd_edfxFm}ed"aeiou"T*._hQ.__e   Implicit: Q=eval(input())
                                hQ       First input word
                              ._         All prefixes of the above
                                     e   Second input word (Q inferred)
                                  .__    Reverse, take all prefixes
                             *           Cartesian product of the above
              f                          Filter the above using:
                 m          T              Map d in the current element using:
                   ed                        The last letter of the word part
                  }  "aeiou"                 Is it contained in the vowel list?
               xF                          Take the XOR of the list
                                         (This ensures that the word parts meet at one consonant)
       m                                 Map d in the filtered set using:
        +hd_ed                             Add the first part to the reversed second part
f                                        Filter the above using:
  s}RTQ                                    Does the portmanteau contain either of the input words?
 !                                         Logical NOT (remove from list if the above is true)

3

জাভা 8, 228 225 215 বাইট

v->w->{String r="",t,p=" aeiou";for(int i=w.length(),j;--i>0;)for(j=1;j<v.length();)r+=(t=v.substring(0,j)+w.substring(i)).matches(v+".*|.*"+w)|p.indexOf(t.charAt(j-1))*p.indexOf(t.charAt(j++))>0?"":t+" ";return r;}

বাক্য গঠন সিনট্যাক্সে দুটি স্ট্রিং নেয় এবং একটি স্ট্রিং প্রদান করে। ব্যঞ্জনা yহিসাবে আচরণ করে । এটি এখানে অনলাইনে চেষ্টা করুন

2 বাইট গল্ফ করার জন্য ডিএলসকে ধন্যবাদ ।

Ungolfed:

v -> w -> { // lambda taking two String parameters in currying syntax
    String r = "", // result
    t, // temporary variable used for storing
       // the portmanteau candidate currently being evaluated
    p = " aeiou"; // vowels for the purposes of this function;
                  // the leading space is so that they all have a positive index
    for(int i = w.length(), j; --i > 0; ) // loop over all proper suffixes
                                          // of the second word
        for(j = 1; j < v.length(); )      // loop over all proper prefixes
                                          // of the first word
            r += // construct the portmanteau candidate
                 (t = v.substring(0, j) + w.substring(i))
                 // if it contains one of the input words ...
                 .matches(v + ".*|.*" + w)
                 // ... or the boundary is consonant-consonant 
                 // or vowel-vowel (here we make use of the facts
                 // that all the vowels have a positive index, and
                 // indexOf() returns -1 in case of no match) ...
                 | p.indexOf(t.charAt(j-1)) * p.indexOf(t.charAt(j++)) > 0
                 ? "" // ... reject it ...
                 : t + " "; // ... else add it to the result
    return r; // return the result
}

3

জাপট , 32 বাইট

å+ ïVw å+)f_xè"%v$" uÃmrÈ+YwÃkøN

জাপট ইন্টারপ্রেটার

জাগের বাক্য গঠন সম্পর্কে শ্যাগির পরিষ্কার বোঝার জন্য 10 বাইট সংরক্ষণ করা হয়েছে।

নতুন ভাষার বৈশিষ্ট্যের কারণে 8 বাইট সংরক্ষণ করা হয়েছে

ETH প্রোডাকশনগুলির কিছু পরামর্শের জন্য 2 বাইট সংরক্ষণ করা হয়েছে

জাপটের নতুন সংস্করণ কার্টেসিয়ান প্রোডাক্ট ফাংশনটি প্রবর্তন করেছে, যা বেশ কয়েকটি বাইট সংরক্ষণ করেছিল এবং আমাকে ইনপুটগুলির ক্রম পুনরুদ্ধার করার অনুমতি দেয় (সুতরাং "সিংহ" "বাঘ" আউটপুট "লাইগার" এবং এই জাতীয়)। "y" এখনও ব্যঞ্জনবর্ণ হিসাবে বিবেচিত হয়।

ব্যাখ্যা:

   ï     )       Cartesian product of...
å+                prefixes of first input
    Vw å+         and suffixes of second input.

f_         Ã     Remove the ones where...
  xè"%v$"         the number of vowels at the joining point
          u       is not 1.

m     Ã          Replace each pair with...
 rÈ+Yw            the prefix and suffix joined together
       køN       then remove the ones that contain either input

জাপটে স্বাগতম (আবার!) আমি অবশ্যই এখানে আরও গল্ফের জন্য কিছু সম্ভাবনা দেখতে পাচ্ছি; আমি যখন কোনও কম্পিউটারে ফিরে আসি তখন আমি এটিকে সঠিকভাবে দেখতে পারি।
শেগি


3

পাইথন 3 , 156 150 বাইট

আমি yব্যঞ্জনবর্ণ হিসাবে বিবেচনা করেছি ।

lambda a,b:{a[:i]+b[j:]for i in range(1,len(a))for j in range(1,len(b))if((a[i-1]in'aeiou')^(b[j]in'aeiou'))*0**(a in a[:i]+b[j:]or b in a[:i]+b[j:])}

-6 বাইট জনাথন ফ্রেচের জন্য ধন্যবাদ

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



@ জোনাথান ফ্রেচ এটি সন্ধানের জন্য ধন্যবাদ
জোনাথনফ্রেচ

আপনি ডিফল্ট আর্গুমেন্ট ব্যবহার করতে পারেন lambda x=0 এটিকে রক্ষা করার জন্য বিরক্তিতে ... 0 টি অক্ষর । lambda a,b,v='aeiou',r=range:{a[:i]+b[j:]for i in r(1,len(a))for j in r(1,len(b))if((a[i-1]in v)^(b[j]in v))*0**(a in a[:i]+b[j:]or b in a[:i]+b[j:])}(এখনও 150)
ম্যাট

2

জাভাস্ক্রিপ্ট (ES6), 124 বাইট

বাক্য গঠন বাক্যটিতে 2 টি শব্দ নেয় (a)(b)এবং ফলাফলগুলি মুদ্রণ করে alert()। ধরে নিই y হ'ল ব্যঞ্জনবর্ণ।

a=>b=>[...a].map(c=>[...b].map((C,j)=>!(w=s+b.slice(j)).match(a+'|'+b)&v.test(c)-v.test(C)&&alert(w),s+=c),s='',v=/[aeiou]/)

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


1

জেলি , 27 বাইট

¹Ƥp¹ÐƤ}Ø.ị"e€Øc⁻/ƲƇẎ€wÐḟƒ@,

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

ইয়ি ব্যঞ্জনবর্ণ। উভয় ক্ষেত্রেই সমর্থন। সদৃশ ফেরত দেয়।

আউটপুট টিআইও-র উপর পূর্ববর্তী করা হয়েছে। +/€আসল আউটপুট দেখতে পাদলেখ থেকে সরান ।


1

সি ++ 11, 217 202 বাইট

[](auto v,auto w){auto r=v,t=v,p=v;r="",p="aeiou";for(int i=w.size(),j;--i;)for(j=v.size();j;)(t=v.substr(0,j)+w.substr(i)).find(v)+1|t.find(w)+1|p.find(t[j-1])<5==p.find(t[j--])<5?v:r+=t+" ";return r;}

এর ভারী ব্যবহার করে std::string#find। ব্যঞ্জনা yহিসাবে আচরণ করে । এটি অনলাইনে চেষ্টা করুন এখানে করুন

Ungolfed:

// lambda; relies on auto to keep declarations short
[] (auto v, auto w) {
    // let's declare some strings. To keep it terse, we're using auto and the type of the arguments.
    auto r = v, // result string
    t = v,      // temporary string for storing the portmanteau candidate
    p = v;      // vowels string
    // now assign them their values
    r = "",    // result starts empty
    p = "aeiou"; // vowels don't include 'y'
    for(int i = w.size(), j; --i; ) // suffixes of the second word
        for(j = v.size(); j; ) // prefixes of the first word
            // create the portmanteau candidate
            (t = v.substr(0, j) + w.substr(i))
            // if it includes one of the input words ...
            .find(v) + 1 | t.find(w) + 1
            // ... or the boundary is consonant-consonant or vowel-vowel ...
            | p.find(t[j - 1]) < 5 == p.find(t[j--]) < 5
            ? v // ... discard it ...
            : r += t + " "; // ... else add it to the result.
    return r; // return the result
}

1

পাইথন 2 , 179 176 166 162 বাইট

lambda s,t:[w for w in g(s,t)if(s in w)<1>(t in w)]
g=lambda s,t:s[:-1]and[s[:-1]+t[j:]for j in range(1,len(t))if(s[-2]in'aeiou')^(t[j]in'aeiou')]+g(s[:-1],t)or[]

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

জোনাথন ফ্রেচের কাছ থেকে 3 বাইট । এবং ম্যাট থেকে 10 বাইট থেক্স ।

আমার পৃথিবীতে, yএকটি স্বর হয় না। (এটি একটি পেঁচা!)


সেখানে বিপথগামী শূণ্যস্থান আছে t) ifএবং t) or []
জোনাথন ফ্রেচ

@ জোনাথন ফ্রেঞ্চ: ধন্যবাদ! কিছুটা অলস পেয়েছি ...
চ্যাস ব্রাউন

আমি ... আমি অনুমান করি আমার নাম টাইপ করার সময়
আপনিও

* জোনাথআন: ডিওহ! ভাল, কমপক্ষে আমি সামঞ্জস্য ছিল! :)
চ্যাস ব্রাউন

1
@ ম্যাট: ধন্যবাদ! প্রকৃতপক্ষে, আমি অতিরিক্ত 2 বাইট বাইরে বের করে দিয়েছি (s in w)<1>(t in w)
চ্যাস ব্রাউন

0

রুবি , 113 112 109 104 বাইট

y একটি ব্যঞ্জনবর্ণ

এটি প্রশ্নের উদাহরণ হিসাবে একই সদৃশ ফলাফল আউটপুট, আমি একই লুপ ব্যবহার করা আবশ্যক

->a,b,i=j=1{r=a[0,i]+b[j..-1];g=:aeiou;!g[a[i-1]]^g[b[j]]|r[a]|r[b]||z=[*z,r];b[j+=1]||a[i+=j=1]?redo:z}

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


0

ইমাস লিস্প , 306 + 13 = 319 বাইট

+13 এর জন্য (require'seq)

(require'seq)(lambda(a b)(dotimes(i(1-(length b)))(dotimes(j(1-(length a)))(progn(setq w(substring a 0(1+ j))x(substring b(1+ i))c(concat w x))(defun V(c)(seq-contains"aeiou"(elt c 0)'char-equal))(if(not(or(string-prefix-p a c)(string-suffix-p b c)))(if(V(substring w -1))(if(not(V x))(print c))(if(V x)(print c))))))))

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

একটি বেনামে ল্যাম্বদা ফাংশন সংজ্ঞায়িত করে। উদ্ধৃতি দ্বারা পরিবেষ্টিত প্রত্যেকের সাথে নিউলাইন-বিচ্ছিন্ন পোর্টম্যান্টিয়াসের ক্রম আউটপুট দেয়। গল্ফিং টিপস স্বাগত। চিঠিy ব্যঞ্জনবর্ণ হিসাবে বিবেচিত হয়।

Ungolfed

(require 'seq)                                                                                                                                                           
(defun Portmanteus(word1 word2)
  "Find all valid portmanteus of the two given words"
  (dotimes (i (1- (length word2)))
    (dotimes (j (1- (length word1)))
      (progn
        (setq w (substring word1 0 (1+ j)) w2 (substring word2 (1+ i)) comb (concat w w2))
        (defun isVowel (c) (seq-contains "aeiou" (elt c 0) 'char-equal))
        (if (not (or (string-prefix-p word1 comb) (string-suffix-p word2 comb)))
          (if (isVowel (substring w -1))
            (if (not (isVowel w2))
              (princ (format "%s\n" comb))
            )
            (if (isVowel w2)
              (princ (format "%s\n" comb))
            )
          )
        )
      )
    )
  )
)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.