বেফুঞ্জ, 444 368 323 বাইট
&1>\1-:v
0v^*2\<_$00p>
_>:10p\:20pv^_@#-*2g00:+1,+55$
^!-<v*2g000<>$#<0>>-\:v
g2*^>>10g20g+v \ ^*84g_$:88+g,89+g,\1+:00
v#*!-1g02!g01_4^2_
>::00g2*-!\1-:10g-\20g-++>v
87+#^\#p01#<<v!`g01/2\+76:_
vv1-^#1-g01:\_$:2/20g`!
_ 2/^>:10g#vv#`g02/4*3:\+77
v>0p^^/2:/2_
<^2-1-g02</2`#*3:
0g+10p2*:^*3_1
! "#%$
%$"#!
!!##%
|||_
_ __
এটি অনলাইন চেষ্টা করুন!
হিলবার্ট কার্ভ আঁকার জন্য সাধারণ পন্থাটি হ'ল স্ট্রোক এবং টার্নগুলির ক্রম হিসাবে পথটি অনুসরণ করা, ফলাফলটিকে বিটম্যাপ বা মেমরির কিছু অংশে রেন্ডারিং করা এবং তারপরে পথটি সম্পূর্ণ হওয়ার পরে সেই রেন্ডারিং লিখে। বেফুঞ্জে এটি কেবল সম্ভব নয় যখন আমাদের সাথে কাজ করার জন্য কেবল 2000 বাইট মেমরি থাকে এবং এতে প্রোগ্রামের উত্সটি অন্তর্ভুক্ত থাকে।
সুতরাং আমরা যে পদ্ধতির এখানে নিয়েছি সেটি হ'ল এমন একটি সূত্র যা আমাদের জানায় যে প্রদত্ত x, y স্থানাঙ্কের জন্য ঠিক কোন অক্ষরটি আউটপুট করতে হয়। কিভাবে এই কাজ করে বোঝার জন্য এটা হওয়া ASCII রেন্ডারিং দিয়ে শুরু করতে উপেক্ষা করার, এবং বক্স অক্ষর দিয়ে তৈরি বক্ররেখা মাত্র মনে সবচেয়ে সহজ পদ্ধিতি হল আছে: ┌
, ┐
, └
, ┘
, │
, এবং─
।
আমরা যখন এর মতো বক্ররেখার দিকে নজর দিই, আমরা ততক্ষনে দেখতে পাব যে ডান হাতটি বাম হাতের একদম সঠিক আয়না। ডান দিকে অক্ষর কেবল বাম তাদের অংশীদার আপ খুঁজছেন, এবং এটা অনুভূমিকভাবে অনুধ্যায়ী দ্বারা নির্ধারিত করা যেতে পারে (অর্থাৎ ঘটনার ┌
এবং ┐
অদলবদল করা হয়, হিসাবে └
এবং ┘
)।
তারপরে নীচের বাম কোণে তাকিয়ে আমরা আবার দেখতে পাবো যে নীচের অর্ধেকটি উপরের অর্ধের প্রতিচ্ছবি। এভাবে নীচে অক্ষর কেবল উপরে তাদের অংশীদার আপ খুঁজছেন, এবং এটা উল্লম্বভাবে অনুধ্যায়ী দ্বারা নির্ধারিত হয় (অর্থাত এর ঘটনার ┌
এবং └
অদলবদল করা হয়, হিসাবে ┐
এবং ┘
)।
এই কোণার বাকি অর্ধেকটি কিছুটা কম স্পষ্ট। ডান হাতের ব্লকটি ত্রিভুজ সংলগ্ন ব্লকের উল্লম্ব প্রতিবিম্ব থেকে প্রাপ্ত হতে পারে।
এবং বাম হাতের ব্লকটি সম্পূর্ণ বক্ররেখার খুব উপরে বামে ব্লকের উল্লম্ব প্রতিবিম্ব থেকে উদ্ভূত হতে পারে।
এই মুহুর্তে, আমরা যে সমস্ত কিছু ফেলে রেখেছি তা হ'ল উপরের বাম কোণে, যা হ'লবার্ট কার্ভের এক পুনরাবৃত্তির নীচের অংশ। তত্ত্ব অনুসারে, আমাদের এখন কেবল প্রক্রিয়াটি পুনরাবৃত্তি করা উচিত, তবে কিছুটা ধরা পড়ে - এই স্তরে ব্লকের বাম এবং ডান অংশগুলি একে অপরের যথাযথ আয়না নয়।
শীর্ষ স্তরের ব্যতীত অন্য যে কোনও ক্ষেত্রে নীচের কোণার অক্ষরগুলিকে একটি বিশেষ কেস হিসাবে পরিচালনা করা দরকার, যেখানে ┌
চরিত্রটি প্রতিবিম্বিত হয় ─
এবং │
চরিত্রটি প্রতিফলিত হয় └
।
তবে এগুলি ব্যতীত, আমরা সত্যিই কেবল এই প্রক্রিয়াটি পুনরাবৃত্তভাবে পুনরাবৃত্তি করতে পারি। শেষ স্তরে আমরা উপরের বাম অক্ষর হিসাবে হার্ডকোড করেছি ┌
এবং এর নীচের অক্ষরটি │
।
এখন যে আমাদের একটি নির্দিষ্ট এক্স, ওয়াই স্থানাঙ্কিতে বক্রের আকৃতি নির্ধারণ করার একটি উপায় রয়েছে, আমরা কীভাবে এএসসিআইআই রেন্ডারিংয়ে অনুবাদ করব? এটি আসলে কেবল একটি সাধারণ ম্যাপিং যা প্রতিটি সম্ভাব্য টাইলকে দুটি ASCII অক্ষরে অনুবাদ করে into
┌
হয়ে যায় _
(স্পেস প্লাস আন্ডারস্কোর)
┐
(দুটি স্পেস) হয়ে যায়
└
হয়ে যায় |_
(উল্লম্ব বার প্লাস আন্ডারস্কোর)
┘
হয়ে যায় |
(উল্লম্ব বার প্লাস স্পেস)
│
হয়ে যায় |
(আবার একটি উল্লম্ব বার প্লাস স্পেস)
─
হয়ে যায় __
(দুটি আন্ডারস্কোর)
এই ম্যাপিংটি প্রথমে স্বজ্ঞাত নয়, পাশাপাশি পাশাপাশি দুটি অনুরূপ রেন্ডারিংয়ের দিকে তাকালে এটি কীভাবে কাজ করে তা আপনি দেখতে পারেন।
এবং এটি মূলত এটি আছে। বাস্তবে বেফুঞ্জে এই অ্যালগরিদমটি পুরোপুরিভাবে আরও একটি সমস্যা, তবে আমি সেই ব্যাখ্যাটি আরও একটি সময়ের জন্য রেখে দেব।