সাবসেক্সেন্স সাবস্টিটিউশন


30

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

ইনপুট তিন স্ট্রিং গঠিত হবে A, Bএবং Cযেখানে Bএবং Cএকই দৈর্ঘ্যের হতে নিশ্চিত করা হয়। এটিতে যদি Bএকটি উপসর্গ হিসাবে প্রদর্শিত হয় তবে Aএটি প্রতিস্থাপন করা উচিত C। এখানে একটি সহজ উদাহরণ:

A: abcdefghijklmnopqrstuvwxyz
B: ghost
C: 12345

এটি এভাবে প্রক্রিয়া করা হবে:

abcdefghijklmnopqrstuvwxyz
      ||      |   ||
abcdef12ijklmn3pqr45uvwxyz

Bঅনুচ্ছেদ হিসাবে সন্ধানের জন্য যদি বেশ কয়েকটি উপায় থাকে তবে আপনার লোভের সাথে বাম-সর্বাধিক স্থানটি প্রতিস্থাপন করা উচিত:

A: abcdeedcba
B: ada
C: BOB

Result:   BbcOeedcbB
and NOT:  BbcdeeOcbB

Bএকাধিক বিচ্ছিন্ন জায়গায় পাওয়া গেলে একই জিনিস প্রয়োগ করা হয়:

A: abcdeedcbaabcde
B: ed
C: 12

Result:   abcd1e2cbaabcde
and NOT:  abcd112cbaabc2e (or similar)

কখন Bউপস্থিত হয় না A, আপনি Aঅপরিবর্তিত আউটপুট করা উচিত ।

বিধি

উপরে উল্লিখিত হিসাবে, তিনটি স্ট্রিং নিন A, Bএবং Cইনপুট হিসাবে এবং যদি কিছু থাকে তবে এর সাথে Bএকটি অনুচ্ছেদ হিসাবে বাম-সর্বাধিক উপস্থিতিটি প্রতিস্থাপন করুন ।AC

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন।

আপনার উত্তরটিতে আপনার নির্দিষ্ট হওয়া উচিত এমন কোনও ধারাবাহিক ক্রমে আপনি তিনটি স্ট্রিং নিতে পারেন। আপনি যে অনুমান হতে পারে Bএবং Cএকই দৈর্ঘ্য আছে। সমস্ত স্ট্রিংয়ে কেবলমাত্র অক্ষরযুক্ত অক্ষর থাকবে।

স্ট্যান্ডার্ড বিধি প্রযোজ্য।

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

: প্রতিটি পরীক্ষা কেস চার লাইন A, B, Cফলাফলের করে।

abcdefghijklmnopqrstuvwxyz
ghost
12345
abcdef12ijklmn3pqr45uvwxyz

abcdeedcba
ada
BOB
BbcOeedcbB

abcdeedcbaabcde
ed
12
abcd1e2cbaabcde

121
121
aBc
aBc

abcde
acb
123
abcde

ABC
ABCD
1234
ABC

012345678901234567890123456789
42
TT
0123T5678901T34567890123456789

edcbaedcbaedcbaedcba
abcde
12345
edcbaedcbaedcbaedcba

edcbaedcbaedcbaedcbaedcba
abcde
12345
edcb1edc2aed3bae4cba5dcba

daccdedca
ace
cra
dcrcdadca

aacbcbabcccaabcbabcaabbbbca
abaaaccbac
1223334444
aacbcbabcccaabcbabcaabbbbca

aacbcbabcccaabcbabcaabbbbcac
abaaaccbac
1223334444
1ac2cb2bccc33b3bab4aa4bbbc44

লিডারবোর্ড

এই পোস্টের নীচে স্ট্যাক স্নিপেট উত্তরগুলি থেকে লিডারবোর্ড তৈরি করে) ক) ভাষা প্রতি সংক্ষিপ্ত সমাধানের তালিকা হিসাবে এবং খ) সামগ্রিক লিডারবোর্ড হিসাবে।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেম্পলেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও তৈরি করতে পারেন যা স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


ইনপুট / আউটপুট জন্য একক অক্ষর স্ট্রিংয়ের তালিকা ঠিক আছে?
FryAmTheEggman

@FryAmTheEggman হুঁ, শুধুমাত্র ঐক্যমত্য আমি খুঁজে যায় এই যা বৈধ স্ট্রিং উপস্থাপনা যেমন একক-অক্ষর স্ট্রিং তালিকা ধরে নি। একটি মেটা পোস্ট করার উপযুক্ত হতে পারে (বিশেষত কারণ আমি মনে করি এটিও এক্সনরের সর্বশেষ চ্যালেঞ্জের সামনে এসেছিল)। আমি আপাতত না বলতে যাচ্ছি।
মার্টিন এন্ডার

চরিত্র অ্যারে সম্পর্কে কি? এর থেকে বোঝা যাচ্ছে যে ভাষার উপযুক্ত স্ট্রিং টাইপ থাকলেও তাদের অনুমতি দেওয়া হয়েছে।
ডেনিস 18

@ ডেনিস হ্যাঁ, চরিত্রের অ্যারেগুলি ঠিক আছে তবে সিঙ্গলটন স্ট্রিংগুলি পূর্ণসংখ্যার অ্যারে গ্রহণ করার মতো [[1], [2], [3]]
মার্টিন এন্ডার

ঠিক আছে, এটি পরিষ্কার করার জন্য ধন্যবাদ।
ডেনিস

উত্তর:


3

জেলি , 23 22 21 বাইট

='T€ŒpfṢ€$ḢṬœp³ż⁵$³Ḋ?

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

