একটি স্ট্রিং থেকে নকল সরান


17

এই নিরহঙ্কার স্ট্যাকওভারফ্লো প্রশ্ন দ্বারা অনুপ্রাণিত ।

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

যেমন "A cat called matt sat on a mat and wore a hat A cat called matt sat on a mat and wore a hat", ["cat", "mat"]আউটপুট করা উচিত"A cat called matt sat on a mat and wore a hat A called matt sat on a and wore a hat"

ইনপুট

  • ইনপুটটিকে স্ট্রিং এবং স্ট্রিংগুলির একটি অ্যারে বা স্ট্রিংগুলির একটি অ্যারে হিসাবে নেওয়া যেতে পারে যেখানে ইনপুট স্ট্রিং প্রথম উপাদান। এই পরামিতি দুটি ক্রমে হতে পারে।
  • ইনপুট স্ট্রিং স্পেস-সীমাবদ্ধ স্ট্রিংগুলির তালিকা হিসাবে নেওয়া যাবে না।
  • ইনপুট স্ট্রিংয়ের কোনও নেতৃস্থানীয়, অনুসরণযোগ্য বা একটানা স্পেস থাকবে না।
  • সমস্ত ইনপুটটিতে ফাঁকা স্থানগুলি সহ ইনপুট স্ট্রিং ব্যতীত কেবলমাত্র [A-Za-z0-9] টি অক্ষর থাকবে।
  • ইনপুট অ্যারে খালি থাকতে পারে বা ইনপুট স্ট্রিংয়ের মধ্যে শব্দ নেই।

আউটপুট

  • আউটপুট হয় ফাংশন থেকে ফেরত মান হতে পারে, বা STDOUT এ মুদ্রিত হতে পারে
  • আউটপুট অবশ্যই মূল স্ট্রিংয়ের মতোই হওয়া উচিত

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

the blue frog lived in a blue house, [blue] -> the blue frog lived in a house
he liked to read but was filled with dread wherever he would tread while he read, [read] -> he liked to read but was filled with dread wherever he would tread while he
this sentence has no matches, [ten, cheese] -> this sentence has no matches
this one will also stay intact, [] -> this one will also stay intact
All the faith he had had had had no effect on the outcome of his life, [had] -> All the faith he had no effect on the outcome of his life
5 times 5 is 25, [5, 6] -> 5 times is 25
Case for different case, [case] -> Case for different
the letters in the array are in a different case, [In] -> the letters in the array are a different case
This is a test Will this be correct Both will be removed, [this,will] -> This is a test Will be correct Both be removed

এটি কোড গল্ফ হিসাবে, সর্বনিম্ন বাইট গণনা জয়!

উত্তর:


9

আর , 84 বাইট

function(s,w,S=el(strsplit(s," ")),t=tolower)cat(S[!duplicated(x<-t(S))|!x%in%t(w)])

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

চ্যালেঞ্জের 100 কম যা ?

ব্যাখ্যা:

আমরা শব্দগুলিতে স্ট্রিংটি ভাঙ্গার পরে, আমাদের সেগুলি বাদ দিতে হবে

  1. সদৃশ এবং
  2. ভিতরে w

বা বিকল্পভাবে, এটি যে এটি আছে তা রেখে, এটি তার মাথায় ঘুরিয়ে দিন

  1. OR শব্দের প্রথম উপস্থিতি
  2. না w

duplicated পরিষ্কারভাবে যারা প্রথম ঘটনা নয়, তাদের যৌক্তিক সূচকগুলি ফিরিয়ে দেয় so !duplicated() যা প্রথম ঘটনাগুলির x%in%wসূচকগুলি xপ্রদান করে এবং যা আছে তাদের জন্য যৌক্তিক সূচকগুলি প্রদান করে w। ঝরঝরে।


6

জাভা 8, 117 110 বাইট

a->s->{for(String x:a)for(x="(?i)(.*"+x+".* )"+x+"( |$)(.*)";s.matches(x);s=s.replaceAll(x,"$1$3"));return s;}

ব্যাখ্যা:

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

