শস্য ASCII আর্ট চ্যালেঞ্জ


13

এএসসিআইআই শিল্পটি মজাদার। আধুনিক পাঠ্য সম্পাদকরা পাঠ্যের হস্তক্ষেপে খুব ভাল। আধুনিক প্রোগ্রামিং ভাষা কি কাজ শেষ?

এএসসিআইআই আর্ট ম্যানিপুলেশনের একটি সাধারণ কাজ হ'ল দুটি অক্ষরের মধ্যে একটি আয়তক্ষেত্রে পাঠ্য ক্রপ করা। এই চ্যালেঞ্জটি আপনার কার্যকর করতে হবে।

বিস্তারিত

আপনার প্রোগ্রামে 3 ইনপুট লাগবে:

  • প্রথমটি হ'ল ব্লকের 'শুরু' অক্ষর - উপরের-বাম কোণটি চিহ্নিত করে
  • দ্বিতীয়টি হ'ল ব্লকের 'শেষ' অক্ষর - নীচের ডানদিকের কোণটি চিহ্নিত করে
  • তৃতীয়টি হ'ল মাল্টলাইন পাঠ্যের কিছু ফর্ম, একটি স্ট্রিং, বা স্ট্রিংগুলির তালিকা, বা ফাইলের নাম বা যা কিছু

ফলাফলটি মাল্টিলাইন পাঠ্য হবে (আবার, উপরের যে কোনও বিন্যাসে) প্রদত্ত ইনপুটগুলির মধ্যে আয়তক্ষেত্রের মধ্যে কাটা হবে। মনে রাখবেন যে প্রথম দুটি ইনপুট অনন্য হতে পারে না।

এজ মামলা

বাক্সগুলির সর্বদা কমপক্ষে 2 পরিমাণ থাকতে হবে Thus সুতরাং এইগুলি:

()     (
       )

