আন্ডারলোড, 196 বাইট
()()(<svg width="99" height="147">)S(<g transform="translate):S((33,33)">)S((3,0)rotate)*a(*a(~*)*~("><path d="M0h3" stroke="#"/>)~*a(*)**:(-90)a~^~(90)a~^)*::*:**:*^S(</g>)(:*)::*:**:*^S(</svg>)S
আমি ভেবেছিলাম যে এই চ্যালেঞ্জটি স্বল্প-শক্তিযুক্ত ইওসোলংয়ে চেষ্টা করা আকর্ষণীয় হতে পারে; আন্ডারলোড এমন একটি কম সংখ্যক কমান্ড সহ একটি ভাষার পক্ষে মোটামুটি ভাল করে।
আউটপুট একটি এসভিজি ফাইল যা খুব ভারী নেস্টেড ট্যাগ এবং কিছু গল্ফিং শর্টকাট রয়েছে। এখনও অবধি, আমি এমন কোনও ব্রাউজার পাইনি যা এটি প্রদর্শন করতে পারে (ফায়ারফক্স এটি লোড করার চেষ্টা করে কয়েক মিনিট স্থির থাকে এবং ফায়ারফক্স এবং ক্রোমিয়াম উভয়ই ফাঁকা স্ক্রিন দেয়)। বেশিরভাগ চিত্র প্রক্রিয়াকরণ প্রোগ্রামগুলি এটি লোড করতে পারে না (এটি অন্য ফর্ম্যাটে রূপান্তর করা শক্ত করে তোলে), তবে আমি এটি জিনোমের আই ভিউতে (যা উবুন্টুতে ডিফল্ট ইনস্টলের অংশ)। সুতরাং আমি চিত্রটির একটি স্ক্রিনশট নিয়েছি যাতে আপনি এটি দেখতে পান (আসল চিত্রটির স্বচ্ছ ব্যাকগ্রাউন্ড রয়েছে তবে আপনি সত্যিই স্বচ্ছ স্ক্রিনশট নিতে পারবেন না):
আমাদের স্পষ্টভাবে চিত্রের আকার নির্দিষ্ট করতে হবে। চিত্রটির জন্য উপযুক্ত দিকনির্দেশনা বাছাই করা, সর্বনিম্ন আইনী আকারে সমস্ত কিছু অঙ্কন করা এবং চ্যালেঞ্জ দ্বারা নির্দিষ্ট ন্যূনতম সংখ্যার কাজ করা আমাদের একটি চিত্র দেয় যা কেবলমাত্র একটি বাইট সংরক্ষণ করে 99 পিক্সেল প্রশস্ত হয়ে যায়। জিনিসগুলি যখন এরকমভাবে কাজ করে তখন খুব সুন্দর।
চিত্র আঁকার জন্য ব্যবহৃত সাধারণ অ্যালগরিদম হল দুটি ভেরিয়েবল বজায় রাখা (আন্ডারলোড ভেরিয়েবলের নাম দেয় না, তবে আমি এগুলিকে x এবং y হিসাবে ভেবেছিলাম ), উভয়ই শূন্য। তারপরে আমরা বারবার ( x , y ) এর সাথে ( x , বাম দিকে ঘুরুন এবং এগিয়ে চলেছি, y ) এবং ( x , ডানদিকে ঘুরুন এবং এগিয়ে যান, y )। দশটি পুনরাবৃত্তির পরে, এক্স এবং y উভয়ই নয়-পুনরাবৃত্তি ড্রাগনের বক্ররেখা ধরে।
কয়েকটি অণু-অপ্টিমাইজেশন এবং আন্ডারলোড-নির্দিষ্ট কৌশলগুলিও রয়েছে। স্ট্যাকের শীর্ষের সাথে প্রতিটি লুপের পুনরাবৃত্তির সাথে খুব বেশি গণ্ডগোল এড়াতে আমরা ফাংশনে x এবং y সংযুক্ত করে শুরু করি "কনটেনেটেটিং দ্বারা তৈরি স্ট্রিংটি ফিরিয়ে আনুন: এক্স , একটি টার্ন ইন্সট্রাকশন, ফাংশন আর্গুমেন্ট, একটি মুভি- ফরোয়ার্ড নির্দেশনা, এবং y । " এই ফাংশনটি স্ট্যাকের উপরে কেবল একটি স্থান নেয়, তাই আমরা এটিকে সদৃশ করতে পারি, এটি -90
একটি আর্গুমেন্ট হিসাবে কল করতে পারি, ডুপ্লিকেটের নীচে রিটার্ন মানটি অদলবদল 90
করতে পারি এবং এক্স এবং y এর জন্য নতুন মান ধরে রাখতে একটি যুক্তি হিসাবে কল করতে পারিস্ট্যাকের শীর্ষ দুটি উপাদানগুলির (যা এখন পর্যন্ত সর্বাধিক সাধারণভাবে অ্যাক্সেসযোগ্য) এর চেয়ে বেশি কখনও স্পর্শ করার প্রয়োজন ছাড়াই। এই ফাংশনটি রানটাইমে কোড-উত্পন্ন। জেনারেটর নিজেই রানটাইমে কোড-উত্পন্ন হয়, যাতে স্ট্রিংটি পুনরায় ব্যবহার করার অনুমতি দেয় যাতে এটি <g transform="translate
চিত্রের উত্স সেট করতেও ব্যবহৃত হয়। আমরা প্রথমে সমস্ত ওপেন ট্যাগগুলি তৈরি করি এবং তারপরে সমস্ত ঘনিষ্ঠ ট্যাগগুলি কেবলমাত্র </g>
, আমরা খালি ট্যাগগুলির সাথে মেলে না worry (আন্ডারলোডে দক্ষতার সাথে সংখ্যা লেখার একটি নিজস্ব সমস্যা একটি আকর্ষণীয় সমস্যা; (:*)::*:**:*
সম্ভবত 1024 লেখার সবচেয়ে কার্যকর উপায়, যদিও "2 (2 + 2 (1 + 2 × 2) power 2" তে অনুবাদ করে) write
আন্ডারলোডের কোনও গ্রাফিক লাইব্রেরি নেই, তাই আমি একটি স্থিত অবস্থানে অঙ্কন রেখার সংমিশ্রণটি ব্যবহার করে এবং একটি নির্দিষ্ট বিন্দুর চারপাশে চিত্রটি ঘুরিয়ে এসভিজি উত্পাদন করি; কলম ঘুরিয়ে পরিবর্তে, আমরা কাগজ ঘুরিয়ে। ধারণাটি হ'ল একটি লাইন অঙ্কন করে, পুরো চিত্রটি ঘোরানো, অন্য লাইনটি অঙ্কন করা, চিত্রটি আবার ঘোরানো ইত্যাদি ইত্যাদি, আমরা সমস্ত পাখির অঙ্কিত হওয়ায় কোনও পাটিগণিত না করে বা কোনও গ্রাফিক্স লাইব্রেরি ব্যবহার না করেই কার্যকরভাবে টার্টাল গ্রাফিক্স অনুকরণ করতে পারি একই জায়গায়। অবশ্যই, এর অর্থ হ'ল আমাদের কাছে বেশ ভারী নেস্টেড রোটেট-দ্য-ইমেজ ট্যাগ রয়েছে, যা অনেক এসভিজি দর্শকদের বিভ্রান্ত করে।
চিত্রটি স্টাইলিং করা বাইট গণনার বিপরীতে গণনা করা হবে, তাই আমার ছবিটি প্রদর্শনের জন্য প্রয়োজনীয় ন্যূনতম স্টাইলিং দেওয়া দরকার। এটি পরিণত হয় stroke="#"
, যা কমবেশি "লাইনের কিছু রঙ হওয়া দরকার" হিসাবে অনুবাদ করে; এটি এটিকে কালো করে আঁকতে প্রসারিত বলে মনে হচ্ছে। (সাধারণত আপনি "# 000" হিসাবে রঙটি নির্দিষ্ট করতে চাইবেন)) পটভূমিটি ডিফল্টরূপে স্বচ্ছ। আমরা একটি স্ট্রোক প্রস্থ নির্দিষ্ট করে না, তবে জিনোমের আই দ্বারা নেওয়া পছন্দটি সমস্ত দৃশ্যমানকে ছেড়ে দেয়।
অনেক আন্ডারলোড দোভাষী এই প্রোগ্রামটির সাথে লড়াই করে, যেমন ট্রাই ইট অনলাইন ক্র্যাশ হয়ে যাওয়া, কারণ এটি অভ্যন্তরীণভাবে কিছু খুব বড় স্ট্রিং তৈরি করে। মূল অনলাইন আন্ডারলোড দোভাষী যদিও কাজ করে। (মজার বিষয় হল, প্রথম দোভাষীটি অনলাইন ছিল, সুতরাং অফলাইনে ব্যবহারের আগে ভাষাটি অনলাইনে ব্যবহারযোগ্য ছিল))
আমি যে বিষয়ে কিছুটা অস্বস্তি বোধ করছি তা হ'ল এখানে কেবল 1023 লাইন বিভাগ রয়েছে বলে মনে হচ্ছে এবং আমরা 1024 আশা করব It এটি হতে পারে যে প্রান্তের একটি অংশ এই অ্যালগরিদম দিয়ে আঁকছে না (এটি হবে) পরিবর্তে পরবর্তী পুনরাবৃত্তিতে আঁকা)। যদি এটি অযোগ্য ঘোষণা করা হয় তবে প্রোগ্রামটি মানিয়ে নেওয়া সম্ভব হতে পারে তবে এটি বেশ দীর্ঘস্থায়ী হতে পারে। (এই চ্যালেঞ্জটি যেভাবেই হোক প্রতিযোগিতা জিততে চলেছে এমন নয়; ইতিমধ্যে বেশ কয়েকটি সংক্ষিপ্ত এন্ট্রি রয়েছে))