বাইট / ক্যারেক্টার


28

কার্য

একটি ইউটিএফ -8 স্ট্রিং (যে কোনও উপায়ে) উত্তর দেওয়া হয়েছে (যে কোনও উপায়ে) একটি সমতুল্য তালিকা যেখানে প্রতিটি উপাদান সম্পর্কিত ইনপুট চরিত্রটি এনকোড করতে ব্যবহৃত বাইট সংখ্যা।

উদাহরণ

!1

Ciao1 1 1 1

tʃaʊ1 2 1 2

Adám1 1 2 1

ĉaŭ2 1 2(একক অক্ষর)

ĉaŭ1 2 1 1 2(সংযুক্ত ওভারলেগুলি ব্যবহার করে)

チャオ3 3 3

(খালি ইনপুট) → (খালি আউটপুট)

!±≡𩸽1 2 3 4

(একটি নাল বাইট) → 1

নাল বাইট

নাল বাইটের বাইরে পঠনপাঠনের একমাত্র উপায় যদি মোট বাইট গণনা জেনে থাকে তবে আপনি কোনও উপায়ে (এমনকি ব্যবহারকারী ইনপুট) বাইট গণনা পেতে পারেন।

যদি আপনার ভাষাটি নাল বাইটগুলি একেবারেই পরিচালনা করতে না পারে তবে আপনি ধরে নিতে পারেন ইনপুটটিতে নাল থাকবে না।


1
ইনপুট ফাঁকা থাকলে আমরা 0 বা অন্য কোনও মিথ্যা মান আউটপুট করতে পারি?
অ্যালেক্স এ

2
আমি কি বিচ্ছেদ ছাড়াই বাইট সংখ্যা মুদ্রণ করতে পারি? সর্বোচ্চ সম্ভাব্য মান 6, সুতরাং এটি দ্ব্যর্থহীন।
ডেনিস

3
আমাদের কি নাল বাইট সমর্থন করতে হবে? এগুলি কিছু ভাষায় আসল ব্যথা হতে পারে ...
ডেনিস

3
আপনার এটি পোস্টে যুক্ত করা উচিত। আমি বেশিরভাগ ভাষাগুলি তেমনভাবে জানি না যে এটির কোনও পার্থক্য রয়েছে কিনা তা জানাতে, তবে আমি মনে করি এটি কমপক্ষে দুটি উত্তর অকার্যকর করে দিয়েছে।
ডেনিস

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

উত্তর:


10

পাইথ, 9 7 বাইট

2 বাইট বাঁচানোর জন্য @ মাল্টেসেনকে ধন্যবাদ!

mlc.Bd8

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

ইনপুটটির প্রতিটি চরিত্রকে এটি বাইনারি উপস্থাপনায় রূপান্তর করে এবং তারপরে এটিকে দৈর্ঘ্যের 8 অংশে বিভক্ত করে those খণ্ডগুলির সংখ্যাটি সেই অক্ষরটি এনকোড করার জন্য প্রয়োজনীয় বাইটের পরিমাণ।


1
আপনি বিভাজনের পরিবর্তে বিভাজন এবং তারপরে .E অজগরটি
মালটিসেন

@ মালটিসেন এটি চালাক, ধন্যবাদ!
ডেনকার

1
একই দৈর্ঘ্যের উত্তর যা একই ধরণের ট্রিকের উপর নির্ভর করে:mlhc8.B
FryAmTheEggman

@ ল্যাকইনুন তাহলে পরীক্ষা-নিরীক্ষার কেস ব্যর্থ হওয়া সহজ জিনিস হবে, তাই না?
বিলম্ব করুন

অন্য বাইট সংরক্ষণ করতে, 8 এর অংশগুলিতে বিভক্ত না হয়ে প্রতি 8 তম সময় নিন: ml%8.B(এখন এটি dঅন্তর্নিহিত)।
অ্যান্ডারস ক্যাসরগ

21

পাইথন 3, 42 36 বাইট

lambda x:[len(i.encode())for i in x]

13
-1 বাইট: ব্যবহার maplambda x:map(len,map(str.encode,x))
NoOneIsHere

11

সি, 68 65 বাইট

b;main(c){for(;~c;b=c/64^2?b?putchar(b+48)/48:1:b+1)c=getchar();}

3 বাইট বন্ধ করে গল্ফ করার জন্য @ ফ্রাইআমডেজিমনকে ধন্যবাদ!

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


11

এপিএল, 15 টি অক্ষর

≢¨'UTF-8'∘⎕ucs¨

ইংরাজীতে: প্রতিটি অক্ষরকে ইউটিএফ -8 এ রূপান্তর করুন (যার অর্থ: বাইটসের উপস্থাপকের ভেক্টর) এবং এর সংযোজন পান।


একটি বাইট সংরক্ষণ করুন:≢¨'UTF-8'∘⎕ucs¨
Adám

প্রকৃতপক্ষে @ আদম ... চিয়ার্স
lstefano

একটি আকর্ষণীয় (তবে দীর্ঘ) অ্যারে ভিত্তিক পদ্ধতি:+⌿0 7 11 16∘.≤2⍟⎕UCS
অ্যাডাম

সংস্করণ 16.0:0 7 11 16⍸2⍟⎕UCS
অ্যাডাম

7

গল্ফস্ক্রিপ্ট, 16 বাইট

{64/2=}%1,/{,)}*

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

পটভূমি

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

ইউটিএফ -8 এএসসিআইআই এবং নন-এএসসিআইআই অক্ষরগুলি আলাদাভাবে এনকোড করে:

  • 128 এর নীচে থাকা সমস্ত কোড পয়েন্টগুলি এনকোড হয়েছে 0xxxxxxx

  • অন্যান্য সমস্ত কোড পয়েন্ট হিসাবে এনকোড করা আছে 11xxxxxx 10xxxxxx ... 10xxxxxx

এর অর্থ হ'ল প্রতিটি ইউনিকোড চরিত্রের এনকোডিংয়ে হয় একটি একক 0xxxxxxxবাইট বা একক 11xxxxxxবাইট এবং 1 থেকে 5 10xxxxxxবাইট।

