কেস ম্যাচিং প্রতিস্থাপন অনুসন্ধান করুন


14

তিনটি ইনপুট নিন, পাঠ্যের একটি স্ট্রিং T; প্রতিস্থাপন করতে অক্ষরের একটি স্ট্রিং F; এবং তাদের সাথে প্রতিস্থাপন করতে অক্ষরের একটি স্ট্রিং RTএকই (কেস সংবেদনশীল) অক্ষরের সাথে প্রতিটি স্ট্রিংয়ের জন্য F, অক্ষরগুলির সাথে তাদের প্রতিস্থাপন করুন R। যাইহোক, মূল পাঠ্যের মতো একই কেস রাখুন।

এর Rচেয়ে বেশি অক্ষর থাকলে Fঅতিরিক্ত অক্ষরগুলি যেমন হয় তেমনই হওয়া উচিত R। যদি সংখ্যা বা চিহ্ন থাকে Fতবে তার সাথে সংশ্লিষ্ট অক্ষরগুলি Rতাদের থাকা কেসটি রাখে RFঅগত্যা উপস্থিত হবে না T

আপনি ধরে নিতে পারেন সমস্ত পাঠ্য প্রিন্টযোগ্য এএসসিআইআই ব্যাপ্তিতে থাকবে।

উদাহরণ

"Text input", "text", "test" -> "Test input"

"tHiS Is a PiEcE oF tExT", "is", "abcde" -> "tHaBcde Abcde a PiEcE oF tExT"

"The birch canoe slid on the smooth planks", "o", " OH MY " -> "The birch can OH MY e slid  OH MY n the sm OH MY  OH MY th planks"

"The score was 10 to 5", "10", "tEn" -> "The score was tEn to 5"

"I wrote my code in Brain$#@!", "$#@!", "Friend" -> "I wrote my code in BrainFriend"

"This challenge was created by Andrew Piliser", "Andrew Piliser", "Martin Ender" -> "This challenge was created by Martin Ender"

// Has a match, but does not match case 
"John does not know", "John Doe", "Jane Doe" -> "Jane does not know"

// No match
"Glue the sheet to the dark blue background", "Glue the sheet to the dark-blue background", "foo" -> "Glue the sheet to the dark blue background"

// Only take full matches
"aaa", "aa", "b" -> "ba"

// Apply matching once across the string as a whole, do not iterate on replaced text
"aaaa", "aa", "a" -> "aa"

"TeXT input", "text", "test" -> "TeST input"

স্যান্ডবক্স লিঙ্ক


আজব কেসিংয়ের সাথে উদাহরণের অনুরোধ:"TeXT input", "text", "test"
ইঞ্জিনিয়ার টোস্ট

@ ইঞ্জিনিয়ারস্টাস্ট যুক্ত উদাহরণ
অ্যান্ড্রু

আমি কেন "The birch canoe slid on the smooth planks", "o", " OH MY "এত হাস্যকর পেলাম তা নিশ্চিত না করে তবে আমি সেই উদাহরণটি পছন্দ করেছি।
ম্যাজিক অক্টোপাস আরন

উত্তর:


3

অক্ষিপট , 116 বাইট

i`(.+)(?=.*¶\1(¶.*)$)|.*¶.*$
¶¶$2¶$1¶¶
{T`l`L`¶¶.(?=.*¶[A-Z])
T`L`l`¶¶.(?=.*¶[a-z])
}`¶¶¶(.)(.*¶).
$1¶¶¶$2
¶¶¶¶.*|¶

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

i`(.+)(?=.*¶\1(¶.*)$)|.*¶.*$
¶¶$2¶$1¶¶

এটি অনুসন্ধান করে Tএবং যখনই ম্যাচটির দিকে নজরদারীর বিরুদ্ধে কোনও সংবেদন-সংবেদনশীল ম্যাচ Fঘিরে থাকে নতুন লাইনগুলিতে এবং চারদিকে তাকাতে হয়R is ।

{T`l`L`¶¶.(?=.*¶[A-Z])
T`L`l`¶¶.(?=.*¶[a-z])
}`¶¶¶(.)(.*¶).
$1¶¶¶$2

