আমার তোলা কথা গুলো ঠিক করে দিন


12

স্টুটরিং এমন একটি সমস্যা যা আমাদের অনেকেরই অভিজ্ঞতা থাকতে পারে বা কমপক্ষে দেখেছিল। যদিও বেশিরভাগ বিখ্যাত স্পিচ রিকগনিশন সফ্টওয়্যারগুলির স্টুটারড স্পিকিংয়ের সাথে গুরুতর সমস্যা রয়েছে, আসুন এমন একটি সফ্টওয়্যার কল্পনা করুন যা তোলাবাজি বোঝে, তবে সেগুলি ঠিক করতে পারে না এবং কেবল সেগুলিই লিখে দেয়।

এই জাতীয় সফ্টওয়্যার দ্বারা লিখিত পাঠ্য উদাহরণটি এরকম হতে পারে: "দয়া করে সিএএ সিএ সাবধান হন" । এই উদাহরণে "সাবধান" হ'ল মূল শব্দ এবং "সিএ সিএ" হুড়োহুড় শব্দ।

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা মূল শব্দগুলি রাখার সময় ইনপুট থেকে মুছে ফেলা শব্দগুলিকে স্থির করে। উদাহরণ সংশোধন সংস্করণের জন্য "দয়া করে হতে CA CA সাবধান" হবে "দয়া করে সতর্কতা অবলম্বন করা আবশ্যক"

এটি , প্রতিটি ভাষায় স্বল্পতম উত্তর!

তোতলা শব্দ কি?

স্টুটরিং এর বিভিন্ন রকম বৈচিত্র রয়েছে। তবে এই চ্যালেঞ্জটির সরলতার জন্য, আমরা এটিকে নিম্নলিখিত নিয়মগুলিতে সীমাবদ্ধ করতে যাচ্ছি:

  • বিড়ম্বিত শব্দগুলি মূল শব্দের একটি অসম্পূর্ণ অংশ বা পুরো হতে পারে। "অসম্পূর্ণ অংশ" দ্বারা আমার অর্থ আসল শব্দটি তোলা কথার সাথে ঠিক শুরু হওয়া উচিত। উদাহরণস্বরূপ "Ope" এবং "খুলুন" উভয়ের জন্য একটি stuttered শব্দ হতে পারে "খুলুন" , কিন্তু "কলম" যেহেতু এক হতে পারে না "খুলুন" শুরু হয় না "কলম"
  • উত্তড় শব্দগুলিতে অবশ্যই "আইইউউ" স্বরবর্ণগুলির মধ্যে একটি অন্তর্ভুক্ত থাকে। উদাহরণস্বরূপ "স্টার" একটি " বিড়াল " শব্দটি হতে পারে কারণ এটিতে "এ" রয়েছে তবে "স্ট" একটি বিড়বিড় শব্দ হতে পারে না কারণ এতে উল্লিখিত কোনও স্বর থাকে না।
  • বিভক্ত শব্দগুলি কেবলমাত্র মূল শব্দের আগে উপস্থিত হতে পারে এবং বৈধ হওয়ার জন্য কমপক্ষে দু'বার পুনরাবৃত্তি করা উচিত (মূল শব্দটি পুনরাবৃত্তিতে গণনা করা হয় না)। উদাহরণস্বরূপ "ওও খুলুন" শব্দ stuttered কিন্তু করেনি "O খোলা o" এর না, কারণ নেই "o" এর মূল শব্দ পরে গণনা করা হয় না এবং "o" এর মূল শব্দ সামনে পুনরাবৃত্তি করা হয় অন্তত দুই বার। "গো গো গো গো গো গো" এর মূল শব্দের আগে পাঁচটা বার বার কথা রয়েছে এবং তা বৈধ।
  • পুনরাবৃত্তি বিহ্বল শব্দের একক সেটটিতে মিশ্র ফর্ম থাকতে পারে না এবং শব্দগুলি একে অপরের মতো ঠিক হওয়া উচিত। উদাহরণস্বরূপ "ওপ ওপ ওপেন" বিড়বিড় শব্দ হিসাবে গণনা করে না। অন্যদিকে "ওপ ওপেন ওপেন" শব্দের হুটোহু শব্দ রয়েছে কারণ এখানে প্রথম "ও" সম্পূর্ণ ভিন্ন শব্দ হিসাবে দেখা হয় এবং দুটি "অপ" টি "খোলা" এর তোতলা শব্দ হিসাবে গণ্য হয় ।
  • একে অপরের ঠিক পরে পুনরাবৃত্তি বিঘ্নিত শব্দের একাধিক বৈধ সেটগুলির ক্ষেত্রে, কেবলমাত্র শেষ আসল শব্দটি থাকে। উদাহরণস্বরূপ, "ooo op op op""oo O" অংশটিকে প্রথম "op" এর বিড়বিড় শব্দ হিসাবে দেখা যায় , তাই সেগুলি সরিয়ে ফেলা উচিত এবং তারপরে "op op" টি "খোলা" এর বিড়বিড় শব্দ হিসাবে দেখা যায় " এবং সেগুলিও মুছে ফেলা উচিত, তাই তোতুল্য শব্দগুলি অপসারণের পরে কেবল " খোলা " থাকবে। আপনি ধরে নিতে পারেন যে একাধিক বৈধ সেটাকে পুনরাবৃত্তি তোলা শব্দের কেবল বাম থেকে ডানদিকে ঘটে যায়, সুতরাং "অপ্ট ওপেন ওপেন" ফিক্সিংয়ের ফলে "ওপ ওপেন ওপেন" (ওরফে

