সোয়ে থা স্বর!


18

দ্রষ্টব্য: শিরোনামটি উদ্দেশ্যমূলকভাবে ভুল বানান ছিল was

একটি স্ট্রিং দেওয়া হয়েছে, প্রতি 2 টি শব্দের প্রথম স্বর রান অদলবদল করুন। এই চ্যালেঞ্জের জন্য, y কে একটি স্বর হিসাবে বিবেচনা করা হয়।

উদাহরণস্বরূপ, "দুর্দান্ত দিন স্যার" এর একটি ইনপুট দেওয়া হয়েছে:

1. Input: "great day sir"
2. Identify pairs of words: "[great day] [sir]" (No word for sir to pair with)
3. Identify the first vowel runs in each word: "[gr[ea]t d[ay]] [s[i]r]"
4. Swap the vowel runs in each pair: "[gr[ay]t d[ea]] [s[i]r]"
5. Return/print: "grayt dea sir"

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

আপনি ধরে নিতে পারেন ইনপুটটিতে কেবলমাত্র বর্ণমালার একটি অক্ষর এবং আক্ষরিক স্থান বা অন্য একটি ধ্রুবক ডিলিমিটার থাকে।

I / O এর মানক পদ্ধতিগুলি, মানক লুফোলগুলি প্রয়োগ হয়। নেতৃস্থানীয় / পিছনের whetvers ঠিক আছে।

পরীক্ষার কেস:

Input -> Output