ইনপুট সব বাইট বিভাজক দ্বারা 64 , আমরা চালু 0xxxxxxxমধ্যে 0 বা 1 , 11xxxxxxমধ্যে 310xxxxxxমধ্যে 2

যদি আমরা ভাগফলকে 2 এর সাথে তুলনা করি - 2 এর জন্য 1 টি চাপছি ; এবং 0 , 1 , এবং 3 এর জন্য 0 - প্রতিটি অক্ষর 0 তে রূপান্তরিত হবে , তারপরে 1 থেকে 5 1 গুলি থাকবে।

যা বাকি আছে তা 0 টির উপস্থিতিতে ফলাফলের স্ট্রিংকে বিভক্ত করা , সেই শূন্যগুলির মধ্যে 1 এর সংখ্যা গণনা করা এবং পরিমাণে একটি যোগ করা।

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

{     }%          Map the following over all bytes in the input.
 64/                Divide the byte by 64.
    2=              Compare the quotient with 2, pushing 1 or 0.
        1,        Push range(1), i.e., [0].
          /       Split the array of Booleans around zeroes.
           {  }*  Fold; for each run of ones but the first:
            ,       Push its length.
             )      Increment.

6

পাওয়ারশেল ভি 4, 58 বাইট

[char[]]$args[0]|%{[Text.Encoding]::UTF8.GetByteCount($_)}

বিশেষ দ্রষ্টব্য

ঠিক আছে, এটি কাজ করা উচিত এবং পরীক্ষার ক্ষেত্রে প্রায় সমস্ত ক্ষেত্রে এটি বাদ দেয় 𩸽যা কোনওভাবে 3,3আমার মেশিনে গণনা করা হয়। এমনকি এই চরিত্রটি আমার কম্পিউটারে 7 বাইট হিসাবে দেখায় । আমি সন্দেহ করি যে এটি উইন্ডোজ বা .NET সংস্করণে কিছুটা বাগের কারণে হয়েছে যা আমি স্থানীয়ভাবে চালাচ্ছি, কারণ @ মেগোতে সমস্যা নেই । ( সম্পাদনা: এই আউট @cat পয়েন্ট কারণে BOM যে রহস্য সমাধানে, @cat জন্য ধন্যবাদ।! )

যাইহোক, এটি এখনও সমস্যার সমস্ত জন্য অ্যাকাউন্ট না। যদিও আমি মনে করি আমি জানি কিছু সমস্যা কোথায় থেকে এসেছে। .NET এর ভিতরে, সমস্ত স্ট্রিংগুলি ইউটিএফ -16 কোড ইউনিট (যা সিস্টেম.চার প্রকার) দ্বারা গঠিত। পাওয়ারশেল যে খুব আলগা টাইপকাস্টিং ব্যবহার করে তা ব্যাকগ্রাউন্ডে প্রকারের মধ্যে অনেকগুলি অন্তর্ভুক্ত কাস্টিং এবং রূপান্তর। সম্ভবত আমরা যে আচরণটি দেখছি তার ক্ষেত্রে এটি অবদান রাখার কারণ - উদাহরণস্বরূপ, [system.text.encoding]::utf8.getchars([System.Text.UTF8Encoding]::UTF8.GetBytes('𩸽'))একটি অক্ষরের পরিবর্তে দুটি ছাপ ছাপিয়ে দেয়।


ব্যাখ্যা

খুব সোজা কোড। ইনপুট নেয় $args[0]এবং সুস্পষ্টভাবে এটিকে একটি চর-অ্যারে হিসাবে কাস্ট করে যাতে আমরা স্ট্রিংয়ের প্রতিটি উপাদান লুপ করতে পারি |%{...}। প্রতিটি পুনরাবৃত্তি, আমরা বর্তমান অক্ষরের বাইট গণনা পেতে .NET কল [System.Text.Encoding]::UTF8.GetByteCount()(এটি System.বোঝানো হয়) ব্যবহার করি $_। এটি পরবর্তী আউটপুট জন্য পাইপলাইনে স্থাপন করা হয়। যেহেতু এটি [int]ফেরত আসা গুলি এর সংগ্রহ , তাই একটি অ্যারেতে কাস্টিং অন্তর্ভুক্ত।

টেস্ট রান

PS C:\Tools\Scripts\golfing> .\bytes-per-character.ps1 'tʃaʊ'
1
2
1
2

PS C:\Tools\Scripts\golfing> .\bytes-per-character.ps1 'Adám'
1
1
2
1

PS C:\Tools\Scripts\golfing> .\bytes-per-character.ps1 'ĉaŭ'
2
1
2

PS C:\Tools\Scripts\golfing> .\bytes-per-character.ps1 'ĉaŭ'
1
2
1
1
2

PS C:\Tools\Scripts\golfing> .\bytes-per-character.ps1 'チャオ'
3
3
3

PS C:\Tools\Scripts\golfing> .\bytes-per-character.ps1 '!±≡𩸽'
1
2
3
3
3

যুক্ত করার জন্য সম্পাদিত এটি নাল-বাইটের প্রয়োজনীয়তার জন্য সঠিকভাবে অ্যাকাউন্ট করে যা আমি মূলত পোস্ট করার পরে চ্যালেঞ্জটিতে যুক্ত হয়েছিল, আপনি যদি কোনও পাঠ্য ফাইল থেকে ডেটা টানেন এবং নীচে এটি পাইপ করেন:

PS C:\Tools\Scripts\golfing> gc .\z.txt -Encoding UTF8|%{.\bytes-per-character.ps1 $_}
2
1
1
1

z.txt


That character even shows as 7 bytes on my computer.হ্যাঁ, এটি বাইটি-অর্ডার চিহ্নের কারণেই যা ইউটিএফ -8 এর সাথে আপনি উইন্ডোজে পাবেন। নোটপ্যাড ++ ব্যবহার করতে বলুন UTF-8 without BOM(যেমন আপনার সর্বদা বিওএম এড়ানো উচিত , বিশেষত নীতিসমূহের সাথে সামঞ্জস্যের জন্য) এবং আপনি ফাইলটির আকার 4 বাইট পাবেন, কারণ বিওএম 3 এবং 4 + 3 = 7
বিড়াল