ইনপুট

  • ইনপুট একটি একক লাইনের স্ট্রিং যা কেবলমাত্র ASCII ইংরাজী অক্ষর (এজে), অঙ্কগুলি (0-9) এবং স্পেস অক্ষর ধারণ করে। লেটার কেসিং গুরুত্বপূর্ণ নয় এবং আপনি ছোট হাতের বা বড় হাতের বা উভয়টিকেই গ্রহণ করার সিদ্ধান্ত নিতে পারেন তবে কেসিংটি একই থাকে এবং আপনি আউটপুটে এটি পরিবর্তন করতে পারবেন না।
  • আপনি ["l","i","s","t"," ","o","f"," ","l","e","t","t","e","r","s"]স্ট্রিংয়ের পরিবর্তে অক্ষরের তালিকা (যেমন ) ব্যবহার করতে পারেন তবে আপনি শব্দের একটি তালিকা ব্যবহার করতে পারবেন না। আপনার ভাষার যদি আলাদা ইনপুট কাঠামো থাকে তবে এটি ব্যবহার করুন। মুল বক্তব্যটি হ'ল ইনপুট শব্দের দ্বারা পৃথক করা উচিত নয়, তাই কিছু ভাষায় শব্দ আলাদা করার ব্যয় আসলে অন্যান্য সৃজনশীল সমাধানগুলিকে ট্রিগার করতে পারে।
  • ইনপুটটিতে এতে কোনও একটি বা একাধিক তোতলা শব্দ থাকতে পারে।
  • শব্দ এবং বা সংখ্যা একটি একক স্থান দ্বারা পৃথক করা হয় এবং ইনপুট একে অপরের ঠিক ডাবল স্পেস থাকবে না।

আউটপুট

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

স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

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

কোনও বিড়বিড় শব্দ নেই:

"hello world" => "hello world"

বার বার তোলা কথার একক উদাহরণ:

"ope ope ope ope open the window" => "open the window"

বার বার তোলা কথার একাধিক উদাহরণ:

"there is is is is something un un under the the the table" => "there is something under the table"

কোনও বিড়বিড় শব্দ নেই, যথেষ্ট পুনরাবৃত্তি করা হয়নি:

"give me the the book" => "give me the the book"

কোনও বিচলিত শব্দ নেই, উল্লিখিত স্বরগুলির কোনওটি নেই:

"h h help m m m me" => "h h help m m m me"

সংখ্যাগুলি তোতলা শব্দ নয়, তাদের উল্লিখিত স্বরগুলির কোনওটি নেই:

"my nu nu number is 9 9 9 9876" => "my number is 9 9 9 9876"