প্রতিলিপিটির প্রতিটি অক্ষর Rম্যাচের সাথে মিলিত হওয়ার জন্য সামঞ্জস্য করা হয়, এরপরে এটি কর্মক্ষেত্রের বাইরে চলে যায় যাতে পরবর্তী চিঠিটি প্রক্রিয়া করা যায়, যতক্ষণ না অনুলিপি হয়R বা ম্যাচের দুটি অক্ষর না চলে।

¶¶¶¶.*|¶

যদি Rচিঠিপত্রের অনুলিপিটি অনুলিপি হয় , তবে ম্যাচের বাকি অংশগুলি 4 টি নতুন লাইনের আগে থাকবে, তাই এটি মুছুন। অন্যথায়, কিছু অবশিষ্ট আছে অনুলিপিগুলির বাম-ওভার টুকরো থাকবে Rযার ফলাফল উত্পন্ন করতে ইনপুটটির সাথে মেলে না এমন অংশগুলি দিয়ে কঙ্কেট করতে হবে।


3

এপিএল (ডায়ালগ) , 75 73 72 বাইট

উল্লেখ করার অনুরোধ জানানো T, Rএবং Fযাতে। Rঅবশ্যই বি ডায়ালগ রূপান্তর ফর্ম্যাটে Fদেওয়া উচিত এবং অবশ্যই পিসিআরই ফর্ম্যাটে দেওয়া উচিত।

⍞⎕R(⍞∘{(⊣⌿d)l¨⍨(1∘⌷≠(⊢⌿d∊⎕A,lA)∧≠⌿)d≠(l819⌶)d←↑⍺⍵.Match↑¨⍨≢⍺})⍠1⊢⍞

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

 জন্য অনুরোধ জানানো T

 ফলন যে (1 এবং পৃথক) T )

⍞⎕R(… এর )⍠1 জন্য প্রম্পট Fএবং আর এপিলেস নিম্নলিখিত ফাংশনের ফলাফলের সাথে মেলে:

⍞∘{…} প্রম্পট-এর জন্য Rবাম যুক্তি হিসাবে বেঁধে একটি monadic ফাংশন অর্জন :

  ≢⍺ চিঠির সংখ্যা গণনা করুন R

  ⍺⍵.Match↑¨⍨ প্রতিটি থেকে অনেকগুলি চিঠি নিন Rএবং ম্যাচটি
   বাম আর্গুমেন্ট, যা আমরা Rহিসাবে বেঁধেছিলাম ।
   একটি নামস্থান যা Matchবর্তমানে পাওয়া স্ট্রিং রয়েছে।

   এই দুটি একটি দুটি সারি ম্যাট্রিক্স মধ্যে মিশ্রিত করুন

  d← হিসাবে সঞ্চয় d

  ()  এটিতে নিম্নলিখিত সূক্ষ্ম ফাংশন প্রয়োগ করুন:

   819⌶ ছোট হাতের (স্মৃতিসৌধ: 819 দেখতে বড় দেখাচ্ছে )

   l← হিসাবে যে ফাংশন সংরক্ষণ করুন l

  d≠ বুলিয়ান যেখানে dপৃথক হয় (যেমন প্রতিটি ছোট / বড় হাতের অক্ষরের জন্য 0/1 দেয়)

  () এটিতে নিম্নোক্ত কাজটি প্রয়োগ করুন:

   ≠⌿ উল্লম্ব এক্সওআর

   ()∧ বুলিয়ান এবং নিম্নলিখিত অ্যারে সহ:

    l⎕A lowercased একটি lphabet

    ⎕A, বড় হাতের ছোঁয়া একটি lphabet

    d∊ প্রত্যেকটি চিঠির জন্য বুলিয়ান ডি-এর সদস্য কিনা (যেমন কোনও চিঠি কিনা)

    ⊢⌿ শেষ সারিতে অর্থাত্ ম্যাচটির অক্ষরের জন্য

   1∘⌷≠ প্রথম সারি, অর্থাত্ প্রতিটি অক্ষর কিনা সঙ্গে XOR যাও Rবড়হাতের হয়

  ()l¨⍨ ছোট হাতের অক্ষরে (যদি 0 হয়) বা বড় হাতের অক্ষরে (যদি 1) প্রতিটি অক্ষর ব্যবহার করুন:

   ⊣⌿ প্রথম সারিতে, যেমন R


