পার্ল, 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 পেতে চাই।$_
$&
135
1
135
35
$&
$+[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
। যেহেতু এই দুটি সমান, কোড সংখ্যাটি মুদ্রণ করে।