@ কেট আহ, হ্যাঁ, এটি উপলব্ধি করে। ঠিক আছে, যাতে ফাইল আকারের মধ্যে পার্থক্য জন্য অ্যাকাউন্ট। তবে এটি এখনও শেলের ভিতরেই আলাদা আচরণের জন্য অ্যাকাউন্ট করে না account উদাহরণস্বরূপ, এটি বিওএম ছাড়াই ইউটিএফ -8 হিসাবে সংরক্ষণ করা এবং get-content -Encoding UTF8 .\z.txt|%{.\bytes-per-character.ps1 $_}এখনও চালানো ফিরে আসে 3,3
অ্যাডমবর্কবার্ক



6

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

s=>[...s].map(c=>encodeURI(c).length/3-8&7)

সম্পাদনা করুন: @ l4m2 এর সাহায্যে 2 বাইট সংরক্ষণ করা হয়েছে।


s=>[...s].map(c=>encodeURI(c).length/3-4&3)
l4m2

@ l4m2 এটি নন-বিএমপি অক্ষরের জন্য ব্যর্থ হয়েছে তবে আমি এটি ঠিক করতে সক্ষম হয়েছি।
নীল


5

পার্ল 6 ,  77 69  63 বাইট

put +$0 if $_».base(2).fmt("%8d")~~/^(1)**2..*|^(" ")/ while $_=$*IN.read: 1
put +$0 if $_».fmt("%8b")~~/^(1)**2..*|^(" ")/ while $_=$*IN.read: 1

put 1+$0 if $_».fmt("%8b")~~/^1(1)+|^" "/while $_=$*IN.read: 1
put 1+$0 if $_».fmt("%0.8b")~~/^1(1)+|^0/while $_=$*IN.read: 1

যেহেতু পার্ল 6 এনএফজি স্ট্রিং ব্যবহার করে আমাকে সরাসরি বাইটগুলি টানতে হবে, যা বৈশিষ্ট্যটির পাশের অংশে রয়েছে।
(এনএফজি এনএফসি এর মতো এটি সিন্থেটিক কমপিড কোডড পয়েন্ট তৈরি করে)

আউটপুট নিউলাইনগুলি দ্বারা পৃথক করা হয়।

টেস্ট:

for text in '!' 'Ciao' 'tʃaʊ' 'Adám' 'ĉaŭ' 'ĉaŭ' 'チャオ' '' '!±≡𩸽' '𩸽\0𩸽';
do
  echo -en $text |
  perl6 -e 'put 1+$0 if $_».fmt("%8b")~~/^1(1)+|^" "/while $_=$*IN.read: 1' |

  # combine all of the lines into a single one for display purposes
  env text=$text perl6 -e 'put qq["%*ENV<text>"], "\t\t", lines.gist'
done
"!"     (1)
"tʃaʊ"      (1 2 1 2)
"Adám"      (1 1 2 1)
"ĉaŭ"       (2 1 2)
"ĉaŭ"     (1 2 1 1 2)
"チャオ"       (3 3 3)
""      ()
"!±≡𩸽"     (1 2 3 4)
"𩸽\0𩸽"        (4 1 4)

ব্যাখ্যা:

# turns the list in 「$0」 into a count, and adds one
# 「put」 prints that with a trailing newline
put 1+$0 

   # if the following is true
   if

       # format the input byte to base 2 and pad it out to 8 characters
       $_».fmt("%8b")

       ~~ # smart match against

       # check to see if it starts with more than one 1s, or a space
       # ( also sets 「$0」 to a list that is 1 shorter
       # than the number of bytes in this codepoint )
       / ^1 (1)+ | ^" " /

           # for every byte in STDIN
           while
               $_ = $*IN.read: 1

এটি কাজ করে কারণ একটি বহু-বাইট কোডপয়েন্টে প্রথম বাইটটি এর ভিতরে এনকোডেড বাইটের সংখ্যা এবং কোডপয়েন্টের অন্যান্য বাইটগুলি সর্বাধিক বিট সেট করে থাকে তবে পরের সর্বোচ্চটি নয়। যদিও একক বাইট কোডপয়েন্টে সর্বোচ্চ বিট সেট নেই।


read:1এবং / বা /while$পরিবর্তে করতে পারি না ? এবং যদি এটি কাজ করে if$?
এরিক আউটগলফার

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ না কারণ এটিকে আলাদা কিছু হিসাবে পার্স করা হবে। আমি whileযদিও এর আগে জায়গাটি সরিয়ে ফেলতে পারি ।
ব্র্যাড গিলবার্ট বি 2 গিল

আপনি কি এনএফজি কাউন্টারমেজারগুলি ব্যাখ্যা করতে পারেন?
জেডিগোগস

যদি আমি এই প্রোগ্রামের এসটিডিআইএন-এর কোনও এনএলআই বাইট প্রতিধ্বনিত করি তবে এটি মুদ্রণ করে \n1\n1\n, তা কি ইচ্ছাকৃত? মূলত, এটি কি NUL বাইটগুলি পরিচালনা করে?
বিড়াল

@ কেট কেন তা করবে না? যখন আমি এটি করি: perl -e 'print "𩸽\0𩸽"' | perl6 -e '...'আমি 4␤1␤4যেমন প্রত্যাশা করি ঠিক তেমনই পাই। (যদিও পোস্ট করার পরে নাল সম্পর্কে অংশটি যুক্ত করা হয়েছিল)
ব্র্যাড গিলবার্ট

5

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

