লুয়া , 162 151 150 বাইট
- -11 বাইট
loadপরিবর্তে ব্যবহার করার জন্য আমার ধারণা ধন্যবাদfunction(...) end
- নিউলাইন বাদ দিয়ে -1 বাইট
l,p=...print(((math.ceil(load('return '..p:gsub('.',load'n=l:find(...,1,1)return n and n-1'))()-0.5)..''):gsub('%d',load'c=...+1 return l:sub(c,c)')))
এটি অনলাইন চেষ্টা করুন!
বিশ্বের সবচেয়ে ছোট জিনিস নয় (লুয়া আপনাকে অভিনবভাবে অভিনব হতে বাধ্য করে, বিশেষত বিশাল কীওয়ার্ড দ্বারা), তবে এটি তৈরি করতে বেশ মজাদার ছিল। সম্পূর্ণ প্রোগ্রাম আর্গুমেন্ট এবং মুদ্রণের ফলাফল হিসাবে ইনপুট গ্রহণ করে।
ব্যাখ্যা
ভূমিকা
l,p=...
আর্গুমেন্ট থেকে ভেরিয়েবলগুলিতে মান নির্ধারণ করুন। আমাদের অভিধানটি হল lএবং ভাবটি হল p।
নিম্নলিখিত প্রকাশটি বোঝা বেশ শক্ত কারণ এতে কার্যকর করার একটি অদ্ভুত ক্রম রয়েছে, তাই আমি ধাপে ধাপে এটি ব্যাখ্যা করব:
সাধারণ সংখ্যায় রূপান্তর করা
p:gsub('.',
load'n=l:find(...,1,1)return n and n-1')
এক্সপ্রেশন স্ট্রিংয়ের প্রতিস্থাপন সম্পাদন করুন: প্রতিটি প্রতীক নিন এবং এটি ফাংশনে পাস করুন (এখানে loadনিজেকে সাধারণ ঘোষণার চেয়ে সংক্ষিপ্ত বলে প্রমাণিত হয়েছে)।
ফাংশনটি পাসের প্রতীক ব্যবহার করে ডিক স্ট্রিংয়ে উপস্থিতির অবস্থান খুঁজে পায় find। ...এখানে প্রথম (এবং একমাত্র) যুক্তি যেমন আমরা ভার ফাংশনে আছি (যে কোনও loadএড হ'ল) এটি আমাদের বর্তমান প্রতীক। নিম্নলিখিত findচিহ্নগুলি বিশেষ চিহ্নগুলিকে উপেক্ষা করার জন্য প্রয়োজনীয় ( 1কেবলমাত্র স্বল্প মান যা trueবুলিয়ান রূপান্তরিত হওয়ার সময় মূল্যায়ন করে ): শুরুর অবস্থান (এখানে একটি ডিফল্ট) এবং plainযা প্রকৃতপক্ষে প্যাটার্ন হ্যান্ডলিংকে অক্ষম করে। %বিশেষ না থাকার কারণে এই প্রোগ্রামগুলি তৃতীয় পরীক্ষার ক্ষেত্রে ব্যর্থ হয় ।
যদি ম্যাচটি পাওয়া যায় তবে লুয়া স্ট্রিংগুলি (এবং অ্যারে বিটিডব্লিউ) 1-ভিত্তিক হিসাবে বিয়োগ করুন। যদি কোনও মিল খুঁজে পাওয়া যায় না, এটি কিছুই ফিরিয়ে দেবে না, ফলস্বরূপ কোনও প্রতিস্থাপন করা হয়নি।
সমাধানে
math.ceil(load('return '..ABOVE)()-0.5)
শুরুতে যোগ returnআমাদের এক্সপ্রেশন তা ফেরত ফলে অ্যাপ্লিকেশন Lua ফাংশন হিসাবে সংকলন এবং এটি কল করে এটা নিরূপণ যাক, (rounding সঞ্চালন এই এটি আরো সংক্ষিপ্ত করতে পরিণত অন্যান্য উপায় কাছাকাছি)।
এটির শেষে আমরা আমাদের সমস্যার একটি সাংখ্যিক সমাধান পাই, কেবল এটির পিছনে রূপান্তরিত হয়।
আবার পাগল করা
(ABOVE..'')
:gsub('%d',load'c=...+1 return l:sub(c,c)')
সংখ্যাটি স্ট্রিংয়ে রূপান্তর করার জন্য প্রথম লাইনটি একটি সংক্ষিপ্ত উপায়, সুতরাং এখন আমরা সংক্ষিপ্ত উপায়ে স্ট্রিং পদ্ধতিগুলিতে কল করতে পারি। আসুন তাই করা যাক!
gsubপাগলামিতে ফিরে সমস্ত কিছু করার জন্য এখন আবার বলা হয়। আমাদের ফাংশন হিসাবে প্রতিস্থাপন প্যাটার্নের %dপরিবর্তে এই সময়টি ব্যবহৃত হয় .এবং কেবলমাত্র সংখ্যক প্রক্রিয়া করা উচিত ( .নেতিবাচক সংখ্যায় ত্রুটির ফলস্বরূপ)। এই সময় ফাংশন ( loadবাইট সংরক্ষণে আবার সম্পাদনা) প্রথমে 1তার প্রথম (এবং কেবল) ভ্যারগুমেন্টে যুক্ত করে ডিক স্ট্রিংয়ে অবস্থানে রূপান্তর করে, তারপরে সেই অবস্থান থেকে চরিত্রটি ফিরিয়ে দেয়।
হুররে, প্রায় সেখানে!
নাটকীয় সমাপ্তি, বা কেন বন্ধনী বিষয়
print((ABOVE))
আচ্ছা… যাইহোক কেন দুই জোড়া বন্ধনী? এটি পার্ল সম্পর্কে কথা বলার সময় ... হু, লুয়ার একাধিক প্রত্যাবর্তন। কথাটি হ'ল এক ফাংশনটি একটি কল থেকে কয়েকটি মান ফিরে আসতে পারে ( আরও উদাহরণের জন্য এই মেটা প্রশ্নটি দেখুন)।
এখানে সর্বশেষে gsubদুটি মান ফিরিয়েছে: আমাদের প্রয়োজনীয় উত্তরগুলির স্ট্রিং এবং প্রতিস্থাপনের পরিমাণ সম্পন্ন হয়েছে (আসলে অঙ্কগুলির সংখ্যা গণনা করা হচ্ছে তবে কে যত্নশীল)। যদি এটি অভ্যন্তরীণ জুটির জন্য না হয় তবে স্ট্রিং এবং নম্বর উভয়ই আমাদের মুছে ফেলা হত। সুতরাং এখানে আমরা দ্বিতীয় ফল বাদ দিতে এবং শেষ পর্যন্ত এই উন্মাদ কারখানার পণ্য মুদ্রণ করতে দুটি বাইট বলিদান করি।
ঠিক আছে, আমি প্রথম দিকে গল্ফিংয়ের মতো প্রায় ব্যাখ্যা করা উপভোগ করেছি, আশা করি এখানে কী চলছে আপনি পেয়েছেন।
q.ioiopewioyetqorw...। যদি তা হয় তবে কোন ধরণের বৃত্তাকার প্রয়োগ করা উচিত?