হয় বাক্সে কিন্তু এই:

)(     )      (
       (     )

নেই (শুরু = (এবং শেষ = সহ ))।

ইনপুটটিতে কেবল একটি বাক্স থাকবে। সুতরাং শুরু এবং শেষের অক্ষরগুলি কেবল একবারই ঘটতে হবে, যদি না তারা একইরকম অক্ষর না হয় তবে এ ক্ষেত্রে অবশ্যই ঠিক দু'বার ঘটতে হবে।

অতিরিক্তভাবে ইনপুটটির প্রতিটি লাইন অবশ্যই ইনপুটটিতে একটি লাইনের শুরু থেকে বাক্সের ডান প্রান্তের দূরত্বে দীর্ঘতম হওয়া উচিত।

আপনার প্রোগ্রামটি অবৈধ ইনপুট হ্যান্ডেল করার প্রয়োজন নেই; তারা অপরিবর্তিত আচরণের ফলস্বরূপ হতে পারে।

বিধি

সাধারণ কোড-গল্ফ বিধি প্রযোজ্য। সংক্ষিপ্ততম কোড জিতেছে।

উদাহরণ

রৌদ্রজ্জ্বল দিন: start: ( end: ) input:

This is some text
. (but this text
  is in a box  ).
So only it is important.

আউটপুট:

(but this text
is in a box  )

অনুভূমিক স্থান বিচ্ছিন্নকরণ এছাড়াও নোট করুন। এএসসিআইআই শিল্প ফসল 2 ডি।

বৃষ্টির দিন: start: ( end: ) input:

This is some text (
But is that even  )
really a box?

আউটপুট:

(
)

একই শুরু / শেষ: start: / end: / input:

Oh, I get how this could be useful
 /----------------------------\
 | All this text is in a box! |
 \----------------------------/

আউটপুট:

/----------------------------\
| All this text is in a box! |
\----------------------------/

ভুল ইনপুট: start: ( end: ) input:

Boxes are rectangular ( so this has
0 volume ) which is illegal.

অবৈধ ইনপুট 2: start: ( end: ) input:

(The lines must already be square 
so this line that is too short
relative to this end, is illegal)

বাক্সের চেয়ে কম লাইনের বাইরে একটি বৈধ বাক্স কী হবে?
seadoggie01

1
স্পষ্ট হয়েছে, এছাড়াও অবৈধ ইনপুট
লাম্বদাবেতা

একটি অবৈধ ইনপুট ক্ষেত্রে ফলাফল কি হওয়া উচিত? বা তারা উল্লেখ করা হয় তাই তাদের যত্ন নেওয়া হবে না?
উরিল

1
ফলাফলটি অনেকটা সি এর অপরিজ্ঞাত আচরণের মতো, এটি নিয়ে চিন্তা করবেন না, কিছু যায়।
লাম্বদাবেতা

এটি একটি বাজে সামান্য চ্যালেঞ্জ: দুর্দান্ত কাজ!
seadoggie01

উত্তর:


15

ভিম, 16 , 12 বাইট / কীস্ট্রোক

#<C-v>Nj*yggVGp

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

আধুনিক পাঠ্য সম্পাদকরা পাঠ্যের হস্তক্ষেপে খুব ভাল। আধুনিক প্রোগ্রামিং ভাষা কি কাজ শেষ?

আমি বাজি ধরেছি পুরাতন পাঠ্য সম্পাদকরা আরও ভাল! : ডি

যদিও এটি অগত্যা করতে হবে না, এই উত্তরটি প্রদত্ত "অবৈধ" ইনপুট, আউটপুট উভয় দিয়েই কাজ করে

 rectangular (
) which is ill

এবং

(The lines must already be square
so this line that is too short
relative to this end, is illegal)

ব্যাখ্যা:

#               " Move backward to the previous occurrence of the word (or in this case, character) under the cursor
 <C-v>          " Start a visual block selection
      N         " Go to the next occurrence of the last searched term (guaranteed to be line 1)
       j        " Move down a line
        *       " Move forward to the next occurrence of the character under the cursor
         y      " Yank (copy) the whole visually selected block
          gg    " Go to line 1
            VG  " Select every line
              p " And paste what we last copied over it, deleting the whole buffer and replacing it with the block

1
উল্লেখ্য এই হল ঠিক ব্যবহার-কেস আমার অনুরোধ এই চ্যালেঞ্জ লিখতে করছেন। আমি আমার কিউ ম্যাক্রো হিসাবে ছিলাম /\/<cr><c-v>nygv$o0dpবা এর মতো খুব বেশি দীর্ঘ ছিলাম :)
লাম্বদাবেটা

2
হ্যাঁ, আয়তক্ষেত্রটি অবৈধ !
অ্যাডমবর্কবার্ক

6

জেলি , 13 বাইট

=€SŒṪr/,þ/Zœị

বামদিকে শুরু এবং শেষ অক্ষরের একটি তালিকা গ্রহণ করে একটি ডায়াডিক লিঙ্ক এবং ডানে লাইনগুলির একটি তালিকা (অক্ষরের তালিকা হিসাবে) যা রেখার একটি তালিকা (অক্ষরের তালিকা হিসাবে) দেয় yield

এটি অনলাইন চেষ্টা করুন! (সম্পূর্ণ প্রোগ্রাম - যদি ইনপুটগুলি বৈধ পাইথন হয় তবে তাদের পাইথন-স্ট্রিং-কোটিংয়ের প্রয়োজন হবে))

কিভাবে?

=€SŒṪr/,þ/Zœị - Link: [start, stop], lines
 €            - for each (of [start, stop]):
=             -   equals? (vectorises across the lines)
  S           - sum (vectorises)
   ŒṪ         - multi-dimensional truthy (i.e. non-zero) indices
      /       - reduce by:
     r        -   inclusive range (vectorises)
         /    - reduce by:
        þ     -    outer product with:
       ,      -       pair
          Z   - transpose
           œị - multi-dimensional index-into (the lines)

উদাহরণ হিসাবে, বাম = ['a', 'b']এবং ডান (অক্ষরের তালিকাগুলির তালিকা হিসাবে - লাইন) সহ:

--------
--a+++--
--++++--
--+++b--
--------