import math
lambda x:[ord(i)<128and 1or int((math.log2(ord(i))-1)//5+1)for i in x]

এটি অন্যান্য পাইথন উত্তরগুলির তুলনায় অনেক দীর্ঘ এবং অন্যান্য উত্তরগুলির বেশিরভাগই লোগারিদমে জড়িত এমন একটি পদ্ধতির ব্যবহার করে যা আমি এখনও দেখিনি।

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

আইডিয়নে চেষ্টা করে দেখুন

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

এই পদ্ধতিটি ইউটিএফ -8 কোনও চরিত্রের কোড-পয়েন্টকে এনকোড করে on যদি কোড-পয়েন্টটি 128 এর চেয়ে কম হয় তবে অক্ষরটি ASCII হিসাবে এনকোড করা থাকে:

0xxxxxxx

যেখানে xকোড পয়েন্টের বিটগুলি উপস্থাপন করে। তবে, 128 এর চেয়ে বড় বা সমান কোড পয়েন্টের জন্য, প্রথম বাইটটি 1মোট বাইটের সংখ্যার মতো একই সংখ্যার সাথে প্যাড করা হয় এবং পরবর্তী বাইটগুলি শুরু হয় 10। এর পরে কোড পয়েন্টের বিটগুলি সংক্ষিপ্ততম মাল্টিবাইট সিকোয়েন্সটি দেওয়ার জন্য প্রবেশ করানো হয় এবং বাকী কোনও বিট হয়ে যায় 0

No. of bytes  Format
1             0xxxxxxx
2             110xxxxx 10xxxxxx
3             1110xxxx 10xxxxxx 10xxxxxx
4             11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
...           ...

এবং তাই এগিয়ে।

এটি এখন লক্ষ্য করা যায় যে প্রতিটি সংখ্যক বাইটের nজন্য কোড-পয়েন্ট বিটের সংখ্যার জন্য উপরের সীমাটি দেওয়া হয় (-n+7)+6(n-1) = 5n+1। তাই, সর্বোচ্চ সীমা কোড দফা cপ্রত্যেকের জন্য nদশমিক এ, দেওয়া হয় দ্বারা c= 2^(5n+1)। এই পুনরায় সাজানো n = (log2(c)-1)/5। সুতরাং যে কোনও কোড-পয়েন্টের জন্য, উপরের অভিব্যক্তিটি মূল্যায়ন করে এবং তারপরে সিলিং নিয়ে বাইটের সংখ্যা পাওয়া যাবে।

তবে এটি পরিসরে কোড পয়েন্টগুলির জন্য কাজ করে না 64 <= c <= 127, যেহেতু 11 বাইট অক্ষরের জন্য ASCII- এর মতো এনকোডিংয়ের কারণে প্যাডিংয়ের অভাবের অর্থ ভুল উপরের সীমাটি পূর্বাভাস দেওয়া হয়েছে, এবং log2এটি অপরিবর্তিত রয়েছে c = 0, যা যদি নাল বাইট হয় ইনপুট উপস্থিত। সুতরাং, যদি c <= 127, এর মান 1n এর জন্য ফেরত দেওয়া হয়।

কোডটি ঠিক এটি করছে; iস্ট্রিংয়ের প্রতিটি চরিত্রের জন্য x, কোড-পয়েন্টটি ordফাংশনটি ব্যবহার করে খুঁজে পাওয়া যায় এবং এক্সপ্রেশনটির সিলিংটি ভাসমান বিভাগের পরিবর্তে 5এবং তারপরে যোগ করার পরিবর্তে পূর্ণসংখ্যার ব্যবহার করে পাওয়া যায় 1। যেহেতু পাইথনের ফ্লোট টাইপটি সর্বদা পূর্ণসংখ্যা হিসাবে প্রতিনিধিত্ব করে x.0, এমনকি পূর্ণসংখ্যা বিভাগের পরেও ফলাফলটি intঅনুমান শূন্যটি অপসারণ করতে ফাংশনে পৌঁছে যায়। যদি ord(i) <= 127, যৌক্তিক শর্ট সার্কিটের অর্থ এটি 1পরিবর্তে ফিরে আসে। প্রতিটি অক্ষরের জন্য বাইট সংখ্যা একটি তালিকার উপাদান হিসাবে সংরক্ষণ করা হয় এবং এই তালিকাটি ফিরে আসে।


5

জাভা 10, 100 96 95 67 61 বাইট

a->{for(var c:a)System.out.print(c.getBytes("utf8").length);}

-4 কারণ স্পেস সরানোর বাইট এই মন্তব্যে অনুমতি দেওয়া হয়
-1 বাইট পরিবর্তন UTF-8করতে utf8
-28 জাভা 7 থেকে 8 (যাচ্ছে বাইট a->{...}পরিবর্তে void c(char[]i)throws Exception{...})
-3 স্ট্রিং-বিন্যস্ত পরিবর্তে চরিত্র-বিন্যস্ত, এবং ইনপুট গ্রহণ বাইট
-3 বাইট জাভা 8 থেকে 10 ( varপরিবর্তে String) থেকে যাচ্ছে

ব্যাখ্যা:

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

a->{                      // Method with String-array parameter and no return-type
  for(var c:a)            //  Loop over the input-array
    System.out.print(     //   Print:
      c.getBytes("utf8")  //    The bytes as array in UTF-8 of the current item,
       .length);}         //    and print the amount of bytes in this array

এটি নাল বাইট জন্য কাজ করে?
বিড়াল

@ কেট নাল-বাইটের জন্য পরীক্ষার কেসটি পরে যুক্ত করা হয়েছিল। তবে হ্যাঁ, এটি নাল-বাইটের জন্যও কাজ করে এবং আমি পরীক্ষার কেস যুক্ত করেছি।
কেভিন ক্রুইজসেন

3

জুলিয়া, 34 বাইট

s->s>""?map(sizeof,split(s,"")):[]

এটি একটি বেনাম ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং একটি পূর্ণসংখ্যার অ্যারে প্রদান করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

পদ্ধতিটি বেশ সোজা: যদি ইনপুট খালি থাকে তবে আউটপুট খালি থাকে। অন্যথায় আমরা sizeofফাংশনটি ম্যাপ করি , যা প্রতিটি স্ট্রিং-এর প্রতিটি স্ট্রাইটারে স্ট্রিংয়ের বাইটের সংখ্যা গণনা করে।

এটি অনলাইন চেষ্টা করুন! (সমস্ত পরীক্ষার কেস অন্তর্ভুক্ত)


s->[sizeof("$c")for c=s]কয়েক বাইট সাশ্রয়।
ডেনিস

বিজোড়; নেই split("","")ফিরে না []? (জাভাস্ক্রিপ্ট এর কাজ "".split("")করে।)
নিল

@ নীল দেবে split("","")বলে মনে হচ্ছে ""(পাইথনের বিপরীতে যা একটি ব্যতিক্রম দেয়) তবে আমি জুলিয়ার সামঞ্জস্যতা []এবং কিছুই জানিনা ""
বিড়াল

@ নীল নো, split("", "") == [""]অর্থাত্ খালি স্ট্রিং সম্বলিত একটি এক-এলিমেন্ট অ্যারে, তবে বিষয়টি হ'ল sizeof("") == 0, যা ওপি বলেছে তা অনুমোদিত নয়।
অ্যালেক্স এ।

@ ডেনিস যা আন-ইনডেক্সযোগ্য স্ট্রিংয়ের জন্য ব্যর্থ হবে। (যদিও অফেনড উদাহরণটি ভাবেন না।)
অ্যালেক্স এ।

3

পিএইচপি, 92 57 বাইট

দ্বিতীয় ভাবাতে আপনি প্রায় কম ফ্যালফিংয়ের মাধ্যমে এটি করতে পারেন:

<?php for(;$a=strlen(mb_substr($argv[1],$i++,1));)echo$a;

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

পুরানো সংস্করণ:
অন্যান্য পিএইচপি উত্তরের চেয়ে একটি পৃথক পদ্ধতির ব্যবহার করে। পিএইচপি-তে মাল্টি-বাইট স্ট্রিংয়ের নেটিভ সহায়তার অভাবের উপর নির্ভর করে।

<?php for($l=strlen($a=$argv[1]);$a=mb_substr($a,1);$l=$v)echo$l-($v=strlen($a));echo$l?:'';

চমৎকার উত্তর! আমার মনে হয় আপনি সম্পূর্ণরূপে খোলার ট্যাগ ড্রপ করতে পারেন, অথবা এটি পরিবর্তন<?=
বিড়াল

ট্যাগ ছাড়াই এটি একটি প্রোগ্রামের চেয়ে কোড স্নিপেট এবং এমনকি যদি এটি অনুমোদিত হয় তবে তা আমাকে অস্পষ্টভাবে মলিন মনে করে। বিকল্প ট্যাগের সাহায্যে আপনি একটি পার্সিং ত্রুটি পান (বা কমপক্ষে আমি পিএইচপি 5.5 এ করলাম যা আমি ব্যবহার করছি)।
ব্যবহারকারী 55641

ঠিক আছে :) আমি পিএইচপি জানি না (আমিও চাই না, কাশিও ) তবে আমি আপনাকে এখানে এখানে নির্দেশ করব: কোডগলফ.স্ট্যাকেক্সেঞ্জার
বিড়াল

3

ইমাস লিস্প, 55 49 বাইট

(lambda(s)(mapcar'string-bytes(mapcar'string s)))