প্রতিপাদন

$ head -n 5 test-cases
abcdefghijklmnopqrstuvwxyz
ghost
12345
abcdef12ijklmn3pqr45uvwxyz

$ cat subseq-short
while read s; do
        read p; read r; read o; echo $o; read
        timeout 1s jelly eun $1 "='T€ŒpfṢ€$ḢṬœp³ż⁵$³Ḋ?" "'$s'" "'$p'" "'$r'"
        (($?)) && echo '(killed)'
done < test-cases
$ ./subseq-short
abcdef12ijklmn3pqr45uvwxyz
abcdef12ijklmn3pqr45uvwxyz
BbcOeedcbB
BbcOeedcbB
abcd1e2cbaabcde
abcd1e2cbaabcde
aBc
aBc
abcde
abcde
ABC
ABC
0123T5678901T34567890123456789
0123T5678901T34567890123456789
edcbaedcbaedcbaedcba
edcbaedcbaedcbaedcba
edcb1edc2aed3bae4cba5dcba
edcb1edc2aed3bae4cba5dcba
dcrcdadca
dcrcdadca
aacbcbabcccaabcbabcaabbbbca
(killed)
1ac2cb2bccc33b3bab4aa4bbbc44
(killed)

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

='T€ŒpfṢ€$ḢṬœp³ż⁵$³Ḋ?  Main link. Arguments: string s, pattern p, replacement r

='                     Compare each character of s with each character of p.
                       This yields a 2D list. Each row corresponds to a char in p.
  T€                   Compute the truthy indices of each row, i.e., the indices
                       of all occurrences of that char in s.
   Œp                  Compute the Cartesian product of the lists of indices.
        $              Combine the two links to the left into a monadic chain:
      Ṣ€                 Sort each list of indices.
     f                   Filter, removing all non-sorted lists of indices.
         Ḣ             Head; take the first (sorted) list of indices.
          Ṭ            Truth; generate a list with 1's at those indices.
           œp³         Partition; split s at all 1's, removing those characters.
                  Ḋ?   If the partition has more than more than one element:
              ż⁵$        Zip the partition with r.
                 ³       Else, return s.

12

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

def f(a,b,c,o=""):
 for q in a:x=q==b[:1];o+=c[:x]or q;b=b[x:];c=c[x:]
 print[o,a][c>'']

একটি ফাংশন যা তিনটি স্ট্রিং নেয় এবং ফলাফলটি STDOUT এ আউটপুট করে। ফাংশনটি কেবল স্ট্রিংয়ের উপরে দিয়ে যায়, উপযুক্ত চর নিয়ে এবং আপডেট b,cহিসাবে আপডেট হয়।

পরীক্ষার জন্য (এর printসাথে প্রতিস্থাপনের পরে return):

S = """
<test cases here>
"""

for T in S.split("\n\n"):
    A,B,C,D = T.split()
    assert f(A,B,C) == D

9

জাভা 7, 141

আমি মনে করি এটি করার মতো আরও কিছু আছে তবে আমি এখনই চালিয়ে যাব। এটি কেবল একটি সাধারণ পুনরাবৃত্তি / প্রতিস্থাপন, এ এবং বিতে একটি সূচক রেখে

char[]h(char[]a,char[]b,char[]c){char[]d=a.clone();int i=0,j=0,k=b.length;for(;i<a.length&j<k;i++)if(a[i]==b[j])d[i]=c[j++];return j==k?d:a;}

আপনার আনন্দের জন্য হোয়াইটস্পিড:

char[]h(char[]a,char[]b,char[]c){
    char[]d=a.clone();
    int i=0,j=0,k=b.length;
    for(;i<a.length&j<k;i++)
        if(a[i]==b[j])d[i]=c[j++];
    return j==k?d:a;
}

Whitespacedহ্যাঁ, এটি সম্পূর্ণ পঠনযোগ্য
বিড়াল

যদিও তাই না? আমি মাল্টি-লাইন ইন্ডেন্টেড সংস্করণটি যুক্ত করার প্রধান কারণ হ'ল অনুভূমিক স্ক্রোলিং এড়ানোর জন্য, যাতে এটি সমস্ত একবারে দেখা যায়। ইনলাইন হোয়াইটস্পেস এত বড় কোনও আইএমও নয়;)
জিওবিটস

[বৈশিষ্ট্য-অনুরোধ] ​​আরও বেশি সাদা জায়গা
অ্যালেক্স এ।


@ জিওবিটস আপনি যদি করেন তবে শেষে একটি বাইট সংরক্ষণ করুনj<k?a:d
এক্সান্দারহাল

7

লুয়া, 121 বাইট

সোজা সমাধান, gsubআমাদের প্রতিটি চরিত্রের ঠিক একবারে পুনরাবৃত্তি করতে এবং স্ট্রিংয়ের একটি নতুন উদাহরণে তাদের প্রতিস্থাপন করতে দেয়।

এটি 3 কমান্ড-লাইন আর্গুমেন্টের মাধ্যমে ইনপুট নেয় এবং স্ট্রিংটিকে STDOUT এ আউটপুট দেয়।

a,b,c=...d=a:gsub(".",function(s)if b:find(s)then b=b:sub(2)x=c:sub(1,1)c=c:sub(2)return x end end)print(b~=''and a or d)

Ungolfed