=€দুটি তালিকার তালিকার একটি তালিকা পাওয়া যায় (প্রথম সম্পাদন করে 'a'=, দ্বিতীয়টি 'b'=):

00000000         00000000
00100000         00000000
00000000    ,    00000000
00000000         00000100
00000000         00000000

এই সংক্ষিপ্তসার তালিকাগুলির একক তালিকার ফলন দেয় (সংশ্লেষক উপাদান অনুসারে):

00000000
00100000
00000000
00000100
00000000

ŒṪতারপরে আমাদের নন-জিরোগুলির (1-সূচকযুক্ত) বহুমাত্রিক সূচকগুলি দেয় [[2,3],[4,6]]- যেমন [[top,left],[bottom,right]]

r/তারপরে [2,3]r[4,6]যা rভেক্টোরাইজগুলি, যেমনটি হয় তার থেকে [2r4, 3r6]মূল্যায়ন করে [[2,3,4],[3,4,5,6]]- যেমন [rows,columns]

,þ/তারপরে [2,3,4],þ[3,4,5,6]যেখানে þবাহ্যিক-উত্পাদনের নির্দেশিকা এবং ,এটি জোড়া হয় forms এটি [row,column]কলাম অনুসারে সমস্ত মান উপস্থাপন করে:

[[[2,3],[3,3],[4,3]],
 [[2,4],[3,4],[4,4]],
 [[2,5],[3,5],[4,5]],
 [[2,6],[3,6],[4,6]]]

আমরা এটি সারিবদ্ধভাবে চাই, তাই Zএটি এখানে স্থানান্তর করতে ব্যবহৃত হয়:

[[[2,3],[2,4],[2,5],[2,6]],
 [[3,3],[3,4],[3,5],[3,6]],
 [[4,3],[4,4],[4,5],[4,6]]]

অবশেষে œịইনপুট লাইনে সূচিগুলি:

a+++
++++
+++b

এটি লক্ষণীয় যে যখন উভয় সীমাবদ্ধ অক্ষর উভয়ই একই সাথে =€দু'বার চিহ্নিত করে তবে SŒṪসঠিক কাজটি শেষ করে, যেহেতু 2সত্যবাদী, যেমন ['a','a']:

--------         00000000   00000000        00000000
--a+++--         00100000   00100000        00200000
--++++--  =€ ->  00000000 , 00000000  S ->  00000000  ŒṪ ->  [[2,3],[4,6]]
--+++a--         00000100   00000100        00000020
--------         00000000   00000000        00000000

... আমি ব্যাখ্যাটি পড়েছি, তবে আমি এখনও এটি বুঝতে পারি না। o_o আপনি সম্ভবত একটি কাজের উদাহরণ যুক্ত করতে পারেন?
DLosc

উদ্দীপনা: আপনার উত্তরটি সম্পূর্ণরূপে ব্যাখ্যা করা থাকলে আমি গ্রহণ করব। :)
লাম্বদাবেটা

1
@ ডিএলকাস - সম্পন্ন, আশা করি এটি সাহায্য করবে।
জোনাথন অ্যালান

@ ল্যাম্বদাবেতা - ভি উত্তরটি সংক্ষিপ্ত।
জোনাথন অ্যালান

... ভিম উত্তর এমনকি ভুল।
জোনাথন অ্যালান

5

এপিএল (ডায়ালগ) , 38 30 বাইট

4 বাইট সংরক্ষিত হয়েছে @ ইরিকথঅউটগলফারকে ধন্যবাদ

(1-⍨w-⍨⊃⍸⎕=s)↑(w←∊⊃⌽⍸⎕=s)↑s←↑⎕

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


খুবই জটিল. আপনি ভেক্টর ভেক্টরের পরিবর্তে একটি ম্যাট্রিক্স গ্রহণ করতে পারেন, দুটি অবস্থানের সাথে সন্ধান ⍸matrix∊separatorsকরতে পারেন এবং তাদের সাথে নিয়ে / ড্রপ করতে পারেন
ngn

