C90 (gcc), 46 বাইট
r;main(c,v)int**v;{while(0<--c&*v[c])r++;c=r;}
ইনপুটটি কমান্ড-লাইন আর্গুমেন্টের মাধ্যমে হয় (প্রতিটি যুক্তি অনুসারে একটি পূর্ণসংখ্যা), প্রস্থান কোডের মাধ্যমে আউটপুট ।
এটি অনলাইন চেষ্টা করুন!
কিভাবে এটা কাজ করে
r একটি গ্লোবাল ভেরিয়েবল। এর ধরন ডিফল্টে int এবং, গ্লোবাল হচ্ছে, এটা ডিফল্ট মান 0 ।
ফাংশন যুক্তি গ ডিফল্টে int হিসাবে ভাল। এটি এন বুলিয়ান্সের অ্যারেগুলির জন্য পূর্ণসংখ্যা n + 1 টি ধারণ করবে ; প্রধানের প্রথম যুক্তি হ'ল সর্বদা নির্বাহের পথ।
ফাংশন আর্গুমেন্ট v হিসাবে ঘোষিত হয় int**
। আসল ধরণের ভি হবে char**
তবে যেহেতু আমরা কেবলমাত্র প্রতিটি যুক্তিটির ন্যূনতম তাৎপর্যপূর্ণ বিট পরীক্ষা করব 0 (কোড পয়েন্ট 48 ) এবং 1 (কোড পয়েন্ট 49 ) পৃথক করে বলার জন্য , এটি সামান্য-এডিয়ান নিয়ে কিছু যায় আসে না মেশিন।
যখন লুপটি সি হ্রাস করে এবং এটি 0 টির সাথে তুলনা করে । সি একবার 0 এ পৌঁছানোর পরে আমরা লুপটি ভেঙে ফেলব। অ্যারেতে 0 টি না থাকলে কেবল এটি প্রয়োজন ।
যতক্ষণ 10<--c
রিটার্ন হয় ততক্ষণ আমরা c তম কমান্ড-লাইন আর্গুমেন্ট ( ) গ্রহণ করি এবং পয়েন্টার ( ) এর ডিফারেন্স করে এর প্রথম অক্ষরটি বের করি । আমরা বুলিয়ান এবং চরিত্রের কোড পয়েন্টের (এবং এটি অনুসরণ করে এমন তিনটি আবর্জনা বাইট) এর বিটওয়াসা এবং গ্রহণ করি, সুতরাং লুপটি ভেঙে শর্তটি 0 ফিরে আসার পরে একবার 0 আসবে।v[c]
*
0<--c
বাকী ক্ষেত্রে, কমান্ড-লাইন আর্গুমেন্টগুলি 1 হওয়ার পরে , r++
বৃদ্ধিগুলি 1 দ্বারা r হয় , এভাবে 1 এর পিছনে থাকা সংখ্যা গণনা করা হয় ।
অবশেষে, c=r
এর কম্পিউটেড মান সঞ্চয় করে দ মধ্যে গ । ডিফল্ট সেটিংসের সাহায্যে, সংকলক নিয়োগটি অনুকূলিত করে এবং অপসারণ করে; এটি আসলে movl %eax, -4(%rbp)
নির্দেশ তৈরি করে । যেহেতু ret
EAX নিবন্ধকের মান প্রদান করে, এটি পছন্দসই আউটপুট উত্পন্ন করে।
মনে রাখবেন যে, এই কোড নেই না C99, যা ফেরৎ সঙ্গে কাজ 0 থেকে প্রধান যদি শেষে প্রধান উপনিত।
01100
?