প্রথমে অক্ষরগুলির তালিকায় স্ট্রিংটিকে বিচ্ছিন্ন করে (mapcar 'string s)stringএ গিয়ে Emacs পাতার মর্মর ফাংশন অক্ষরের একটি তালিকা নেয় ও সেগুলিকে বাইরে একটি স্ট্রিং তৈরী করে। ইমাকস যেভাবে স্ট্রিংগুলি বিভক্ত করে mapcar(অর্থাত্ অক্ষর বা স্ট্রিং নয়, পূর্ণসংখ্যার তালিকায় রয়েছে) এর কারণে এই সুস্পষ্ট রূপান্তরটি প্রয়োজন। তারপরে string-bytesস্ট্রিংগুলির তালিকায় ফাংশনটি মানচিত্র করুন ।

উদাহরণ:

(mapcar 'string "abc") ; => ("a" "b" "c")
(mapcar 'string-bytes '("a" "b" "c")) ; => (1 1 1) 

Testcases:

(mapcar
 (lambda(s)(mapcar'string-bytes(mapcar'string s)))
 '("!""Ciao""tʃaʊ""Adám""ĉaŭ""ĉaŭ""チャオ""""!±≡𩸽""\0"))
;; ((1) (1 1 1 1) (1 2 1 2) (1 1 2 1) (2 1 2) (1 2 1 1 2) (3 3 3) nil (1 2 3 4) (1))

পুরানো উত্তর:

(lambda(s)(mapcar(lambda(s)(string-bytes(string s)))s))

Ungolfed:

 (lambda (s)
   (mapcar
    ;; we can't use string-bytes directly,
    ;; since Emacs mapcar yields a list of ints instead of characters
    ;; therefore we need a wrapper function here. 
    (lambda (s)
      (string-bytes (string s)))
    s))

Testcases:

(mapcar
 (lambda(s)(mapcar(lambda(s)(string-bytes(string s)))s))
 '("!""Ciao""tʃaʊ""Adám""ĉaŭ""ĉaŭ""チャオ""""!±≡𩸽""\0"))
;; ((1) (1 1 1 1) (1 2 1 2) (1 1 2 1) (2 1 2) (1 2 1 1 2) (3 3 3) nil (1 2 3 4) (1))


nilআপনি ফলাফল চ্যাপ্টা হলে কি হবে ?
অ্যাডম

1
@ অ্যাডাম nilএকটি খালি তালিকা (এবং ইম্যাক্সে "মিথ্যা" বলার একমাত্র উপায়)। যদিও ইমাসগুলিতে কোনও স্ট্যান্ডার্ড ফ্ল্যাটেন নেই (আপনি ড্যাশগুলির ব্যবহার করতে পারেন -flatten) কোনও সম্ভাব্য বাস্তবায়ন এটি মুছে ফেলবে।
লর্ড ইউয়ুমা

3

জাভাস্ক্রিপ্ট (নোড), 27 বাইট

s=>s.map(Buffer.byteLength)

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

Bufferকাঁচা বাইনারি ডেটা উপস্থাপন করার একটি পদ্ধতি। বাফার.বাইটেলেনথ (স্ট্রিং) স্ট্রিংয়ে বাইট সংখ্যা দেয়। ইউটিএফ -8 হ'ল ডিফল্ট এনকোডিং। মনে রাখবেন যে কেবল নোড.জেজে ব্রাউজার জেএস নয়, বাফার রয়েছে। রুক্ষ ব্রাউজারের সমতুল্যকে ব্লব বলা হয় , এটি 31 বাইটে আসে:

s=>s.map(e=>new Blob([e]).size)

পরীক্ষা

এই ফাইলটি সংরক্ষণ করুন এবং এটিকে নোডের মাধ্যমে চালান বা অনলাইনে চেষ্টা করুন

var f =
  s=>s.map(Buffer.byteLength)

var tests = [
  ["!"],
  ["C","i","a","o"],
  ["t","ʃ","a","ʊ"],
  ["A","d","á","m"],
  ["ĉ","a","ŭ"],
  ["c","̂","a","u","̆"],
  ["チ","ャ","オ"],
  [],
  ["!","±","≡","𩸽"]
];

tests.forEach(test => {
  console.log(test, f(test));
});

এটির ফলাফল হওয়া উচিত:

$ node bytes.js
[ '!' ] [ 1 ]
[ 'C', 'i', 'a', 'o' ] [ 1, 1, 1, 1 ]
[ 't', 'ʃ', 'a', 'ʊ' ] [ 1, 2, 1, 2 ]
[ 'A', 'd', 'á', 'm' ] [ 1, 1, 2, 1 ]
[ 'ĉ', 'a', 'ŭ' ] [ 2, 1, 2 ]
[ 'c', '̂', 'a', 'u', '̆' ] [ 1, 2, 1, 1, 2 ]
[ 'チ', 'ャ', 'オ' ] [ 3, 3, 3 ]
[] []
[ '!', '±', '≡', '�' ] [ 1, 2, 3, 4 ]

3

বাশ, 74 বাইট

Golfed

xxd -p|fold -2|cut -c1|tr -d '89ab'|echo `tr -t '01234567cbef' '[1*]2234'`

অ্যালগরিদম

হেক্সডাম্প ইনপুট স্ট্রিং, প্রতি লাইন 2 টি ভাঁজ করুন, কেবল প্রথম চরটি কাটা

echo -ne '!±≡𩸽' | xxd -p|fold -2|cut -c1

2
c
b
e
8
a
f
a
b
b

(হেক্স চর হিসাবে প্রতিটি ইনপুট বাইটের 4 টি হাই অর্ডার বিট, প্রতি লাইনে একটি)

"ধারাবাহিকতা বাইটস" 0x80..0xBF সরান

tr -d '89ab'

2
c

e


f

(যা বাকি আছে, তা প্রতিটি ইউনিকোড চরের প্রথম বাইটের 4 টি বিট)

প্রথম বিটকে চরের দৈর্ঘ্যে মানচিত্র করুন, আউটপুটটি সঙ্কুচিত করুন এবং মুদ্রণ করুন

echo `tr -t '01234567cbef' '[1*]2234'`

1 2 3 4

পরীক্ষা

 U() { xxd -p|fold -2|cut -c1|tr -d '89ab'|echo `tr -t '01234567cbef' '[1*]2234'`;}

 echo -ne '!' | U 
 1

 echo -ne 'Ciao' | U
 1 1 1 1

 echo -ne 'tʃaʊ' | U
 1 2 1 2

 echo -ne 'Adám' | U
 1 1 2 1

 echo -ne 'ĉaŭ' | U
 2 1 2

 echo -ne 'ĉaŭ' | U
 1 2 1 1 2

 echo -ne 'チャオ' | U
 3 3 3
 echo -ne '!±≡𩸽' | U
 1 2 3 4

 echo -ne "\x0" | U
 1

 echo -ne '' | U

+1 সুন্দর পন্থা। আপনি আসলে ফলাফলটি সরাসরি ইনপুট থেকে পড়েছেন read
অ্যাডম

-tবিকল্প trআমার কাছে অপরিচিত ছিল, এবং দৃশ্যত একটি গনুহ এক্সটেনশান। কমান্ড প্রতিস্থাপনের পরে পাইপ দেওয়া echoকিছুটা বিশদ বিশদ ব্যাখ্যারও হতে পারে।
ট্রিপলি


2

সি #, 89 82 বাইট

I=>{var J="";foreach(char c in I){J+=Encoding.UTF8.GetByteCount(c+"");}return J;};

একটি সাধারণ সি # ল্যাম্বদা যা স্ট্রিংটির মাধ্যমে পুনরাবৃত্তি করে এবং স্থানটি পৃথক করা তালিকা প্রদান করে।

সম্পাদনা করুন: কিছু খুব সুন্দর মন্তব্যের জন্য 6 বাইট সংরক্ষণ করা হয়েছে।


আপনি নিশ্চিতভাবেই পারবেনvar J="";...
বিড়াল

এছাড়াও, ওপিতে একটি মন্তব্যে বলা হয়েছে যে আপনার আউটপুটটিকে আলাদা করার দরকার নেই 1121এবং 1 2 1 2উভয়ই ঠিক আছে
বিড়াল

1
@ কেট ধন্যবাদ, আমাকে 6 বাইট সংরক্ষণ করেছেন
অ্যাস্ট্রোডান

এছাড়াও, আপনার একটি অতিরিক্ত স্থান আছে} return J;};
বিড়াল

দেখে মনে হচ্ছে আপনার প্রয়োজন using System.Textবা আশেপাশের জায়গা - আমদানি নিখরচায় নয়।
বিড়াল

2

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

import Data.ByteString as B
import Data.ByteString.UTF8
(B.length.fromString.pure<$>)

কিছুটা দেরি হলেও এটি আরও ছোট হবেmap$...
এইচ.পি.উইজ


1

সি, 85 বাইট।

l(unsigned char* c){while(*c){int d=(*c>>4)-11;
d=d<0?1:d+(d==1);putchar(48+d);c+=d;}}

এনকোডিং নির্ধারণ করতে প্রতিটি বাইটের উচ্চ 4 বিট এবং এড়িয়ে যাওয়ার পরবর্তী বাইটের সংখ্যা পরীক্ষা করে;


এটি কি নাল বাইটে কাজ করে?
বিড়াল

হ্যাঁ, while *c একটি খালি স্ট্রিংয়ে প্রস্থান করা হয় এবং একাধিক বাইট কোডপয়েন্টের মাঝখানে নালাগুলি ছেড়ে যায়। C + = d '।
আশেল্লি

1
এটা ভুল। char*সি এর একটি স্ট্রিংয়ের শেষে ( সত্যই) একটি নাল বাইট দিয়ে চিহ্নিত করা হয়। স্ট্রিংয়ের আসল প্রান্ত থেকে নাল বাইটের পার্থক্য করা অসম্ভব।
ডেনিস

@ ডেনিস অবিকল কারণ কোনও পার্থক্য নেই :)
বিড়াল

