অ্যাফাইন ফ্র্যাক্টালগুলি তৈরি করতে আপনি সবচেয়ে ছোট প্রোগ্রামটি লিখুন। আপনি নীচের নিয়ম মত একই ফলাফল উত্পন্ন মনে হয় যে কোনও পদ্ধতি আপনি ব্যবহার করতে পারেন। আপনাকে প্রস্তাবিত পদ্ধতিগুলি থেকে কোনও ধারণা ব্যবহার করতে হবে না!
আপনার প্রোগ্রামে দুটি ইনপুট লাগবে, প্রথমটি 074
0 থেকে 7 অবধি তিন অঙ্কের বিন্যাসে প্যাটার্নটি সংজ্ঞায়িত করবে দ্বিতীয় ইনপুটটি আকার নির্ধারণ 3
করবে, 8x8 4
হবে , 16x16 হবে এবং এ জাতীয় (2 ^ n) হবে। আপনার প্রোগ্রামকে অবশ্যই 0 (1x1) থেকে কমপক্ষে 5 (32x32) এ সমস্ত আকারের সঠিক ফলাফল আউটপুট করতে হবে। যদি এটি উচ্চতর সংখ্যার জন্য কোনও আউটপুট উত্পাদন করে তবে তা অবশ্যই সঠিক হতে হবে, অর্থাত এটি অবশ্যই একটি নির্দিষ্ট আকার পর্যন্ত সঠিক আউটপুট উত্পন্ন করতে পারে তবে ভুল হলে ভুল হবে যদি আকারের উপরে কোনও আউটপুট উত্পাদন করে না। আপনি সর্বাধিক আকার 15 (32768x32768) ধরে নিতে পারেন কারণ এটি ইতিমধ্যে ASCII আর্টের জন্য একটি উন্মাদ আকার (1GB)!
একটি 8x8 প্যাটার্ন নীচের মতো দেখতে হবে (নিয়ম 160
)। বাম-সর্বাধিক অঙ্কটি ব্লকের জন্য A
, মাঝারি অঙ্কের (কোনও অভদ্র চিন্তাভাবনা নেই!) ব্লকের জন্য B
এবং ব্লকের জন্য ডান-সর্বাধিক অঙ্ক হবে C
। ফ্র্যাক্টালটি তৈরি করতে, উভয় মাত্রায় এটি অর্ধেক সঙ্কুচিত করুন এবং ব্লকের জন্য ঘূর্ণন / মিররিং নিয়মটি প্রয়োগ করুন। প্যাটার্নটি সঙ্কুচিত করতে এটিকে 2x2 অঞ্চলে সমানভাবে ভাগ করুন। হয় প্রতিটি ক্ষেত্রে 3 টি দৃশ্যমান অক্ষর বা কোনও একটিই থাকবে। যদি দৃশ্যমান অক্ষরগুলি থাকে তবে ছোট ব্লকে যথাযথ জায়গায় একটি অক্ষর রাখুন, অন্যথায় একটি স্থান রাখুন। বিধি 0
- 3
মিরর করা হয় না, নিয়ম 4
- 7
মিরর করা হয়। বিধিগুলি 0
এবং 4
ঘোরানো হয় না, 1
এবং 5
90 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরানো হয় 2
এবং6
180 ডিগ্রি ঘোরানো হয় 3
এবং 7
270 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরানো হয়। A
উপরের-বাম কোণে, B
নীচে-বাম এবং C
নীচে-ডানদিকে দেখানো ক্রমে তিনটি ব্লক একসাথে সেলাই করুন ।
AAA
AA A
AA
A
BBB CC
B BBC
BBCCC
B CCC
সঙ্কুচিত, আবর্তিত এবং নিয়ম সংখ্যা দ্বারা মিরর:
0 1 2 3 4 5 6 7
---- ---- ---- ---- ---- ---- ---- ----
AA BAA CCB C C BCC AAB AA
A BB A CBB CC CC BBC A BB A
BBC CC A A BB BB A A CC CBB
BCC C AA AAB BAA AA C CCB
নিয়মাবলী:
- মিরর করা হয়নি, 90 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরানো হয়েছে
- মিরর করা হয়নি, 180 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরানো হয়েছে
- মিরর করা হয়নি, ঘড়ির কাঁটার দিকে 270 ডিগ্রি ঘোরানো হয়েছে
- মিরর করা কিন্তু ঘোরানো হয়নি
- মিরর করা তারপর 90 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরানো
- মিররড তারপর 180 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরানো
- মিররড তারপর ঘড়ির কাঁটার দিকে 270 ডিগ্রি ঘোরানো হয়েছে
- বিধি 0: মিরর করা হয় না, ঘোরানো হয় না
মিররিংটি সর্বদা প্রথমে করা হয় এবং ফাঁকা কোণার মাধ্যমে তির্যকভাবে করা হয় যেমন নিয়ম 0 বনাম 4 নিয়ম:
0 4
---- ----
AA / C /
A / CC/
BBC BB A
/BCC /BAA
শুধু নিয়ম 1
, 6
এবং 0
, উপরে প্যাটার্ন ব্যবহার করা হয় যাতে। রূপান্তরগুলি প্রয়োগ করার পরে এবং ব্লকগুলি একসাথে সেলাই করা বাদে এটি নীচের মত দেখতে ব্যতীত আমি প্রতিটি ব্লককে একে অপরের থেকে এক স্পেসে ফাঁক করে রেখেছি। আপনার কোডটিতে এটি অতিরিক্ত স্থান পাবে না। আপনি যদি এটি "পিতামাতার" চিত্রের সাথে তুলনা করেন আপনি দেখতে পাবেন যে এটিতে একই পজিশনে দৃশ্যমান অক্ষর রয়েছে।
BAA
BB A
CC
C
AAB AA
A BB A
CC BBC
C BCC
সঙ্কুচিত না হয়ে চিত্রটি উত্পন্ন করার আরেকটি উপায় নিম্নরূপ: একটি অক্ষর দিয়ে শুরু করুন:
X
তিনটি ব্লকের প্রত্যেকটির জন্য রূপান্তরগুলি প্রয়োগ করুন (এটি কেবলমাত্র একটি অক্ষর নয়) এবং ব্লকগুলি একসাথে সেলাই করুন:
X
XX
আবার তিনটি ব্লকের প্রতিটিটির জন্য রূপান্তরগুলি প্রয়োগ করুন:
1
--
XX
X
6 0
-- --
XX X
X XX
তাদের একসাথে সেলাই:
XX
X
XXX
XXX
আবার তিনটি ব্লকের প্রতিটিটির জন্য রূপান্তরগুলি প্রয়োগ করুন:
1
----
XXX
XX X
XX
X
6 0
---- ----
XXX XX
X XX X
XX XXX
X XXX
তাদের একসাথে সেলাই:
XXX
XX X
XX
X
XXX XX
X XXX
XXXXX
X XXX
আপনি প্যাটার্নের দৃশ্যমান অংশের জন্য কোনও মুদ্রণযোগ্য অক্ষর বা অক্ষর (0x21 - 0x7E) ব্যবহার করতে পারেন তবে ফাঁকা স্থানগুলির জন্য কেবল স্থান অক্ষর (0x20)। ট্রেলিং স্পেসের অনুমতি রয়েছে তবে পুরো স্কোয়ারের বাইরে কোনও ফাঁকা স্থান থাকতে হবে না (অর্থাত্ 8x8 বর্গের জন্য কলাম 8 এর আগের কোনও অক্ষর থাকতে পারে না)।
এখানে 512 বিভিন্ন বিধি রয়েছে, তবে তাদের মধ্যে কিছু একই প্যাটার্ন উত্পাদন করে। পার্শ্ব নোট হিসাবে, যে কোনও প্যাটার্ন কেবল 0
এবং 4
এতে সিয়েরপিনস্কি ত্রিভুজ (৮ টি আলাদা বিধি) উত্পাদন করবে।
আপনি পছন্দসইভাবে আপনার প্রিয় প্যাটার্ন এবং এটি তৈরি করে এমন নিয়ম পোস্ট করতে পারেন। আপনি যদি তা করেন তবে নিশ্চিত হয়ে নিন যে আকারটি কমপক্ষে 3 (8x8) এর মতো একই বিধি থেকে আলাদা করতে পারে।