a->s->{                // Method with String-array and String parameters and String return
  for(String x:a)      //  Loop over the input-array
    for(x="(?i)(.*"+x+".* )"+x+"( |$)(.*)";
                       //   Regex to match
        s.matches(x);  //   Inner loop as long as the input matches this regex
      s=s.replaceAll(x,"$1$3")); 
                       //    Replace the regex-match with the 1st and 3rd capture groups
  return s;}           //  Return the modified input-String

রেজেক্সের জন্য অতিরিক্ত ব্যাখ্যা:

(?i)(.*"+x+".* )"+x+"( |$)(.*)   // Main regex to match:
(?i)                             //  Enable case insensitivity
    (                            //  Open capture group 1
     .*                          //   Zero or more characters
       "+x+"                     //   The input-String
            .*                   //   Zero or more characters, followed by a space
               )                 //  End of capture group 1
                "+x+"            //  The input-String again
                     (           //  Open capture group 2
                       |$        //   Either a space or the end of the String
                         )       //  End of capture group 2
                          (      //  Open capture group 3
                           .*    //   Zero or more characters
                             )   //  End of capture group 3

$1$3                             // Replace the entire match with:
$1                               //  The match of capture group 1
  $3                             //  concatted with the match of capture group 3

4

এমএটিএল , 19 18 বাইট

"Ybtk@kmFyfX<(~)Zc

ইনপুটগুলি হল: স্ট্রিংগুলির একটি সেল অ্যারে, তারপরে একটি স্ট্রিং।

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

কিভাবে এটা কাজ করে

"        % Take 1st input (implicit): cell array of strings. For each
  Yb     %   Take 2nd input (implicit) in the first iteration: string; or
         %   use the string from previous iteration. Split on spaces. Gives
         %   a cell array of strings
  tk     %   Duplicate. Make lowercase
  @k     %   Push current string from the array taken as 1st input. Make
         %   lowercase
  m      %   Membership: gives true-false array containing true for strings
         %   in the first input argument that equal the string in the second
         %   input argument
  F      %   Push false
  y      %   Duplicate from below: pushes the true-false array again
  f      %   Find: integer indices of true entries (may be empty)
  X<     %   Minimum (may be empty)
  (      %   Assignment indexing: write false in the true-false array at that
         %   position. So this replaces the first true (if any) by false
  ~      %   Logical negate: false becomes true, true becomes false
  )      %   Reference indexing: in the array of (sub)strings that was
         %   obtained from the second input, keep only those indicated by the
         %   (negated) true-false array
  Zc     %   Join strings in the resulting array, with a space between them
         % End (implicit). Display (implicit)

3

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

@B=<>;$_=join$",grep!(/^$_$/xi~~@B&&$v{+lc}++),@F

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

টনহোস্পেলকে 9 (!!) বাইটস সংরক্ষিত !


1
এটি This is a test Will this be correct Both will be removed+ এর জন্য ব্যর্থ বলে মনে হচ্ছে this will। দ্বিতীয় দুটি শব্দ সঠিকভাবে মুছে ফেলা হয়েছে, তবে এটি কোনও কারণে beদ্বিতীয়টির পরেও সরিয়ে ফেলে will
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন হুম, আমি দেখতে পাচ্ছি কেন এই মুহুর্তে এটি ঘটছে। আমি চেষ্টা করব এবং আগামীকাল মধ্যাহ্নভোজনে যথাযথ নজর দেব, তবে আমি এখনই +4 এর জন্য নির্ধারণ করেছি। আমাকে জানতে দেওয়ার জন্য ধন্যবাদ!
ডম হেস্টিংস

49 এর জন্য:@B=<>;$_=join$",grep!(/^$_$/xi~~@B&&$v{+lc}++),@F
টন হসপেল

@ টনহোপেল আহে, পেরেন ছাড়াই ডাকার চেষ্টা করার জন্য কিছু সময় ব্যয় করেছিলেন lc। অসাধারণ! এবং অ্যারের বিরুদ্ধে একটি রেইজেক্স ব্যবহার করা আরও ভাল, ধন্যবাদ! আমি আপনার সমস্ত টিপস মনে রাখতে সংগ্রাম!
ডম হেস্টিংস

2