(⍸a=⎕)↓(1+⍸a=⎕)↑a←⎕সাথে⎕io←0
এনজিএন

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

ওফ ... আমি তৃতীয় মামলার কথা ভুলে গেছি, দুঃখিত। তারপরে হতে পারে: ⊃{⌽⊖⍵↓⍨⊃⍸⍺=⍵}/⎕⎕⎕(3 টি পেছনের কোয়াড সহ) যা আরও সংক্ষিপ্ত। অথবা ... ⎕⎕(↑⎕)যদি প্রাক-মিশ্রিত ম্যাট্রিক্সের অনুমতি না দেওয়া হয়।
এনজিএন

3

জেলি , 14 বাইট

œẹⱮẎQr/Ṛṭþ/œị⁸

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


আমি অন্যান্য কোডের কয়েকটিতে আপনার কোড চালানোর চেষ্টা করেছি, তবে কেবল ক্র্যাশ পেয়েছে। এটি কি কোনও বাগ, বা আমি কেবল কিছু ভুল করছি?
ইলমারি করোনেন

@ ইলমারি কারোনেন আপনি দ্বিতীয় যুক্তিটি সঠিকভাবে উদ্ধৃত করেন নি (পোস্টে তা উল্লেখ করেননি); একক বা ডাবল উদ্ধৃতিতে এটি মোড়ানো। আপনি যেভাবে এটি শুরু করেছেন, দ্বিতীয় যুক্তিটি খালি (পাইথন) টিপল ( ()) নয় '()'। এটি যদি পার্স-সক্ষম হয় তবে এটিকে উদ্ধৃত করা দরকার, তবে আমার //উদ্ধৃতি দেওয়ার দরকার নেই (অপেরাডস ছাড়া পূর্ণসংখ্যা বিভাগ অপারেটর? এইচএম ...)।
এরিক দ্য আউটগল্ফার

@ ইলমারিকারোনেন আমি "মনে করি" যা ()জেলি দ্বারা কেবল একটি বিশেষ চরিত্র হিসাবে ব্যাখ্যা করা হচ্ছে। বেশিরভাগ জোড়া চরিত্র আমি চেষ্টা করি। আমি জেলির সাথে বেশি পরিচিত লোকেরা কী মনে করে তা শুনতে ভাল লাগবে। সম্পাদনা: নিনজা-এড
লিখেছেন



2

ক্যানভাস , 37 বাইট

{³⁴⁰;x≡‽┐
X⁸)J╵⁶;┤ω┤⁵X⁶⁸⁰K├;┐┤└∔┘┘∔;@

এখানে চেষ্টা করুন!

অক্ষরের স্থানাঙ্ক পাওয়ার জন্য ৩৩ বাইট (এবং এগুলিকে এক্স, ওয়াই, ডাব্লু, এইচ রূপান্তর করতে হবে কারণ এটি যা নেয়) এবং সাবটিশন পাওয়ার জন্য 1 বাইট .. আরও ভাল পদ্ধতির অবশ্যই থাকতে হবে


2

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

দুটি পূর্ণসংখ্যা এবং স্ট্রিংগুলির একটি অ্যারে হিসাবে ইনপুট নেয়। স্ট্রিংগুলির একটি অ্যারে প্রদান করে।

(x,y,a,X=Y=0)=>a.filter(s=>!Y&&(Y=-~s.indexOf(y,X?X-1:X=-~s.indexOf(x)),X)).map(s=>s.slice(X-1,Y))

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

মন্তব্য

( x,                          // x = start character
  y,                          // y = end character
  a,                          // a[] = array of strings
  X =                         // X = position of x, plus 1
  Y = 0                       // Y = position of y, plus 1
) =>                          //
  a.filter(s =>               // for each string s in a[]:
    !Y &&                     //   reject this string if Y is non-zero
    (                         //   otherwise, use the 2nd condition:
      Y = -~s.indexOf(        //     update Y:
        y,                    //       by looking for y in s
        X ?                   //       if X is non-zero:
          X - 1               //         start the search at X - 1
        :                     //       else:
          X = -~s.indexOf(x)  //         update X and start the search at X
      ),                      //     end of Y update
      X                       //     keep this string if X is non-zero
    )                         //   end of 2nd condition
  )                           // end of filter()
  .map(s =>                   // for each remaining string s:
    s.slice(X - 1, Y)         //   remove left and right characters outside the box
  )                           // end of map()

