একটি টি 9 কীবোর্ড তৈরি করুন


12

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

আপনি যদি ভুলে যান তবে এখানে একটি টি 9 কীবোর্ডের মূল-মানচিত্র রয়েছে:

+-------+-------+-------+
|   1   |   2   |   3   |
|  .?!  |  ABC  |  DEF  |
+-------+-------+-------+
|   4   |   5   |   6   |
|  GHI  |  JKL  |  MNO  |
+-------+-------+-------+
|   7   |   8   |   9   |
| PQRS  |  TUV  |  WXYZ |
+-------+-------+-------+
|   *   |   0   |   #   |
|   ←   | SPACE |   →   |
+-------+-------+-------+

টি 9 কীভাবে কাজ করে

টি 9 দিয়ে একটি অক্ষর টাইপ করতে, আপনাকে সেই অক্ষরের nবার উপস্থাপন করে নম্বর কী টিপতে হবে । nযে কীতে লেখা সেই চরিত্রের ক্রম। নম্বরগুলি হ'ল সর্বশেষ অক্ষর যা আপনি প্রতিটি কীতে টাইপ করতে পারেন। উদাহরণস্বরূপ, Bআমি 2দু'বার চাপতে টাইপ করতে , বা টাইপ করতে 5আমি 5চারবার টিপুন । এই অক্ষরটি টাইপ করার জন্য আমি টিপছি #*কেবল ব্যাকস্পেস। আমাদের কীবোর্ডের সংস্করণে কোনও মূলধন নেই।

ইনপুট এবং আউটপুট উদাহরণ:

8#99999#055#33#999#22#666#2#777#3# → T9 KEYBOARD

ব্যাখ্যা:

  • 8নির্বাচন করে Tএবং #পরবর্তী অক্ষরে স্থানান্তরিত করে
  • 999999কী এর শেষ বর্ণচিহ্নটি নির্বাচন করুন 9এবং #পরবর্তী অক্ষরে স্থানান্তরিত করুন
  • 0 একটি স্থান সন্নিবেশ করান
  • 33দ্বিতীয় চরিত্র নির্বাচন 3চাবিকাঠি যা Kএবং #পরবর্তী অক্ষরে প্যাচসমূহ
  • এবং আরও ...

বিধি

আপনার ফাংশন বা প্রোগ্রামটির টি 9 টি কীপ্রেসগুলি উপস্থাপন করে একটি স্ট্রিং গ্রহণ করা উচিত। আউটপুট হ'ল কিপ্রেসগুলি থেকে প্রাপ্ত ফলাফল, যা উপরে বর্ণিত।

এটি বেসিক কোড গল্ফ, তাই বিজয়ী বাইটের মধ্যে সবচেয়ে কম হয় এবং মানক বিধি / লফোলগুলি প্রয়োগ হয়।


বোনাসের স্কোরের কোনও প্রভাব নেই? আমি কেন এটির জন্য যাব?
অপ্টিমাইজার 23

2
এছাড়াও, আপনার উদাহরণ T9 KEYBOARDসম্পূর্ণ ভুল। T9 JEYBARD
অপ্টিমাইজার

1
@ মহসেন সাধারণত, কোড গল্ফের বোনাসগুলি স্কোর থেকে একটি নির্দিষ্ট পরিমাণ বিয়োগ করবে। আপনি কতটা যুক্তিসঙ্গত তা নির্ধারণ করতে হবে। প্রথম বোনাসের জন্য সম্ভবত 10 বা 20 বাইটের বেশি নয়। দ্বিতীয় বোনাস, আমি বুঝতে পারি না। আমি যদি ফাংশনটির জন্য স্ট্রিং হিসাবে কী-টিপসগুলির ক্রম দিই, কীপ্রেসের মধ্যে কীভাবে কোনও সময় থাকবে? আমি মনে করি আরও একট যুক্তিসঙ্গত বোনাস হ'ল #যদি পর পরের বোতামগুলি অন্যরকম হয় তবে বাদ দেওয়া উচিত। যা বলা হচ্ছে: সেই বোনাস #বাদ দিলে কী হবে ?
মার্টিন ইন্ডার

