ইংলিশ থেকে স্টারবাকস


12

এই নতুন রূপায়িত স্টিকার-প্রিন্টার এবং ওয়্যারলেস ড্রাইভথ্রু হেডসেট পামটপ স্ক্যানার চুক্তির আগে স্টারবাকসের ক্লাসিক দিনগুলিতে, 2000-ইশ-এর প্রথম দিনগুলিতে স্টারবাকসের একটি কঠোর বাক্য গঠন এবং সংযুক্ত এনকোডযুক্ত ফর্মের সাথে পানীয়গুলি বর্ণনা করার জন্য একটি সংক্ষিপ্ত ব্যবস্থা ছিল।

উল্লম্বভাবে কাপে এমন কয়েকটি লেবেলযুক্ত বাক্স রয়েছে যাতে কিছু মান থাকতে পারে .:

Decaf
[   ]     -blank-  X  1/2  1/3  2/3
Shots
[   ]     -blank-  0 1 2 3 ... 20    followed by    S T G V
Syrup
[   ]     -blank-  V M C H
Milk
[   ]     -blank-  Wh % N B
Custom
[    ]    -blank- ((-|x)?(F|WC|M|CR) )+
Drink
[   ]     E EM ECP A L C CM

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

ডেকাফের ক্ষেত্রের মানগুলি এরকম শব্দগুলিতে অনুবাদ হয়

-blank-   -nothing-
X         "decaf"
1/2       "half-caf"
1/3       "one-third-caf"
2/3       "two-thirds-caf"

যৌক্তিকভাবে, ভগ্নাংশের মানগুলি কেবল তখনই অনুমোদিত হয় যখন শটগুলির সংখ্যা ডিনোমিনেটর দ্বারা বিভাজ্য হয়; তবে এই চ্যালেঞ্জের জন্য এই ত্রুটিটি সনাক্ত বা সনাক্তকরণের প্রয়োজন হয় না।

শটস ক্ষেত্রটি তার সংখ্যাসূচক অংশে (উপস্থিত থাকলে) এবং আকার সনাক্তকারী হিসাবে বিভক্ত করা উচিত। সংখ্যাটি লাতিন টিউপল আকারে প্রদর্শিত হবে: একক, ডাবল, ট্রিপল, চতুর্মুখী, কুইন্টুপল, 5 এর বাইরে কেবল সংখ্যা এবং প্রত্যয় "-টুপল" প্রিন্ট করুন। 7-tuple,16-tuple । আকারের পদবিগুলি হ'ল:

S  short
T  tall
G  grande
V  venti

যেমন।

2T  double tall
3G  triple grande

সিরাপ ফিল্ডে একাধিক alচ্ছিক নম্বর / লেটারকোড টোকেন থাকতে পারে। সিরাপের সর্বাধিক সংখ্যা 20. এমনকি এটি খুব বেশি। হাঃ হাঃ হাঃ.

V  vanilla
C  caramel
M  mocha
H  hazelnut

যেমন।

2V 2C     two vanilla two caramel
H         hazelnut
M H 1V    mocha hazelnut one vanilla

দুধ ক্ষেত্রের মধ্যে নিম্নলিখিতগুলির একটি থাকতে পারে ।

Wh  whole-milk
%   two-percent
N   skim
B   breve

কাস্টম ফিল্ডে এক বা একাধিক সংশোধক xor চ্ছিক বা -সাইন সহ থাকতে পারে ।

x  extra     F   foam
-  no        WC  whip
             M   mocha drizzle
             CR  caramel drizzle

পানীয়ের ক্ষেত্রটিতে একটি পানীয় আইডি রয়েছে।

E    espresso
EM   espresso macchiato
ECP  espresso con panna
A    americano
L    latte
C    cappuccino
CM   caramel macchiato

আকারের পদবী এবং পানীয় আইডি ব্যতীত যে কোনও ক্ষেত্র ফাঁকা থাকতে পারে।

উদাহরণ।

,3G,V,Wh,,L    =>   triple grande vanilla whole-milk latte
X,2T,,N,,L     =>   decaf double tall skim latte
1/2,V,,,,CM    =>   half-caf venti caramel macchiato
2/3,3V,3V,B,WC,L  => two-thirds-caf triple venti three vanilla breve whip latte
,G,,,xCR,CM    =>   grande extra caramel drizzle caramel macchiato
X,4T,2M 2C,B,xWC -F xM,C  =>
  decaf quadruple tall two mocha two caramel breve extra whip no foam extra mocha drizzle cappuccino