filter আর map ?! একটি নতুন অ্যারে তৈরি reduceবা পুনরাবৃত্ত সমাধানটি কি স্বল্প কাজ করবে না? আমার ফোনে, পাব থেকে নীচে বা আমি নিজেই যেতে পারি।
শেগি

@Shaggy বোধহয় প্রকৃতপক্ষে একটি সংক্ষিপ্ত পথ বাকি, কিন্তু আমি মনে করি যে এই পদ্ধতি 2 পাস ব্যবহার করতে দণ্ডপ্রাপ্ত হয়: 2nd লুপ 1 ম আগে এক বন্ধ এবং উভয় শুরু করতে পারে না Xএবং Yনিশ্চিত জন্য পরিচিত হয়।
আর্নাউল্ড

2

জাভা 10, 204 বাইট

(s,e,a)->{int b=-1,i=0;for(;i<a.length;i++)a[i]=(b=b<0?a[i].indexOf(s):b)<0|a[i].length()<b?"":a[i].substring(b);for(b=-1;i-->0;)a[i]=(b=b<0?a[i].indexOf(e):b)<0|a[i].length()<b?"":a[i].substring(0,b+1);}

বাইটগুলি সংরক্ষণ করতে কোনও নতুন ফেরতের পরিবর্তে ইনপুট-অ্যারে পরিবর্তন করে। এর অর্থ হ'ল সরানো লাইনগুলি ""পরিবর্তে হয়ে যায় । যদি এটি অনুমোদিত না হয় তবে আমি এটি পরিবর্তন করব।

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

ব্যাখ্যা:

(s,e,a)->{                 // Method with 2 Strings & String-array parameters and no return
  int b=-1,                //  Boundaries-integer, starting at -1
  i=0;for(;i<a.length;i++) //  Loop `i` in the range [0, amountOfLines)
    a[i]=                  //   Change the `i`th line in the array to:
      (b=b<0?              //    If `b` is -1:
          a[i].indexOf(s)  //     Set `b` to the index of `s` in the current line
                           //     (which is still -1 if it's not found)
         :                 //    Else (starting index already found)
          b                //     Leave `b` unchanged
      )<0                  //    Then, if `b` is -1,
         |a[i].length()<b? //    or the current line-length is too short:
       ""                  //     Remove the current line
      :                    //    Else:
       a[i].substring(b);  //     Shorten the line by removing every character before `b`
  for(b=-1;                //  Reset `b` to -1
      i-->0;)              //  Loop `i` in the range (amountOfLines, 0]
    a[i]=                  //  Change the `i`th line in the array to:
       (b=b<0?a[i].indexOf(e):b)<0|a[i].length()<b?"":
                           //   Similar as above (with end `e` instead of start `s`),
         a[i].substring(0,b+1);}
                           //   except we remove every character after `b` this time

উদাহরণ স্বরূপ:

ইনপুট সহ start = "(", end = ")"এবংlines =

["This is some text",
 ". (but this text",
 "  is in a box  ).",
 "So only it is important."]

প্রথম লুপটি এটিকে উপরে এবং বামে কাটবে এবং এটিকে পরিবর্তন করবে:

["",
 "(but this text",
 "is in a box  ).",
 " only it is important."]

দ্বিতীয় লুপটি এটি নীচে এবং ডানদিকে ক্রপ করবে, এটি এতে পরিবর্তন করবে:

["",
 "(but this text",
 "is in a box  )",
 ""]

1

রেটিনা 0.8.2 , 110 বাইট