a,b,c=...               -- unpack the arguments into a, b and c
d=a:gsub(".",function(s)-- iterate over each character of the first argument
  if b:find(s)then      -- if the current character is in the set b
    b=b:sub(2)          -- remove it from b
    x=c:sub(1,1)        -- save the replacement character in x
    c=c:sub(2)          -- remove it from c
    return x            -- replace the current character with x
  end
end)
print(b~=''             -- if b is empty, we replaced all the character
      and a or d)       -- so output the result of gsub, else, output the first argument

6

পাইথন 3, 127 বাইট।

ক্যাটেনকিওকে ধন্যবাদ 16 বাইট সংরক্ষণ করা।

এখনও এই নিয়ে কিছুটা কাজ করছি, মানুষটি ভাববে যে তার চেয়েও খারাপ এটি ছিল।

f=lambda a,b,c:a.replace(b[0],c[0],1)[:a.index(b[0])+1]+f(a[a.index(b[0])+1:],b[1:],c[1:])if b and all(x in a for x in b)else a

ব্যাখ্যা: আউউ হ্যাঁ, পুনরাবৃত্তি।

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

assert f('abcdeedcba', 'ada', 'BOB') == 'BbcOeedcbB'
assert f('abcdeedcbaabcde', 'ed', '12') == 'abcd1e2cbaabcde'
assert f('012345678901234567890123456789', '42', 'TT') == '0123T5678901T34567890123456789'
assert f('ABC', 'ABCD', '1234') == 'ABC'

গল্ফিংয়ের জন্য +1 বন্ধ 50, তবে চালিয়ে যান! এর জন্য আমার জাভা জবাবটি কমপক্ষে
কমিয়ে দেওয়া দরকার

7
@ জিওবিটস হ্যাঁ, আমি এর আগে জাভার কাছে হেরেছি। এটা আমার সবচেয়ে বড় লজ্জা।
মরগান থ্রাপ

আমি অজগরটিতে আসলেই পারদর্শী নই, তবে all(x in a for x in b)খ এবং খ উপাদানগুলিকে একই ক্রমে প্রদর্শিত হয় বা কেবল তারা যদি এখানে থাকে তবেই তা পরীক্ষা করে দেখছি ?
কাটেনকিও

@ কেটেনকিয়ো কেবলমাত্র তারা এখানে আছেন তবে অর্ডারটি যখন পুনরাবৃত্তি করবে তখন স্লাইসিংয়ের মাধ্যমে যত্ন নেওয়া হবে।
মরগান থ্রাপ

ঠিক আছে, এছাড়াও, return a.replace(b[0],c[0],1)[:l(b[0])+1]+f(a[l(b[0])+1:],b[1:],c[1:])if b and all(x in a for x in b)else aআপনি কিছু বাইট সংরক্ষণ করতে না ?
কাটেনকিও

5

পাইথন 3.5, 87 বাইট

import re
lambda s,p,r:re.sub('(.*?)'.join(p),'\g<%d>'.join(r)%(*range(1,len(r)),),s,1)

সব পরীক্ষার বিষয় যাচাই করার জন্য repl.it

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

  • '(.*?)'.join(p) প্রতিস্থাপনের জন্য যথাক্রমে এবং এর উপাদানগুলির মধ্যে যে কোনও কিছুর সাথে মেলে এমন একটি অনুসন্ধানের প্যাটার্ন তৈরি করে।

    কোয়ান্টিফায়ারগুলি যেহেতু অলস, তাই প্রত্যেকটি (.*?)যথাসম্ভব কম অক্ষরের সাথে মিলবে।

    প্যাটার্নের জন্য ghost, নির্মিত রিজেক্সটি হ'ল g(.*?)h(.*?)o(.*?)s(.*?)t

  • '\g<%d>'.join(r)%(*range(1,len(r)),) স্ট্রিং বিন্যাস ব্যবহার করে প্রতিস্থাপনের স্ট্রিং তৈরি করে।

    প্রতিটি \g<n>বোঝায় এন ঠিক, বন্দী গ্রুপ \nহবে।

    প্রতিস্থাপনের জন্য 12345, নির্মিত স্ট্রিংটি হ'ল 1\g<1>2\g<2>3\g<3>4\g<4>5

  • re.sub(...,...,s,1)স্ট্রিংয়ের সর্বাধিক এক প্রতিস্থাপন সম্পাদন করে s


4

পাইথ, 27

.xuXG.*HC,hSI#.nM*FxRcQ1zwQ

পরীক্ষা স্যুট

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

আমার মনে হচ্ছে এর চেয়ে ছোট কিছু হওয়া উচিত .nM*F...


4

এমএটিএল , 33 বাইট

y!=[]0b"@n:!<@*fX<h5Mt?}.]]?iw(}x

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

ব্যাখ্যা

y!      % Implicitly input first two strings. Duplicate the first and transpose
=       % Compare the two strings element-wise. Gives a 2D array with all combinations
[]      % Push empty array. Indices of matching elements will be appended to this
0       % Push a 0. This is the index of last character used up in first string
b       % Bubble up (rearrange elements in stack) to move 2D array to top
"       % For each column of that array (each char of the second string)
  @     %   Push current column
  n:!   %   Transform into column array of consecutive values starting from 1
  <     %   Compare with index of last character used up of first string
  @*    %   Push current column again. Multiply element-wise (logical AND)
  fX<   %   Find index of first matching character, or empty if there's none
  h     %   Append to array containing indices of matching elements
  5Mt   %   Push index of matching character again. Duplicate
  ?}    %   If it's empty
    .   %     Break loop
  ]     %   End if
]       % End for
        % The top of the stack now contains a copy of the index of last matching
        % character, or an empty array if there was no match