"great day sir" -> "grayt dea sir"
"ppcg is the best" -> "ppcg is the best" (When there is no vowel to swap, don't swap vowels."
"this is a test case" -> "this is e tast case"
"loooooooooooooong word" -> "long woooooooooooooord"
"great night" -> "grit neaght"
"anything goes" -> "oenything gas"
"qwrtpsdfghjklzxcvbnm aaaaaaaa hi there" -> "qwrtpsdfghjklzxcvbnm aaaaaaaa he thire"
"this is a long test case in case you could not tell" -> "this is o lang tast cese an cise ou cyould net toll"

1
যারা মুছে ফেলা পোস্টগুলি দেখতে পারেন তাদের জন্য এখানে স্যান্ডবক্স পোস্ট ছিল ।
কমরেড স্পার্কলপনি

1
প্রথম শব্দের যদি স্বর থাকে না, তবে দ্বিতীয় এবং তৃতীয় শব্দের স্বরগুলি পরিবর্তন করা কি ঠিক হবে? অথবা স্বরগুলি কি কেবল দুটি শব্দের রানের মধ্যেই বদল হতে পারে? যেমন ppcg is awesomeহয়ে উঠবে ppcg is awesomeনাকি ppcg as iwesome?
ডিজেএমসিএমহেম

@ ডিজেএমসিএমহেম স্বরগুলি কেবলমাত্র দুটি শব্দের রানের মধ্যে পরিবর্তন করতে পারে। আমি সম্পাদনা করব।
কমরেড স্পার্কলপনি

আমি বিশ্বাস করি যে আউটপুটটি this is a long test case in case you could not tellহওয়া উচিত this is o lang tast cese an cise ou cyould net toll, যেহেতু স্বর চলবে youএবং ouঅদলবদল হবে।
বাশফুল বেলুগা

@ বাশফুলবেলুগা হাঁ, আমার ভুল mistake আমি ঠিক করব।
কমরেড স্পার্কলপনি

উত্তর:


9

ভি , 42 , 41 বাইট

ò2Eá
òͨ[aeiouy]«©¨ƒ ƒ©¨[aeiouy]«©/³²±
Íî

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

Hexdump:

00000000: f232 45e1 0af2 cda8 5b61 6569 6f75 795d  .2E.....[aeiouy]
00000010: aba9 a883 2083 a9a8 5b61 6569 6f75 795d  .... ...[aeiouy]
00000020: aba9 2fb3 b2b1 0acd ee                   ../......

ব্যাখ্যা:

ò       ò                                   " Recursively:
 2E                                         "   Move to the end of two words forward
   á<cr>                                    "   And append a newline

এটি দুটি শব্দের সমস্ত গ্রুপকে তাদের নিজস্ব লাইনে রাখবে, উদাহরণস্বরূপ:

this is
a long
test case
in case
you could
not tell

এখন আমরা কিছু অভিনব রেজেক্স-ম্যাজিক চালাচ্ছি:

Í                                           " Globally substitute
 ¨[aeiouy]«©                                "   A vowel (capture group 1)
            ¨<131>                          "   Followed by as few characters as possible, then a space
                   <131>©                   "   Followed by as few characters as possible (capture group 2)
                         ¨[aeiouy]«©        "   Followed by a vowel again
                                    /       " With:
                                     ³²±    "   Capture groups '3', '2', '1'
Í                                           " Remove all:
 î                                          "   Newlines

আপনার রেজেক্সের জন্য আপনার দুটি স্বর গোষ্ঠীর মধ্যে একটি শব্দের সমাপ্তির প্রয়োজন নেই। এটি অনলাইন চেষ্টা করুন!
nmjcman101

@ nmjcman101 আপনি কি আমার পুরানো সংশোধনটি দেখছেন? কারণ ঠিক এখনই আমার কাছে যা আছে
ডিজেএমসিএমহেম

আমার টিআইও লিঙ্কটি কোনও কিছু ঠিক করছে না, আমি কেবল ইনপুটটি পরিবর্তন করেছি। এটি অক্ষরগুলি অদ্ভুতভাবে অদলবদল করে।
nmjcman101

@ nmjcman101 আহ, আমি দেখছি। এখনই স্থির!
ডিজেএমসিএমহেম

6

জাপট , 39 37 বাইট

তারা বলেছিল এটি কুৎসিত হবে, কিন্তু আমি শুনিনি ... এবং এটি ছিল:

¸ò ®efQ="%y+" ?Z£XrQZg°T fQP PÃ:ZÃc ¸

এটি অনলাইন পরীক্ষা!

ব্যাখ্যা

 ¸  ò ® efQ="%y+" ?Z£    XrQ    Zg° T fQ    P PÃ :ZÃ c ¸
UqS ò mZ{Zef"%y+" ?ZmXYZ{Xr"%y+"Zg++T f"%y+"P P} :Z} c qS
             Implicit: U = input string, such as     "abc def ghi jkl mno"
UqS          Split on spaces, splitting into words.  ["abc","def","ghi","jkl","mno"]
ò            Group into runs of two items.           [["abc","def"],["ghi","jkl"],["mno"]]
mZ{          For each pair Z:
 Zef"%y+"?     If not every item contains a run of vowels (%y = [AEIOUYaeiouy]),
 :Z            return Z.                             [              ["ghi","jkl"]        ]
 ZmXYZ{        Otherwise, for each item X in Z:
  Xr"%y+"        Replace each run of vowels with
  Zg++T           the item at the next index in Z,   [["def","abc"]               ["mno"]]
  f"%y+"P         but only the first run of vowels.  [["e",  "a"  ]               ["o"  ]]
  P              Replace only for the first match.   [["ebc","daf"]               ["mno"]]
 }
}                                                    [["ebc","daf"],["ghi","jkl"],"mno"]]
c            Flatten back into a single array.       ["ebc","def","ghi","jkl","mno"]
qS           Re-join on spaces.                      "ebc daf ghi jkl mno"
             Implicit: output result of last expression

5

জাভাস্ক্রিপ্ট (ES6), 62 106 98 101 বাইট

s=>s.match(/(\w+)( (\w+))?/g).map(m=>m.replace(/([aeiouy]+)(\w* \w*?)([aeiouy]+)/g,'$3$2$1')).join` `


4

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

((\w*?)([aeiouy]+)(\w* \w*?)([aeiouy]+)|(\w+ ))(\w*)
$2$5$4$3$6$7

এটি অনলাইন চেষ্টা করুন! পরীক্ষার কেস অন্তর্ভুক্ত। আমি শর্তসাপেক্ষে গ্রুপ রেফারেন্সটি ব্যবহার করতে চেয়েছিলাম তবে it 65 বাইটে 65৫ বা তার চেয়ে কম কাজ করতে আমি এটি পেতে পারি না।


