একটি প্রোগ্রামের বাইটগুলি গণনা করুন


21

নোট 2: আমি @DigitalTrauma6-বাইট দীর্ঘ উত্তর গ্রহণ করেছি। যদি কেউ মারতে পারে তবে আমি গৃহীত উত্তরটি পরিবর্তন করব। খেলার জন্য ধন্যবাদ!

দ্রষ্টব্য: আমি 10/14/15 এএমএসটি সন্ধ্যা 6:00 টায় একটি উত্তর গ্রহণ করব। অংশগ্রহণকারী সবাইকে ধন্যবাদ!

আমি খুব অবাক হয়েছি যে এটি এখনও জিজ্ঞাসা করা হয়নি (বা আমি যথেষ্ট চেষ্টা করে নি)। যেভাবেই হোক, এই চ্যালেঞ্জটি খুব সহজ:

ইনপুট: স্ট্রিং আকারে একটি প্রোগ্রাম। অতিরিক্তভাবে, ইনপুটটিতে থাকতে পারে বা নাও থাকতে পারে:

  • শীর্ষস্থানীয় এবং পিছনে স্থান
  • ট্রেলিং নিউলাইন
  • নন-এএসসিআইআই অক্ষর

আউটপুট: দুটি পূর্ণসংখ্যা, একটি ইউটিএফ -8 চরিত্রের গণনা উপস্থাপন করে এবং একটি বাইট গণনা উপস্থাপন করে, আপনি কোন আদেশটি চয়ন করতে পারেন। চলমান নিউলাইনগুলি অনুমোদিত are আউটপুট STDOUT এ বা কোনও ফাংশন থেকে ফিরে আসতে পারে। যতক্ষণ না দুটি সংখ্যা একে অপরের থেকে পৃথক হয় (2327 বৈধ আউটপুট নয়) এটি কোনও বিন্যাসে থাকতে পারে।

নোট:

  • আপনি নতুন হিসাবে \nবা হিসাবে বিবেচনা করতে পারেন \r\n
  • আপনার পরীক্ষাগুলির জন্য এখানে একটি দুর্দান্ত বাইট এবং চরিত্রের কাউন্টার । এছাড়াও, এখানে একই জিনিস সহ একটি মেটা পোস্ট রয়েছে (@ জেরেজেসকে ধন্যবাদ)।

নমুনা I / O: (সমস্ত আউটপুট ফর্মটিতে রয়েছে {characters} {bytes})

ইনপুট: void p(int n){System.out.print(n+5);}

আউটপুট: 37 37

ইনপুট: (~R∊R∘.×R)/R←1↓ιR

আউটপুট: 17 27

ইনপুট:


friends = ['john', 'pat', 'gary', 'michael']
for i, name in enumerate(friends):
    print "iteration {iteration} is {name}".format(iteration=i, name=name)

আউটপুট: 156 156

এটি কোড গল্ফ - বাইট জেতে সংক্ষিপ্ততম কোড !

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট।

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

# 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

var QUESTION_ID=60733,OVERRIDE_USER=36670;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


আউটপুট কি স্থান-পৃথক হতে হবে?
মালটিসেন

না, এটি যতক্ষণ না একে অপরের থেকে পৃথক হয়ে যায় ততক্ষণ এটি কোনও ফর্ম্যাটে থাকতে পারে (2327 বৈধ আউটপুট নয়)
গামার কর্পস

এমন কিছু ইউটিএফ -8 অক্ষর নেই যা ব্যাখ্যার উপর নির্ভর করে একই বাইট মান তৈরি করে এমন দুটি অন্যান্য অক্ষরে বিভক্ত হতে পারে? আমরা কিভাবে তাদের গণনা করব?
প্যাট্রিক রবার্টস

সত্যি বলতে কী, আপনি কী বলতে চাইছেন তা আমি জানি না। অতএব, আপনি চান হিসাবে গণনা।
GamrCorps