পাইথ, 27 বাইট

jdeMf!}r0eT@mr0dQmr0dPT._cz

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

ব্যাখ্যা

jdeMf!}r0eT@mr0dQmr0dPT._cz
                          z  Take the string input.
                       ._c   Get all the prefixes...
    f    eT@                 ... which end with something...
     !}         Q    PT      ... which is not in the input and the prefix...
       r0   mr0d mr0d        ... case insensitive.
jdeM                         Join the ends of each valid prefix.

আমি নিশ্চিত যে সংবেদনশীল চেকের জন্য 10 বাইট হ্রাস করা যেতে পারে, তবে কীভাবে তা আমি দেখছি না।


2

স্ট্যাক্স , 21 বাইট সিপি 437

åìøΓ²¬$M¥øHΘQä~╥ôtΔ♫╟

আনপ্যাক করা হলে 25 বাইট,

vjcm[]Ii<;e{vm_]IU>*Ciyj@

ফলাফল একটি অ্যারে হয়। স্ট্যাক্সের জন্য সুবিধাজনক আউটপুট হল প্রতি লাইনে একটি উপাদান।

চালান এবং অনলাইন ডিবাগ!

ব্যাখ্যা

vj                           Convert 1st input to lowercase and split at spaces,
  c                          Duplicate at the main stack
   m                         Map array with the rest of the program 
                                 Implicitly output
    []I                      Get the first index of the current array element in the array
       i<                    Test 1: The first index is smaller than the iteration index
                                 i.e. not the first appearance
         ;                   2nd input
          {vm                Lowercase all elements
             _]I             Index of the current element in the 2nd input (-1 if not found)
                U>           Test 2: The index is non-negative
                                 i.e. current element is a member of the 2nd input
                  *C         If test 1 and test 2, drop the current element
                                 and go on mapping the next
                    iyj@     Fetch the corresponding element in the original input and return it as the mapped result
                                 This preserves the original case

2

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

->$_,+w{~.words.grep:{.lcw».lc||!(%){.lc}++}}

এটা পরীক্ষা করো

সম্প্রসারিত:

->              # pointy block lambda
  $_,           # first param 「$_」 (string)
  +w            # slurpy second param 「w」 (words)
{

  ~             # stringify the following (joins with spaces)

  .words        # split into words (implicit method call on 「$_」)

  .grep:        # take only the words we want

   {
     .lc        # lowercase the word being tested
               # is it not an element of
     w».lc      # the list of words, lowercased

     ||         # if it was one of the words we need to do a secondary check

     !          # Boolean invert the following
                # (returns true the first time the word was found)

     (
       %        # anonymous state Hash variable
     ){ .lc }++ # look up with the lowercase of the current word, and increment
   }
}

2

পার্ল 5 , 50 48 বাইট

সহ +1জন্য-p

STDIN- এ পৃথক লাইনে প্রতিটি ফিল্টার শব্দ অনুসরণ করে লক্ষ্যযুক্ত স্ট্রিং দিন:

perl -pe '$"="|";s%\b(@{[<>]})\s%$&x!$v{lc$1}++%iegx;chop';echo
This is a test Will this be correct Both will be removed
this
will
^D
^D

chopশেষ শব্দটি মুছে ফেলার ক্ষেত্রে কেবল কেবল অনুসরণের স্থানটি ঠিক করার প্রয়োজন

শুধু কোড:

$"="|";s%\b(@{[<>]})\s%$&x!$v{lc$1}++%iegx;chop

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


1

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

s=>a=>s.split` `.filter(q=x=>(q[x=x.toLowerCase()]=eval(`/\\b${x}\\b/i`).test(a)<<q[x])<2).join` `

1

K4 , 41 বাইট

সমাধান:

{" "/:x_/y@>y:,/1_'&:'(_y)~/:\:_x:" "\:x}

উদাহরণ:

q)k){" "/:x_/y@>y:,/1_'&:'(_y)~/:\:_x:" "\:x}["A cat called matt sat on a mat and wore a hat A cat called matt sat on a mat and wore a hat";("cat";"mat")]
"A cat called matt sat on a mat and wore a hat A called matt sat on a and wore a hat"