?       % If non-empty: all characters were matched
  i     %   Input third string
  w     %   Swap top two elements in stack
  (     %   Assign the characters of the third string to first string at found indices
}       % Else: the original string needs to be output
  x     %   Delete (partial) array of matching indices. Leave original string in stack
        % End if
        % Implicitly display (either modified string or original string)

3

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

(a,b,c)=>[...b].every((q,i)=>r[p=a.indexOf(q,p)]=~p++&&c[i],p=0,r=[...a])?r.join``:a

ব্যাখ্যা / পরীক্ষা


3

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

(a,b,c)=>a.replace(RegExp([...b].join`(.*?)`),c.replace(/\B/g,(_,i)=>'$'+i))

কারণ আমি নিশ্চিত ছিলাম যে এটি রেজজিপ-এর জন্য একটি কাজ was

সম্পাদনা করুন: @ মার্টিনব্যাটনার to এর জন্য 8 টি বাইট সংরক্ষণ করা হয়েছে

@ কেভিনলউ এর রুবির উত্তরের একটি বন্দরটি নিয়েছে 82 বাইট:

([...a],[...b],[...c])=>(d=a.map(e=>e==b[0]?c.shift(b.shift()):e),b[0]?a:d).join``

আমি একটি পুনরাবৃত্তাকার RegExp সমাধান চেষ্টা করেছিলাম কিন্তু এটি 90 বাইট গ্রহণ করেছে:

f=(a,[b,...d],[c,...e])=>b?a.replace(RegExp(b+'(.*'+d.join`.*`+'.*)'),(_,s)=>c+f(s,d,e)):a

3

জুলিয়া, 89 70 বাইট

f(s,a,b,i=0)=(o=join(["$a "[i+1]!=c?c:b[i+=1]for c=s]);i<endof(a)?s:o)

iআমাদের যেতে যেতে প্যাটার্ন / প্রতিস্থাপনের স্ট্রিংগুলির মাধ্যমে পুনরাবৃত্তি করতে একটি সূচক ব্যবহার করে। -19 বাইটস @ ডেনিসকে ধন্যবাদ!


2

সি, 98 বাইট

char*f(i,o,s,r)char*i,*o,*s,*r;{char*I=i,*O=o;for(;*i;++i,++o)*o=*i==*s?++s,*r++:*i;return*s?I:O;}

/ * প্রসারিত কোড * /

char *f(i, o, s, r)
    char *i, *o, *s, *r;
{
    char *I=i, *O=o;
    for (;  *i;  ++i,++o)
        *o = (*i==*s) ? (++s,*r++) : *i;
    return *s ? I : O;
}

আর্গুমেন্টগুলি হ'ল : আমি এনপুট স্ট্রিং, আউটপুট বাফার, এর এর্ক স্ট্রিং, আর এক্সপ্লেসমেন্ট।

ইনপুট এবং আউটপুট শুরুর স্মরণ করার পরে, আমরা যখনই কোনওটিকে আঘাত করি তখন আমরা প্রতিস্থাপনটি প্রতিস্থাপন এবং অগ্রসর করে ইনপুটটি হাঁটা করি। শেষে, আমরা যদি বিকল্পগুলি শেষ করে ফেলেছি তবে আউটপুট বাফারটি ফিরিয়ে দিন, অন্যথায় আনমোডিফাইড ইনপুট।

/ * পরীক্ষা * /

struct T
{
    const char *input;
    const char *search;
    const char *replace;
    const char *expected;
};

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int i;
    static const struct T test[] = {
        { "abcdefghijklmnopqrstuvwxyz",
          "ghost",
          "12345",
          "abcdef12ijklmn3pqr45uvwxyz"},
        { "abcdeedcba",
          "ada",
          "BOB",
          "BbcOeedcbB"},
        { "abcdeedcbaabcde",
          "ed",
          "12",
          "abcd1e2cbaabcde"},
        { "121",
          "121",
          "aBc",
          "aBc"},
        { "abcde",
          "acb",
          "123",
          "abcde"},
        { "ABC",
          "ABCD",
          "1234",
          "ABC"},
        { "012345678901234567890123456789",
          "42",
          "TT",
          "0123T5678901T34567890123456789"},
        { "edcbaedcbaedcbaedcba",
          "abcde",
          "12345",
          "edcbaedcbaedcbaedcba"},
        { "edcbaedcbaedcbaedcbaedcba",
          "abcde",
          "12345",
          "edcb1edc2aed3bae4cba5dcba"},
        { "daccdedca",
          "ace",
          "cra",
          "dcrcdadca"},
        { "aacbcbabcccaabcbabcaabbbbca",
          "abaaaccbac",
          "1223334444",
          "aacbcbabcccaabcbabcaabbbbca"},
        { "aacbcbabcccaabcbabcaabbbbcac",
          "abaaaccbac",
          "1223334444",
          "1ac2cb2bccc33b3bab4aa4bbbc44"
        }
    };

    for (i = 0;  i < (sizeof test) / (sizeof test[0]);  ++i) {
        const struct T *t = test+i;
        char *out = malloc(strlen(t->input)+1);
        char *result = f(t->input, out, t->search, t->replace);
        if (strcmp(t->expected, result))
            printf("Failed test %d; result = \"%s\"\n", i, result);
    }
    return EXIT_SUCCESS;
}

2

আর, 76 বাইট

function(a,b,c){s=substr;for(x in 1:nchar(b)){a=sub(s(b,x,x),s(c,x,x),a)};a}

subপ্রথম ম্যাচ প্রতিস্থাপন ব্যবহার করে

Ungolfed