@ গ্যামারকর্পস ইউটিএফ -8 অক্ষরগুলির মধ্যে নন-এএসসিআইআই অক্ষর রয়েছে, যা মূলত এমন অক্ষর যা একটি বাইট দ্বারা প্রতিনিধিত্ব করা যায় না তবে অবশ্যই দুটি বা চারটি বাইট দ্বারা প্রতিনিধিত্ব করতে হবে। একটি প্রোগ্রামের মাধ্যমে অক্ষরগুলি কীভাবে পড়তে হবে তার উপর নির্ভর করে কীভাবে বাইটগুলির প্রবাহটি ব্যাখ্যা করা যায় তা চয়ন করা প্রোগ্রামের উপর নির্ভর করে। উদাহরণস্বরূপ, একটি 2 বাইট ইউটিএফ -8 2 টি অনুক্রমিক ASCII অক্ষর হিসাবে ব্যাখ্যা করা যেতে পারে যার মধ্যে দুটিই বাইট দ্বারা প্রদর্শিত হয় যা মূলত উদ্দিষ্ট চরিত্রটি তৈরি করে।
প্যাট্রিক রবার্টস

উত্তর:


32

শেল + কোর্টিলস, 6

এই উত্তরটি অবৈধ হয়ে যায় যদি ইউটিএফ -8 ব্যতীত অন্য কোনও এনকোডিং ব্যবহার করা হয়।

wc -mc

পরীক্ষার আউটপুট:

$ printf '%s' "(~R∊R∘.×R)/R←1↓ιR" | ./count.sh 
     17      27
$ 

যদি আউটপুট ফর্ম্যাটটি কঠোরভাবে প্রয়োগ করা হয় (দুটি পূর্ণসংখ্যা পৃথক করে কেবল একটি স্থান), তবে আমরা এটি করতে পারি:

শেল + কোর্টিলস, 12

echo`wc -mc`

এর পরে স্থানটি সরিয়ে দেওয়ার পরামর্শ দেওয়ার জন্য @ মিম্বিসকে ধন্যবাদ echo। এটি নির্ধারণ করতে আমার কিছুটা সময় লেগেছিল - শেলটি এটিতে প্রসারিত হবে echo<tab>n<tab>mএবং ডিফল্টরূপে ট্যাবগুলি রয়েছে $IFS, ফলে প্রাপ্ত কমান্ডটিতে পুরোপুরি আইনী টোকেন বিভাজক রয়েছে।


13
কাজের জন্য অবশ্যই সঠিক সরঞ্জাম।
অ্যালেক্স এ

1
আপনি কি "প্রতিধ্বনি" পরে স্থানটি সরাতে পারবেন?
ব্যবহারকারী 253751

@ মিমিবিস হ্যাঁ - দুর্দান্ত - এখনই কীভাবে এটি কাজ করে তা আমি দেখতে পেলাম না।
ডিজিটাল ট্রমা

21

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

.,p{64/2^},,

এটি ওয়েব গল্ফস্ক্রিপ্টে অনলাইনে চেষ্টা করুন ।

ধারণা

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

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

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

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

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

ইনপুট সব বাইট বিভাজক দ্বারা 64 , আমরা চালু 0xxxxxxxমধ্যে 0 বা 1 , 11xxxxxxমধ্যে 310xxxxxxমধ্যে 2 । যা বাকী রয়েছে তা বাইটগুলি গণনা করতে হবে যার ভাগফল 2 নয় 2

কোড

                (implicit) Read all input and push it on the stack.
.               Push a copy of the input.
 ,              Compute its length (in bytes).
  p             Print the length.
   {     },     Filter; for each byte in the original input:
    64/           Divide the byte by 64.
       2^         XOR the quotient with 2.
                If the return is non-zero, keep the byte.
           ,    Count the kept bytes.
                (implicit) Print the integer on the stack.

9

পাইথন, 42 40 বাইট

lambda i:[len(i),len(i.encode('utf-8'))]

দুটি বাইট অফের জন্য অ্যালেক্স এ-কে ধন্যবাদ।

সোজা, যা বলে তাই করে। যুক্তি সহ i, ইউটিএফ -8 এর iদৈর্ঘ্য, তারপরে দৈর্ঘ্য মুদ্রণ করে i। নোট করুন যে মাল্টলাইন ইনপুট গ্রহণ করতে, ফাংশন আর্গুমেন্টটি ট্রিপল কোট দ্বারা ঘিরে থাকা উচিত : '''.

সম্পাদনা: এটি মাল্টলাইন ইনপুটটির জন্য কাজ করে না, সুতরাং আমি কেবল এটির পরিবর্তে এটি একটি ফাংশন করেছি।

কিছু পরীক্ষার কেস (ফাঁকা নিউলাইন দ্বারা পৃথক):

f("Hello, World!")
13 13

f('''
friends = ['john', 'pat', 'gary', 'michael']
for i, name in enumerate(friends):
    print "iteration {iteration} is {name}".format(iteration=i, name=name)