1
এই বোনাসগুলির জন্য আপনার একটি সম্ভাব্য বাইট গণনা সুবিধা যুক্ত করতে হবে। বোনাসগুলি areচ্ছিক তবে আপনি বোনাসগুলি বাস্তবায়নের জন্য প্রতিটি উত্তর জিজ্ঞাসা করেছেন যেন তারা বাধ্যতামূলক। দয়া করে সুরটি সাফ করুন, যদি তারা বাধ্যতামূলক হয় তবে তাদের বিধিগুলিতে সরান, যদি তা না হয় তবে বোনাসগুলি বাস্তবায়নের জন্য প্রতিটি উত্তর জিজ্ঞাসা করবেন না। অস্পষ্ট হিসাবে বন্ধ হয়ে ভোট দেওয়ার আগে আমি আপনার জবাবের জন্য কয়েক ঘন্টা অপেক্ষা করব।
অপ্টিমাইজার

2
18 ঘন্টা পরেও কোনও উত্তর নেই। অস্পষ্ট হিসাবে বন্ধ করার জন্য ভোট।
অপ্টিমাইজার

উত্তর:


5

CJam, 109 94 বাইট (2 য় বোনাস)

একটি খুব নিষ্পাপ এবং দীর্ঘ সমাধান

q'#/);{__'*-:A-,_g{){;}*A_}*;'0/{_,g{)~".?~1"a'[,65>292994 5b{/(X):X+\s}%+1:Xm>=\,=}*}%S*1/~}%

এটি একটি সম্পূর্ণ প্রোগ্রাম, যদিও কোনও ফাংশন একই দৈর্ঘ্যের হবে।

ইনপুটটি STDIN এ যায়

উদাহরণ:

8#99999#055#33#999#***22#666#2#777#3#

আউটপুট:

T9 BOARD

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


আপনি কি এটি প্রথম বোনাসের জন্য কাজ করতে পারেন?
মোহসেন

3
@ মহসেন বোনাসে যাওয়ার সত্যিকারের সুবিধা না পাওয়া পর্যন্ত না! বলুন, চূড়ান্ত স্কোরের 25% কোড দৈর্ঘ্য হ্রাস।
অপ্টিমাইজার

2

জাভাস্ক্রিপ্ট ES6, 220-10 = 210 178 বাইট

হেলকার সিএমসির অংশ হিসাবে , আমি আমার প্রথম চ্যালেঞ্জটি ছাপিয়েছি।

n=>(g=n=>n==(k=n.replace(/.\*/,""))?n:g(k))(n.match(/(\d)\1*|\*/g).map(e=>e<"0"?e:(a=" |.?!|ABC|DEF|GHI|JKL|MNO|PQRS|TUV|WXYZ".split`|`[+e[0]]+e[0])[~-e.length%a.length]).join``)

নমুনা আউটপুট:

> f=n=>(g=n=>n==(k=n.replace(/.\*/,""))?n:g(k))(n.match(/(\d)\1*|\*/g).map(e=>e<"0"?e:(a=" |.?!|ABC|DEF|GHI|JKL|MNO|PQRS|TUV|WXYZ".split`|`[+e[0]]+e[0])[~-e.length%a.length]).join``)
[Function]
> f("8#99999#055#33#999#***22#666#2#777#3#")
'T9 BOARD'
> f("8#44#33#0#999#*77#88#444#222#55#0#22#777#666#9#66#0#333#666#99#0#5#88#6#7#7777#0#666#888#33#777#0#8#44#33#0#555#2#99#*9999#999#0#3#666#4#111#")
'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG!'
> f("8#99999#055#33#999#***22#666#2#777#3#")
'T9 BOARD'

ব্যাখ্যা

(g=n=>n==(k=n.replace(/.\*/,""))?n:g(k))