function(a,b,c){                    # function with 3 arguments as per description
  s=substr;                         # alias for substr (saves 1 byte)
   for(x in 1:nchar(b)){            # index 1 to number character in b
     a=sub(s(b,x,x),s(c,x,x),a)};   # replace first instance of b[x] in a  
                                    # with c[x] and reassign to a
 a}                                 # return a

2

সি ++, 204 বাইট

Golfed

#include<iostream>
#include<string>
int main(){std::string a, b, c;std::cin>>a>>b>>c;int t=0;for(int x=0;x<b.length();x++){t=a.find(b[x],t);if(t!=-1){a.replace(t,1,c.substr(x,1));}}std::cout<<a;return 0;}

Ungolfed

#include<iostream>
#include<string>

int main()
{
    std::string a, b, c;
    std::cin>>a>>b>>c;
    int t = 0;
    for (int x=0;x<b.length();x++) {
        t = a.find(b[x], t);
        if (t != -1) {
            a.replace(t,1,c.substr(x, 1));
        }
    }
    std::cout<<a;
    return 0;
}

আমি আপনি ব্যবহার করছেন তা মনে করি না stdব্যবহার পরোয়ানা বেশ যথেষ্ট using namespace std;। ব্যবহার করা std::cin, std::coutএবং std::stringএটি 5 টি বাইট সংরক্ষণ করবে যেহেতু মনে হয় যে এগুলি সেই নামের জায়গার একমাত্র ব্যবহার।
মূল্য কালি

ধন্যবাদ কেভিনলৌ ধন্যবাদ! আপনি খুব সঠিক, আমি এটি ভেবেছিলাম, কিন্তু আসলে এটি অক্ষর বাঁচাতে পারে তা বুঝতে পেরেছি না।
মিশেলফ্রান্সিস বুস্টিলোস

উহু! আরও একটি বিষয়, যেহেতু এটি গুরুত্বপূর্ণ। আবার আপনার কোড ওভার পড়ার পর আমি উপলব্ধি আপনি সাগ্রহে মধ্যে প্রতিটি চিঠির সবচে বামের সংঘটন প্রতিস্থাপন হচ্ছে যাতে ba, কিন্তু পরে চিঠি পাশাপাশি আগের চিঠি পর হতে হবে। (পরীক্ষার কেস 3 দেখুন এবং আপনার আউটপুটটির সাথে তুলনা করুন, আমি মনে করি আপনি abc21ed...প্রত্যাশিত আউটপুটটি আসবে তখন আপনার কোড আউটপুট হবে abcd1e2...!)
মান ইঙ্ক

10 মিনিট আগে উপরের কোড "অ্যাড্রেগফ্ট্ট \ nA23 \ nzac \ n" এর আদর্শ সি ++ 14 সংকলক ইনপুটটিতে, "অ্যাড্রেগফ্ট্ট" এর পরিবর্তে "zdregffftd" আউটপুট উত্পন্ন করুন
রোজলুপি


2

হাস্কেল, 87 বাইট

x@((a,b):c)#(d:e)|a==d,([],z)<-c#e=([],b:z)|0<1=(d:)<$>x#e
x#y=(x,y)
a!b=snd.(zip a b#)

আমি হাস্কেল উত্তরের অভাব লক্ষ্য করেছি এবং এটি ঠিক করার সিদ্ধান্ত নিয়েছি। এটি !আর্গুমেন্ট অর্ডার প্যাটার্ন-রিপ্লেসমেন্ট-স্ট্রিং সহ একটি বার্ষিক ফাংশন সংজ্ঞায়িত করে । এখানে চেষ্টা করুন।

ব্যাখ্যা

সহায়ক ফাংশন অক্ষর জোড়া (প্যাটার্ন এবং প্রতিস্থাপন) এবং একটি স্ট্রিংয়ের #একটি তালিকা নেয় । যদি "প্যাটার্ন" অক্ষরগুলির একটি অনুচ্ছেদ তৈরি হয় , তবে এটি খালি তালিকাটি দেয় এবং প্রতিটি প্যাটার্ন অক্ষরকে তার পাল্টা প্রতিস্থাপন করে। অন্যথায়, এটি জুটি ফেরত দেয় । ফাংশন প্যাটার্ন এবং মধ্যে প্রতিস্থাপন স্ট্রিং পিন প্রযোজ্য, করতে এবং তৃতীয় স্ট্রিং এবং ফলাফল দ্বিতীয় উপাদান ফেরৎ।xyxyy(x,y)!x#x

x@((a,b):c)#(d:e)  -- First case of #: both arguments nonempty.
  |a==d,           -- If the pattern char matches the string's head,
   ([],z)<-c#e     -- and the pattern's tail is a subsequence of the string's tail,
  =([],b:z)        -- tack the replacement char to the recursion result.
  |0<1             -- Otherwise,
  =(d:)<$>x#e      -- recurse with the same pairs and tack string's head to result.
x#y=(x,y)          -- If either argument is empty, just pair them.

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


2

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

(a,b,c)=>1?(t=[...a].map(e=>b[0]==e?(u=c[0],b=b.slice(1),c=c.slice(1),u):e).join``,b==""?t:a):a

এটি একটি বৈধ জাভাস্ক্রিপ্ট লাম্বদা ফাংশন। ফাংশন হিসাবে আউটপুট return। তিনটি আর্গুমেন্টে নেয় ( a,b,c)। যোগ f=শুরুতে মত ডাকা f(arg1,arg2,arg3)

f=(a,b,c)=>1?(t=[...a].map(e=>b[0]==e?(u=c[0],b=b.slice(1),c=c.slice(1),u):e).join``,b==""?t:a):a

console.log(f(prompt("Value for A"),prompt("Value for B"),prompt("Value for C")))


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

@ মার্টিনব্যাটনার ধন্যবাদ! :) আমার উত্তর আপডেট।
অর্জুন