1
ওপি একটি মন্তব্যে (এবং এটি এখন পোস্টে) বলেছেন যে আপনি আর্গুমেন্ট হিসাবে স্ট্রিটের দৈর্ঘ্যের জন্য বাইটগুলিতে অনুরোধ করতে পারেন, তাই করুন এবং এটি আবার বৈধ হবে
বিড়াল

1

ফ্যাক্টর, 57 87 82 80 বাইট

[ [ dup zero? [ drop "1"] [ >bin length 4 /i 10 >base ] if ] { } map-as ""join ]

ব্যাখ্যা:

USING: kernel math math.parser sequences ;
IN: byte-counts

: string>byte-counts ( str -- counts )
  [                  ! new quotation: takes a char as a fixnum
    dup zero?        ! true if this is a NUL byte
    [ drop "1" ]     ! NUL bytes have length 1
    [ >bin           ! else, convert to binary string
      length         ! length of binary string
      4              ! the constant 4
      /i             ! integer division
      number>string  ! 4 -> "4"
    ] if             ! conditionally execute one of the previous quotations
  ]                  ! end
  { } map-as         ! map and clone-like an { } array
  "" join ;          ! join array of 1strings on empty string

ইউনিট পরীক্ষা:

USING: tools.test byte-counts ;
IN: byte-counts.tests