''')
156 156

f("(~R∊R∘.×R)/R←1↓ιR")
17 27

এবং এখানে এই সমস্ত সময় আমি একটি স্তন্যপায়ী মত শুধু লেন () ব্যবহার করে আসছি। এটি পরিষ্কারভাবে উচ্চতর।
স্থিতি

3
যেহেতু আউটপুট কোনও ফাংশন থেকে ফিরে পাওয়া যায়, আপনি এটি তৈরি করে কয়েকটি বাইট সংরক্ষণ করতে পারেন lambda i:[len(i),len(i.encode('utf-8'))]
অ্যালেক্স এ

@AlexA। ঠিক আছে, পরিবর্তন হচ্ছে। লাম্বদা এর আগে কখনও স্পর্শ করেনি।
The_Basset_Hound

1
আপনার ল্যাম্বদা বেশ সঠিকভাবে গঠিত হয়নি isn't আপনি যদি এটি একটি সংজ্ঞা দেন তবে তা হবে f=lambda i:[len(i),len(i.encode('utf-8'))]তবে আপনি যেহেতু একটি বেনাম ল্যাম্বদা ফাংশন ব্যবহার করছেন তাই এটি হওয়া উচিত lambda i:[len(i),len(i.encode('utf-8'))]
কেড

1
আপনার সাথে একটি কয়েক বাইট সংরক্ষণ করতে পারবেন U8পরিবর্তেutf-8
মেগো

5

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

s->(length(s),sizeof(s))

এটি একটি ল্যাম্বদা ফাংশন তৈরি করে যা একটি পূর্ণসংখ্যার দ্বিগুণ দেয়। lengthফাংশন, একটি স্ট্রিং উপর বলা হয়, অক্ষরের সংখ্যা ফেরৎ। sizeofফাংশন ইনপুট বাইট সংখ্যার উল্লেখ করে।

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



3

পাইথ - 12 9 বাইট

খাটো করার চেষ্টা করবে।

lQh/l.BQ8

টেস্ট স্যুট


এটি ইউটিএফ -8 বাইট গণনার জন্য খুব বেশি একটি বাইট দেয়। এটি বর্তমানে floor(… / 8) + 1, হওয়া উচিতceil(… / 8)
PurkkaKoodari

এটি আমাকে একটি বাগ ধরতে সহায়তা করেছে .B। এছাড়াও, lQlc.BQ81 বাইট সংরক্ষণ করার সময় @ Pietu1998 উল্লেখ করা বাগটি ঠিক করে ফেলেছে বলে আমি মনে করি।
ইসাকাক

3

জাভা, 241 90 89 বাইট

int[]b(String s)throws Exception{return new int[]{s.length(),s.getBytes("utf8").length};}

প্রেম করুন যে আপনি জাভাটি 100 বাইটের নিচে পেয়েছেন।
GamrCorps

ঠিক আছে, এটি কেবল একটি পদ্ধতি ...
সুপারজেডি 224

1
আপনি পরিবর্তন getBytes("UTF-8")করতে পারে getBytes("utf8")। আর কেন throws Exception?
রেন্ডারস 100

কারণ UnsupportedEncodingExceptionআপনি যখন এটি একটি অবৈধ এনকোডিংয়ের নাম দিবেন তখন getBytes একটি ছুড়ে ফেলে ।
সুপারজেডি ২৪



2

আর, 47 বাইট

a<-commandArgs(TRUE);nchar(a,"c");nchar(a,"b")

ইনপুট: (~R∊R∘.×R)/R←1↓ιR

আউটপুট:

[1] 17
[2] 27

যদি আউটপুট বরাবর লাইন সংখ্যা মুদ্রণ তখন "কোনও বিন্যাস" এর অধীনে অনুমোদিত না হয় cat তবে সমস্যাটি সমাধান করতে পারবেন:

আর, 52 বাইট

a<-commandArgs(TRUE);cat(nchar(a,"c"),nchar(a,"b"))

ইনপুট: (~R∊R∘.×R)/R←1↓ιR

আউটপুট: 17 27


একটি ফাংশন হিসাবে, 39 বাইট:function(s)c(nchar(s,"c"),nchar(s,"b"))
অ্যালেক্স এ।

1
এছাড়াও শুধু কিছু সাধারণ আর golfing টিপস: আপনি ব্যবহার করতে পারেন Tস্থানে TRUE, =স্থানে <-, এবং ইনপুট থেকে আসতে পারে scan, readlineঅথবা function, সব যা চেয়ে খাটো commandArgs
অ্যালেক্স এ।

1

মিল্কিওয়ে ওয়ে 1.6.2 , 7 বাইট (প্রতিদ্বন্দ্বী)

':y!^P!

ব্যাখ্যা

'        ` read input from the command line
 :       ` duplicate the TOS
  y      ` push the length of the TOS
   !  !  ` output the TOS
    ^    ` pop the TOS
     P   ` push the length of the TOS in bytes

ব্যবহার

./mw <path-to-code> -i <input>

চ্যালেঞ্জটি ভাষাটির পূর্বে যেহেতু আমি এটিকে প্রতিযোগী হিসাবে চিহ্নিত করেছি as
মেগো


1

ব্রেইনফাক, 163 বাইট

,[>+<,]>[>>+>+<<<-]>>>[<<<+>>>-]<<+>[<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++++[<++++++>-]>[<<+>>-]>[<<+>>-]<<]>]<[->>++++++++[<++++++>-]]<[.[-]<]<

পাঠযোগ্যতার জন্য লাইনব্রেক সহ:

,[>+<,]>
[>>+>+<<<-]>>>[<<<+>>>-]<<+>[<->[
>++++++++++<[->-[>+>>]>[+[-<+>]>.
+>>]<<<<<]>[-]++++++++[<++++++>-
]>[<<+>>-]>[<<+>>-]<<]>]<[->>+++++
+++[<++++++>-]]<[.[-]<]<

সবচেয়ে গুরুত্বপূর্ণ অংশটি প্রথম লাইন line এটি ইনপুট করা অক্ষরের সংখ্যা গণনা করে। বাকি 9 টিরও বেশি সংখ্যক মুদ্রণের জন্য প্রয়োজনীয় দীর্ঘ জঙ্ক।

সম্পাদনা: যেহেতু বিএফ 1-255 থেকে ASCII সংখ্যা ব্যতীত অন্য কোনও ইনপুট / আউটপুট দিতে পারে না, ইউটিএফ -8 অক্ষর পরিমাপ করার উপায় নেই।


দেখে মনে হচ্ছে এটি আরও গল্ফ করা যেতে পারে। তবে এটি সম্ভবত পারে না। +1 টি।
wizzwizz4

0

মোম, 99 87 বাইট

আরও কমপ্যাক্ট সংস্করণ, প্রথমটির চেয়ে 12 বাইট সংক্ষিপ্ত:

p~5~q")~4~p")~7~g?<
>)'qq>@PPq>@Pp>Ag'd@{
     >@PPPq  @dNp"?{gAV_
     >@PPPP>@>?b>N{;

একই, ষড়ভুজ লেআউট অনুসরণ করা যত সহজ:

 p ~ 5 ~ q " ) ~ 4 ~ p " ) ~ 7 ~ g ? <
> ) ' q q > @ P P q > @ P p > A g ' d @ {
         > @ P P P q     @ d N p " ? { g A V _ 
        > @ P P P P > @ > ? b > N { ;

আউটপুট হিসাবে characters, তারপরbytecount , একটি newline দ্বারা পৃথক।

উদাহরণ: sলাইনের শুরুতে ছোট অক্ষরটি কেবল ব্যবহারকারীকে বলে যে প্রোগ্রামটি ইনপুট হিসাবে একটি স্ট্রিং চায়।

julia> beeswax("utf8bytecount.bswx")
s(~R∊R∘.×R)/R←1↓ιR
17
27
Program finished!

খালি স্ট্রিং উদাহরণ:

julia> beeswax("utf8bytecount.bswx")
s
0
0
Program finished!

বীসফ্যাক্স একটি স্ট্রিংয়ের অক্ষরকে ধাক্কা দেয় যা STDIN এ গ্লোবাল স্ট্যাকের উপরে প্রবেশ করে, তাদের ইউনিকোড কোড পয়েন্টের মান হিসাবে কোডড।

আরও সহজে বোঝার জন্য, উপরের প্রোগ্রামটির মোড়কানো সংস্করণটি এখানে:

             >@{;    >@P@p >@PP@p>@P p
_VAg{?"pN>Ag"d?g~7~)"d~4~)"d~5~)"d@PPp
    ;{N< d?              <      < @PP<

এই উদাহরণস্বরূপ, অক্ষরটি αSTDIN এ প্রবেশ করা হয়েছে (কোড পয়েন্ট U+03B1, দশমিক 945:)

                                        gstack     lstack

_VA                                     [945,1]•   [0,0,0]•    enter string, push stack length on top of gstack
   g                                               [0,0,1]•    push gstack top value on top of local stack (lstack)
    {                                                          lstack 1st value to STDOUT (num. of characters)
     ?                                  [945]•                 pop gstack top value
      "                                                        skip next if lstack 1st >0
        N>                                                     print newline, redirect to right
          Ag                            [945,1]•   [0,0,1]•    push gstack length on top of gstack, push that value on lstack.
            "                                                  skip if lstack 1st > 0
              ?                         [945]•                 pop gstack top value
               g                                   [0,0,945]•  push gstack top value on lstack
                ~                                  [0,945,0]•  flip lstack 1st and 2nd
                 7                                 [0,945,7]•  lstack 1st=7
                  ~                                [0,7,945]•  flip lstack 1st and 2nd
                   )                               [0,7,7]•    lstack 1st = lstack 1st >>> 2nd  (LSR by 7)
                    "                                          skip next if top >0
                      ~4~)                         [0,0,0]•            flip,1st=4,flip,LSR by 4
                          "d                                   skip next if top >0... redirect to upper right
                           >@                                  redirect to right, flip lstack 1st and 3rd
                             PP@                   [2,0,0]•    increment lstack 1st twice, flip 1st and 3rd
                                p                              redirect to lower left
                                "                              (ignored instruction, not relevant)
         d?              <      <       []•                       redirect to left... pop gstack, redirect to upper right

         >Ag"d                          [0]•       [2,0,0]•    redir. right, push gstack length on gstack
                                                               push gstack top on lstack, skip next if lstack 1st > 0
                                                               redir. to upper right.
         >@                                        [0,0,2]•    redir right, flip lstack 1st/3rd
           {;                                                  output lstack 1st to STDOUT, terminate program

মূলত, এই প্রোগ্রামটি 1-বাইট, 2-বাইট, 3-বাইট এবং 4-বাইট কোডপয়েন্ট সীমাতে প্রতিটি কোডপয়েন্ট মান পরীক্ষা করে।

যদি nকোডপয়েন্ট মান হয় তবে যথাযথ ইউটিএফ -8 স্ট্রিংয়ের জন্য এই সীমাগুলি হ'ল:

codepoint 0...127         1-byte: n>>>7 = 0
          128...2047      2-byte: n>>>11= 0  → n>>>7>>>4
          2048...65535    3-byte: n>>>16= 0  → n>>>7>>>4>>>5
          65535...1114111 4-byte: the 3 byte check result is >0

আপনি সংখ্যা জানতে পারেন 7, 4এবং 5উপরে কোডে পরিবর্তন নির্দেশাবলীর জন্য। যদি কোনও চেকের ফলাফল আসে 0তবে লাস্টাকের কাউন্টারটি প্রবেশ করা স্ট্রিংয়ের বাইটের সংখ্যা যথাযথভাবে বাড়িয়ে তোলা হবে। দ্য@PP...@নির্মান বাইট পাল্টা বাড়ায়। প্রতিটি টেলির পরে, শীর্ষস্থানীয় ইউনিকোড পয়েন্টটি খালি না হওয়া পর্যন্ত গিস্ট্যাক থেকে পপ করা হয়। তারপরে বাইট গণনাটি STDOUT এ আউটপুট হয় এবং প্রোগ্রামটি সমাপ্ত হয়।

ওভারলং এএসসিআইআই এনকোডিং এবং এর বাইরে অবৈধ কোড পয়েন্টগুলির মতো অনুপযুক্ত এনকোডিংয়ের জন্য কোনও চেক নেই 0x10FFFF, তবে আমি মনে করি এটি ঠিক আছে;)


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