* এর ⎕OPT পরিবর্তে ডায়ালগ ক্লাসিকের জন্য বাইট গণনা



2

প্রত্যাহার করা। ডম এর উত্তর এটি একটি দীর্ঘ শট দ্বারা প্রহার করে।

# পার্ল 5 , 136 + 1 (-পি) = 137 বাইট

$f=<>;chomp$f;@R=($r=<>)=~/./g;for$i(/\Q$f/gi){$c=$n='';$"=$R[$c++],$n.=/[A-Z]/?uc$":/[a-z]/?lc$":$"for$i=~/./g;s/\Q$i/$n.substr$r,$c/e}

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

@ ডোম হেস্টিংস উল্লেখ করার পরে একটি বিশাল কাটা হয়েছে \Q

# পার্ল 5 , 176 + 1 (-পি) = 177 বাইট

sub h($){chomp@_;pop=~s/[^a-z0-9 ]/\\$&/gir}$f=h<>;@R=($r=<>)=~/./g;for$i(/$f/gi){$c=$n='';$"=$R[$c++],$n.=/[A-Z]/?uc$":/[a-z]/?lc$":$"for$i=~/./g;$i=h$i;s/$i/$n.substr$r,$c/e}

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


এখন সমস্ত পরীক্ষার কেস পাস করে;) 108: এটি অনলাইনে চেষ্টা করুন!
ডম হেস্টিংস

আপনার এটি পোস্ট করা উচিত। এটি আমার কিছুটা মারধর করে।
এক্সকালি

যথেষ্ট ফর্সা! এটি তৈরি মজা ছিল। আমি চ্যালেঞ্জ উপভোগ করি!
ডম হেস্টিংস

2

পাওয়ারশেল , 190 বাইট

param($T,$F,$R)[regex]::Replace($T,'(?i)'+[regex]::escape($F),{param($m)-join(0..$R.Length|%{(($y=$R[$_]),("$y"."To$((('Low','Upp')[($z="$m"[$_])-cmatch($C='[A-Z]')]))er"()))[$z-match$C]})})

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

ব্যাখ্যা:

[Regex]::Replace( 
    input text T,
    Find text F with case insensitive and [regex]::escape() for symbols,
    {scriptblock} for computing the replacement
)

রিপ্ল্যাক্টমেন্ট স্ক্রিপ্টব্লকটি করে:

$m is the matched text with case information
loop over each character in R as $y
    $z is the same index character in $m ($null if R overruns)
    $z-match'[A-Z]' checks if alphabetic, so we must to case-match
      otherwise, non-alphabetic or null, no case-match, return $y unchanged.
    if case-matching, check if z case-sensitive matches '[A-Z]' and
      use dynamic method calling from a generated string, either 
      $y."ToLower"()
      $y."ToUpper"()
      to force the match
-join the loop output into a replacement string

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

function f {
param($T,$F,$R)[regex]::Replace($T,'(?i)'+[regex]::escape($F),{param($m)-join(0..$R.Length|%{(($y=$R[$_]),("$y"."To$((('Low','Upp')[($z="$m"[$_])-cmatch($C='[A-Z]')]))er"()))[$z-match$C]})})
}

Import-Module Pester