{ "1" } [ "!" string>byte-counts ] unit-test
{ "1111" } [ "Ciao" string>byte-counts ] unit-test
{ "1212"} [ "tʃaʊ" string>byte-counts ] unit-test
{ "1121" } [ "Adám" string>byte-counts ] unit-test
{ "212" } [ "ĉaŭ" string>byte-counts ] unit-test
{ "12112" } [ "ĉaŭ" string>byte-counts ] unit-test
{ "333" } [ "チャオ" string>byte-counts ] unit-test
{ "" } [ "" string>byte-counts ] unit-test
{ "1234" } [ "!±≡𩸽" string>byte-counts ] unit-test
{ "1" } [ "\0" string>byte-counts ] unit-test

তারা এখন পাস। C:


1

সুইফট 2.2, 67 52 50 বাইট

for c in i.characters{print(String(c).utf8.count)}

ভীষণ কুৎসিত সুইফটে একটি চরিত্রের ইউটিএফ -8 দৈর্ঘ্য পাওয়ার কোনও উপায় নেই, সুতরাং আমাকে অক্ষর অনুসারে স্ট্রিংটির মাধ্যমে পুনরাবৃত্তি করতে হবে, একটিকে রূপান্তর করতে Characterহবে Stringএবং countসেই একক অক্ষরটির সন্ধান করতে হবে String(আরে, কমপক্ষে অন্তর্নির্মিত আছে) পদ্ধতিটি করতে হবে)। অপ্টিমাইজেশন খুঁজছেন, সম্ভবত একটি স্ক্যানার ব্যবহার করে।

পুনর্বিবেচনা 1: countপরিবর্তে 15 টি বাইট ব্যবহার করে সংরক্ষণ করা হয়েছে underestimateCount()

সংশোধনী 2: প্রতিটি বন্ধের পরিবর্তে ইন-লুপ ব্যবহার করে আরও 2 টি চরিত্র সংরক্ষণ করা হয়েছে।


1

মরিচা, 53 বাইট

|s:&str|for c in s.chars(){print!("{}",c.len_utf8())}

মরিচায় utf-8 চর আদিম, পুনরাবৃত্তকারী এবং ল্যাম্বডাস রয়েছে, তাই এটি সোজা ছিল। পরীক্ষার কোড:

fn main() {
    let s = "Löwe 老虎 Léopard💖💖💖💖";
    let f =|s:&str|for c in s.chars(){print!("{}",c.len_utf8())};
    f(s);
}

আউটপুট

1211133112111114444 

1

jq, 26 টি অক্ষর

(২৩ টি অক্ষরের কোড + 3 অক্ষর কমান্ড লাইন বিকল্প)

(./"")[]|utf8bytelength

আশা করছি প্রতিযোগিতা। যদিও এই প্রশ্নের 9++ মাস আগে যুক্ত করাutf8bytelength হয়েছিল , এটি এখনও প্রকাশিত সংস্করণে অন্তর্ভুক্ত নেই।

নমুনা রান:

bash-4.3$ ./jq -R '(./"")[]|utf8bytelength' <<< 'tʃaʊ'
1
2
1
2

bash-4.3$ ./jq -R '(./"")[]|utf8bytelength' <<< 'ĉaŭ '
1
2
1
1
2
1

bash-4.3$ ./jq -R '(./"")[]|utf8bytelength' <<< 'チャオ'
3
3
3

bash-4.3$ ./jq -R '(./"")[]|utf8bytelength' <<< ''

bash-4.3$ ./jq -R '(./"")[]|utf8bytelength' <<< '!±≡𩸽'
1
2
3
4