"নো ফোম ... ক্যাপুচিনো *" এর মতো ভ্রান্ত বা অযৌক্তিক কনককশনগুলি নির্ণয়ের দরকার নেই।

অতিরিক্ত জটিলতা

শব্দটির সাথে কেবল পানীয়গুলির জন্য espresso, সংখ্যাটি singleপ্রতিস্থাপন করা উচিত soloএবং এটি দ্বারা প্রতিস্থাপন করা doubleউচিত doppio। এবং আকারটি নির্ধারিত এবং বাদ দেওয়া যেতে পারে। এছাড়াও, কেবল খালি espressoপানীয়ের জন্যই, যদি এই দুটি বিশেষভাবে প্রতিস্থাপিত সংখ্যাগুলির মধ্যে কেবলমাত্র অন্য একটি স্পেসিফিকেশন হয় তবে শব্দটি espressoনিজেই বাদ দেওয়া উচিত।

,2,1V,B,,EM   =>  doppio one vanilla breve espresso macchiato
,1,,,,E       =>  solo
,2,,,,E       =>  doppio
,3,,,,E       =>  triple espresso

'কাপ পড়া' নিয়ে অতিরিক্ত পর্যবেক্ষণ

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

আমি প্রথমদিকে বাক্য গঠনটি উল্লেখ করেছি এবং শব্দের আগত প্রবাহগুলিতে স্কিমা প্রয়োগ করে অর্ডারগুলি বেশ কয়েকটি অর্ডার গ্রহণকারী দ্বারা পানীয় তৈরির ক্ষেত্রে মৌখিকভাবে প্রেরণ করা যেত। মোটামুটি কাঠামো SIZE .... DRINKএকবারে কথিত বেশ কয়েকটি আদেশের মধ্যে সীমাবদ্ধকরণ সরবরাহ করে। সমস্ত অভ্যন্তর বৈশিষ্ট্যকে বিশেষণমূলক বাক্যাংশ হিসাবে তৈরি করার প্রবণতা রয়েছে সুতরাং আদেশে একটি বৈধ ইংরেজি বিশেষ্য-বাক্য গঠনও রয়েছে has তাই whipপ্রায়ই উচ্চারিত হয় with whipবা whippedএবং foamপ্রায়ই উচ্চারিত হয় foamyবা with foam

সুতরাং, কিছু পুরানো সময়ের ব্যারিস্টাসের জন্য , যখন তারা যথাযথ বিন্যাসে আদেশটি পুনরাবৃত্তি করে ( ভাল, ... কখনও কখনও ) তখন তারা "আপনাকে সংশোধন করে না" । তারা সমস্ত বিবরণ ঠিকঠাক মনে করার উদ্দেশ্যে তথ্যটি সংগঠিত করছেন। তথ্যটি স্কিমাইটিজ করে, beverage নম্বর প্লাস বা বিয়োগ 2 টি ম্যাজিক প্রয়োগের উদ্দেশ্যে একটি সম্পূর্ণ পানীয়ের অর্ডার একক ইউনিটে পরিণত হয় । সুতরাং এই দক্ষতার সাথে একটি বারিস্তা তাদের মাথার মধ্যে 5-9 অর্ডার ধরে রাখতে পারে অন্য শঙ্কাগুলি খুব বেশি মাথা রুম ব্যবহার না করে। :)


5
আমি আনন্দিত যে আপনি এগুলি কফির চেয়ে পানীয় হিসাবে উল্লেখ করেছেন।
নীল

আপনি কি নতুন বোঝা মানে? আমি যদি মোবাইল থেকে অর্ডার না করি, তবে স্টারবাক্সের যে সমস্ত ব্যারিস্টাস আমি দেখেছি সেগুলি এখনও একটি কালো মার্কার দিয়ে লিখে ফেলতে পারে।
জো জেড।

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

1
s / হতাশা / বিলাপ /
লুসার droog

উত্তর:


3

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

প্রত্যাশিত আউটপুটটিতে ইনপুটটি রূপান্তর করতে বিকল্পের একটি সিরিজ সম্পাদন করে।

-
no 
x
extra 
Wh
whole-milk
%
2-percent
N
skim
B
breve
X
deJ
1/2
half-J
1/3
1Q-J
2/3
2Qs-J
Q
-third
J
caf 
^,
 ,
 ,1(?=\D.*E)