দুর্ভাগ্যক্রমে, aপ্যাটার্নটি না থাকলে এটি ব্যর্থ হবে । আমি নিশ্চিত নই যে স্ট্রিংগুলির একটি অ্যারের ফিরিয়ে দেওয়া গ্রহণযোগ্য।
ডেনিস

@ ডেনিস আমি আমার সমাধানটি আপডেট করেছি। আমি এখন এটি সঠিক মনে করি। দেরি করা উত্তর এবং আপডেটের জন্য দুঃখিত। (আমি কেবল আপনার মন্তব্যটি লক্ষ্য করেছি, তাই বিলম্ব হয়েছে)
অর্জুন

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


1

অক্টাভা, 97 বাইট

function A=U(A,B,C)t=0;for s=B if p=find(A(t+1:end)==s,1) D(t=p+t)=~0;else return;end;end;A(D)=C;

প্রতিস্থাপনের জন্য উপসর্গের উপর আইট্রেট করুন; প্রথম অক্ষরের প্রথম উপস্থিতি সন্ধান করুন, অবশিষ্ট স্ট্রিংয়ের পরবর্তী অক্ষর সন্ধান করুন, পুনরাবৃত্তি করুন। এর মধ্যে একটি আকর্ষণীয় বিষয় হ'ল:

D(t=p+t)=~0

D(     )      %// D is a logical mask of characters to replace in the input string
  t=p+t       %// t is the current end of D 
              %// p is the location of the character to replace
              %// update t and use as index to grow D
        =~0   %// make it so, number 1

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

A = abcdefghijklmnopqrstuvwxyz
B = ghost
C = 12345
key = abcdef12ijklmn3pqr45uvwxyz
ans = abcdef12ijklmn3pqr45uvwxyz
A = abcdeedcba
B = ada
C = BOB
key = BbcOeedcbB
ans = BbcOeedcbB
A = abcdeedcbaabcde
B = ed
C = 12
key = abcd1e2cbaabcde
ans = abcd1e2cbaabcde
key = aBc
ans = aBc
key = abcde
ans = abcde
key = ABC
ans = ABC
key = 0123T5678901T34567890123456789
ans = 0123T5678901T34567890123456789
key = edcbaedcbaedcbaedcba
ans = edcbaedcbaedcbaedcba
key = edcb1edc2aed3bae4cba5dcba
ans = edcb1edc2aed3bae4cba5dcba
key = dcrcdadca
ans = dcrcdadca
key = aacbcbabcccaabcbabcaabbbbca
ans = aacbcbabcccaabcbabcaabbbbca
key = 1ac2cb2bccc33b3bab4aa4bbbc44
ans = 1ac2cb2bccc33b3bab4aa4bbbc44

অপ্রত্যাশিত জায়গাগুলিতে Oct অক্টেভ অ্যাসাইনমেন্টগুলি D(t=...)আমাকে বিস্মিত করে :-)
লুইস মেন্ডো

1
@ লুইস মেন্ডো হা হা ... এটি প্রায় ভালো ... একটি স্ট্যাক! :)
বেকার

1

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

আমি ভাগ করতে চেয়েছি এমন একটি পৃথক পদ্ধতি যা কয়েক বাইট সংক্ষিপ্ত। স্ট্যান্ডার্ড লাইব্রেরি / রেজেক্সের বিরুদ্ধে কোনও নিয়ম নেই, তাই না?

import re
j=''.join
m='(.*?)'
def f(A,B,C):
 *r,l=(re.findall(m+m.join(B)+'(.*)',A)or[[A]])[0]
 print(j(map(j,zip(r,C)))+l)

গীত। এটি আমার প্রথম গল্ফ আমাকে যেকোন সমস্যা / উন্নতি সম্পর্কে জানাতে দিন।


1

পাইথ, 22 বাইট

|eJ:Ej"(.*?)"+E\$3s.iJ

পাইথ কম্পাইলারের সমস্ত পরীক্ষার কেস যাচাই করুন ।

পটভূমি

আমরা একটি সংযুক্ত করে $এবং (.*?)সমস্ত অক্ষরের মধ্যে রেখে প্যাটার্ন থেকে একটি রেজেক্স তৈরি করি । এই রেজেক্সটি প্রতিস্থাপিত হওয়ার উপসর্গ এবং এর উপাদানগুলির মধ্যে যে কোনও কিছু এবং স্ট্রিংয়ের শেষ পর্যন্ত কিছু মিলবে।

কোয়ান্টিফায়ারগুলি যেহেতু অলস, তাই প্রত্যেকটি (.*?)যথাসম্ভব কম অক্ষরের সাথে মিলবে।

প্যাটার্ন প্রেতাত্মা জন্য নির্মাণ Regex হয় g(.*?)h(.*?)o(.*?)s(.*?)t(.*?)$

যদি প্যাটার্নটি ইনপুটটির সাথে মিলে যায়, তবে বিল্টিন r<str><regex>3প্রিম্যাটাম (উপসর্গের আগে সমস্ত কিছু), সমস্ত দখলকৃত গোষ্ঠী (উপসর্গের মধ্যে এবং পরে সমস্ত কিছু) এবং পোস্টম্যাচ (খালি স্ট্রিং) সমন্বিত একটি অ্যারে ফিরিয়ে দেবে।