এটি পুনরাবৃত্ত প্রতিস্থাপন প্রয়োগ করে, সমস্ত অক্ষর প্রতিস্থাপন করে যার পরে *কোনও *বাম না থাকে।

n.match(/(\d)\1*|\*/g)

এটি একটানা সংখ্যার সমস্ত রানের সাথে মিলে যায় *s

a=" |.?!|ABC|DEF|GHI|JKL|MNO|PQRS|TUV|WXYZ".split`|`[+e[0]]+e[0]

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

a[~-e.length%a.length]

এটি অক্ষর পায়, মডুলোর aদৈর্ঘ্য।

.join``

এটি প্রসেসিং এবং অপসারণের জন্য স্ট্রিং প্রস্তুত করে *


1
আপনি কি এটি প্রথম বোনাস দিয়ে কাজ করতে পারেন?
মোহসেন

@ মোহসেন হ্যাঁ, এবং এটি সম্ভবত এটির পক্ষে সহায়তা করবে। আমি আজ এবং আগামীকাল এর মাধ্যমে এটিতে কাজ করব।
কনার ও'ব্রায়েন

দয়া করে কমপক্ষে কোনও স্কোরের বিজ্ঞাপন দিন না যা ভুল এমনকি উত্তরটিও অনুমান করা যায় না।
অপ্টিমাইজার

@ মোহসেন এটি এখন প্রথম বোনাস নিয়ে কাজ করছে।
কনর ও'ব্রায়েন

t("2#2");Bপরিবর্তে দেয় AA। এগুলি #অপসারণের পরিবর্তে কোনওটির সাথে মিলানোর চেষ্টা করুন।
তিতাস

1

পাইথন, 167 157 151 বাইট

('*' সমর্থন করে না)

বিশেষ কিছু না. ইনপুটটিকে তালিকায় রূপান্তর করতে আমি রেজেক্স ব্যবহার করি, তারপরে আমি এন্ট্রিগুলি লুপ করি। আমি প্রতিটি তালিকার প্রথম অক্ষর এবং দৈর্ঘ্যটি এটি দেখার তালিকায় অনুসন্ধান করতে ব্যবহার করি:

def f(i):
  import re
  t9 = [" 0",".?!1","ABC2","DEF3","GHI4","JKL5","MNO6","PQRS7","TUV9","WXYZ9"]
  i = re.findall(r'[1-9]+|0+',i)
  answer = []
  for j in i:
    answer = answer + [t9[int(j[0])][len(j)-1]]
  return ''.join(answer)

কিছু গল্ফ করার পরে এটি দেখতে এরকম দেখাচ্ছে:

import re;m=lambda i:"".join([" 0,.?!1,ABC2,DEF3,GHI4,JKL5,MNO6,PQRS7,TUV9,WXYZ9".split(",")[int(j[0])][len(j)-1] for j in re.findall(r'[1-9]+|0+',i)])

কোনও বোনাস নেই (এখনও)। আমি জানি না কীভাবে আমি রেগেক্সে প্রথম বোনাসটি প্রয়োগ করব। দ্বিতীয় বোনাসটি অনেকগুলি বাইট যুক্ত করবে কারণ লুকিং উপাদানগুলি একই আকার নয়। সত্যই তৃতীয় বোনাস বুঝতে পারি না।


1

পার্ল 5: 106 (104 কোড + 2 পতাকা)

মুছে ফেলতে হ্যান্ডেল করার জন্য পরিবর্তিত।

#!perl -lp
s/((\d)\2*)#?|./chr$2*5+length$1/ge;y//d 0-3.?!1 ABC2 DEF3 GHI4 JKL5 MNO6 P-S7TUV8 W-Z9/c;1while s/.?d//

ব্যবহার:

perl t9.pl <<<'8#99999#055#33#999#22#666#2#777#3#'
perl t9.pl <<<'899999055339992266627773'

পার্ল 5: 88 (86 কোড + 2 পতাকা)

তারকা মোছা ছাড়াই পুরানো সংস্করণ।