,soloZ
 ,2(?=\D.*E)
,doppioZ
Z,,,,E$
Z
 ,(\d+)
,$1UleZ
,1U
,sing
,2U
,doub
,3U
,trip
\d+(?!\d*U)
$&Y 
U
-tup
,4-.
,quadr
,5-
,quin
 ,
Z
S
short
T
tall
G
grande
ZV
 venti
M(?=[^,]*,\w*$)
MR
E
espresso
M$
 macchiato
CP
 con panna
A
americano
L
latte
C$
cappuccino
F
foam
WC
whip
R
 drizzle
4Y
fourY
6Y
sixY
7Y
sevenY
9Y
nineY
10Y
ten
11Y
eleven
12Y
twelve
13Y
thirK
15Y
fifK
18Y
eighK
20Y
twenty
1Y
one
2Y
two
3Y
three
5Y
five
8Y
eight
1(\w*)Y
$1K
K
teen
V
vanilla
C
caramel
M
mocha
H
hazelnut
 -
-
Z,*| ?,+
 
^ |Y

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

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

 ,1(?=\D.*E)
,soloZ
 ,2(?=\D.*E)
,doppioZ

"এসপ্রেসো" শব্দটিযুক্ত পানীয়গুলির জন্য বিশেষ কেসগুলি পরিচালনা করে। এটি 1 এবং 2 কে "একক" এবং "ডপ্পিও" তে রূপান্তরিত করে আমরা এমন পর্যায়ে পৌঁছানোর আগে যেখানে আমরা এই সংখ্যাগুলিকে লাতিন টুপল আকারে রূপান্তর করি।

Z,,,,E$
Z

"একক" বা "ডপপিও" কেবলমাত্র অন্য সংশোধক হলে "এস্প্রেসো" শব্দটি সরিয়ে দেয়।

M(?=[^,]*,\w*$)
MR

একটি আপনার স্বাক্ষরে Rকোন Mএটি মধ্যে শুধুমাত্র একটি কমা এবং স্ট্রিংয়ের শেষ প্রান্ত সঙ্গে। এটি আমাদের Rপরে সমস্তগুলিকে "বৃষ্টিপাত" এ রূপান্তর করতে দেয় ।

1(\w*)Y
$1K
K
teen

আমরা আগে থেকেই 4,6,7 এবং 9 প্রতিস্থাপন করার পরে আমাদের একসাথে 14,16,17 এবং 19 কে তাদের শব্দ আকারে রূপান্তর করতে দেয়।


6

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

s=>(R=(l,r)=>(l.split`.`.map((e,i,l)=>!(i%2)&&(r=r.split(e).join(l[i+1]+" "))),r),R("-.no.!.-tuple.1/2.half-caf.1/3.one-third-caf.2/3.two-thirds-caf.ECP.Econ panna.CM.RY.CR.RZ.EM.EY.WC.whip.Wh.whole-milk.A.americano.B.breve.C.cappuccino.D.extra.E.espresso.F.foam.G.grande.H.hazelnut.I.venti.L.latte.M.OZ.N.skim.O.mocha.R.caramel.S.short.T.tall.V.vanilla.X.decaf.Y.macchiato.Z.drizzle.%.two-percent",R(",1,,,,E.solo.,2,,,,E.doppio",s).split`,`.map((e,i)=>(`1VI.2MO.2CR.4xD`.split`.`.map(k=>k[0]==i&&(e=e.split(k[1]).join(k[2]))),i==1?(e=R("1!.single.2!.double.3!.triple.4!.quadruple.5!.quintuple",e.replace(/(\d+)/,"$1!"))):i==2?(e=R("10.ten.20.twenty.11.eleven.12.twelve.13.thir0.14.four0.15.fif0.16.six0.17.seven0.18.eigh0.19.nine0.0.teen.1.one.2.two.3.three.4.four.5.five.6.six.7.seven.8.eight.9.nine",e)):s.includes`E`&&(e=R("single.solo.double.doppio",e)),e)).join` `).replace(/\s+/g," ").trim())

"Ungolfed":