4

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

\S+ \S+ 
$&¶
%O$^`(?<=\b[^aeiouy]*)[aeiouy]+
$`
¶

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

Mart2 বাইটস মার্টিনকে ধন্যবাদ।

  • প্রথম পদক্ষেপটি প্রতিটি শব্দের জোড়কে তার নিজস্ব লাইনে বিভক্ত করছে ( এটি নিউলাইন)। এটি আমাদের .*একজোড়া শব্দের মধ্যে ব্যবহার করতে দেয় ।
  • এরপরে, প্রতিটি লাইনের জন্য আমরা প্রতিটি শব্দের মধ্যে প্রথম স্বরব্লকটি পাই এবং তাদেরকে সাজানো অবস্থানে সাজিয়ে রাখি sort

আমি ডাবল অপসারণ করার চেষ্টা করেছি [aeiouy]+কিন্তু কিছু অর্থনৈতিক পেতে পারি নি।
কোবি

1
একটি সাজানোর মঞ্চের সাথে রান অদলবদল করা সামান্য খাটো: tio.run/…
মার্টিন

@ মার্টিনএেন্ডার - খুব ভাল! আমি কাজের জন্য বাছাই করতে পারে না। আমি অন্য সংস্করণটি চেষ্টা করেছি যা [aeiouy]সদৃশটি সরিয়ে দিয়েছে , তবে আমি এটিকে গল্ফ করতে পারি না। আমি মনে করি এটি আপনার পরামর্শের সাথে সুন্দরভাবে কাজ করবে: tio.run/…
কোবি

3

পাইথন 2 , 148 বাইট

from re import*
v="([aeiouy]+)"
print sub(r"(\w+)(?: (\w+))?",lambda m:sub(v+"(.* .*?)"+v,lambda g:''.join(g.groups()[::-1]),m.group()),raw_input())

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

কোড গল্ফিং আসক্তি হয়ে উঠছে!

জোড় শব্দের বিভাজনগুলি, তারপরে স্বরবৃত্তের 2 টি গোষ্ঠী এবং এর মধ্যে স্ট্রিং ধরে, ক্রমটিকে বিপরীত করে এবং বিকল্প হিসাবে এটি ব্যবহার করে ।


3

হাস্কেল , 177 173 171 169 বাইট

unwords.s.words
s(x:y:z)=maybe[x,y]id(do(a,b)<-k x;(c,d)<-k y;j[b c,d a])++s z
s x=x
v=(`elem`"aeiouy")
j=Just
k s=do(a,(x:y,r))<-j$span v<$>break v s;j(x:y,\n->a++n++r)

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

এটি নীচের নিষ্পাপ সমাধানের সরাসরি সংক্ষিপ্তকরণ, সুতরাং এখানে আরও ভাল কিছু হওয়া উচিত:

swapvowels :: String -> String
swapvowels = unwords . swapPairs . words

swapPairs :: [String] -> [String]
swapPairs (word1:word2:rest) =
   case (,) <$> extractVowels word1 <*> extractVowels word2 of
     Just ((vowels1, rebuild1), (vowels2, rebuild2))
       -> [rebuild1 vowels2, rebuild2 vowels1] ++ swapPairs rest
     Nothing -> [word1,word2] ++ swapPairs rest
swapPairs rest = rest

extractVowels :: String -> Maybe (String, String -> String)
extractVowels s = do
    let isVowel l = l `elem` "aeiouy"
    (a,b) <- Just $ break isVowel s 
    (w@(_:_),r) <- Just $ span isVowel b 
    return (w, \n -> a ++ n ++ r)

2

জাভা (ওপেনজেডিকে 8) ,363 304 + 25 বাইট

-34 বাইটস @ কেভিন ক্রুজসেনকে ধন্যবাদ thanks

Golfed:

l->{String s[]=l.split(" "),a,b;Pattern p=Pattern.compile("[aeiouy]+");for(int i=0;i<s.length-1;i+=2){Matcher m=p.matcher(s[i]),n=p.matcher(s[i+1]);a=m.find()?m.group():null;b=n.find()?n.group():null;if(a!=null&b!=null){s[i]=s[i].replaceFirst(a,b);s[i+1]=s[i+1].replaceFirst(b,a);}}return l.join(" ",s);}

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