#!perl -lp
s/(\d)(\1*)#?/chr$1*5+length$2/ge;y// 0-3.?!1 ABC2 DEF3 GHI4 JKL5 MNO6 P-S7TUV8 W-Z9/c

@ অপ্টিমাইজার এটি চেষ্টা করেছে, এবং এটি আসলে * দিয়ে কাজ করে না। এটি আসলে যদিও প্রয়োজন? এতে বলা হয়েছে: "দ্রষ্টব্য যে এতে ব্যাকস্পেসের জন্য * অন্তর্ভুক্ত থাকতে পারে ..."
ডিফ

যেহেতু এটি বোনাসের অংশ নয়। এটি একটি বাধ্যতামূলক নিয়ম।
অপ্টিমাইজার

বলা হচ্ছে যে. একটি নিয়ম কী এবং বোনাস কী তা নিয়ে প্রশ্নটি খুব স্পষ্ট। আমি কয়েক ঘন্টা আগে ওপিকে স্পষ্টতার জন্য জিজ্ঞাসা করেছি। যদি কোনও প্রতিক্রিয়া না পাওয়া যায় তবে আমি এই প্রশ্নটি অস্পষ্ট হিসাবে বন্ধ করার পক্ষে ভোট দিচ্ছি।
অপ্টিমাইজার

দুঃখিত, আমি যে ভাষাগুলি পড়তে পারি সেগুলিও সমর্থন করে না * বর্তমান উত্তর হিসাবে আমি বিভ্রান্ত হয়েছিল।
নটকি

আপনি যদি আমার অজগর উত্তরটি উল্লেখ করছেন, আপনি ঠিক বলেছেন। আমি প্রশ্নটির ভুল ব্যাখ্যা দিয়েছি।
Def

1

এডব্লিউকে 211 বাইট (বোনাস সহ)

{split(".?!1-ABC2-DEF3-GHI4-JKL5-MNO6-PQRS7-TUV8-WXYZ9- 0",k,"-");split($0"#",a,"");while(1+(b=a[++i])){if(b==p)++c;else{for(g in k)if(p==substr(k[g],l=length(k[g])))printf(substr(k[g],1+((c-1)%l),1));c=1;p=b}}}

এটি একটি সম্পূর্ণ প্রোগ্রাম যা স্টিডিনের ইনপুটটি পড়ে। প্রতিটি লাইনের জন্য কীবোর্ডকে পুনর্বিবেচনা না করা আরও দক্ষ হবে তবে এটি স্ক্রিপ্টটি আরও দীর্ঘায়িত করবে।

এছাড়াও যদি "0" কীটি 0 এর বাইরে অন্য কিছু ছিল তবে স্ক্রিপ্টটি 4 বাইট ছোট হবে, তবে এটি গেমটির অংশ: o)


1

সি (245 বাইট)

#define M "8#44#33#0#999#*77#88#444#222#55#0#22#777#666#9#66#0#333#666#99#0#5#88#6#7#7777#0#666#888#33#777#0#8#44#33#0#555#2#99#*9999#999#0#3#666#4#111#"

#include<stdio.h>
char K[][4]={" ",".?!","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"},I[]=M;int       
i,j,k,r;main(){for(;I[i];++i){if(I[i]=='#')I[j++]=K[k][--r],r=k=0;else               
if(I[i]=='*')j?--j:0;else if(!r++)k=I[i]-'0';}I[j]=0;printf("%s\n",I);}

আউটপুট

THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG!

ব্যাখ্যা

বাইট গণনায় প্রথম দেওয়া ইনপুট স্ট্রিংটি অন্তর্ভুক্ত নয় #define

আমি কোন অক্ষরটি মুদ্রণ করব তা দেখার জন্য আমি একটি দ্বি-মাত্রিক অ্যারে ব্যবহার করি the প্রোগ্রামটি সীমায়িত চরিত্রে পড়ে '#'

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

সুতরাং ইনপুট স্ট্রিং 44#(1 পুনরাবৃত্তি '4') লক লুক টেবিল অনুবাদ করা হয় K[4][1], যা চরিত্র H


