সিয়ারপিস্কি ত্রিভুজ? আমার বিটওয়াইজ এবং?

সিয়ারপিস্কি ত্রিভুজ? আমার বিটওয়াইজ এবং?

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

আমারও আছে পূর্বে লেখা ফ্র্যাক্টাল সম্পর্কে; তারা গাণিতিক কৌতুকের টুকরো যা 1980 এর দশকে একটি নিকট-পৌরাণিক মর্যাদা উপভোগ করেছিল, তবে এখন আর ভদ্র সংস্থায় কথা বলা হয় না। সুপরিচিত ফ্র্যাক্টালগুলির মধ্যে একটি হ’ল সিয়ারপিস্কি ত্রিভুজ। এটি একটি সাধারণ ত্রিভুজ গ্রহণ করে এবং তারপরে যা বাকী থেকে মাঝখানে এক-চতুর্থাংশটি সরিয়ে নিয়েছে তা তৈরি করে নির্মিত হয়েছে:

সিয়ারপিস্কি ত্রিভুজ তৈরির প্রথম পদক্ষেপগুলি।

ফ্র্যাক্টালের কিছু আকর্ষণীয় বৈশিষ্ট্য রয়েছে; সর্বাধিক উল্লেখযোগ্যভাবে, প্রতিটি পুনরাবৃত্তিতে পৃষ্ঠের ক্ষেত্রফল 25% হ্রাস পায় যখন ঘেরটি 50% বৃদ্ধি পায়, তাই সম্পর্কিত সীমা 0 এবং ∞ হয় ∞ চিত্রটি প্রারম্ভিক ত্রিভুজের মতো একই সামগ্রিক পদচিহ্ন বজায় রাখা সত্ত্বেও এটি।

যাইহোক-এই আশ্চর্যজনকভাবে সহজ বিট-টুইডলিং হ্যাক রয়েছে একরকম নির্মাতারা সিয়ারপিস্কি ত্রিভুজ (ডেমো):

#include <stdint.h>
#include <stdio.h>

#define LEN (1 << 6)

int main() 
  for (uint32_t y = 0; y < LEN; y++) 
    for (uint32_t x = 0; x < LEN; x++)
      printf((x & y) ? "  " : "MM");
    putchar('\n');
  

সংক্ষেপে, আমরা এক জোড়া পূর্ণসংখ্যার স্থানাঙ্কের উপর পুনরাবৃত্তি করি, এক্স এবং yএবং তারপরে বিটওয়াইজ কিনা তার উপর নির্ভর করে প্রতিটি কক্ষকে রঙ করুন x & y শূন্য বা শূন্য নয়। এটাই! 0 থেকে 63 এ চলমান এক জোড়া কাউন্টারগুলির জন্য, ফলাফলটি হ’ল:

কি।

কাউন্টারগুলির পরিসীমা বাড়ানো আরও বিশদ যুক্ত করে, আরও বেশি বেশি নেস্টেড ত্রিভুজগুলির সাথে একটি সূক্ষ্ম-দানাদার ফ্র্যাক্টাল উত্পাদন করে। কিন্তু… কেন?

একটি হাতের avy েউয়ের ব্যাখ্যা হ’ল বিট-টুইডলিং অংশটি বেশিরভাগই একটি লাল হেরিং। বিটওয়াইজ সম্পর্কে চালাক কিছুই নেই এবং; যাদুটি অবস্থানগত সংখ্যা ব্যবস্থা! আমরা যদি বাইনারি 0 থেকে 63 পর্যন্ত গণনা প্রক্রিয়াটি কল্পনা করি তবে আমরা নিম্নলিখিত বিট প্যাটার্নটি পাই:

0 থেকে 63 (বাম থেকে ডান) বাইনারি গণনা।

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

সিয়ারপিস্কি আকারের সাথে আরও সুনির্দিষ্ট টাই-ইন করার জন্য, আমাদের হুডের নীচে উঁকি দেওয়া দরকার x & y অপারেশন। আমরা কিছুটা এবং দুটি কাউন্টার গণনা করছি, তবে এর ফলাফল কী? এটা অনুভূতি ভুল, মানুষ!

ঠিক আছে, আসুন সবচেয়ে গুরুত্বপূর্ণ বিটটি দেখে শুরু করা যাক। আপনি যদি বাইনারি সংখ্যার সাথে পরিচিত হন তবে এটি সুস্পষ্ট হওয়া উচিত যে আমাদের 6-বিট (64-মান) ক্ষেত্রে, এক্স স্থানাঙ্কের এমএসবি 32 এর চেয়ে কম সমস্ত মানের জন্য শূন্য হবে এবং একটি থ্রেশহোল্ডের সমান বা তারও বেশি সমস্ত মানের জন্য একটি হবে:

\ (\ \ Belgeararayc \ hline \ TextBfCounter state & \ TextBfbinary \\ \ Hline x = 0 & 000000 \\ x = 1 এবং 000001 \\ x = 2 000010 \\ & … \\ x = 31 & 01111 \\ x = 32 \\ x = 32 \\ n = 32 \\ x = 32 \\ x = 32 \\ x = 32 \\ x = 32 \\ x = 32 \\ \ colorcrimson1 \ colorblack00001 \\ … & … \\ x = 63 & \ colorcrimson1 \ colorblack11111 \\ \ hline \ endarray \)

এটি এক্স অক্ষকে দুটি অংশে বিভক্ত করে; ওয়াই স্থানাঙ্কের ক্ষেত্রেও এটি একই, তাই আমরা দ্বি-মাত্রিক প্লটটিতে চারটি কোয়াড্রেন্ট দিয়ে শেষ করি। কেবলমাত্র নীচের ডান কোয়াড্রেন্টে (32×32 কোষ), উভয় এমএসবি সেট করা আছে:

\ (\ \ Belgeararayc 0 \ কোয়াড 0 এবং 0 \ কোয়াড 1 \\ \ এইচলাইন 1 \ কোয়াড 0 এবং \ কালারক্রিমসন 1 \ কোয়াড 1 \ এন্ডারে \)

অন্য কথায়, এমএসবি প্লট করা x & y আমাদের নিম্নলিখিতগুলি নেট:

বর্গক্ষেত্রটি সবচেয়ে উল্লেখযোগ্য বিট দ্বারা আলোকিত।

এরপরে, আসুন দ্বিতীয় সর্বাধিক উল্লেখযোগ্য বিট (#4) দেখুন। এমএসবির ফ্রিকোয়েন্সি দ্বিগুণে মান চক্র, তাই এক্স অক্ষটি চারটি বিভাগে বিভক্ত। ওয়াই অক্ষগুলিতেও একই ঘটনা ঘটছে, চারটি 16×16 স্কোয়ারের একটি প্যাটার্ন তৈরি করছে যেখানে বিট #4 সেট করা আছে x & y। এগুলি নীচে চিত্রিত হয়েছে, এমএসবির জন্য পূর্বে চিহ্নিত নীচের কোয়াড্রেন্টের শীর্ষে সুপারমোজ করা হয়েছে:

নতুন স্কোয়ারগুলি দ্বিতীয় সবচেয়ে উল্লেখযোগ্য বিট দ্বারা আলোকিত।

এর পরে, বিট 3 প্রতিটি অক্ষে আটবার টগল করা হয়, 8×8 ব্লকের নিম্নলিখিত নিয়মিত গ্রিডটি আলোকিত করে:

বিট 3 এর অবদান।

একই বিট 2 এর জন্য যায়, 4×4 ব্লকের নিয়মিত প্যাটার্নটি আলোকিত করে:

বিট 2 এর অবদান।

আরও দুটি পদক্ষেপের পরে, আমরা নিম্নলিখিত ফলাফলটি শেষ করি; গা dark ় নীল কোষগুলি এমন স্থানাঙ্ক যা কোনও পাসের মধ্যে কখনও আলোকিত হয়নি, পরিচিত ত্রিভুজটি জাল করে:

মিঃ সিয়ারপিস্কি, এবং অনুমান?

বাস্তবে, অ্যালগরিদম ছদ্মবেশে একটি পুনরাবৃত্ত ব্লক-অপসারণের পদ্ধতির; এটি কেবল সেভাবে দেখায় না কারণ পাসগুলি সিপিইউর গাণিতিক লজিক ইউনিট দ্বারা “সমান্তরাল” হয়-কমপক্ষে একটি পূর্ণসংখ্যার সর্বাধিক হার্ডওয়্যার-সমর্থিত বিট প্রস্থ পর্যন্ত।

আমি গিক সংস্কৃতি, বৈদ্যুতিন সার্কিট ডিজাইন এবং আরও অনেক কিছু সম্পর্কে ভাল-গবেষণা, মূল নিবন্ধগুলি লিখি। আপনি যদি সামগ্রীটি পছন্দ করেন তবে সাবস্ক্রাইব করুন। সোশ্যাল মিডিয়ার মাধ্যমে পাঠকদের সংস্পর্শে থাকা ক্রমশ কঠিন; এক্স এ আমার সাধারণ পোস্টটি আমার অনুগামীদের 5% এরও কম দেখানো হয়েছে এবং একটি ~ 0.2% ক্লিকথ্রু হার পেয়েছে।

Source link