1

স্মাইলব্যাসিক, 69 বাইট

DEF C B
WHILE I<LEN(B)Q=INSTR(BIN$(B[I],8),"0")I=I+Q+!Q?Q+!Q
WEND
END

ইনপুট হ'ল বাইটের অ্যারে।

কোনও ইউটিএফ -8 চরিত্রের বাইটের সংখ্যা 1প্রথম বাইটের শীর্ষস্থানীয় বিটের সংখ্যার সমান (যদি কোনও 1এস না থাকে তবে এই ক্ষেত্রে অক্ষরটি 1 বাইট)। শীর্ষস্থানীয় 1 এর সংখ্যা খুঁজতে, প্রোগ্রামটি 0বাইনারি উপস্থাপনায় প্রথমটি খুঁজে পায় , তারপরে এটি 0 হলে 1 যুক্ত করে।

0xxxxxxx - no leading ones, 1 byte
110xxxxx 10xxxxxx - 2 leading ones, 2 bytes
1110xxxx 10xxxxxx 10xxxxxx - 3 leading ones, 3 bytes
etc.

1

এফ #, 59 54 66 বাইট

(s)=seq{for c in s->System.Text.Encoding.UTF8.GetByteCount([|c|])}

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

!±≡𩸽কনসোলটিতে এটি পরীক্ষা করার সময় , এটি কাঁঞ্জিকে দুটি অক্ষরে বিভক্ত করে, প্রতিটি 3 বাইট দীর্ঘ। অন্যান্য সমস্ত পরীক্ষার কেস ঠিকঠাক কাজ করে।

সম্পাদনা: এটি সাধারণ নেমস্পেসের আমদানিকে অন্তর্ভুক্ত নয় turns আরও 12 টি চর করুন।


1) টিমি ডি এর পাওয়ারশেলের উত্তরে একই-প্রতি- কাঁজি 6 বাইট-বাইট রয়েছে। উইন্ডোজটি ইউনিকোডে বোবা এবং অকেজো হওয়ার কারণে আমি এটির জন্য দায়ী করব। 2) যদি এনজিওড করা কোনও ফাইল থেকে পড়ার সময় আপনি কান্জির জন্য 6 বাইট পান UTF-8 without BOMতবে এটি ভুল এবং এটি ঠিক করা উচিত। 3) এফ # এর মতো এসএমএলের মত let f(x)= ...শেষ হওয়া চাই স্টেটমেন্টের ;;মতো লাগে। 4) আপনি এই বেনামী ফাংশন একটি নাম, অর্থাত বরাদ্দ বন্ধ চলে যাবে (s)=seq{for c in s->Encoding.UTF8.GetByteCount([|c|])}
বিড়াল

error FS0039: The namespace or module 'Encoding' is not definedএটি চালানোর চেষ্টা করার সময় আমিও পাই । আমি কি ভুল করছি?
বিড়াল

এছাড়াও, প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ এ আপনাকে স্বাগতম, এটি একটি দুর্দান্ত প্রথম উত্তর! : ডি
বিড়াল

@ কেট আপনার System.Textনাম স্থান খোলার দরকার । আমি ধরে নিচ্ছি যে অ্যাস্ট্রোড্যানের সি # উত্তর থেকে নেমস্পেস খোলে এবং এন্ট্রি কোড অন্তর্ভুক্ত রয়েছে।
সিল করা ইন্টারফেস

যদি আপনার কোন বাইট গণনা প্রয়োজন import, #include, open, load, require, using, USING:ইত্যাদি PPCG এখানে। অ্যাস্ট্রোডানের সি # উত্তর একইভাবে ভ্রান্ত এবং আমি তাদের সে সম্পর্কে অবহিত করেছি।
বিড়াল

1

05 এ বি 1 ই , 15 বাইট

ÇεDžy‹i1ë.²<5÷>

এটি অনলাইনে চেষ্টা করুন।
শিরোনামεসমস্ত পরীক্ষার ক্ষেত্রে প্রত্যেকের জন্য ব্যবহৃত হয়; আউটপুট অক্ষর-তালিকাগুলি সুন্দরভাবে মুদ্রণের জন্য
পাদচরণï]J]»(ï: দশমিক দশমিক এবং পূর্ণসংখ্যার অক্ষর;:]যদি-অন্যটি এবং প্রত্যেকের জন্যবন্ধ করুন:Jএকসাথে অঙ্কগুলিতে যোগ দিন};: শিরোনামের পূর্বাভাস বন্ধ»করুন: নতুন পংক্তিতে যোগদান করুন)।

ব্যাখ্যা:

Ç                   # Convert each character to its unicode value
 εD                 # Foreach over this list
      i             #  If the current item
     ‹              #  is smaller than
   žy               #  128
       1            #   Use 1
        ë           #  Else
         .²         #   Use log_2
           <        #   minus 1
            5÷      #   integer-divided by 5
              >     #   plus 1

যেহেতু 05AB1E এর অক্ষরকে ব্যবহৃত বাইটের পরিমাণে রূপান্তর করতে কোনও বিল্টইনস নেই, তাই আমি Çঅক্ষরগুলিকে তাদের ইউনিকোড মানগুলিতে রূপান্তর করতে ব্যবহার করি এবং প্রত্যেকটির জন্য নিম্নলিখিতটি সিউডো কোডে করি:

if(unicodeValue < 128)
  return 1
else
  return log_2(unicodeValue-1)//5+1    # (where // is integer-division)

@ দ্য বাইকিংভিাইকিংয়ের পাইথন 3 উত্তর দ্বারা অনুপ্রাণিত ।


0

Zsh , 41 বাইট

for c (${(s::)1})set +o multibyte&&<<<$#c

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

জেডএসটি ইউটিএফ -8 সচেতন, তাই আমরা অক্ষরগুলিতে স্ট্রিংটি বিভক্ত করি, তারপরে মাল্টিবাইট অক্ষম করে প্রতিটি অক্ষরের দৈর্ঘ্য মুদ্রণ করি।

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