রেজেক্স (পিসিআরই স্বাদ), 66 (65🐌) বাইট
মার্টিন ইন্ডার এবং জাটিয়া দুজনেই এই কোড গল্ফের রেগেক্স সমাধান লিখেছিল দেখে দেখে অনুপ্রাণিত হয়ে আমি প্রথম থেকেই নিজের লেখা লিখলাম। বিখ্যাত প্রাইম-চেকিং রেজেক্সগুলি আমার সমাধানে কোথাও উপস্থিত হয় না।
আপনি যদি কিছু অ্যানারি রেজেক্স যাদু আপনার জন্য নষ্ট না করতে চান তবে এটি পড়বেন না। আপনি যদি এই যাদুটি নিজেই বের করে নিতে শট নিতে চান তবে আমি ECMAScript রেজেক্সে কিছু সমস্যা সমাধানের মাধ্যমে সুপারিশ করার পরামর্শ দিচ্ছি:
- প্রাথমিক সংখ্যাগুলি মিলান (আপনি যদি রেজেক্সে এটি করার সাথে ইতিমধ্যে পরিচিত না হন)
- 2 এর মিলের পাওয়ার (যদি আপনি ইতিমধ্যে এটি না করে থাকেন)। অথবা রেগেক্স গল্ফের মাধ্যমে কেবল আপনার পথে কাজ করুন , এতে প্রাইম এবং পাওয়ারগুলি অন্তর্ভুক্ত রয়েছে। ক্লাসিক এবং টিউকন সমস্যা সেট উভয়ই করতে ভুলবেন না।
N এর ক্ষমতার সাথে মিলানোর সবচেয়ে সংক্ষিপ্ততম উপায়টি আবিষ্কার করুন যেখানে এন কিছু ধ্রুবক (যেমন রেজেক্সে নির্দিষ্ট, ইনপুট নয়) যা যৌগিক হতে পারে (তবে এটির প্রয়োজন নেই)। উদাহরণস্বরূপ, 6 এর সাথে মিলের ক্ষমতা।
Nth শক্তির সাথে মিলে যাওয়ার একটি উপায় সন্ধান করুন, যেখানে এন কিছু ধ্রুব>> = 2। উদাহরণস্বরূপ, নিখুঁত স্কোয়ারগুলি মেলে। (ওয়ার্মআপের জন্য, প্রধান শক্তির সাথে মেলে ))
সঠিক গুণক বিবৃতি মিলান। ত্রিভুজাকার সংখ্যাগুলি মিলান।
ফিবোনাচি সংখ্যাগুলি মেলে (যদি আপনি আমার মতোই পাগল হয়ে থাকেন), বা আপনি যদি ছোট কিছুকে আঁকড়ে রাখতে চান তবে ক্ষয়ক্ষতির সঠিক বিবৃতিগুলি মেলে (একটি ওয়ার্মআপের জন্য, 2 এর শক্তির বেস 2 তে লোগারিদমের সাথে ম্যাচ হিসাবে ফিরে আসুন - বোনাস, যে কোনও সংখ্যার জন্য একই করুন, আপনার পছন্দমতো গোল করুন) বা ফ্যাকটোরিয়াল সংখ্যা ( ওয়ার্মআপের জন্য, প্রাথমিক সংখ্যাগুলির সাথে মিল করুন )।
প্রচুর সংখ্যা মেলে (যদি আপনি আমার মতো উন্মাদ হন)
অনুরোধ করা নির্ভুলতার জন্য অযৌক্তিক সংখ্যার গণনা করুন (উদাহরণস্বরূপ গোলের ফলাফলটি ম্যাচ হিসাবে প্রত্যাবর্তন করে 2 এর বর্গমূল দিয়ে ইনপুটটি ভাগ করুন)
( আমি যে রেজেক্স ইঞ্জিনটি লিখেছিলাম তা সহায়ক হতে পারে, কারণ এটি অ্যারারি গণিতের রেজিক্সে খুব দ্রুত এবং এতে একটি অ্যানারি সংখ্যাসূচক মোড রয়েছে যা প্রাকৃতিক সংখ্যার ব্যাপ্তিগুলি পরীক্ষা করতে পারে (তবে স্ট্রিংস মোড রয়েছে যা অ-অ্যানারি রেজেক্সেসকে মূল্যায়ন করতে পারে বা অ্যানারি ডিলিমিটার সহ)। ডিফল্টরূপে এটি ECMAScript সামঞ্জস্যপূর্ণ, তবে alচ্ছিক এক্সটেনশনগুলি রয়েছে (যা বেছে বেছে পিসিআরআই, এমনকি এমনকি মলিকুলার লকহ্যাড, এমন কোনও বিষয় যা অন্য কোনও রেজেক্স ইঞ্জিন নেই add)
অন্যথায়, পড়ুন এবং এই গিটহব গিস্টটি (সতর্কতা, অনেক স্পেলার) পড়ুন যা ক্রমবর্ধমান অসুবিধাজনিত প্রাকৃতিক সংখ্যার কার্যাবলী মোকাবেলায় ECMAScript রেজেক্সকে ধাক্কা দেওয়ার যাত্রার ইতিহাসকে বর্ণনা করে (টিউকনের সেট ধাঁধা দিয়ে শুরু করে, সবগুলিই গাণিতিক নয়, যা এটিকে ছড়িয়ে দিয়েছিল যাত্রা)।
এই সমস্যার অন্যান্য রেজেক্স সমাধানগুলির মতো, ইনপুটটি দ্বিখণ্ডিত ইউনারীতে দুটি সংখ্যা হিসাবে দেওয়া হয়, একটি অন্তর্ভুক্ত ব্যাপ্তি উপস্থাপন করে একটি কমা দ্বারা পৃথক করা হয়। কেবল একটি নম্বর ফিরে আসে। পৃথক ম্যাচ হিসাবে একই ক্ষুদ্রতম বৃহত্তম মৌলিক ফ্যাক্টর ভাগ করে এমন সমস্ত সংখ্যাকে ফেরত দিতে রিজেজকে সংশোধন করা যেতে পারে তবে তার জন্য পরিবর্তনশীল দৈর্ঘ্যের লুকবিহাইডের প্রয়োজন হয় এবং \K
ম্যাচের পরিবর্তে ক্যাপচার হিসাবে ফলাফলটি ফিরিয়ে দেওয়া বা ফলাফলটি ফিরিয়ে আনতে হবে।
ক্ষুদ্রতম মৌলিক ফ্যাক্টর দ্বারা পুনরাবৃত্তি নিখুঁত বিভাগের জন্য এখানে ব্যবহৃত কৌশলটি ম্যাচের স্ট্রিংগুলিতে ব্যবহার করা মিলগুলির সাথে মিল রয়েছে যার দৈর্ঘ্যটি আমি যখন কিছুক্ষণ আগে পোস্ট করেছি চতুর্থ পাওয়ার উত্তর।
আর কোনও অ্যাডোও নেই:
((.+).*),(?!.*(?=\1)(((?=(..+)(\5+$))\6)*)(?!\2)).*(?=\1)\K(?3)\2$
আপনি এখানে চেষ্টা করে দেখতে পারেন
এবং মন্তব্যগুলির সাথে ফ্রি-স্পেসিং সংস্করণ:
# No ^ anchor needed, because this algorithm always returns a
# match for valid input (in which the first number is less than
# or equal to the second number), and even in /g mode only one
# match can be returned. You can add an anchor to make it reject
# invalid ranges.
((.+).*), # \1 = low end of range; \2 = conjectured number that is the
# smallest number in the set of the largest prime factor of each
# number in the range; note, it is only in subsequent tests that
# this is implicitly confined to being prime.
# We shall do the rest of our work inside the "high end of range"
# number.
(?! # Assert that there is no number in the range whose largest prime
# factor is smaller than \2.
.*(?=\1) # Cycle tail through all numbers in the range, starting with \1.
( # Subroutine (?3):
# Find the largest prime factor of tail, and leave it in tail.
# It will both be evaluated here as-is, and later as an atomic
# subroutine call. As used here, it is not wrapped in an atomic
# group. Thus after the return from group 3, backtracking back
# into it can increase the value of tail – but this won't mess
# with the final result, because only making tail smaller could
# change a non-match into a match.
( # Repeatedly divide tail by its smallest prime factor, leaving
# only the largest prime factor at the end.
(?=(..+)(\5+$)) # \6 = tool to make tail = \5 = largest nontrivial factor of
# current tail, which is implicitly the result of dividing it
# by its smallest prime factor.
\6 # tail = \5
)*
)
(?!\2) # matches iff tail < \ 2
)
# now, pick a number in the range whose largest prime factor is \2
.*(?=\1) # Cycle tail through all numbers in the range, starting with \1.
\K # Set us up to return tail as the match.
(?3) # tail = largest prime factor of tail
\2$ # Match iff tail == \2, then return the number whose largest
# prime factor is \2 as the match.
সাববারটিনের অনুলিপি সহ সাবরুটাইন কলটি প্রতিস্থাপন করে এবং \ কে ব্যবহার না করে ম্যাচটিকে ক্যাপচার গ্রুপ হিসাবে ফিরিয়ে দিয়ে অ্যালগোরিদমটি সহজেই ECMAScript এ পোর্ট করা যায়। ফল দৈর্ঘ্যে 80 বাইট:
((x+)x*),(?!.*(?=\1)((?=(xx+)(\4+$))\5)*(?!\2)).*(?=\1)(((?=(xx+)(\8+$))\9)*\2$)
এটি অনলাইন চেষ্টা করুন!
দ্রষ্টব্য যে সঠিক কার্যকারিতা হ্রাস না করে 1 বাইট (66 থেকে 65 বাইট ) দ্বারা আকার হ্রাস ((.+).*)
করতে পরিবর্তিত হতে পারে - তবে রেজেক্স স্বচ্ছলতার মধ্যে বিস্ফোরিত হয়।((.+)+)
এটি অনলাইন চেষ্টা করুন! (By৯ বাইট ECMAScript এক্সফোনেনশিয়াল-স্লোডাউন সংস্করণ)