$Cases = @(
    @{Text = "Text input"; Find = "text"; Replace = "test"; Result = "Test input" }
    @{Text = "tHiS Is a PiEcE oF tExT"; Find = "is"; Replace = "abcde"; Result = "tHaBcde Abcde a PiEcE oF tExT" }
    @{Text = "The birch canoe slid on the smooth planks"; Find = "o"; Replace = " OH MY "; Result = "The birch can OH MY e slid  OH MY n the sm OH MY  OH MY th planks" }
    @{Text = "The score was 10 to 5"; Find = "10"; Replace = "tEn"; Result = "The score was tEn to 5" }
    @{Text = "I wrote my code in Brain$#@!"; Find = "$#@!"; Replace = "Friend"; Result = "I wrote my code in BrainFriend" }
    @{Text = "This challenge was created by Andrew Piliser"; Find = "Andrew Piliser"; Replace = "Martin Ender"; Result = "This challenge was created by Martin Ender" }
    @{Text = "John does not know"; Find = "John Doe"; Replace = "Jane Doe" ; Result ="Jane does not know" }
    @{Text = "Glue the sheet to the dark blue background"; Find = "Glue the sheet to the dark-blue background"; Replace = "foo"; Result ="Glue the sheet to the dark blue background" }
    @{Text = "aaa" ; Find = "aa"; Replace = "b"; Result ="ba" }
    @{Text = "aaaa"; Find = "aa"; Replace = "a"; Result ="aa" }
    @{Text = "TeXT input"; Find = "text"; Replace = "test"; Result ="TeST input" }
)

Describe "Tests" {

    It "works on /<Text>/<Find>/<Replace>/ == '<Result>'" -TestCases $Cases {
        param($Text, $Find, $Replace, $Result)
        f $Text $Find $Replace | Should -BeExactly $Result
    }

}

1

টিএক্সআর লিস্প, 285 বাইট

(defun f(s f r)(let*((w(copy s))(x(regex-compile ^(compound,(upcase-str f))))(m(reverse(tok-where(upcase-str s)x))))(each((n m))(set[w n]r) (for((i(from n)))((< i (min(to n)(len w))))((inc i))(cond((chr-isupper[s i])(upd[w i]chr-toupper))((chr-islower[s i])(upd[w i]chr-tolower)))))w))

প্রচলিতভাবে ফরম্যাট করা আসল:

(defun f (s f r)
  (let* ((w (copy s))
         (x (regex-compile ^(compound ,(upcase-str f))))
         (m (reverse (tok-where (upcase-str s) x))))
    (each ((n m))
      (set [w n] r)
      (for ((i (from n))) ((< i (min (to n) (len w)))) ((inc i))
        (cond ((chr-isupper [s i]) (upd [w i] chr-toupper))
              ((chr-islower [s i]) (upd [w i] chr-tolower)))))
    w))

1

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