তবে স্বর এবং সংখ্যা উভয় সহ একটি শব্দে অশান্তিযুক্ত শব্দ থাকতে পারে:

"my wi wi windows10 is slow" => "my windows10 is slow"

একই পুনরাবৃত্তি গোষ্ঠীতে বিভ্রান্ত শব্দের বিভিন্ন রূপ গণনা করা হয় না:

"this is an ant antarctica does not have" => "this is an ant antarctica does not have"

একে অপরের ঠিক পরে একাধিক অবিচ্ছিন্ন শব্দের সেটগুলির জন্য, কেবলমাত্র শেষ আসল শব্দটি রাখুন:

"what a be be be beauti beauti beautiful flower" => "what a beautiful flower"

এটি একে অপরের ঠিক পরে stuttered শব্দের একাধিক ধারাবাহিক সেটগুলির ক্ষেত্রে নয়:

"drink wat wat wa wa water" => "drink wat wat water"

খালি ইনপুট:

"" => ""

মন্তব্যগুলি থেকে আরও মামলা:

"a ab abc" => "a ab abc"
"a ab ab abc" => "a abc"
"ab ab abc abcd" => "abc abcd"
"a a ab a able" => "ab a able"
"i have ave ave average" => "i have average"
"my wi wi windows 10 is cra cra crap" => "my windows 10 is crap"

উপরোক্ত পরীক্ষার মামলার তালিকা অনুলিপি করা সহজ:

"hello world",
"ope ope ope ope open the window",
"there is is is is something un un under the the the table",
"give me the the book",
"h h help m m m me",
"my nu nu number is 9 9 9 9876",
"my wi wi windows10 is slow",
"this is an ant antarctica does not have",
"what a be be be beauti beauti beautiful flower",
"drink wat wat wa wa water",
"",
"a ab abc",
"a ab ab abc",
"ab ab abc abcd",
"a a ab a able",
"i have ave ave average",
"my wi wi windows 10 is cra cra crap"

2
"drink wat wat wa wa water" => "drink wat wat water"সত্যিই মনে হচ্ছে নিয়মটি পুনরাবৃত্তভাবে প্রয়োগ করা উচিত যাতে এটি "পানীয় জল" হয়ে যায়
জোনা

2
@ জোনাঃ আপনি যদি শেষ আইটেমটি পড়েন তবে তোলা শব্দ কি? আমি এই বিষয়টি ব্যাখ্যা করেছি। "ওয়াট ওয়াট" "ওয়া" এর জন্য নড়বড়ে শব্দ নয় এবং আমরা কেবল একবারই ঠিক করে ফেলেছি, সুতরাং একবার "ওয়াট ওয়াট ওয়াটার ওয়াটার ওয়াটার" পেলে আমরা নতুনভাবে গঠিত তোলা শব্দগুলি মুছে ফেলার জন্য আবার ঠিক করি না। তবে "ওয়া ওয়া ওয়াট ওয়াট ওয়াটার" এর মতো বিপরীত ক্ষেত্রে "জল" হবে কারণ "ওয়া ওয়া" হ'ল প্রথম "ওয়াট" এবং "ওয়াট ওয়াট" এর জন্য তোলা শব্দগুলি "জল" এরও তোতলা শব্দ।
রাত 2

ঠিক আছে যথেষ্ট, আমি কেবল বলছিলাম যে আপনি আর না পারলে ফিক্সিং করা বুদ্ধিমান হয়ে উঠবে, তবে আমি একক পুনরাবৃত্তিতে মনোনিবেশ করার যুক্তিটিও দেখতে পাচ্ছি।
জোনা

উত্তর:


6

সি (জিসিসি), 183 180 178 বাইট

f(s,t,u,T,e,r)char*s,*t,*u,*r;{for(;s=index(u=s,32);T>1&strpbrk(u,"aeiou")-1<s&&memmove(s=u,t-e,r-t-~e))for(e=++s-u,r=u+strlen(t=u),T=0;(t+=e)<r&!memcmp(u,t,e-1)&t[-1]==32;++T);}

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

