ভূমিকা
আপনি সম্ভবত জিপ বোমা , এক্সএমএল বোমা ইত্যাদির সাথে পরিচিত হন । এখানে চ্যালেঞ্জ হ'ল একইভাবে একটি সংকলককে অপব্যবহার করা।
চ্যালেঞ্জ
এমন কিছু উত্স কোড লিখুন যা 512 বাইট বা তারও কম দখল করে এবং কোন ফাইলটি সংঘবদ্ধ করে যা সবচেয়ে বেশি সম্ভাব্য স্থান দখল করে। বৃহত্তম আউটপুট ফাইল জয়!
বিধি
ঠিক আছে, সুতরাং কয়েকটি গুরুত্বপূর্ণ ব্যাখ্যা, সংজ্ঞা এবং বিধিনিষেধ রয়েছে;
- সংকলনের আউটপুট অবশ্যই একটি ইএলএফ ফাইল, উইন্ডোজ পোর্টেবল এক্সিকিউটেবল (.exe), বা জেভিএম বা। নেট এর সিএলআর (ভার্চুয়াল বাইটকোডের অন্যান্য ধরণের জন্য জিজ্ঞাসা করা হলে ঠিক আছে) হতে পারে to আপডেট: পাইথনের .pyc / .pyo আউটপুটও গণনা করে ।
- যদি আপনার পছন্দের ভাষাটি সেই ফর্ম্যাটগুলির মধ্যে একটির মধ্যে সরাসরি সংকলন করা না যায় তবে সংকলনের পরে প্রতিস্থাপনেরও অনুমতি দেওয়া হয় ( আপডেট: আপনি একাধিকবার ট্রান্সপ্লাই করতে পারেন, আপনি যতক্ষণ না একই ভাষা একাধিকবার ব্যবহার করেন না )।
- আপনার উত্স কোডে একাধিক ফাইল এবং এমনকী রিসোর্স ফাইল রয়েছে, তবে এই সমস্ত ফাইলের সংক্ষিপ্ত আকারটি অবশ্যই 512 বাইটের বেশি হবে না।
- আপনি আপনার উত্স ফাইল (গুলি) এবং আপনার পছন্দ-পছন্দের মানক লাইব্রেরি ব্যতীত অন্য কোনও ইনপুট ব্যবহার করতে পারবেন না। স্ট্যাটিক লিঙ্কিং স্ট্যান্ডার্ড লাইব্রেরিগুলি যখন সমর্থন করা হয় তখন তা ঠিক থাকে। বিশেষত, কোনও তৃতীয় পক্ষের লাইব্রেরি বা ওএস লাইব্রেরি নেই।
- কোনও কম্যান্ড বা কমান্ডের সিরিজ ব্যবহার করে আপনার সংকলনটি আহ্বান করা অবশ্যই সম্ভব। সংকলনের সময় আপনার যদি নির্দিষ্ট পতাকাগুলির প্রয়োজন হয় তবে আপনার বাইট সীমাতে এই গণনাগুলি (উদাহরণস্বরূপ যদি আপনার সংকলন লাইনটি হয়
gcc bomb.c -o bomb -O3 -lm
তবে-O3 -lm
অংশটি (7 বাইট) গণনা করা হবে (নোটের প্রাথমিক লিডিং স্পেস গণনা করা হয়নি)। - প্রিপ্রসেসরগুলি কেবল তখনই অনুমতিপ্রাপ্ত হয় যদি তারা আপনার ভাষার জন্য একটি মানক সংকলন বিকল্প হয়।
- পরিবেশটি আপনার উপর নির্ভর করে তবে এই যাচাইযোগ্যযোগ্য করার স্বার্থে দয়া করে সাম্প্রতিক (অর্থাত্ উপলব্ধ) সংকলক সংস্করণ এবং অপারেটিং সিস্টেমগুলিতে আটকে থাকুন (এবং আপনি অবশ্যই ব্যবহার করছেন যা নির্দিষ্ট করুন) specify
- এটি ত্রুটি ছাড়াই সংকলন করতে হবে (সতর্কতা ঠিক আছে), এবং সংকলক ক্র্যাশ করা কোনও কিছুর জন্য গণনা করে না।
- আপনার প্রোগ্রামটি আসলে যা করে তা অপ্রাসঙ্গিক, যদিও এটি দূষিত কিছু হতে পারে না। এটি শুরু করতে সক্ষম হতে হবে না।
উদাহরণ 1
সি প্রোগ্রাম
main(){return 1;}
Apple LLVM version 7.0.2 (clang-700.1.81)
ওএস এক্স 10.11 (64-বিট) এ সংকলিত :
clang bomb.c -o bomb -pg
9228 বাইটের একটি ফাইল তৈরি করে। মোট উত্সের আকার 17 + 3 (এর জন্য -pg
) = 20 বাইট, যা সহজেই আকারের সীমাতে থাকে।
উদাহরণ 2
ব্রেনফাক প্রোগ্রাম:
++++++[->++++++++++++<]>.----[--<+++>]<-.+++++++..+++.[--->+<]>-----.--
-[-<+++>]<.---[--->++++<]>-.+++.------.--------.-[---<+>]<.[--->+<]>-.
অবিব দিয়ে সি দিয়ে এর সাথে ট্রান্সপ্লাইল করা:
./awib < bomb.bf > bomb.c
তারপরে Apple LLVM version 7.0.2 (clang-700.1.81)
ওএস এক্স 10.11 (64-বিট) এ সংকলিত :
clang bomb.c
8464 বাইটের একটি ফাইল তৈরি করে। এখানে মোট ইনপুটটি 143 বাইট (যেহেতু @lang_c
এটির জন্য ডিফল্ট তাই উত্স ফাইলে যোগ করার দরকার নেই, এবং কোনও আদেশে কোনও বিশেষ পতাকা নেই)।
এছাড়াও মনে রাখবেন যে এই ক্ষেত্রে অস্থায়ী বোমা.কম ফাইলটি ৮০২ বাইট, তবে এটি উত্সের আকার বা আউটপুট আকারের পক্ষে নয়।
চূড়ান্ত নোট
যদি 4 জিবি-র বেশি আউটপুট অর্জন করা হয় (সম্ভবত যদি কেউ কোনও টিউরিং সম্পূর্ণ প্রিপ্রোসেসর পেয়ে থাকে), তবে প্রতিযোগিতাটি ক্ষুদ্রতম উত্সের জন্য হবে যা কমপক্ষে size আকারের একটি ফাইল তৈরি করে (এটি কেবলমাত্র জমা দেওয়ার পরীক্ষাগুলি ব্যবহারিক নয় যা খুব বড় আকারের হয়) ।