যদি প্যাটার্নটি মেলে না, তবে বিল্টিন মূল ইনপুট যুক্ত একটি সিঙ্গলটন অ্যারে ফিরিয়ে দেবে।

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

|eJ:Ej"(.*?)"+E\$3s.iJQ  (implicit) Store the first line of input in Q.

             +E\$        Read the third line of input (pattern) and append '$'.
     j"(.*?)"            Join the result, separating by "(.*?)".
    E                    Read the third line of input (string).
   :             3       Match the string against the regex, as detailed above.
  J                      Save the returned array in J.
 e                       Extract the last element of J. This is an empty string
                         for a successful match or the original string.
|                        Logical OR; replace an empty string with the following:
                   .iJQ    Interleave J and the replacement.
                  s        Flatten the resulting array of strings.

1

জেলি , 23 বাইট

Ṭœpż⁵
0ẋai1
⁴='-;ç\ñ⁴P?

এটি আমার অন্যান্য জেলি উত্তরের চেয়ে দুটি বাইট দীর্ঘ , তবে এটি তাত্ক্ষণিকভাবে শেষ হয়। এটি অনলাইন চেষ্টা করুন!

প্রতিপাদন

$ head -n 5 test-cases
abcdefghijklmnopqrstuvwxyz
ghost
12345
abcdef12ijklmn3pqr45uvwxyz

$ cat subseq-fast
while read s; do
        read p; read r; read o; echo $o; read
        timeout 10s jelly eun $1 "Ṭœpż⁵¶0ẋai1¶⁴='-;ç\ñ⁴P?" "'$p'" "'$s'" "'$r'"
        (($?)) && echo '(killed)'
done < test-cases
$ ./subseq-fast
abcdef12ijklmn3pqr45uvwxyz
abcdef12ijklmn3pqr45uvwxyz
BbcOeedcbB
BbcOeedcbB
abcd1e2cbaabcde
abcd1e2cbaabcde
aBc
aBc
abcde
abcde
ABC
ABC
0123T5678901T34567890123456789
0123T5678901T34567890123456789
edcbaedcbaedcbaedcba
edcbaedcbaedcbaedcba
edcb1edc2aed3bae4cba5dcba
edcb1edc2aed3bae4cba5dcba
dcrcdadca
dcrcdadca
aacbcbabcccaabcbabcaabbbbca
aacbcbabcccaabcbabcaabbbbca
1ac2cb2bccc33b3bab4aa4bbbc44
1ac2cb2bccc33b3bab4aa4bbbc44

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

⁴='-;ç\ñ⁴P?  Main link. Arguments: pattern p, string s, replacement r

⁴='          Compare each character of s with each character of p.
             This yields a 2D list. Each row corresponds to a char in p.
   -;        Prepend -1 to the 2D list, yielding a ragged array.
     ç\      Cumulatively reduce the array by the second helper link.
         P?  If the product of the resulting list is non-zero:
       ñ       Call the first helper link with the list and s as arguments.
        ⁴      Else, return s.


Ṭœpż⁵        First helper link. Arguments: L (list of indices), r (replacement)

Ṭ            Truth; generate a list with 1's at those indices.
 œp          Partition; split s at all 1's, removing those characters.
   ż⁵        Zip the partition with r.


0ẋai1        Second helper link. Arguments: n (integer), B (list of Booleans)

0ẋ           Generate a list of n zeroes.
  a          Perform logical AND with B.
             This zeroes out the with n elements of B.
   i1        Compute the first index of 1.


1

জাভা 7, 102 বাইট

void L(char[]s,char[]l,char[]r){for(int x=0,y=0;x<s.length&&y<l.length;x++)if(s[x]==l[y])s[x]=r[y++];}

বিস্তারিত চেষ্টা এখানে

// String, Lookup, Replacement
void L(char[]s, char[]l, char[]r)
{
    for(int x=0, y=0; x < s.length && y < l.length; x++)
        if(s[x] == l[y])
            s[x] = r[y++];
}

1

জুলিয়া, 93 90 86 বাইট