ঠিক আছে, সি অবশ্যই রেজেক্সের সংক্ষিপ্ততার সাথে প্রতিযোগিতা করতে পারে না ...

এটি পড়ার জন্য এটি বিশেষভাবে শক্ত কারণ আমি পুরো ফাংশনটি একটি একক নেস্টড forজোপের (কোনও দেহ ছাড়াই!) ভাঙতে শেষ করেছি । এটি মূল্যায়নের ক্রমটিকে সমস্ত অলস করে তোলে - শুরুর কাছাকাছি কোডটি আসলে শেষ পর্যন্ত কার্যকর করে।

আমার প্রিয় কৌশলটি এখানে strpbrk(u,"aeiou")-1<s। পুনরাবৃত্তি শব্দের স্বর রয়েছে কিনা তা পরীক্ষা করতে এটি ব্যবহৃত হয়। uপুনরাবৃত্তি শব্দের শুরুতে এবং শব্দের sদ্বিতীয় পুনরাবৃত্তির দিকে নির্দেশ করে; উদাহরণ স্বরূপ:

"my nu nu number is 9 9 9 9876"
    ^  ^
    u  s

strpbrkতারপরে তার মধ্যে প্রথম চরিত্রটি "aeiou"উপস্থিত হয় u। (এই ক্ষেত্রে এটি 'u'তাত্ক্ষণিকভাবে পরে)) তারপরে আমরা পরীক্ষা করতে পারি যে sশব্দের একটি স্বর রয়েছে যাচাই করার জন্য এটি আগে আসে । তবে একটি সামান্য সমস্যা আছে - পুরো স্ট্রিংয়ে স্বর না থাকলে strpbrkরিটার্ন NULL(যেমন 0)। এটি ঠিক করার জন্য, আমি কেবল 1 টি বিয়োগ করি যা অতিরিক্ত প্রবাহের কারণে (আমার মেশিনে) পরিণত 0হয় 0xffffffffffffffff। পয়েন্টারের সর্বাধিক মান হওয়ায় এটি sচূড়ান্তভাবে ব্যর্থ হওয়ার কারণে এটির চেয়ে বেশি সিদ্ধান্ত নেওয়া হয়।

মন্তব্যগুলির সাথে এখানে একটি সামান্য পুরানো সংস্করণ (রূপান্তরকরণের আগে নিয়ন্ত্রণ প্রবাহকে জটিল করে দিয়েছে):

f(s,t,u,c,n,e)char*s,*t,*u,*e;{
    // set s to the position of the *next* check; u is the old position
    for(;s=index(u=s,32);) {
        // count the length of this word (incl. space); also fix s
        n=++s-u;
        // find the end of the string; assign temp pointer to start
        e=u+strlen(t=u);
        // count repetitions of the word
        for(c=0;                // number of repetitions
            (t+=n)              // advance temp pointer by length of word
            <e&&                // check that we haven't hit the end...
            !strncmp(u,t,n-1)&& // ...and the word matches...
            t[-1]==32;          // ...and the previous character was space
            ++c);               // if so, increment count
        // decide whether to remove stuttering
        c>1&&                    // count must be at least 2
        strpbrk(u,"aeiou")-1<s&& // word must contain a vowel
        // if so, move everything after the last occurrence back to the
        // beginning, and also reset s to u to start scanning from here again
        memmove(s=u,t-n,e-t+n+1);
    }
}

ধন্যবাদ @ user1475369 3 বাইট এবং জন্য @ceilingcat 2 বাইট জন্য।


-3 প্রতিস্থাপন বাইট T>1&&strpbrkসঙ্গে T>1&strpbrk, r&&!strncmpসঙ্গে r&!strncmp, এবং &&t[-1]সঙ্গে &t[-1]
গিরোবুজ


@ceilingcat আপনার লিঙ্কটি পরীক্ষার কয়েকটি ক্ষেত্রে ব্যর্থ হয়েছে, তবে এই 3 টির মধ্যে 2 টি অপ্টিমাইজেশান কাজ করে; ধন্যবাদ!
ডোরকনবব

সুপারিশ bcmp()পরিবর্তেmemcmp()
ceilingcat