q)k){" "/:x_/y@>y:,/1_'&:'(_y)~/:\:_x:" "\:x}["Case for different case";enlist "case"]
"Case for different"

q)k){" "/:x_/y@>y:,/1_'&:'(_y)~/:\:_x:" "\:x}["the letters in the array are in a different case";enlist "In"]
"the letters in the array are a different case"

q)k){" "/:x_/y@>y:,/1_'&:'(_y)~/:\:_x:" "\:x}["5 times 5 is 25";(1#"5";1#"6")]
"5 times is 25"

ব্যাখ্যা:

হোয়াইটস্পেসে বিভক্ত করুন, উভয় ইনপুট ছোট করুন, ম্যাচ সন্ধান করুন, প্রথম ঘটনা বাদে সমস্ত অপসারণ করুন, আবার স্ট্রিংয়ে একসাথে যোগ দিন।

{" "/:x_/y@>y:,/1_'&:'(_y)~/:\:_x:" "\:x} / the solution
{                                       } / lambda with implicit x & y args
                                  " "\:x  / split (\:) on whitespace " "
                                x:        / save result as x
                               _          / lowercase x
                          ~/:\:           / match (~) each right (/:), each left (\:)
                      (_y)                / lowercase y
                   &:'                    / where (&:) each ('), ie indices of matches
                1_'                       / drop first of each result
              ,/                          / flatten
            y:                            / save result as y
         y@>                              / descending indices (>) apply (@) to y
      x_/                                 / drop (_) from x
 " "/:                                    / join (/:) on whitespace " "

1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 75 বাইট

f=(s,a)=>a.map(x=>s=s.replace(eval(`/\\b${x}\\b */ig`),s=>i++?"":s,i=0))&&s

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


1
যেহেতু এটি কোনও পুনরাবৃত্ত ফাংশন নয়, f=আপনার বাইট গণনাতে আপনাকে অন্তর্ভুক্ত করার দরকার নেই । আপনি পরামিতিগুলি কারি করে, প্রতিস্থাপন (s,a)=>করে s=>a=>এবং এর পরে ফাংশনটি কল করে একটি বাইট সংরক্ষণ করতে পারেন f(s)(a)
শেগি

@ শেগি হ্যাঁ, তবে আমি ফাংশনটির সংজ্ঞাটি গল্ফ করা সম্পর্কে সত্যই মনে করি কারণ মূল চুক্তি শরীরটি গল্ফ করে। তবে
থ্যাঙ্কস

1

জাভাস্ক্রিপ্ট ES6, 78 বাইট

f=(s,a,t={})=>s.split` `.filter(w=>a.find(e=>w==e)?(t[w]?0:t[w]=1):1).join` `

কিভাবে এটা কাজ করে:

f=(s,a,t={})=> // Function declaration; t is an empty object by default
s.split` ` // Split the string into an array of words
.filter(w=> // Declare a function that, if it returns false, will delete the word
  a.find(e=>w==e) // Returns undeclared (false) if the word isn't in the list
  ?(t[w]?0 // If it is in the list and t[w] exists, return 0 (false)
    :t[w]=1) // Else make t[w] exist and return 1 (true)
  :1) // If the word isn't in the array, return true (keep the word for sure)
.join` ` // Rejoin the string

2
পিপিসিজিতে আপনাকে স্বাগতম! যেহেতু আপনি ফাংশনটির নামটি fপুনরাবৃত্ত কলের জন্য ব্যবহার করছেন না , একটি নামহীন ফাংশনটিও একটি বৈধ জমা হবে, সুতরাং আপনি দুটি বাইট বাদ দিয়ে সংরক্ষণ করতে পারেন f=
মার্টিন ইন্ডার

পিপিসিজিতে আপনাকে স্বাগতম! দুঃখের বিষয় এই ব্যর্থ হয় যখন বিভিন্ন মামলা জড়িত।
শেগি

যদি এটি না হয় তবে আপনি এটিকে 67 বাইটে
শেগি

টিপসটির জন্য ধন্যবাদ!
আয়ান

@ শেগিটি ইনপুট অ্যারেটিকে অবজেক্ট হিসাবে ব্যবহার করা একটি আকর্ষণীয় ধারণা যা আমি ভেবেও দেখিনি। আমি চেষ্টা করব এবং কেস সমস্যাটি সমাধান করব।
আয়ান

0

পাওয়ারশেল ভি 3 বা তার পরে, 104 বাইট

Param($s,$w)$w|?{$_-and$s-match($r="\b$_(?: |$)")}|%{$h,$t=$s-split$r;$s="$h$($Matches.0)$(-join$t)"};$s

এক বাইট মূল্যে প্রতিস্থাপন দ্বারা দ্রষ্টব্য 2.0 চালানো যেতে পারে $Matches.0সঙ্গে $Matches[0]

দীর্ঘ সংস্করণ:

Param($s, $w)
$w | Where-Object {$_ -and $s -match ($r = "\b$_(?: |$)")} |    # Process each word in the word list, but only if it matches the RegEx (which will be saved in $r).
    ForEach-Object {                                            # \b - word boundary, followed by the word $_, and either a space or the end of the string ($)
        $h, $t = $s -split $r                                   # Split the string on all occurrences of the word; the first substring will end up in $h(ead), the rest in $t(ail) (might be an array)
        $s = "$h$($Matches.0)$(-join $t)"                       # Create a string from the head, the first match (can't use the word, because of the case), and the joined tail array
    }
$s                                                              # Return the result

ব্যবহার
যাইহোক.পিএস 1 হিসাবে সংরক্ষণ করুন এবং স্ট্রিং এবং শব্দগুলিকে আর্গুমেন্ট হিসাবে কল করুন। যদি একাধিক শব্দ পাস করার প্রয়োজন হয় তবে শব্দগুলিকে @ () এ মোড়ানো দরকার:

.\Whatever.ps1 -s "A cat called matt sat on a mat and wore a hat A cat called matt sat on a mat and wore a hat" -w @("cat", "mat")

ফাইল ছাড়াই বিকল্প (সরাসরি পিএস কনসোলে আটকানো যেতে পারে):
স্ক্রিপ্টটিকে স্ক্রিপ্টব্লক হিসাবে সংরক্ষণ করুন (কোঁকড়ানো ধনুর্বন্ধনীগুলির ভিতরে) একটি চলকতে, তারপরে ইনভোক () পদ্ধতিটি কল করুন বা ইনভোক-কমান্ডের সাহায্যে এটি ব্যবহার করুন:

$f={Param($s,$w)$w|?{$_-and$s-match($r="\b$_(?: |$)")}|%{$h,$t=$s-split$r;$s="$h$($Matches.0)$(-join$t)"};$s}
$f.Invoke("A cat called matt sat on a mat and wore a hat A cat called matt sat on a mat and wore a hat", @("cat", "mat"))
Invoke-Command -ScriptBlock $f -ArgumentList "A cat called matt sat on a mat and wore a hat A cat called matt sat on a mat and wore a hat", @("cat", "mat")

0

জাভাস্ক্রিপ্ট, 150 বাইট

s=(x, y)=>{let z=new Array(y.length).fill(0);let w=[];for(f of x)(y.includes(f))?(!z[y.indexOf(f)])&&(z[y.indexOf(f)]=1,w.push(f)):w.push(f);return w}

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

@ শেগি "আউটপুটটি কোনও ফাংশন থেকে ফেরতের মান হতে পারে" এটি দেখে মনে হচ্ছে এটি ফাংশন থেকে কোনও মান ফেরত দেয়?
27:58

0

পরিষ্কার , 153 142 138 134 বাইট

import StdEnv,StdLib,Text
@ =toUpperCase
$s w#s=split" "s
=join" "[u\\u<-s&j<-[0..]|and[i<>j\\e<-w,i<-drop 1(elemIndices(@e)(map@s))]]

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

$ :: String [String] -> Stringচ্যালেঞ্জের বর্ণনা হিসাবে আক্ষরিকভাবে ফাংশনটি সংজ্ঞায়িত করে । এটি প্রতিটি লক্ষ্য শব্দের জন্য প্রথমটির পরে প্রতিটি ঘটনা সন্ধান করে এবং সরিয়ে দেয়।


0

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

+i`(^|,)((.+),.*\3.* )\3( |$)
$2
.*,

-১৪ বাইট @ নীলকে ধন্যবাদ , এবং বাগ- ফিক্সের জন্য +5 বাইট।

বিন্যাসে ইনপুট word1,word2,word3,sentence, কারণ মাল্টি-লাইন ইনপুট কীভাবে রাখবেন তা আমি নিশ্চিত নই (যেখানে ইনপুটগুলি আলাদাভাবে ব্যবহৃত হয়) ..

ব্যাখ্যা:

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

+i`(^|,)((.+),.*\3.* )\3( |$)   Main regex to match:
+i`                              Enable case insensitivity
   (^|,)                          Either the start of the string, or a comma
        (                         Open capture group 2
         (                         Open capture group 3
          .+                        1 or more characters
            )                      Close capture group 3
             ,                     A comma
              .*                   0 or more characters
                \3                 The match of capture group 3
                  .*               0 or more characters, followed by a space
                     )            Close capture group 2
                      \3          The match of capture group 2 again
                        ( |$)     Followed by either a space, or it's the end of the string
$2                              And replace everything with:
                                 The match of capture group 2

.*,                             Then get everything before the last comma (the list)
                                 and remove it (including the comma itself)

1
লিখিত হিসাবে আপনি প্রথম লাইনটি +i`((.+),.*\2.* )\2( |$)এবং দ্বিতীয়টিতে সরল করতে পারেন $1তবে আমি লক্ষ্য করেছি যে আপনার কোড often,he intended to keep ten geeseযাইহোক ব্যর্থ ।
নিল

@ নীল -14 গল্ফের জন্য ধন্যবাদ, এবং +1 দিয়ে বাগটি ঠিক করেছেন।
কেভিন ক্রুইজসেন

... বাদে এটি এখন মূল পরীক্ষার যে কোনও একটিতে ব্যর্থ হয় ...
নীল

@ নীল আহ উফ .. আবার +4 বাইটের জন্য স্থির করা হয়েছে।
কেভিন ক্রুইজসেন

ঠিক আছে, সুসংবাদটি হ'ল আমি মনে করি আপনি এর \bপরিবর্তে ব্যবহার করতে পারেন (^|,)তবে খারাপ খবরটি আমার মনে হয় আপনার প্রয়োজন \b\3\b(যদিও এখনও একটি উপযুক্ত পরীক্ষার কেস তৈরি করেন নি)।
নিল

0

লাল , 98 বাইট

func[s w][foreach v w[parse s[thru[any" "v ahead" "]any[to remove[" "v ahead[" "| end]]| skip]]]s]

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

f: func [s w][ 
    foreach v w [                   ; for each string in the array
        parse s [                   ; parse the input string as follows:
            thru [                  ; keep everything thru: 
                any " "             ; 0 or more spaces followed by
                v                   ; the current string from the array followed by
                ahead " "           ; look ahead for a space
            ]
            any [ to remove [       ; 0 or more: keep to here; then remove: 
                " "                 ; a space followed by 
                v                   ; the current string from the array
                ahead [" " | end]]  ; look ahead for a space or the end of the string
            | skip                  ; or advance the input by one 
            ]
        ]
    ]
    s                               ; return the processed string 
]

0

হুশ , 13 বাইট

wüöVËm_Ṗ3+⁰ew

এই ক্রমে স্ট্রিংগুলির একটি তালিকা এবং একটি একক স্ট্রিংকে আর্গুমেন্ট হিসাবে গ্রহণ করে। ধরে নেওয়া যায় যে তালিকাটি সদৃশ-মুক্ত। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

wüöVËm_Ṗ3+⁰ew  Inputs: list of strings L (explicit, accessed with ⁰), string S (implicit).
               For example, L = ["CASE","for"], s = "Case for a different case".
            w  Split S on spaces: ["Case","for","a","different","case"]
 ü             Remove duplicates wrt an equality predicate.
               This means that a function is called on each pair of strings,
               and if it returns a truthy value, the second one is removed.
  öVËm_Ṗ3+⁰e    The predicate. Arguments are two strings, say A = "Case", B = "case".
           e    Put A and B into a list: ["Case","case"]
         +⁰     Concatenate with L: ["CASE","for","Case","case"]
       Ṗ3       All 3-element subsets: [["CASE","for","Case"],["CASE","for","case"],
                                        ["CASE","Case","case"],["for","Case","case"]]
  öV            Does any of them satisfy this:
    Ë            All strings are equal
     m_          after converting each character to lowercase.
                In this case, ["CASE","Case","case"] satisfies the condition.
               Result: ["Case","for","a","different"]
w              Join with spaces, print implicitly.

0

ন্যূনতম , 125 বাইট

=a () =b a 1 get =c a 0 get " " split
(:d (b d in?) ((c d in?) (d b append #b) unless) (d b append #b) if) foreach
b " " join

ইনপুটটি quotপ্রথম উপাদান হিসাবে ইনপুট স্ট্রিং সহ স্ট্যাকের সাথে রয়েছে এবং quotদ্বিতীয় উপাদান হিসাবে ডুপ্লিকেট স্ট্রিংগুলির একটি

("this sentence has no matches" ("ten" "cheese"))


0

এডাব্লুকে , 120 বাইট

NR%2{for(;r++<NF;)R[tolower($r)]=1}NR%2==0{for(;i++<NF;$i=$(i+s))while(R[x=tolower($(i+s))])U[x]++?++s:i++;NF-=s}NR%2==0

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

"হোয়াইটস্পেস সরান" অংশটি এটি প্রথম চিন্তা করার চেয়ে কিছুটা চ্যালেঞ্জযুক্ত করে তুলেছে। একটি ক্ষেত্র সেট করা "", একটি ক্ষেত্র সরিয়ে দেয়, তবে অতিরিক্ত বিভাজককে ছেড়ে দেয়।

টিআইও লিঙ্কটিতে একাধিক প্রবেশের অনুমতি দেওয়ার জন্য 28 টি অতিরিক্ত বাইট রয়েছে।

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


0

রুবি , 63 61 60 59 বাইট

->s,w{w.any?{|i|s.sub! /\b(#{i}\b.*) #{i}\b/i,'\1'}?redo:s}

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

সংক্ষিপ্ত আকারের সংক্ষিপ্ত আকারের একটি সংক্ষিপ্ত সংস্করণ - এলোমেলোতার কারণে প্রতি 10 বার 15 বার (37 বাইট)

->s,w{s.uniq{|i|w.member?(i)?i:rand}}

0

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

from re import*
p='\s?%s'
S,A=input()
for a in A:S=sub(p%a,lambda s:s.end()==search(p%a,S,flags=I).end()and s.group()or'',S,flags=I)
print S

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

ব্যাখ্যা:

re.sub(..)প্রতিস্থাপনের স্ট্রিংয়ের পরিবর্তে আর্গুমেন্টটি কোনও ফাংশন নিতে পারে। সুতরাং এখানে আমরা কিছু অভিনব ল্যাম্বদা আছে। ফাংশনটিকে প্রতিটি ধরণের প্যাটার্নের জন্য বলা হয় এবং একটি ফাংশন এই ফাংশনে পাস করা হয় - ম্যাচবোজেক্ট। এই অবজেক্টে প্রতিষ্ঠিত ঘটনা সম্পর্কে তথ্য রয়েছে। আমি এই ঘটনাটির সূচীতে আগ্রহী, এটি পুনরায় পুনরুদ্ধার start()বা end()ফাংশন থেকে পাওয়া যেতে পারে । ল্যাটার সংক্ষিপ্ত তাই এটি ব্যবহৃত হয়।

শব্দের প্রথম উপস্থিতিটির প্রতিস্থাপন বাদ দেওয়ার জন্য, আমি অন্য একটি রেগেক্স অনুসন্ধান ফাংশন ব্যবহার করে হুবহু ফার্মগুলি পাই এবং তারপরে সূচকগুলি তুলনা করে একই ব্যবহার করতাম end()

পতাকা re.Iএর সংক্ষিপ্ত সংস্করণre.IGNORECASES

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