একটি বাক্য থেকে সদৃশ শব্দগুলি সরান


10

এই চ্যালেঞ্জে আপনি প্রতিটি বাক্য থেকে সদৃশ শব্দগুলি সরিয়ে ফেলবেন ।

উদাহরণ

Hello Hello, World!
Hello, World!

Code Code! Golf Code
Code! Golf Code

Hello  hello   World
Hello   World

Programming Golf Programming!
Programming Golf!

সবিস্তার বিবরণী

  • ইনপুটটি ASCII অক্ষরের একটি স্ট্রিং হবে।
  • একটি বাক্য স্ট্রিং, একটি লাইনফিড ( \n) বা বিরামচিহ্ন ( .!?) এর শেষ অবধি কিছু হিসাবে সংজ্ঞায়িত হয় ।
  • একটি শব্দ একটি ক্রম হিসাবে সংজ্ঞায়িত করা হয় A-Za-z
  • শব্দগুলি কেস সংবেদনশীল ( Hello== heLlO)।
  • একটি বাক্যে কোনও শব্দের প্রথম উপস্থিতি রাখা হয়।
  • যদি কোনও শব্দ অপসারণ করা হয়, সরিয়ে নেওয়া শব্দের পূর্বে ফাঁকা স্থানগুলি সরানো উচিত। (যেমন A A B-> A B)।

এটি তাই বাইট জেতে সংক্ষিপ্ততম কোড!


1
a b a.কি যায়?
লিরটোসিয়াস্ত

@ থমাসকওয়া becauseA` a b.সরানো হয়েছে বলে।
ডাউনগোট

কারণ a__b_b_a, আপনি a_b_a(প্রথম bসরানো) বা a__b_a(দ্বিতীয় bসরানো) পেয়েছেন?

@ ক্যামিল স্টেপগুলি আপনি পাবেন a__b__কারণ পুনরাবৃত্তি bসরানো হয়েছে এবং পুনরাবৃত্তি aসরানো হয়েছে
ডাউনওয়েট

1
@ ব্র্যাডগিলবার্টব ২ গিলস সমস্ত এসসিআইআই অক্ষর ইনপুটটিতে অনুমোদিত characters কেবলমাত্র অক্ষরগুলিকেই শব্দ হিসাবে বিবেচনা করা হয়
ডাউনওয়েট

উত্তর:


3

Vim, 27 বাইট

:s/\v\c(<\a+>).{-}\zs\s+\1

নোট করুন যে ২ by বাইট শেষে একটি পিছনের গাড়ি চালানো অন্তর্ভুক্ত।

এটি অনলাইন চেষ্টা করুন! পার্শ্ব দ্রষ্টব্য: এটি একটি ভিন্ন ভাষার লিঙ্ক যা আমি লিখছি "ভি" called ভি বেশিরভাগ পিছনে ভিমের সাথে সামঞ্জস্যপূর্ণ, তাই সমস্ত অভিপ্রায় এবং উদ্দেশ্যগুলির জন্য, এটি একটি ভিএম ইন্টারপ্রেটার হিসাবে গণনা করতে পারে। আমি একটি বাইটও যুক্ত %করেছি যাতে আপনি একবারে সমস্ত পরীক্ষার কেস যাচাই করতে পারেন।

ব্যাখ্যা:

:s/\v                       "Substitute with the 'Magic flag' on. This magic flag allows us
                            "to shorten the regex by removing a lot of \ characters.
     \c(<\a+>)              "A case-insensitive word
              .{-}          "Any character (non-greedy)
                  \zs       "Start the selection. This means everything after this atom
                            "will be removed
                     \s+    "One or more whitespace characters,
                        \1  "Followed by the first word

6

জাভাস্ক্রিপ্ট (ES6), 98

নোট আমি নিজেই খুঁজে পেয়েছি, মনে রাখবেন এটি বিরক্তিকরভাবে @ নীলের মতো, ঠিক আছে বাক্যগুলিতে পুরো ইনপুট স্ট্রিংয়ের অতিরিক্ত যুক্তি দিয়ে।

s=>s.replace(/[^\n.!?]+/g,s=>s.replace(/ *([a-z]+)/ig,(r,w)=>k[w=w.toUpperCase()]?'':k[w]=r,k=[]))

পরীক্ষা

f=s=>s.replace(/[^\n.!?]+/g,s=>s.replace(/ *([a-z]+)/ig,(r,w)=>k[w=w.toUpperCase()]?'':k[w]=r,k=[]))

console.log=x=>O.textContent+=x+'\n'

;[['Hello Hello, World!','Hello, World!']
,['Code Code! Golf Code','Code! Golf Code']
,['Hello  hello   World','Hello   World']
,['Programming Golf Programming!','Programming Golf!']]
.forEach(t=>{
  var i=t[0],k=t[1],r=f(i)
  console.log((r==k?'OK ':'KO ')+i+' -> '+r)
})  
<pre id=O></pre>


6

রেটিনা , 66 46 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

i`[a-z]+
·$0·
i` *(·[a-z]+·)(?<=\1[^.!?¶]+)|·

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

ব্যাখ্যা

যেহেতু কেবলমাত্র অক্ষরগুলিকে শব্দের অক্ষর হিসাবে বিবেচনা করা উচিত (তবে রেজেক্স ডিজিটগুলি অঙ্কের এবং আন্ডারস্কোরগুলিকে শব্দের অক্ষর হিসাবেও বিবেচনা করে) তাই আমাদের নিজের শব্দের সীমানা তৈরি করতে হবে। যেহেতু ইনপুটটিতে কেবলমাত্র ASCII অক্ষর রয়েছে তা নিশ্চিত করা হয়েছে, তাই আমি ·সমস্ত শব্দের চারপাশে ASোকাচ্ছি (ASCII এর বাইরে, তবে আইএসও 8859-1 এর ভিতরে) এবং সেগুলি আবার নকল দিয়ে মুছে ফেলছি । এটি জেনেরিক শব্দ সীমানা বাস্তবায়নের জন্য লুকোয়ার্ড ব্যবহার করে 20 বাইট সংরক্ষণ করে।

i`[a-z]+
·$0·