(T,F,R)=>T.replace(eval(`/${F.replace(/[-\/\\^$*+?.()|[\]{}]/g,'\\$&')}/gi`),F=>[...R].map((r,i)=>/[A-Z]/i.test(f=F[i]||'')?r[`to${f>'`'&&f<'{'?'Low':'Upp'}erCase`]():r).join``)

কম গল্ফড:

(T,F,R) => T.replace(
    eval(`/${F.replace(/[-\/\\^$*+?.()|[\]{}]/g,'\\$&')}/gi`),
    F=>[...R].map((r,i) =>
        /[A-Z]/i.test(f = F[i] || '')
            ? r[`to${
                f > '`' && f < '{'
                    ? 'Low'
                    : 'Upp'
                }erCase`]()
            : r
    ).join``
)

প্রোগ্রামটি প্রতীকগুলি হ্যান্ডেল করতে হওয়ায় 47 বাইটগুলি এই রেজেক্স পলায়ন ফাংশন থেকে এসেছে। :(


1

পাইথন 2 , 193 200 বাইট

T,F,R=input()
w=str.lower
i=-len(T)
l=len(F)
T+=' '
while i:
 s=T[i:i+l]
 if w(s)==w(F):T=T[:i]+`[[y,[w(y),y.upper()][x<'a']][x.isalpha()]for x,y in zip(s,R)]`[2::5]+R[l:]+T[i+l:];i+=l-1
 i+=1
print T

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


এটি (টিআইও লিঙ্ক থেকে 193 বাইট) স্ট্রিংয়ের শেষে ম্যাচগুলি খুঁজে পেতে ব্যর্থ হবে।
তেহট্টি

1

পাইথন 3 , 183 বাইট

import re
j="".join
f=lambda T,F,R:j((p,j((y,(y.lower(),y.upper())[x<'a'])[x.isalpha()]for(x,y)in zip(p,R))+R[len(F):])[i%2>0]for i,p in enumerate(re.split('('+re.escape(F)+')',T,0,2)))

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

re.split + সমস্ত এমনকি উপাদান রাখুন এবং প্রতিস্থাপনের স্ট্রিংয়ের সঠিক রূপান্তর দ্বারা সমস্ত বিজোড় উপাদানগুলি প্রতিস্থাপন করুন:

>>> re.split("(is)","tHiS Is a PiEcE oF tExT",0,2) # 2=re.IGNORE_CASE
['tH', 'iS', ' ', 'Is', ' a PiEcE oF tExT']

1

সি (জিসিসি) , 210 211 207 189 বাইট

"ব্রেনফ্রেন্ড" টেস্টকেসের জন্য মূলধনটির সাথে বাগ ঠিক করতে একটি বাইট যুক্ত করতে হয়েছিল

বাহ এই ক্লান্তিকর ... এখন কিছু বাইট গল্ফ

char*c,*p;d,l;f(t,f,r){for(d=isalpha(*(p=f)),p=c=t;c=strcasestr(c,f);p=c+=l>0?l:0){for(l=strlen(f);p<c;)putchar(*p++);for(p=r;*p;p++,c+=l-->0)putchar(d*l<1?*p:*c&32?*p|32:*p&~32);}puts(p);}

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


আমি সম্ভবত কিছু স্পষ্ট অনুপস্থিত, তবে *(p=f)আপনি p=c=tঠিক পরে যখন সেট করবেন তখন কেন আপনার প্রয়োজন হবে ? আমি এটি দিয়ে চেষ্টা করেছি *fএবং এটি কার্যকর হয়নি, সুতরাং এটি অবিলম্বে ওভাররাইট করা হচ্ছে না।
অ্যান্ড্রু

এফটি বেফোল্টের মাধ্যমে একটি অন্তর্নিহিত হয় তাই আমরা এটির জন্য চার্জ পাওয়ার জন্য বিবেচনা করতে পারি না, তবে পি একটি চর *
ক্লাব্ল্যাঙ্ক

আহ, এটা বোঝা যায়। সুতরাং এটি লেখার একটি ছোট উপায় *((char*)f)? শান্ত!
অ্যান্ড্রু

1

সি # (মনো সি # সংকলক) , 241 বাইট

using System.Text.RegularExpressions;
class Program {
static void Main(string[] args) {
r("Text input","text","Test");
}
static void r(string v,string i,string u)
{
System.Console.WriteLine(Regex.Replace(v,i,u,RegexOptions.IgnoreCase)); 
}
}

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


1
পিপিসিজিতে আপনাকে স্বাগতম! আপনি এখানে বেশিরভাগ সাদা জায়গা সরিয়ে ফেলতে পারেন এবং আসলে আপনাকে ইনপুটগুলি যুক্তি বা ইনপুট হিসাবে গ্রহণ করতে হবে (এগুলিতে কোডিং নিষিদ্ধ) অথবা আপনি কেবল ফাংশনটি অন্তর্ভুক্ত করতে পারেন; এমনকি আপনার Action<string,string,string> r =অংশও লাগবে না
হাইপারনিউট্রিনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.