^((.)¶.)(.*¶)+(.*\2)
$1¶$4
^(.)(¶.¶\1)
$2
}s`(?<=^.¶.+)¶.
¶
s`^¶(.)¶(.*\1).*
$2
+m`^((.)+).¶((?<-2>.)+)$
$1¶$3

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

^((.)¶.)(.*¶)+(.*\2)
$1¶$4

বাক্সের প্রথম লাইনের পূর্ববর্তী ইনপুট লাইনগুলি মুছুন।

^(.)(¶.¶\1)
$2

প্রারম্ভের অক্ষরটি যদি ইনপুটটির বাম কলামে থাকে তবে এটি মুছুন।

}s`(?<=^.¶.+)¶.
¶

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

s`^¶(.)¶(.*\1).*
$2

শেষ চরিত্রের পরে শেষ অক্ষর এবং ইনপুটটিতে থাকা সমস্ত কিছু মুছুন।

+m`^((.)+).¶((?<-2>.)+)$
$1¶$3

পরবর্তী লাইনের দৈর্ঘ্য পর্যন্ত সমস্ত রেখা কেটে ফেলুন। এটি প্রতিটি লাইনে একটি অক্ষর ব্যতীত সমস্তগুলি গণনা করে কাজ করে, তারপরে পরবর্তী লাইনে থাকা বহু অক্ষরের সাথে মেলে চেষ্টা করে; যদি এটি সফল হয় তবে দ্বিতীয় লাইনটি ছোট ছিল, তাই শেষ অক্ষরটি মুছে ফেলা হবে এবং লুপটি পুনরাবৃত্তি করবে।


0

সি (জিসিসি) , 237 বাইট

f(c,r,o,p)char*p,*c;{char*_=strchr(p,r),*a,b;*_=0;a=strrchr(p,10);a=(a?a:p);*_=r;r=_-a;p=a;_=strrchr(p,o);*_=0;a=strrchr(p,10);a=(a?a:p);*_=o;o=_-a+1;_[1]=0;for(_=p;_;_=strchr(_+1,10)){b=_[o];_[o]=0;strcat(c,_+r);strcat(c,"\n");_[o]=b;}}

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

আমি 99% নিশ্চিত যে কোনও চরিত্রের অনুভূমিক সূচক এবং নির্দেশকের সন্ধান করতে এটি কোনও ধরণের সহায়ক ফাংশন ব্যবহার করে সংক্ষিপ্ত করা যেতে পারে, কারণ এটি দুবার পুনরাবৃত্তি হয়েছে is হায়, আমি এটি করার একটি খুব ছোট উপায় খুঁজে পাইনি, সময় পেলে পরে আবার চেষ্টা করতে পারি।

বিবরণ

f(c,r,o,p)char*p,*c;{
    char*_=strchr(p,r),*a,b;         // find opening char (and declare vars)
    *_=0;a=strrchr(p,10);            // find \n before it
    a=(a?a:p);                       // deal with single line inputs
    *_=r;r=_-a;                      // save left margin width in r
    p=a;                             // crop everything before opening line

    _=strchr(p,o);                   // find closing char
    *_=0;a=strrchr(p,10);            // find \n before it
    a=(a?a:p);                       // deal with single line inputs
    *_=o;o=_-a+1;                    // save width in o
    _[1]=0;                          // crop everything after closing char
    for(_=p;_;_=strchr(_+1,10)){       // for each line
        b=_[o];_[o]=0;
        strcat(c,_+r);
        strcat(c,"\n");
        _[o]=b;
    }
}


0

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

╛↨½╝v∞░W╧)╗Ö≈☼k

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

এটি ইনপুটটির প্রথম লাইনে বক্স ডিলিমিটার অক্ষরের সেট (1 বা 2) নেয়। বাকি রেখাগুলি হ'ল ইনপুট বডি।

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এটির মতো দেখাচ্ছে।

            first line of input is the delimiter characters
dL          discard the first line of input and listify the rest into an array
{           begin block for iteration
  Mr        rotate matrix 90 degrees
  {         begin block for while loop
    ch      copy first row of block
    y|&C    if it insersects with the first line of input, break iteration
    D       drop the first line
  W         do-while loop until break
}4*         execute block 4 times
m           display result lines

এটি চালান

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