সি int
,: 138 123 বাইট long
,: 152 131 বাইট
আমি এর দুটি সংস্করণ তৈরি করেছি, কারণ চ্যালেঞ্জগুলির সর্বাধিক কার্যকর ইনপুটটির সীমাটি 0x100000000
কিছুটা বিশ্রী মনে হয়েছিল। একটি সংস্করণ 32 বিট পূর্ণসংখ্যার সাথে কাজ করে (যা স্পষ্ট কারণে সীমা ব্যর্থ করে), অন্য সংস্করণটি 64 বিট (যা প্রদত্ত সীমা ছাড়িয়ে যায়, 14 8 অতিরিক্ত বাইটের ব্যয়ে ) নিয়ে কাজ করে।
32 বিট সংস্করণ:
char b[22],*r=b;f(v,l)char*l;{v%3>1?*r++=*l,v++:0;v&&f(v/3,l+1);v%3?*r++=*l:0;}g(v){f(v,"139ABCDEFGHIJKLMNOPQR");*r=0;r=b;}
Bit৪ বিট সংস্করণ:
char b[22],*r=b;f(long v,char*l){v%3>1?*r++=*l,v++:0;v&&f(v/3,l+1);v%3?*r++=*l:0;}g(long v){f(v,"139ABCDEFGHIJKLMNOPQR");*r=0;r=b;}
এটি ইন্টিজার ভেরিয়েবল হিসাবে ঘোষণা করে long
(যা লিনাক্সের 64 বিট)।
অবারিত long
সংস্করণ:
char buffer[22],*result=buffer;
f(long value,char*letter){
if(value%3>1){
*result++=*letter,value++;
}
if(value){
f(value/3,letter+1);
}
if(value%3){
*result++=*letter;
}
}
g(long value){
f(value,"139ABCDEFGHIJKLMNOPQR");
*result=0;
result=buffer;
}
আপনি দেখতে পাচ্ছেন, এটি পুনরাবৃত্তিমূলক শালীন দ্বারা কাজ করে: বাকিটি যদি 1 হয় তবে পুনরাবৃত্তির কল হওয়ার পরে সংশ্লিষ্ট চরিত্রটি আউটপুট স্ট্রিংয়ে সংযুক্ত করা হয়। যদি বাকি 2 হয়, আউটপুট পুনরাবৃত্তি করার আগে সঞ্চালিত হয়। এই ক্ষেত্রে, আমি নেতিবাচক অঙ্কটি সঠিকভাবে পরিচালনা করতে মান এক করে বাড়িয়েছি। এটির বাকীটি শূন্যে পরিবর্তনের অতিরিক্ত সুবিধা রয়েছে, যদি আমাকে value%3
পুনঃ-পুনরাবৃত্তির শর্ত হিসাবে ব্যবহার করতে দেয় ।
রূপান্তর ফলাফল বিশ্বব্যাপী বাফার মধ্যে স্থাপন করা হয়। g()
মোড়কের ফলে স্ট্রিং সঠিকভাবে সসীম, এবং পুনরায় সেট করতে শূন্য কাজ হয়েছে result
তার শুরুর পয়েন্টার (যা হল কিভাবে g()
"আয়" ফলাফলের)।
long
এই কোড সহ সংস্করণটি পরীক্ষা করুন :
#include <stdio.h>
char b[22],*r=b;f(long v,char*l){v%3>1?*r++=*l,v++:0;v&&f(v/3,l+1);v%3?*r++=*l:0;}g(long v){f(v,"139ABCDEFGHIJKLMNOPQR");*r=0;r=b;}
void printConversion(long value) {
g(value);
printf("%ld: %s\n", value, r);
}
int main() {
for(long i = 0; i <= 40; i++) {
printConversion(i);
}
printConversion(0x7fffffff);
printConversion(0xffffffffu);
printConversion(0x100000000);
}
আরও সম্ভাব্য তবে ধ্বংসাত্মক গল্ফিং:
-4 বাইট: ইন পয়েন্টার রিসেটটি সরিয়ে ফাংশনটিকে একটি শট করুন g()
।
-5 বাইট: স্ট্রিং পরিসমাপ্তি সম্পাদন করতে আহ্বানকারী জোর, এ পরিসমাপ্তি ছাড়া স্ট্রিং ফিরে buffer
, এবং স্ট্রিংয়ের শেষ প্রান্ত result
।