s=>(
  R=(l,r)=>(l.split`.`.map((e,i,l)=>!(i%2)&&(r=r.split(e).join(l[i+1]+" "))),r),                                   // consecutive string replacement function
  R("-.no.!.-tuple.1/2.half-caf.1/3.one-third-caf.2/3.two-thirds-caf.ECP.Econ panna.CM.RY.CR.RZ.EM.EY.WC.whip.     // replace all symbols with appropriate values
     Wh.whole-milk.A.americano.B.breve.C.cappuccino.D.extra.E.espresso.F.foam.G.grande.H.hazelnut.I.venti.L.latte.
     M.OZ.N.skim.O.mocha.R.caramel.S.short.T.tall.V.vanilla.X.decaf.Y.macchiato.Z.drizzle.%.two-percent",
    R(",1,,,,E.solo.,2,,,,E.doppio",s)                                                                             // if special espresso cases, directly replace entire string
    .split`,`.map((e,i)=>(                                                                                         // split input at commas
      `1VI.2MO.2CR.4xD`.split`.`.map(k=>k[0]==i&&(e=e.split(k[1]).join(k[2]))),                                    // substitute duplicate symbols with unique symbols
      i==1?(e=R("1!.single.2!.double.3!.triple.4!.quadruple.5!.quintuple",e.replace(/(\d+)/,"$1!"))):              // if in shots section, expand all numbers
      i==2?(e=R("10.ten.20.twenty.11.eleven.12.twelve.13.thir0.14.four0.15.fif0.16.six0.17.seven0.18.eigh0.        // if in syrup section, expand all numbers
                  19.nine0.0.teen.1.one.2.two.3.three.4.four.5.five.6.six.7.seven.8.eight.9.nine",e)):
      s.includes`E`&&(e=R("single.solo.double.doppio",e)),                                                         // replace single,double with solo,doppio if espresso is in the string
    e)).join` `).replace(/\s+/g," ").trim())                                                                       // join sections, cleanup whitespaces

উদাহরণ রান:

f(",3G,V,Wh,,L")              -> triple grande vanilla whole-milk latte
f("X,2T,,N,,L")               -> decaf double tall skim latte
f("1/2,V,,,,CM")              -> half-caf venti caramel macchiato
f("2/3,3V,3V,B,WC,L")         -> two-thirds-caf triple venti three vanilla breve whip latte
f(",G,,,xCR,CM")              -> grande extra caramel drizzle caramel macchiato
f("X,4T,2M 2C,B,xWC -F xM,C") -> decaf quadruple tall two mocha two caramel breve extra whip no foam extra mocha drizzle cappuccino
f(",2,1V,B,,EM")              -> doppio one vanilla breve espresso macchiato
f(",1,,,,E")                  -> solo
f(",2,,,,E")                  -> doppio
f(",3,,,,E")                  -> triple espresso

এটি ব্যবহার করে দেখুন: (R=...)("=-.no.!...(আর ইনলাইনটি সংজ্ঞায়িত করুন ফলাফলটি একটি ফাংশন হিসাবে ব্যবহার করুন)
কনর ও'ব্রায়ান

4

পাইথন, 824 815 807 805 বাইট

f=lambda s,a=0:a==0and" ".join(" ".join(f(" "+s.split(",")[i],(["X,deC,1/2,half-C,1/3,oneT-C,2/3,twoTs-C,C,caf,T,-third","".join(" %i"%i+f(",%i-tupL,"%i,["1","x","2","y"])for i in range(6,21))+"1,solo,2,doppio,"*('E'in s)+"1,singL,2,doubL, 3,tripL, 4,quadrupL, 5,quintupL,x,1,y,2,S,short,T,tall,G,grande,V,Vnti","V, vanilla,H, hazelnut,10,ten,11,eleVn,12,twelV,13,thirT,14,4T,15,fifT,16,6T,17,7T,18,8een,19,9T,20,twenty,1,one,2,two,3,three,4,four,5,fiV,6,six,7,seVn,8,eight,9,nine,T,teen","Wh,whole-milk,%,two-percent,N,skim,B,breV","x,extra ,-,no ,F,foam,WC,whip,M,MR,R, drizzL","CM,xM,E,espresso,M, macchiato,CP, con panna,A,americano,L,latte,C,cappuccino,x,C"][i]+",C, caramel,M, mocha,L,le ,V,ve").split(","))for i in range(6-(s in",1,,,,E,2,,,,E"))).split())or a and f(s.replace(a[0],a[1]),a[2:])or s

সামান্য আরও পঠনযোগ্য:

def f(s,a=0):
 if a==0:
  a=["X,deC,1/2,half-C,1/3,oneT-C,2/3,twoTs-C,C,caf,T,-third"]
  a+=["".join(" %i"%i+f(",%i-tupL,"%i,["1","x","2","y"])for i in range(6,21))+"1,solo,2,doppio,"*('E'in s)+"1,singL,2,doubL, 3,tripL, 4,quadrupL, 5,quintupL,x,1,y,2,S,short,T,tall,G,grande,V,Vnti"]
  a+=["V, vanilla,H, hazelnut,10,ten,11,eleVn,12,twelV,13,thirT,14,4T,15,fifT,16,6T,17,7T,18,8een,19,9T,20,twenty,1,one,2,two,3,three,4,four,5,fiV,6,six,7,seVn,8,eight,9,nine,T,teen"]
  a+=["Wh,whole-milk,%,two-percent,N,skim,B,breV"]
  a+=["x,extra ,-,no ,F,foam,WC,whip,M,MR,R, drizzL"]
  a+=["CM,xM,E,espresso,M, macchiato,CP, con panna,A,americano,L,latte,C,cappuccino,x,C"]
  return" ".join(" ".join(f(" "+s.split(",")[i],(a[i]+",C, caramel,M, mocha,L,le ,V,ve").split(","))for i in range(6-(s in",1,,,,E,2,,,,E"))).split())
 elif a:
  return f(s.replace(a[0],a[1]),a[2:])
 else:
  return s

Https://repl.it/C8Hz/3 এ ডেমো


3

রুবি -plaF, , 975 870 বাইট

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

কমা কাঠামোর নির্দিষ্ট অংশগুলিকে প্রভাবিত -aF,করতে কমে কাঠামোর নির্দিষ্ট অংশগুলিকে প্রভাবিত করতে রেগেক্স প্যাটার্নগুলি চালনার চেষ্টা থেকে স্যুইচ করে প্রায় 20 বাইট সংরক্ষণ করা হয়েছিল $F, আমাকে একসাথে ফিরে সেলাইয়ের আগে কিছু উপাদান সংশোধন করার অনুমতি দেয় এবং অবশেষে শেষ কয়েকটি sub/ gsubকমান্ডের সাহায্যে আউটপুট ভেরিয়েবল পরিবর্তন করা ।

সত্যি বলতে কি, এখানে তৈরি করা রেজেক্স রিপ্লেসমেন্টের অর্থ এর বেশিরভাগটি রেটিনা প্রোগ্রাম হতে পারে তবে আমি রেটিনাকে তার পক্ষে যথেষ্ট পরিমাণে জানি না।

g=->n,c{n.grep(/^ ?#{c}/i)[0]}
n=%w"0 one two three four five six seven eight nine ten eleven twelve thir four fif";n+=n[6,4]<<'twenty'
$F[1].sub!(/(\d*)(\w)?/){i=eval$1;"#{i&&(%w"0 sing doub trip quadrup quintup"[i]||$1+"-tup")+"le"} #{g[%w"short tall grande venti",$2]if$2}"}
$F[2].gsub!(/(\d*)(\w)/){i=eval$1;"#{i&&n[i]}#{'teen'if(13..19)===i} #{g[%w"vanilla caramel mocha hazelnut",$2]}"}
$F[3].sub!(/.+/){%w"skim whole-milk breve two-percent"[$&.sum%26%4]}
$F[4].gsub!(/(x|-)?(\w+)/){"#{%w"extra no"[$1.ord%2]if$1} #{g[%w"caramelD mochaD whip foam",$2[0]].sub ?D,' drizzle'}"}
$_=$F*' '
sub(/^\S+/){%w"de - half- one-third- two-thirds-"[$&.sum%8]+"caf"}
sub'CP',' con pana'
sub'CM','caramel'+m=' macchiato'
e='espresso'
gsub(/[A-Z]/){g[%w"americano latte cappuccino"+[m,e],$&]}
gsub(/ +/,' ')
$_.strip!
sub(/[sd]...le/){g[%w"doppio solo",$&[0]]}if$_[e]
sub'o '+e,?o

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


স্ট্যাটাস পরিবর্তন হলে আমি গ্রহণযোগ্যতা আপডেট করব!
লুসার droog

1
হতে পারে? আমি অন্য দুটি উত্তর মত তথ্য সংক্ষেপণ খুব ভাল না; পাইথনকে হারাতে পারে এমন কেউ হবেন, কারণ এটি অত্যন্ত নিষ্পাপ সমাধান
মান কালি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.