এই প্রতিটি শব্দ মিলে যায় এবং এটি ঘিরে ·

i` *(·[a-z]+·)(?<=\1[^.!?¶]+)|·

এটি দুটি পদক্ষেপ একটিতে সংকুচিত হয়। <sp>*(·[a-z]+·)(?<=\1[^.!?¶]+)একটি পূর্ণ শব্দের সাথে ম্যাচ করে ( ·ম্যাচটি অন্তর্ভুক্ত করে নিশ্চিত করা হয়েছে ) এবং এর আগে যে কোনও ফাঁক দিয়ে দেওয়া হয়েছে , তবে শর্ত দেওয়া হয়েছে যে (বাকী পিছনের দিক দিয়ে নিশ্চিত করা হয়েছে) আমরা একই শব্দটি বাক্যটির আগে কোথাও খুঁজে পেতে পারি। ( ম্যাচগুলি একটি লাইনফিডের সাথে মিলবে))

অন্য অংশটি কেবলমাত্র ·যা প্রথম অর্ধের অংশ হিসাবে মেলে না এমন সমস্ত কৃত্রিম শব্দের সীমানার সাথে মেলে। উভয় ক্ষেত্রেই, ম্যাচটি কেবল স্ট্রিং থেকে সরানো হয়।


4

সি, 326 বাইট

কাদের নিয়মিত ভাব প্রকাশ দরকার?

#include <ctype.h>
#define a isalpha
#define c(x)*x&&!strchr(".?!\n",*x)
#define f(x)for(n=e;*x&&!a(*x);++x);
main(p,v,n,e,o,t)char**v,*p,*n,*e,*o,*t;{for(p=v[1];*p;p=e){f(p)for(e=p;c(e);){for(;a(*++e););f(n)if(c(n)){for(o=p,t=n;a(*o)&&(*o-65)%32==(*t-65)%32;o++,t++);if(a(*t))e=n;else memmove(e,t,strlen(t)+1);}}}puts(v[1]);}

3

পার্ল 6 , 104 বাইট

{[~] .split(/<[.!?\n]>+/,:v).map(->$_,$s?{.comb(/.*?<:L>+/).unique(as=>{/<:L>+/;lc $/}).join~($s//'')})} # 104

ব্যবহার:

# give it a lexical name
my &code = {...}

say code "Hello Hello, World!
Code Code! Golf Code
Hello  hello   World
Programming Golf Programming!";
Hello, World!
Code! Golf Code
Hello   World
Programming Golf!

ব্যাখ্যা

{
  [~]                         # join everything that follows:

  .split(/<[.!?\n]>+/,:v)     # split on boundaries, keeping them
  .map(                       # loop over sentence and boundary together
    -> $_, $s? {              # boundary is optional (at the end of the string)
      .comb(/.*?<:L>+/)       # grab the words along with leading non letters
      .unique(                # keep the unique ones by looking at …
        as => {/<:L>+/;lc $/} # only the word chars in lowercase
      )
      .join                   # join the sentence parts
      ~                       # join that with …
      ($s//'')                # the boundary characters or empty string 
    }
  )
}

1

পার্ল 5, 57 বাইট

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

s/[^.!?
]+/my%h;$&=~s~\s*([A-z]+)~!$h{lc$1}++&&$&~egr/eg

ব্যবহার:

perl -pe 's/[^.!?
]+/my%h;$&=~s~\s*([A-z]+)~!$h{lc$1}++&&$&~egr/eg' <<< 'Hello Hello, World!
Code Code! Golf Code
Hello  hello   World
Programming Golf Programming!
'
Hello, World!
Code! Golf Code
Hello   World
Programming Golf!

+1 হওয়া দরকার, বর্তমানে আমি ধরে নিচ্ছি যে ইনপুটটিতে কেবল ফাঁকা স্থান থাকবে, কোনও ট্যাব নেই।


একটি মন্তব্য থেকে "সমস্ত ASCII অক্ষরগুলিকে ইনপুটটিতে অনুমতি দেওয়া হয় Only কেবলমাত্র অক্ষরগুলিকেই যদিও শব্দ হিসাবে বিবেচনা করা হয়" (আমি এটিকে চ্যালেঞ্জের মধ্যে সম্পাদনা করব, আমি মনে করি)
মার্টিন ইন্দর

@ মার্টিনবাটনার ধিক্কার, ঠিক আছে আমি ব্যবহার করতে আপডেট করব \s পরিবর্তে ... এখনও আপনার রেটিনা উত্তর কাছাকাছি কোথাও নেই!
ডম হেস্টিংস

ওহ আমি এখন কেন জিজ্ঞাসা করেছি তা দেখতে পাচ্ছি। শব্দের সামনে যদি আমাদের শ্বেতস্পেস অপসারণ করতে হয় তবে আমার পাশাপাশি আরও একটি বাইট দরকার। প্রশ্নটি বিশেষত "স্পেসস" বলছে যদিও। আমি স্পষ্টতা চেয়েছি।
মার্টিন ইন্ডার

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