4

পার্ল 5 (-পি), 34 বাইট

আরনাউল্ডের মুছে দেওয়া উত্তরের ভিত্তিতে।

s/(\b(\w*[aeiou]\w*) )\1+(?=\2)//g

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


এটি "za a ab" এর জন্য "zab" উত্পাদন করে। আমি মনে করি না যে ইনপুটটিতে কোনও তোলা সনাক্ত হওয়া উচিত।
পুনরাবৃত্তি

@ পুনরুদ্ধার ধন্যবাদ, স্থির।
গ্রিমি

2
আমি পরীক্ষার কেসগুলিতে তাকিয়েছি এবং একটি রেজেক্স তৈরি করেছি, কেবল এটি ইতিমধ্যে এখানে খুঁজে পেতে। স্বাভাবিকভাবেই এর অর্থ হল যে তুচ্ছ রেটিনা বন্দরটি 30 বাইট।
নিল

3

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

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

#Rγε®y¬©žMÃĀiнkĀDygαΘ+∍]R˜ðý

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

05 এ বি 1 ই, কোনও রেজিেক্স নেই, অবশ্যই এই কাজের জন্য সেরা সরঞ্জামের মতো দেখাচ্ছে না। তবুও, এটি একরকমভাবে সবেমাত্র রেটিনাকে মারতে সক্ষম করে।

#                     # split on spaces
 R                    # reverse the list of words
  γ                   # group consecutive identical words together

ε                   ] # for each group of words y:
 ®                    #  push the previous word on the stack (initially -1)
  y                   #  push another copy of y
   ¬                  #  push the first element without popping
    ©                 #  save the current word for the next loop
     žM               #  built-in constant aeiou
       ÃĀi          ] #  if the length of the intersection is non-zero:
           н          #   take the first element of y
            kĀ        #   0 if the previous word starts with this word, 1 otherwise
              D       #   duplicate
               yg     #   length of y (the number of consecutive identical words)
                 α    #   subtract the result of the startsWith check
                  Θ   #   05AB1E truthify (1 -> 1, anything else -> 0)
                   +  #   add the result of the startsWith check
                    ∍ #   set the length of y to that value
                      #  otherwise leave y unchanged

˜                     # flatten the modified list of groups of words
 R                    # reverse the list of words
  ðý                  # join with spaces

1
আপনি এর gআগে মুছে ফেলতে পারেন Ā। পাইথন-স্টাইলের ট্রুথাইফাই এর ফলে ইতিমধ্যে 0খালি স্ট্রিং এবং খালি খালি স্ট্রিংয়ের ফলাফল ঘটবে 1
কেভিন ক্রুইজসেন

পছন্দ করুন
গ্রিমি


1

স্ট্যাক্স , 26 বাইট

å╬↓<▀.₧▀"╦n▐∞↨vß%ù:Qa3@=↔_

এটি চালান এবং এটি ডিবাগ করুন

@ গ্রিমির পার্ল উত্তর থেকে সরাসরি বন্দর। স্টেক্স রেজেক্স প্যাটার্ন আক্ষরিক সঙ্কুচিত করতে সক্ষম এবং এটিতে একটি স্বরযুক্ত ধ্রুবক রয়েছে যা সঙ্কুচিত করতে সক্ষম [aeiou]


1

পরিষ্কার , 184 বাইট

import StdEnv,Data.List,Text
$s=join[' '](f(group(split[' ']s)))
f[[a]:t]=[a:f t]
f[h=:[a:_]:t=:[[b:_]:_]]|intersect['aeiou']a==[]=h++f t|isPrefixOf a b=f t=if(h>[a,a])[a]h++f t
f[]=[]

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

সংজ্ঞায়িত করে $ :: [Char] -> [Char], যা স্পেসস এবং গোষ্ঠীগুলিতে অভিন্ন উপাদানগুলিতে ইনপুট স্ট্রিংকে বিভক্ত করে যা f :: [[[Char]]] -> [[Char]]ফেরত দেওয়ার আগে যোগদানের পরে সাহায্যকারী দ্বারা ধসে পড়ে ।

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