f(s,p,r)=(try s=join([match(Regex(join("^$p\$","(.*?)")),s).captures';[r...""]])end;s)

ম্যাচটি যদি সফল হয় তবে আলাদাভাবে পরীক্ষা করা স্কোরটি নষ্ট করে দেয়। একটি প্রতিস্থাপনের জন্য কাস্টিং প্রয়োজন Base.SubstitutionString, যা সম্ভবত এটি উপযুক্ত নয় ...

টেস্ট রান

julia> f(s,p,r)=(try s=join([match(Regex(join("^$p\$","(.*?)")),s).captures';[r...""]])end;s)
f (generic function with 1 method)

julia> f("aacbcbabcccaabcbabcaabbbbca","abaaaccbac","1223334444")
"aacbcbabcccaabcbabcaabbbbca"

julia> f("aacbcbabcccaabcbabcaabbbbcac","abaaaccbac","1223334444")
"1ac2cb2bccc33b3bab4aa4bbbc44"

1

জুলিয়া, 62 59 58 বাইট

f(s,p,r)=(try s[[i=findnext(s,c,i+1)for c=p]'],i=r,0end;s)

আই / ও অক্ষর অ্যারে আকারে।

প্রতিপাদন

julia> f(s,p,r)=(try s[[i=findnext(s,c,i+1)for c=p]'],i=r,0end;s)
f (generic function with 2 methods)

julia> F(s,p,r)=join(f([s...],[p...],[r...])) # string/char array conversion
F (generic function with 1 method)

julia> F("aacbcbabcccaabcbabcaabbbbca","abaaaccbac","1223334444")
"aacbcbabcccaabcbabcaabbbbca"

julia> F("aacbcbabcccaabcbabcaabbbbcac","abaaaccbac","1223334444")
"1ac2cb2bccc33b3bab4aa4bbbc44"

1

পিএইচপি, 130 109 বাইট

আমি এখনও এটি খাটো পছন্দ; 3 বাইট ( ""<) সংরক্ষণ করতে পারে যদি Bনা ধারণের গ্যারান্টিযুক্ত ছিল 0

for($s=($a=$argv)[1];""<$c=$a[2][$i++];)if($p=strpos(_.$s,$c,$p+1))$s[$p-1]=$a[3][$k++];echo$k<$i-1?$a[1]:$s;

কমান্ড লাইন থেকে আর্গুমেন্ট নেয়। সাথে চালাও -r

চরিত্রগুলি খুঁজে পেলে এটি প্রতিস্থাপন করে;
সমস্ত অক্ষর প্রতিস্থাপন করা হয়েছে যদি কপি প্রিন্ট; আসল অন্য।


1

রুবি, 70 64 59 58 বাইট

বেনামে ফাংশন। aপরবর্তী অক্ষরের সাথে প্রতিস্থাপিত অক্ষরের সাথে একটি নতুন স্ট্রিং তৈরি করতে স্ট্রিংটি দিয়ে হাঁটুন bএবং cতারপরে যদি সমস্ত অক্ষর bশেষ হয়ে যায় তবে সদ্য নির্মিত স্ট্রিংটি ফিরিয়ে দিন, অন্যথায় আসল স্ট্রিংটি ফিরিয়ে দিন।

@ হিস্টোক্র্যাট মাধ্যমে 6 বাইট সংরক্ষণ করতে সহায়তা করেছে gsub

1 কোয়েটকে 1 বাইট সংরক্ষণ করা হয়েছে।

->a,b,c{i=0;s=a.gsub(/./){$&==b[i]?c[~-i+=1]:$&};b[i]?a:s}

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


আপনি প্রতিস্থাপন দ্বারা একটি বাইট সংরক্ষণ করতে পারবেন -1+i+=1সঙ্গে~-i+=1
Cyoce

0

পার্ল, 80 + 1 = 81 বাইট

-pপতাকা নিয়ে দৌড়াও

$a=join"(.*?)",split//,<>;$b.=$_." .\$".++$;."."for split//,<>;chop$b;s/$a/$b/ee

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

কোডটি পদ্ধতিগতভাবে একটি অনুসন্ধান তৈরি করে এবং রিজেক্স কমান্ডকে প্রতিস্থাপন করে, যা এটি কোডের শেষ বিটে কার্যকর করে।

স্ট্রিং ghostপ্রথম উদাহরণে স্ট্রিং পরিণত পরার g(.*?)h(.*?)o(.*?)s(.*?)t(.*?), যা একটি অর্থ g0 বা তার বেশি অক্ষরের দ্বারা অনুসরণ, একটি দ্বারা অনুসরণ h0 বা তার বেশি অক্ষরের দ্বারা অনুসরণ, ইত্যাদি দ্য দ্বারা অনুসরণ*? কোয়ান্টিফায়ার মানে সার্চ অ লোভী এবং "গোগ্রাসে গেলা হওয়া উচিত "যতটা সম্ভব অক্ষর, যত বেশি সম্ভব ডিফল্ট ম্যাচের পরিবর্তে।

স্ট্রিংটি 12345তখন রূপান্তরিত হয় 1 .$1.2 .$2.3 .$3.4 .$4.5 .$5যা রেজেক্স সম্পাদন করার পরে মূল্যায়ন হয় gets প্রত্যেকেই $1,$2,$3,$4,$5প্রথম স্ট্রিং থেকে ক্যাপচার গোষ্ঠীর (প্রথম বন্ধনীতে) ব্যাক রেফারেন্স হয়।


আমি আপনাকে পরামর্শ দিচ্ছি এই কোড কয়েক বাইট সংরক্ষণ করতে: perl -pe 'eval"s/".<>=~s/.\K/(.*?)/gr."/".<>=~s/.\K/"\${".++$i."}"/gre."/"'। এটি নিজেই নিয়ে এসেছি, তবে এটি আপনার খুব কাছাকাছি, সুতরাং আমি এটি পোস্ট করব না, এটি দুটি খুব কাছের উত্তর হবে, তবে নিজের সম্পাদনা করতে নির্দ্বিধায়!
দাদা

এদিকে কেবল গিয়েছিলাম কারণ আমি এটিকে সাম্প্রতিক সমস্যার একটি "সম্পর্কিত" প্রশ্ন হিসাবে তালিকাভুক্ত দেখেছি। আমার কাছে perl -E 'chomp(($f,$t,$s)=(<>));$f=join"(.*?)",split"",$f;@r=split"",$t;@t=shift@r;push@t,"\${",++$x,"}"for(@r);$t=join"",@t;say$s=~s/$f/$t/r;'
উইল ক্রফোর্ড

0

ক্লোজার, 113 বাইট

#(apply str((reduce(fn[[b c r]a](if(=(first b)a)[(rest b)(rest c)(conj r(first c))][b c(conj r a)]))[%2%3[]]%)2))

একটি মৌলিক reduce, সমস্ত যারা দীর্ঘ খুব খুশি না first, restএবং conjফাংশন কল। একটি ভাল পদ্ধতির দেখার আশা করছি।

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