অবহেলিত সংস্করণ

#define INPUT "8#44#33#0#999#*77#88#444#222#55#0#22#777#666#9#66#0#333#666#99#0#5#88#6#7#7777#0#666#888#33#777#0#8#44#33#0#555#2#99#*9999#999#0#3#666#4#"

#include<stdio.h>

static const char keyboard[10][4] = {" ", ".?!", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"};

int main(void)
{
  char input[] = INPUT;
  char output[256];
  int i, j;
  int key = 0;
  int reps = 0;

  for (i = j = 0; input[i] != '\0'; ++i) {
    switch (input[i]) {
    case '#':
      output[j] = keyboard[key][reps - 1];
      ++j;
      reps = key = 0;
      break;
    case '*':
      if (j > 0) --j;
      break;
    default:
      if (reps == 0)  {
        key = (int)input[i] - '0';
      }
      ++reps;
      break;
    }
  }

  output[j] = '\0';
  printf("%s\n", output);

  return(0);
}

1

রুবি 254 , 248 , 229 বাইট

Golfed:

n=->(t){r,m,b=[]," _.?!1_ABC2_DEF3_GHI4_JKL5_MNO6_PQRS7_TUV8_WXYZ9_*_0_#".split("_"),nil;t.scan(/((.)\2*)/){|l,_|(!(l=~/\#/)?(l=~/\*/?(r.pop l.size):(l=="00"?r<<(b ? "0 ":" 0"):(c=m[l[0].to_i];r<<c[l.size%c.size-1]))):b=l)};r*""}

Ungolfed:

def t9totext(t)
  bonq = nil
  numpad = [" ",".?!1","ABC2","DEF3","GHI4","JKL5","MNO6","PQRS7","TUV8","WXYZ9","*","0","#"]

  r = []
  t.scan(/((.)\2*)/) do |l, _|
    if !(l =~ /\#/)
      if l =~ /\*/
        r.pop(l.size)
      elsif l == "00"
        r << (bonq ? "0 " : " 0")
      else
        c = numpad[l[0].to_i]
        r << c[l.size % c.size - 1]
      end
    else
      bonq = l
    end
  end
  r.join
end

এই সমস্ত চশমা সফল হওয়া উচিত:

  it "outputs the correct word" do
    expect(n.call('8#99999#055#33#999#22#666#2#777#3#1')).to eq("T9 KEYBOARD.")
    expect(n.call('4433555#55566609666666677755533*3111')).to eq("HELLO WORLD!")
    expect(n.call('7##222#222**7#222#4')).to eq('PPCG')
    expect(n.call('00#0#00')).to eq(' 0 0 ')
  end

0 0উত্তর একটি হল hacky সমাধান মত একটি বিট দেখায়। আমি সময় পেলে এটি খতিয়ে দেখব।


0

পিএইচপি, 183-10 = 173 বাইট

সমস্ত সংস্করণ কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়; কল php -r '<code>' <string>

দ্রষ্টব্য : ইনপুট শুরু হলে সমস্ত সংস্করণ একটি সতর্কতা ফেলে দেয় *
শুরুতে যোগ $o=[];কোডে যে ত্রুটি মুছে ফেলার জন্য।

preg_match_all("%(\d)\1*|\*%",$argv[1],$m);foreach($m[0]as$w)if("*"==$w)array_pop($o);else$o[]="- 0   .?!1 ABC2 DEF3 GHI4 JKL5 MNO6 PQRS7TUV8 WXYZ9"[$w[0]*5+strlen($w)];echo join($o);
  • হ্যাশ ট্যাগের দরকার নেই
  • যদি প্রায়শই একটি কী টিপে দেওয়া হয় তবে ব্যর্থ হয়

210-10 - ?? = ??? বাইট

$a=[" 0",".?!1",ABC2,DEF3,GHI4,JKL5,MNO6,PQRS7,TUV8,WXYZ9];preg_match_all("%(\d)\1*|\*%",$argv[1],$m);foreach($m[0]as$w)if("*"==$w)array_pop($o);else$o[]=$a[$w[0]][strlen($w)%strlen($a[$w[0]])-1];echo join($o);
  • হ্যাশ ট্যাগের দরকার নেই
  • একটি কীটি প্রায়শই চাপ দেওয়া হলে ঘোরান

181 বাইট, কোনও বোনাস নেই

preg_match_all("%\d+#|\*%",$argv[1],$m);foreach($m[0]as$w)if("*"==$w)array_pop($o);else$o[]=" 0   .?!1 ABC2 DEF3 GHI4 JKL5 MNO6 PQRS7TUV8 WXYZ9"[$w[0]*5+strlen($w)-2];echo join($o);

ভাঙ্গন

"কোনও হ্যাশ ট্যাগস" সংস্করণ স্ট্রিংটিকে (সমান সংখ্যার ধারাবাহিক) এবং (তারকাচিহ্ন) এ বিভক্ত করে অন্য সব কিছু ভুলে যান। নো-বোনাস সংস্করণ লাগে (সংখ্যার ধারাবাহিকতা অনুসরণ করে #) এবং (অ্যাসিটার্ক)।

তারপরে ম্যাচগুলি লুপ করুন: যদি একটি '*' পাওয়া যায়, ফলাফল অ্যারের শেষ উপাদানটি সরিয়ে দিন।

সংস্করণগুলির মধ্যে পার্থক্যটি elseঅংশে রয়েছে:

  • কোনও বোনাস সংস্করণ নেই: মানচিত্রের স্ট্রিংকে (কী * 5) এ অফসেট করুন, তারপরে (কীস্ট্রোক = শব্দ দৈর্ঘ্য -1) -1 যোগ করুন, সেই অবস্থান থেকে চরিত্র যুক্ত করুন।
  • সাধারণ নো-ট্যাগ সংস্করণ: প্রায় একই, তবে: (কীস্ট্রোক = শব্দের দৈর্ঘ্য); অন্যটিকে থেকে মুক্তি পেতে মানচিত্রের স্ট্রিংয়ে একটি অক্ষর যুক্ত করা হয়েছে -1
  • আবর্তিত সংস্করণ: মানচিত্র অ্যারে থেকে আইটেম (কী) নিন, ফলাফলটি আইটেমটি থেকে অক্ষর (কীস্ট্রোক% আইটেমের দৈর্ঘ্য -1) যুক্ত করুন।

0

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

কোনোরের উত্তরটি আমার পিএইচপি উত্তর থেকে রেগেক্সের সাথে স্থির হয়েছে এবং গল্ফ করেছে।

t=i=>i.match(/(\d)\1*|\*/g).map(w=>(" 0~.?!1~ABC2~DEF3~GHI4~JKL5~MNO6~PQRS7~TUV8~WXYZ9".split`~`[w[0]]||"*")[w.length-1]).join``.replace(/.\*/g,"")

ভাঙ্গন

t=i=>i
    .match(/(\d)\1*|\*/g)   // split input to streaks of equal numbers and single `*`
    .map(w=>                // replace each item with ...
                            // .. take string depending on the digit
        (" 0~.?!1~ABC2~DEF3~GHI4~JKL5~MNO6~PQRS7~TUV8~WXYZ9".split`~`[w[0]]
        ||"*")              // .. ("*" for not a digit)
        [w.length-1]        // -> the (item length)th character of that string
    )
    .join``                 // join without delimiter
    .replace(/.\*/g,"")     // and recursively remove every (letter,asterisk) combination

ঘোরানো সংস্করণ, 158 বাইট

যোগ s=স্ট্রিং মনে রাখা এবং %s.lengthঘোরাতে।

t=i=>i.match(/(\d)\1*|\*/g).map(w=>(s=" 0~.?!1~ABC2~DEF3~GHI4~JKL5~MNO6~PQRS7~TUV8~WXYZ9".split`~`[w[0]]||"*")[w.length%s.length-1]).join``.replace(/.\*/g,"")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.