Ungolfed:

String swapVowels(String line) {
    String[] parts = line.split(" ");
    Pattern pattern = Pattern.compile("([aeiouy]+)");
    for (int i = 0; i < parts.length - 1; i += 2) {
        Matcher matcherL = pattern.matcher(parts[i]), matcherR = pattern.matcher(parts[i + 1]);
        String vowelRunL = matcherL.find() ? matcherL.group() : null, vowelRunR = matcherR.find() ? matcherR.group() : null;
        if (vowelRunL != null & vowelRunR != null) {
            parts[i] = parts[i].replaceFirst(vowelRunL, vowelRunR);
            parts[i + 1] = parts[i + 1].replaceFirst(vowelRunR, vowelRunL);
        }
    }
    return String.join(" ", parts);
}

2
আপনি ইনপুট ( (l)->টু l->) এর আশেপাশে প্রথম বন্ধনী সরাতে পারেন । আপনি import java.util.regex.*;বাইট-কাউন্টে যুক্ত করতে পারেন এবং অন্য সমস্তগুলি সরাতে পারেন java.util.regex.। আপনি রেজেজেমে প্রথম বন্ধনী সরাতে পারেন ("([aeiouy]+)" -> "[aeiouy]+") এর । আর তুমি পরিবর্তন করতে পারেন String[]s=l.split(" ");থেকে String s[]=l.split(" "),a,b;, তাহলে আপনি অপসারণ করতে পারেন Stringভিতরে জন্য-লুপ; আর তুমি পরিবর্তন করতে পারেন String.join(" ",s);থেকে l.join(" ",s);এখানে সব মিলিত হয়। [ 329 বাইট ]
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন আসলেই! সম্পাদিত, ধন্যবাদ! :-)
বাশফুল বেলুগা

2

পার্ল, 58 বাইট

57 বাইট কোড +1 এর জন্য -p

$v="([aeiouy]+)";s!\w+ \w+!$&=~s/$v(.* .*?)$v/$3$2$1/r!ge

-2 বাইটস @ দাদাকে ধন্যবাদ !

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


একটি ভেরিয়েবলটি ফেলে ?এবং সঞ্চয় করে কেবল কয়েকটি বাইট সংরক্ষণ করতে ([aeiouy]+): অনলাইনে চেষ্টা করে দেখুন!
দাদা


1

পাইথন 3 , 198 196 192 বাইট

  • 6 টি বাইট সংরক্ষণ করা হয়েছে: জ্যাচারি টি কে ধন্যবাদ : if(m and n)যদি মি এবং এন এবং রিজেেক্স স্ট্রিংয়ের জন্য অযাচিত আর মুছে ফেলা হয় তবে সূচক আমি 0 এর পরিবর্তে 1 থেকে শুরু করব
from re import*
s=search
a=input().split()
v="[aeiouy]+"
j=1
while j<len(a):
 i=j-1;m=s(v,a[j]);n=s(v,a[i])
 if m and n:a[i]=sub(v,m[0],a[i],1);a[j]=sub(v,n[0],a[j],1)
 j+=2
print(' '.join(a))

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


1
আমি মনে করি আপনি আপনার প্রোগ্রামটি বন্ধ করে তিনটি বাইট মুণ্ডন করতে পারেন: একটি আপনার স্ট্রিংয়ের আগে আর সরিয়ে, অন্যটিতে পরিবর্তন i+1<len(a)করে i<=len(a)এবং তৃতীয়টি পরিবর্তন if(m and n)করে if m and n
জাচারা

1
ধন্যবাদ। কিন্তু i+1<len(a)পরিবর্তিত করা যাবে না i<=len(a)বা অন্য এটি নির্ণয় করা চেষ্টা করবে a[j]অর্থাত a[i+1]জন্য i=len(a)এবং কারণ index out of rangeত্রুটি:
officialaimm

দুঃখিত, আমি যে পড়ছিলাম i<len(a)+1, উফ!
জাচারা

1
এই কাজ করবে? repl.it/IlX1
Zacharý

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