পার্ল, 43 বাইট
map{say if$_==eval s/./+$&**$+[0]/gr}<>..<>
এটি অনলাইন চেষ্টা করুন!
রেগেক্স সত্যই শক্তিশালী, ছেলেরা।
ব্যাখ্যা
কোডটি প্রথমটি করে যেটি ইনপুট হিসাবে দুটি পূর্ণসংখ্যা পড়া হয় <>এবং এর সাথে প্রথম থেকে দ্বিতীয় পর্যন্ত একটি পরিসীমা তৈরি করে ..। তখনই মান ব্যবহার mapএই পরিসীমা মাধ্যমে পুনরুক্তি করতে ফাংশন, এবং প্রতিটি মান নিম্নলিখিত কোড প্রয়োগ করা হয়: say if$_==eval s/./+$&**$+[0]/gr। এটিকে গীবির মতো মনে হয়, এবং এটি একরকম, তবে এখানে যা ঘটছে তা সত্যি।
mapপরোক্ষভাবে পরিবর্তনশীল তার বর্তমান মান সঞ্চয় করে $_। অনেক পার্ল ফাংশন এবং ক্রিয়াকলাপ যখন কোনও কিছুই না দেওয়া হয় তখন এই মানটি ব্যবহার করে। এর মধ্যে নিয়মিত প্রকাশ থাকে যেমন s///সাবস্টিটিউশন অপারেটর।
একটি প্রতিস্থাপন রেজেক্সের চারটি অংশ রয়েছে:
- স্ট্রিং হেরফের হতে হবে। সাধারণত, অপারেটরটি
=~স্ট্রিংয়ে একটি রেজেক্স প্রয়োগ করতে ব্যবহৃত হয়, তবে যদি এই অপারেটরটি অনুপস্থিত থাকে তবে রেগেক্সটি অন্তর্ভুক্ত ভেরিয়েবলের সাথে প্রয়োগ করা হয় $_, যা mapফাংশনের মাধ্যমে আমাদের বর্তমান সংখ্যাটি অন্তর্ভুক্ত করে।
- স্ট্রিং অনুসন্ধান করতে। এই ক্ষেত্রে, আমরা ওয়াইল্ডকার্ড দ্বারা চিহ্নিত কোনও একক অ-নিউলাইন অক্ষর অনুসন্ধান করছি
.। বাস্তবে, আমরা প্রতিটি স্বতন্ত্র অঙ্ক ক্যাপচার করছি।
- স্ট্রিং সঙ্গে প্রতিস্থাপন। আমরা
+গাণিতিক প্রকাশের পরে একটি প্লাস চিহ্নটি প্রতিস্থাপন করছি , কিছু ম্যাজিকাল পার্ল ভেরিয়েবলের সাথে মিশ্রিত যা সবকিছুকে উল্লেখযোগ্যভাবে সহজ করে তোলে।
বিশেষ স্কেলার ভেরিয়েবল $&সর্বদা সর্বশেষ সফল রেগেক্স ক্যাপচারের সম্পূর্ণতা ধারণ করে, যা এই ক্ষেত্রে একক অঙ্ক। বিশেষ অ্যারে ভেরিয়েবল @+সর্বদা শেষ সফল ম্যাচের পোস্টম্যাচ অফসেটের একটি তালিকা থাকে , অর্থাত ম্যাচের পরে পাঠ্যের সূচক । অবিলম্বে নিম্নলিখিত পাঠ্য $+[0]ইনডেক্স হয় । এর ক্ষেত্রে , আমরা অঙ্কটি ক্যাপচার করি এবং তত্ক্ষণাত্ পাঠ্যের ইনডেক্সটি (যথা )) হয় 1, যা আমাদের প্রকাশক। সুতরাং, আমরা (1) এর শক্তিতে (1) বাড়াতে চাই এবং 1 পেতে চাই। আমরা 2টিকে 2 এর পাওয়ার বাড়াতে চাই এবং 9 পেতে চাই We আমরা 3 এর পাওয়ারে 5 বাড়াতে চাই এবং 125 পেতে চাই।$_$&135113535$&$+[0]
যদি ইনপুটটি ছিল 135, ফলাফলযুক্ত স্ট্রিং +1**1+3**2+5**3।
- রেজেেক্স-সংশোধনকারী পতাকাগুলি। এখানে আমরা দুটি রেগেক্স পতাকা ব্যবহার করছি -
/gএবং /r। /gপ্রথমটি খুঁজে পাওয়ার পরে দোভাষীকে প্রতিস্থাপন চালিয়ে যেতে বলে (অন্যথায় আমরা শেষ করতাম +1**135)। /rদোভাষীকে মূল স্ট্রিংটি সংশোধন না করতে এবং তার পরিবর্তে স্ট্রিংটি প্রতিস্থাপনের পরে ফিরে আসার কথা বলে। এটি গুরুত্বপূর্ণ, কারণ অন্যথায় এটি ওভাররাইট $_হবে এবং তুলনার উদ্দেশ্যে আমাদের এটির প্রয়োজন।
পুরো প্রতিস্থাপনটি শেষ হয়ে গেলে, আমরা একটি গাণিতিক এক্সপ্রেশন পাই যা evalফাংশনটির সাথে মূল্যায়ন করা হয় । মূল সংখ্যাটির সাথে তুলনা করা হয় যার +1**1+3**2+5**3মধ্যে মূল্যায়ন করা 1 + 9 + 125 = 135হয় 135। যেহেতু এই দুটি সমান, কোড সংখ্যাটি মুদ্রণ করে।