সি / সি ++, 306 295 বাইট
#define C(c)((c)>>1^((c)&1?0xEDB88320L:0))
#define K(c)(C(C(C(C(C(C(C(C(c))))))))),
#define F(h,l)K((h)|(l+0))K((h)|(l+1))K((h)|(l+2))K((h)|(l+3))
#define R(h)F(h<<4,0)F(h<<4,4)F(h<<4,8)F(h<<4,12)
unsigned long crc_table[]={R(0)R(1)R(2)R(3)R(4)R(5)R(6)R(7)R(8)R(9)R(10)R(11)R(12)R(13)R(14)R(15)};
বিপরীতে কাজ করে, আমরা crc_table নামের একটি স্বাক্ষরবিহীন দীর্ঘ অ্যারে দিয়ে শেষ করি না। আমরা অ্যারের আকার বাদ দিতে পারি কারণ ম্যাক্রোগুলি নিশ্চিত করবে যে অ্যারেতে ঠিক 256 উপাদান রয়েছে। আমরা ম্যাক্রো আর এর 16 টি আমন্ত্রণ ব্যবহার করে ডেটার 16 'সারি' দিয়ে অ্যারে শুরু করি।
আর এর প্রতিটি অনুরোধ চারটি ধ্রুবকের (ম্যাক্রো কে) চারটি টুকরো (ম্যাক্রো কে) এর মোট 16 টি কলামের ডেটাতে প্রসারিত হয়।
ম্যাক্রো কে হ'ল মূল প্রশ্ন থেকে কোডে কে দ্বারা তালিকাবদ্ধ তালিকাভুক্ত লুপ। এটি ম্যাক্রো সি-কে ডাক দিয়ে মান সিটিকে আটবার আপডেট করে
এই প্রিপ্রোসেসর ভিত্তিক সমাধানটি ম্যাক্রো প্রসারণের সময় বেশ কিছুটা স্মৃতি ব্যবহার করে। আমি ম্যাক্রো সম্প্রসারণের অতিরিক্ত স্তরের এবং আমার সংকলকটি ছুঁড়ে ফেলে এটিকে আরও ছোট করার চেষ্টা করেছি। উপরের কোডটি সিগুইনের (উইন্ডোজ 7 64 বিট 8 জিবি র্যাম) এর অধীনে ভিজ্যুয়াল সি ++ 2012 এবং জি ++ 4.5.3 উভয়ের সাথেই (ধীরে ধীরে) সংকলন করে।
সম্পাদনা:
উপরের খণ্ডটি সাদা স্থান সহ 295 বাইট। সি ব্যতীত সমস্ত ম্যাক্রোগুলি প্রসারিত করার পরে এটি বাড়িয়ে 9,918 বাইটে পরিণত হয়। সি ম্যাক্রোর প্রতিটি স্তরের প্রসারিত হওয়ার সাথে সাথে আকারটি দ্রুত বৃদ্ধি পায়:
- 25.182
- 54.174
- 109.086
- 212.766
- 407.838
- 773.406
- 1.455.390
- 2.721.054
সুতরাং সমস্ত ম্যাক্রোগুলি প্রসারিত হওয়ার পরে, সেই ছোট্ট 295 বাইট ফাইলটি 2.7 মেগাবাইটের বেশি কোডে প্রসারিত হবে যা মূল 1024 বাইট অ্যারে (32 বিট স্বাক্ষরবিহীন দীর্ঘ মান ধরে) সংগ্রহ করতে হবে!
অন্য সম্পাদনা:
অতিরিক্ত 11 বাইট আউট আটকানোর জন্য আমি অন্য উত্তর থেকে ম্যাক্রোর ভিত্তিতে সি ম্যাক্রো সংশোধন করেছি এবং পুরো প্রসারিত ম্যাক্রোর আকারকে হ্রাস করেছি। যদিও ২.7 এমবি 54 এমবি (সমস্ত ম্যাক্রো বিস্তারের আগের চূড়ান্ত আকার) এর মতো খারাপ নয়, এটি এখনও তাৎপর্যপূর্ণ।