ম্যাচের স্ট্রিংগুলির দৈর্ঘ্য একটি চতুর্থ শক্তি


28

এই প্রশ্নের ক্ষেত্রের মধ্যে, আসুন আমরা কেবল সেই স্ট্রিংগুলি বিবেচনা করি যা চরিত্রটি নিয়ে গঠিত হয় xনির্বিচারে সংখ্যক বার।

উদাহরণ স্বরূপ:

<empty>
x
xx
xxxxxxxxxxxxxxxx

(ভাল, আসলে এটি হতে হবে না x- পুরো স্ট্রিংটিতে কেবলমাত্র 1 ধরণের অক্ষর রয়েছে এমন কোনও অক্ষর ঠিক আছে)

সমস্ত স্ট্রিংয়ের মিলের জন্য আপনার পছন্দের যেকোন রেগেক্স ফ্লেভারে একটি রেজেক্স লিখুন যার দৈর্ঘ্য কিছু অ-নেতিবাচক পূর্ণসংখ্যা n (n> = 0) এর জন্য এন 4 4 is উদাহরণস্বরূপ, 0, 1, 16, 81 ইত্যাদি দৈর্ঘ্যের স্ট্রিংগুলি বৈধ; বাকিগুলি অবৈধ।

প্রযুক্তিগত সীমাবদ্ধতার কারণে, 128 এর চেয়ে বড় n এর মানগুলির বিরুদ্ধে পরীক্ষা করা শক্ত। তবে আপনার রেজেক্সটি নির্বিশেষে যৌক্তিকভাবে সঠিকভাবে কাজ করা উচিত।

মনে রাখবেন যে আপনাকে আপনার রেজেক্সে (পার্ল ব্যবহারকারীদের কাছে) স্বেচ্ছাসেবক কোড কার্যকর করতে অনুমোদিত নয়। অন্য যে কোনও সিনট্যাক্সের (চেহারা-আশেপাশে, পিছনে-রেফারেন্স ইত্যাদি) অনুমোদিত।

সমস্যাটি সম্পর্কে আপনার পদ্ধতির সম্পর্কে একটি সংক্ষিপ্ত বিবরণও অন্তর্ভুক্ত করুন।

(দয়া করে অটো উত্পাদিত রেজেক্স সিনট্যাক্স ব্যাখ্যাটি পেস্ট করবেন না, যেহেতু তারা অকেজো)


"এক্সএক্স" বৈধ নয়, তাই না?
কেন্ডাল ফ্রে

@ কেন্ডালফ্রে: না এটি বৈধ নয়।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

@ আনহট্টঃ আপনি কি মনে করেন যে এর কোনও সম্ভাব্য উত্তর আছে?
xem

1
@ টিমভি: হ্যাঁ জাভা, পিসিআরই (সম্ভবত পার্লও, তবে পরীক্ষা করতে পারবেন না), নেট। যদিও রুবি / জেএসে খনি কাজ করে না।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
এই প্রশ্নটি "অ্যাডভান্সড রেজেক্স-ফু" এর অধীনে স্ট্যাক ওভারফ্লো নিয়মিত এক্সপ্রেশন FAQ এ যুক্ত করা হয়েছে ।
aliteralmind

উত্তর:


21

এটি (আইআর) নিয়মিত প্রকাশটি কার্যকর বলে মনে হচ্ছে।

^((?(1)((?(2)\2((?(3)\3((?(4)\4x{24}|x{60}))|x{50}))|x{15}))|x))*$

এই রেজেক্সটি পিসিআরই, পার্ল,। নেট স্বাদগুলির সাথে সামঞ্জস্যপূর্ণ।

এটি মূলত একটি "ডিফারেন্ট ট্রি" অনুসরণ করে (এটির জন্য সঠিক নাম আছে কিনা তা নিশ্চিত নয়), যা রেগেক্সকে জানায় যে পরবর্তী চতুর্থ শক্তির জন্য আরও কত এক্স মিলবে:

1     16    81    256   625   1296  2401 ...
   15    65    175   369   671   1105 ...
      50    110   194   302   434 ...
         60    84    108   132 ...
            24    24    24 ...  # the differences level out to 24 on the 4th iteration

\2, \3, \4দোকান এবং আপডেটের পার্থক্য যেমন যথাক্রমে 2nd, 3 য় এবং 4 র্থ সারি দেখানো।

উচ্চতর শক্তিগুলির জন্য এই নির্মাণটি সহজেই বাড়ানো যেতে পারে।

অবশ্যই একটি মার্জিত সমাধান নয়, তবে এটি কাজ করে।


+1 টি। দুর্দান্ত উত্তর। যদিও এই উত্তরটি আমার থেকে পৃথক (এটি শর্তাধীন রেজেক্স ব্যবহার করে, যখন খনিটি দেয় না), এতে আমার সমাধানের মতো একই স্পিরিট রয়েছে (পার্থক্যযুক্ত গাছটিকে কাজে লাগিয়ে কিছু রিজেক্স ইঞ্জিনের সামনে-ঘোষিত ব্যাক-রেফারেন্স ব্যবহার করুন)।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

ঝরঝরে ধারণা আবার পার্থক্য গাছ। স্কোয়ারের জন্য গাছ 1 4 9 16 ... 3 5 7 ... 2 2 2, ডান?
স্পার

ধন্যবাদ @Sparr, এবং হ্যাঁ
উদ্বায়ীতামূলক

24

আরেকটি সমাধান

এটি আমার মতে সাইটের সবচেয়ে আকর্ষণীয় সমস্যা of আমার উপরে ডেডকোডটি শীর্ষে ফেলার জন্য ধন্যবাদ জানাতে হবে।

^((^|xx)(^|\3\4\4)(^|\4x{12})(^x|\1))*$

39 বাইট , কোনও শর্ত ছাড়াই বা দাবি ছাড়াই ... সাজানো। ^|"প্রথম পুনরাবৃত্তি," এবং "প্রথম পুনরাবৃত্তি নয়" এর মধ্যে নির্বাচন করার জন্য বিকল্পগুলি যেমন ব্যবহার করা হচ্ছে ( ), এটি একরকম শর্তাধীন are

এই রেজেক্সটি এখানে কাজ করতে দেখা যেতে পারে: http://regex101.com/r/qA5pK3/1

পিসিআরই এবং পাইথন উভয়ই রেজেক্সকে সঠিকভাবে ব্যাখ্যা করে এবং এটি এন 4 -1 এবং এন 4 +1 সহ এন = 128 অবধি পার্লেও পরীক্ষা করা হয়েছে ।


সংজ্ঞা

সাধারণ কৌশলটি ইতিমধ্যে পোস্ট করা অন্যান্য সমাধানগুলির মতোই: স্ব-রেফারেন্সিং এক্সপ্রেশনটি সংজ্ঞায়িত করুন যা প্রতিটি পরবর্তী পুনরাবৃত্তিতে সীমাহীন কোয়ান্টিফায়ার ( ) এর সাথে ফরোয়ার্ড পার্থক্য ফাংশন, ডি এর পরবর্তী টার্মের সমান দৈর্ঘ্যের সাথে মেলে *। ফরোয়ার্ড পার্থক্য ফাংশনের একটি আনুষ্ঠানিক সংজ্ঞা:

সংজ্ঞা 1: ফরোয়ার্ড পার্থক্য ফাংশন

অতিরিক্তভাবে, উচ্চতর অর্ডার পার্থক্য ফাংশনগুলিও সংজ্ঞায়িত করা যেতে পারে:

সংজ্ঞা 2: দ্বিতীয় ফরোয়ার্ড পার্থক্য ফাংশন

বা আরও সাধারণভাবে:

সংজ্ঞা 3: Kth ফরোয়ার্ড পার্থক্য ফাংশন

ফরোয়ার্ড পার্থক্য ফাংশন অনেক আকর্ষণীয় বৈশিষ্ট্য আছে; এটি ক্রমাগত ক্রিয়াকলাপগুলিতে ডেরাইভেটিভ কী তা অনুক্রমগুলি। উদাহরণস্বরূপ, ডি একটি এর এন ম অর্ডার বহুপদী সবসময় একটি হতে হবে এন -1 ম অর্ডার বহুপদী, এবং যে কোনো জন্য আমি , যদি ডি আমি = ডি আমি +1 , তারপর ফাংশন একই ভাবে সূচকীয় হয় যে ব্যুৎপন্ন এক্স নিজেই সমান। যার জন্য সহজ বিযুক্ত ফাংশন = ডি হয় 2 এন


f (n) = n 2

উপরের সমাধানটি পরীক্ষা করার আগে, আসুন আমরা কিছুটা সহজ কিছু দিয়ে শুরু করি: একটি রেজেক্স যা স্ট্রিংগুলির সাথে মেলে যার দৈর্ঘ্য একটি নিখুঁত বর্গ। ফরোয়ার্ড পার্থক্য ফাংশন পরীক্ষা করা:

এফডিএফ: এন ^ 2

অর্থ, প্রথম পুনরাবৃত্তির দৈর্ঘ্যের 1 টি , দ্বিতীয় দৈর্ঘ্যের 3 স্ট্রিং , তৃতীয় দৈর্ঘ্যের 5 টি স্ট্রিং ইত্যাদির সাথে মিল থাকা উচিত এবং সাধারণভাবে, প্রতিটি পুনরাবৃত্তির আগেরটির চেয়ে দুটি দীর্ঘ দীর্ঘ স্ট্রিংয়ের সাথে মেলে। সংশ্লিষ্ট রেজেক্স এই বিবৃতি থেকে প্রায় সরাসরি অনুসরণ করে:

^(^x|\1xx)*$

এটি দেখা যায় যে প্রথম পুনরাবৃত্তি কেবল একটির সাথে মিলবে xএবং প্রতিটি পরবর্তী পুনরাবৃত্তি পূর্বের চেয়ে দু'বার দীর্ঘ একটি স্ট্রিংয়ের সাথে মিলবে, ঠিক যেমনটি নির্দিষ্ট করা হয়েছে। এটি পার্লের মধ্যে একটি আশ্চর্যজনকভাবে সংক্ষিপ্ত নিখুঁত নিখুঁত স্কোয়ার পরীক্ষাটি বোঝায়:

(1x$_)=~/^(^1|11\1)*$/

এই রেজেক্সটিকে আরও সাধারণ করা যেতে পারে যে কোনও এন- আঞ্চলিক দৈর্ঘ্যের সাথে মেলে :

ত্রিভুজাকার সংখ্যা:
^(^x|\1x{1})*$

বর্গ সংখ্যা:
^(^x|\1x{2})*$

পেন্টাগোনাল সংখ্যা:
^(^x|\1x{3})*$

ষড়ভুজ সংখ্যা:
^(^x|\1x{4})*$

প্রভৃতি


f (n) = n 3

নেভিগেশন মুভিং এন 3 , আবার এগিয়ে পার্থক্য ফাংশন পরীক্ষা:

এফডিএফ: এন ^ 3

এটি কীভাবে বাস্তবায়ন করা যায় তা তাত্ক্ষণিকভাবে স্পষ্ট নাও হতে পারে, তাই আমরা দ্বিতীয় তফাত কার্যটিও পরীক্ষা করি:

এফডিএফ ^ 2: এন ^ 3

সুতরাং, ফরোয়ার্ড পার্থক্য ফাংশন একটি ধ্রুবক দ্বারা বৃদ্ধি হয় না, বরং একটি লিনিয়ার মান দ্বারা। এটি দুর্দান্ত যে ডি এফ 2 এর প্রাথমিক (' -1 ম') মানটি শূন্য, যা দ্বিতীয় পুনরাবৃত্তির একটি সূচনা সংরক্ষণ করে। ফলস্বরূপ রেজেক্সটি নিম্নলিখিত:

^((^|\2x{6})(^x|\1))*$

প্রথম পুনরাবৃত্তিটি 1 টির সাথে মিলবে , আগের মতো, দ্বিতীয়টি স্ট্রিংটির সাথে 6 টি দীর্ঘ ( 7 ), তৃতীয়টি 12 টি দীর্ঘ ( 19 ) ইত্যাদির সাথে মিলবে etc.


f (n) = n 4

এগিয়ে পার্থক্য ফাংশন এন 4 :

এফডিএফ: এন ^ 4

দ্বিতীয় ফরোয়ার্ড পার্থক্য ফাংশন:

এফডিএফ ^ 2: n ^ 4

তৃতীয় ফরোয়ার্ড পার্থক্য ফাংশন:

এফডিএফ ^ 3: n ^ 4

এখন যে কুৎসিত। ডি এফ 2 এবং ডি এফ 3 এর প্রাথমিক মানগুলি যথাক্রমে শূন্য, 2 এবং 12 উভয়ই , যার জন্য জবাবদিহি করতে হবে। আপনি সম্ভবত এখনই আবিষ্কার করেছেন যে রেজেক্স এই ধরণটি অনুসরণ করবে:

^((^|\2\3{b})(^|\3x{a})(^x|\1))*$

কারণ ডি 3 একটি দৈর্ঘ্য মেলানো 12 দ্বিতীয় পুনরাবৃত্তির উপর, একটি অগত্যা হয় 12 । তবে এটি প্রতি শব্দে 24 দ্বারা বৃদ্ধি পায় , পরবর্তী গভীর নীড়গুলি অবশ্যই তার পূর্ববর্তী মানটি দুবার ব্যবহার করবে, বি = 2 বোঝায় । করতে চূড়ান্ত জিনিস আরম্ভ হয় ডি 2 । যেহেতু ডি এফ 2 সরাসরি ডি এফকে প্রভাবিত করে, যা আমরা শেষ পর্যন্ত মিলে যেতে চাই, এর ক্ষেত্রে উপযুক্ত অণু সরাসরি রেজেক্সে serুকিয়ে এর মানটি আরম্ভ করা যেতে পারে (^|xx)। এরপরে চূড়ান্ত রেজেক্সটি হয়ে যায়:

^((^|xx)(^|\3\4{2})(^|\4x{12})(^x|\1))*$

উচ্চতর আদেশ

একটি পঞ্চম অর্ডার বহুবর্ষটি নিম্নলিখিত রেজেক্সের সাথে মেলানো যেতে পারে:
^((^|\2\3{c})(^|\3\4{b})(^|\4x{a})(^x|\1))*$

f (n) = n 5 একটি মোটামুটি সহজ অংশ, কারণ দ্বিতীয় এবং চতুর্থ উভয় পার্থক্যের পার্থক্যের জন্য প্রাথমিক মানগুলি শূন্য:

^((^|\2\3)(^|\3\4{4})(^|\4x{30})(^x|\1))*$

ছয়টি অর্ডার বহুবর্ষের জন্য:
^((^|\2\3{d})(^|\3\4{c})(^|\4\5{b})(^|\5x{a})(^x|\1))*$

সপ্তম অর্ডার বহুপদী জন্য:
^((^|\2\3{e})(^|\3\4{d})(^|\4\5{c})(^|\5\6{b})(^|\6x{a})(^x|\1))*$

প্রভৃতি

নোট করুন যে সমস্ত বহুত্ববিন্দু ঠিক এইভাবে মেলে না, যদি প্রয়োজনীয় কোনও সহগগুলি অ-পূর্ণসংখ্যা হয়। উদাহরণস্বরূপ, এন 6 এর জন্য a = 60 , b = 8 এবং c = 3/2 দরকার । উদাহরণস্বরূপ, এটি প্রায় কাজ করা যেতে পারে:

^((^|xx)(^|\3\6\7{2})(^|\4\5)(^|\5\6{2})(^|\6\7{6})(^|\7x{60})(^x|\1))*$

এখানে আমি b কে 6 এবং সি তে 2 এ পরিবর্তন করেছি , যার উপরে বর্ণিত মানগুলির সমান পণ্য রয়েছে। এটি গুরুত্বপূর্ণ যে পণ্যটি পরিবর্তিত হয় না, যেমন একটি · b · c ·… ধ্রুবক পার্থক্য ফাংশন নিয়ন্ত্রণ করে, যা ষষ্ঠ আদেশের বহুপদী জন্য ডি এফ 6 । এক আরম্ভ আছে: বর্তমান দুই আরম্ভের পরমাণু দ্বারা ডি করার 2 , সঙ্গে যেমন এন 4 , এবং পঞ্চম পার্থক্য ফাংশন আরম্ভ করার জন্য অন্য 360 একই সাথে থেকে হারিয়েছে দুই যোগ


আপনি কোন ইঞ্জিনটি এটি পরীক্ষা করেছেন?
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

আমি অবশেষে বুঝতে পারি কী চলছে। প্রকৃতপক্ষে ফরওয়ার্ড-রেফারেন্সের জন্য প্রয়োজন কেবলমাত্র জিনিস। +1
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

@ নাহহধঃ আহ, ঠিক বলেছেন। ফরোয়ার্ড-রেফারেন্সগুলি অগত্যা হয় কোনও সর্বজনীন বৈশিষ্ট্য নয়।
primo

1
অসাধারণ! আমি এটি সংক্ষিপ্ত, সহজ এবং সহজে বুঝতে সহজ। অগভীর বাসা বাঁধার সাথে, এটি কীভাবে আচরণ করবে তা হাত দ্বারা গণনা করা সহজ। এছাড়াও, এটি ভোলাটিলিটির এবং নহধের সমাধানগুলির সমান তত দ্রুত । এবং আমি আপনার বিস্তারিত ব্যাখ্যা পছন্দ করি, বিক্ষোভ সহ যে এটি এমনকি বহুপদীতেও বাড়ানো যেতে পারে। আমি পারলে বোনাস পয়েন্ট দিতাম।
ডেডকোড

@ লিন ধন্যবাদ! এটা প্রত্যাশা করছিল না ...
প্রিমো

13

এখানে এমন একটি সমাধান রয়েছে যা শর্তসাপেক্ষে, ফরোয়ার্ড-ঘোষিত বা নেস্টেড ব্যাকরেফারেন্সস, লুকবিহাইড, ব্যালান্সিং গ্রুপগুলি বা রেজেক্স পুনরাবৃত্তি ব্যবহার করে না। এটি কেবল চেহারা এবং স্ট্যান্ডার্ড ব্যাক রেফারেন্স ব্যবহার করে, যা খুব ব্যাপকভাবে সমর্থিত। রেগেক্স গল্ফের কারণে আমি এই সীমাবদ্ধতার অধীনে কাজ করতে অনুপ্রাণিত হয়েছি , যা ইসিএমএস স্ক্রিপ্ট রেজেক্স ইঞ্জিন ব্যবহার করে।

এই 50 বাইট রেজেক্সটি যেভাবে কাজ করে তা ধারণার চেয়ে বরং সহজ এবং এই ধাঁধার সমস্ত জমা দেওয়া সমাধানের চেয়ে সম্পূর্ণ আলাদা। আবিষ্কার করে অবাক হয়ে গেল যে এই ধরণের গাণিতিক যুক্তিটি একটি রেজেক্সে প্রকাশযোগ্য ছিল।

      \2                     \4  \5
^((?=(xx+?)\2+$)((?=\2+$)(?=(x+)(\4+)$)\5){4})*x?$

(ক্যাপচার গোষ্ঠীগুলিকে রেজেক্সের উপরে লেবেলযুক্ত করা হয়েছে)

Regex কেবল প্রতিস্থাপন করে যে কোনো ক্ষমতায় সাধারণ যাবে 4মধ্যে {4}পছন্দসই ক্ষমতা সঙ্গে।

এটি অনলাইন চেষ্টা করুন!

এটি একটি প্রাইমের ক্ষুদ্রতম চতুর্থ শক্তি বারবার ভাগ করে কাজ করে যা বর্তমান মান দ্বারা বিভাজ্য। যেমন প্রতিটি পদক্ষেপে ভাগফল সর্বদা একটি চতুর্থ শক্তি, যদি মূল মানটি একটি চতুর্থ শক্তি হয়। 1 এর একটি চূড়ান্ত ভাগফল ইঙ্গিত দেয় যে আসল মানটি সত্যই একটি চতুর্থ শক্তি ছিল; এটি ম্যাচটি সম্পূর্ণ করে। শূন্যও মিলেছে।

প্রথমে \2সংখ্যার ক্ষুদ্রতম ফ্যাক্টরটিকে 1 এর চেয়ে বড় ক্যাপচারের জন্য এটি একটি অলস ক্যাপচার গ্রুপ ব্যবহার করে As যেমনটি, এই উপাদানটি প্রধান হওয়ার নিশ্চয়তা দেওয়া হয়। উদাহরণস্বরূপ, 1296 (6 ^ 4) দিয়ে এটি প্রাথমিকভাবে \2= 2 টি ক্যাপচার করবে ।

এর পরে, একটি লুপ যে 4 বার পুনরাবৃত্তি করা হয় শুরুতে, এটা যদি বর্তমান সংখ্যা দ্বারা বিভাজ্য কিনা দেখতে পরীক্ষা \2, সঙ্গে (?=\2+$)। এই লুপের মাধ্যমে প্রথমবারের মতো, এই পরীক্ষাটি অকেজো, তবে এর উদ্দেশ্যটি পরে প্রকাশিত হবে।

পরবর্তী এই ভেতরের লুপ ভিতরে, এটা লোভী ক্যাপচার গ্রুপ ব্যবহার \4সংখ্যা সর্ববৃহৎ ফ্যাক্টর নিজেই চেয়ে ছোট ক্যাপচার: (?=(x+)(\4+)$)। বাস্তবে এটি সংখ্যাটিকে তার ক্ষুদ্রতম প্রধান উপাদান দ্বারা বিভক্ত করে \2; উদাহরণস্বরূপ, 1296 প্রাথমিকভাবে \4= 1296/2 = 648 হিসাবে ধরা হবে Note নোট করুন যে বর্তমান সংখ্যার বিভাজন \2অন্তর্নিহিত। যদিও ক্যাপচার গ্রুপে থাকা একটি সংখ্যার (যা আমি এই উত্তর পোস্ট করার মাত্র চার দিন পরে আবিষ্কার করেছি) দ্বারা বর্তমান সংখ্যাটি স্পষ্টভাবে বিভাজন করা সম্ভব হয়েছে, এটি করার ফলে ধীর এবং শক্ত-বোঝা-বোঝার রেজেক্স তৈরি হবে এবং এটি তা নয় প্রয়োজনীয়, যেহেতু 1 এর চেয়ে বড় একটি সংখ্যার ক্ষুদ্রতম ফ্যাক্টরটি সর্বদা নিজের চেয়ে ছোট তার বৃহত ফ্যাক্টরের সাথে মিলবে (যেমন তাদের পণ্যটি সংখ্যার সাথে সমান)।

যেহেতু এই ধরণের রেজেক্স স্ট্রিংয়ের শেষে ফলাফল রেখে "স্ট্রিংটি" এটি "ছোট করে" ফেলতে পারে, সুতরাং স্ট্রিংয়ের শেষে আমাদের বিভাজনের ফলাফলটি "সরানো" দরকার। এটি বিয়োগের ফলাফলটি (বর্তমান নম্বর বিয়োগ \4) ক্যাপচার গ্রুপে ক্যাপচারের মাধ্যমে করা হয় \5এবং তারপরে, লকहेডের বাইরে, বর্তমান সংখ্যার শুরুর অংশের সাথে মিল রেখে \5। এটি \4দৈর্ঘ্যের শেষে মিলের বাকী অপ্রসারণযুক্ত স্ট্রিংটি ফেলে দেয় ।

এখন এটি অভ্যন্তরীণ লুপের শুরুতে ফিরে আসে, যেখানে এটি মৌলিক ফ্যাক্টরের দ্বারা বিভাজনের জন্য পরীক্ষা কেন হয় তা স্পষ্ট হয়ে যায়। আমরা কেবল সংখ্যার ক্ষুদ্রতম মৌলিক ফ্যাক্টর দ্বারা ভাগ করেছি; সংখ্যাটি এখনও যদি সেই ফ্যাক্টর দ্বারা বিভাজ্য হয়, এর অর্থ মূল সংখ্যাটি factor গুণকের চতুর্থ শক্তির দ্বারা বিভাজ্য হতে পারে। এই পরীক্ষাটি প্রথমবার করার পরে এটি অকেজো, তবে পরের 3 বার এটি নির্ধারণ করে যে স্পষ্টত বিভাজনের ফলাফলটি \2এখনও দ্বারা বিভাজনযোগ্য কিনা \2\2লুপের প্রতিটি পুনরাবৃত্তির শুরুতে যদি এটি এখনও বিভাজ্য হয় , তবে এটি প্রমাণ করে যে প্রতিটি পুনরাবৃত্তিটি সংখ্যাটিকে বিভক্ত করে \2

আমাদের উদাহরণস্বরূপ, 1296 এর ইনপুট সহ, এটি নিম্নলিখিত হিসাবে লুপ হবে:

\2= 2
\4= 1296/2 = 648
\4= 648/2 = 324
\4= 324/2 = 162
\4= 162/2 = 81

এখন রেজেক্স প্রথম ধাপে ফিরে লুপ করতে পারে; এটিই চূড়ান্ত *করে। এই উদাহরণে, 81 নতুন নম্বর হয়ে উঠবে; পরবর্তী লুপটি নিম্নলিখিত হিসাবে যাবে:

\2= 3
\4=
\481/3 = 27 = 27/3 = 9
\4= 9/3 = 3
\4= 3/3 = 1

এটি এখন নতুন সংখ্যা হিসাবে 1 সহ আবার প্রথম ধাপে ফিরে আসবে।

1 নম্বরটি কোনও প্রাইম দ্বারা ভাগ করা যায় না, যা এটি একটি অ-মিল করে তোলে (?=(xx+?)\2+$), তাই এটি শীর্ষ-স্তরের লুপটি ( *শেষের সাথে একটি) থেকে প্রস্থান করে । এটি এখন পৌঁছেছে x?$। এটি কেবল শূন্য বা একটির সাথে মেলে। এই মুহুর্তে বর্তমান সংখ্যা 0 বা 1 হবে এবং যদি মূল সংখ্যাটি একটি নিখুঁত চতুর্থ শক্তি ছিল; যদি এটি এই মুহুর্তে 0 হয় তবে এর অর্থ হ'ল শীর্ষ-স্তরের লুপটি কখনও কোনও কিছুর সাথে মেলে না এবং এটি যদি 1 হয় তবে এর অর্থ শীর্ষ স্তরের লুপটি একটি নিখুঁত চতুর্থ শক্তিকে বিভক্ত করে না দেওয়া অবধি অবধি কোনও কিছুর দ্বারা বিভাজ্য হয় না (অথবা এটি প্রথম স্থানে ছিল 1, অর্থাত শীর্ষ স্তরের লুপটি কোনও কিছুর সাথে মেলে না)।

পুনরায় সুস্পষ্ট বিভাগ দ্বারা এটি 49 বাইটে সমাধান করাও সম্ভব (যা সমস্ত শক্তির জন্যও সাধারণীকরণ করা হয় - কাঙ্ক্ষিত শক্তি বিয়োগকে একের মধ্যে প্রতিস্থাপন করুন {3}), তবে এই পদ্ধতিটি বহুদূরে, ধীর গতির এবং এটি যে অ্যালগরিদম ব্যবহার করে তার ব্যাখ্যা is এই উত্তরের সুযোগের বাইরে:

^((x+)((\2(x+))(?=(\4*)\2*$)\4*(?=\5$\6)){3})?x?$

এটি অনলাইন চেষ্টা করুন!


আমার পরীক্ষা থেকে (1024 দৈর্ঘ্য পর্যন্ত) মনে হচ্ছে এটি সঠিক। যাইহোক, রেজেক্স খুব ধীর - দৈর্ঘ্য 16 ^ 4 মেলাতে এটি অনেক সময় নেয়, তাই বড় সংখ্যার জন্য যাচাই করা খুব কঠিন। তবে যেহেতু পারফরম্যান্সের প্রয়োজনীয়তা নেই, আমি যখন আপনার রেজেক্সটি বুঝি তখন আমি উজ্জীবিত হব।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
আপনার রেজেক্স এবং ভোলাটিলিটি দুর্দান্ত। তাদের গতি এবং সংকীর্ণতা আমাকে অবাক করে দিয়েছে, দু'টিই আমার i7-2600k এ 7.5 সেকেন্ডে 100000000 এর সাথে মিলছে, আমি একটি রেজেস হওয়ার প্রত্যাশা করেছিলাম তার চেয়ে অনেক দ্রুত। এখানে আমার সমাধানটি সম্পূর্ণ ভিন্ন মাত্রার মাত্রায় রয়েছে, কারণ এটি 50625 মেলাতে 12 সেকেন্ড সময় নেয় But তবে আমার সাথে লক্ষ্যটি গতি ছিল না, বরং আরও বেশি সীমাবদ্ধ অপারেশনগুলির সেট ব্যবহার করে ন্যূনতম কোড দৈর্ঘ্যে কাজটি সম্পাদন করা।
ডেডকোড

আমাদের উত্তরগুলি দ্রুত, কারণ তারা সবেমাত্র কোনও ব্যাকট্র্যাকিং করে do আপনার প্রচুর ব্যাকট্র্যাকিং করা ((((x+)\5+)\4+)\3+)\2+$। আপনার নিজের উপায়েও আশ্চর্যজনক, যেহেতু আমি ঘোষণাও করতে পারি না যে কীভাবে কোনও বর্ধমান ঘোষিত ব্যাকরফারেন্স ছাড়াই কোনও বর্গ সংখ্যার সাথে মেলে যায়।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

যাইহোক, এই প্রশ্নটি কোড-গল্ফ নয়, একটি ধাঁধা। আমি কোড দৈর্ঘ্য দ্বারা সমাধান বিচার না।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

উহু. এটি কেন আপনি ব্যবহার করেছেন তা ব্যাখ্যা করে (?:)। সুতরাং আমি কি আমার উত্তরটি অনুকূলিত সংস্করণটিকে প্রাথমিক হিসাবে তৈরি করতে পারি?
ডেডকোড

8

সমাধান

^(?:(?=(^|(?<=^x)x|xx\1))(?=(^|\1\2))(^x|\3\2{12}xx))*$

এই রেজেক্সটি জাভা, পার্ল, পিসিআরই এবং। নেট স্বাদের সাথে সামঞ্জস্যপূর্ণ। এই রেজেক্সটি বেশ কয়েকটি বৈশিষ্ট্য ব্যবহার করে: দেখুন-সামনের, চেহারা-পিছন এবং এগিয়ে-ঘোষিত ব্যাক-রেফারেন্স। ফরোয়ার্ড-ঘোষিত ব্যাক-রেফারেন্স ধরণের ধরণেরগুলি এই ইঞ্জিনটির সামঞ্জস্যকে কয়েকটি ইঞ্জিনে সীমাবদ্ধ করে।

ব্যাখ্যা

এই দ্রবণটি নিম্নলিখিত উপার্জনের ব্যবহার করে।

সমষ্টিটি পুরোপুরি প্রসারিত করে আমরা নিম্নলিখিত সাম্যতা প্রমাণ করতে পারি:

\ যোগফল \ সীমা__ {i = 1} ^ n (i + 1) ^ 4 - \ যোগফল \ সীমা_ {i = 1} i নি ^ 4 = (এন + 1) ^ 4 - 1
\ যোগফল \ সীমাগুলি_ {i = 1} i নি ^ 4 - \ যোগফল \ সীমা_ {i = 1} ^ n (আই -1) ^ 4 = n ^ 4

আসুন বাম-হাতের অংশটি সংমিশ্রণ করি:

\ যোগফল \ সীমা_ {i = 1} ^ n (4 (আমি + 1) ^ 3 - 6 (আই + 1) ^ 2 + 4 (আই + 1) - 1) = (এন + 1) ^ 4 - 1
\ যোগফল \ সীমাগুলি_ {i = 1} ^ n (4 আই ^ 3 - 6 আই ^ 2 + 4 আই - 1) = n ^ 4

2 সমীকরণ বিয়োগ করুন (শীর্ষ সমীকরণ বিয়োগ তল সমীকরণ) এবং তারপরে বাম-হাতের সারসংক্ষেপগুলি একত্রিত করুন, তারপরে এটি সরল করুন:

\ যোগফল \ সীমাগুলি_ {i = 1} ^ n (12i ^ 2 + 2) = (এন + 1) ^ 4 - এন ^ 4 - 1

আমরা পাওয়ার পরিমাণ হিসাবে টানা চতুর্থ শক্তির মধ্যে পার্থক্যটি পেয়েছি:

(n + 1) ^ 4 - n ^ 4 = \ যোগফল \ সীমা_ {i = 1} ^ n (12i ^ 2 + 2) + 1

এর অর্থ এই যে টানা চতুর্থ শক্তির মধ্যে পার্থক্য (12 এন 2 + 2) বৃদ্ধি পাবে

উদ্বিগ্নতার উত্তরের পার্থক্য গাছকে উল্লেখ করে এটি ভাবতে সহজ করার জন্য :

  • চূড়ান্ত সমীকরণের ডান দিকের দিকটি হ'ল পার্থক্যযুক্ত গাছের দ্বিতীয় সারির।
  • ইনক্রিমেন্ট (12 এন 2 + 2) পার্থক্য গাছের তৃতীয় সারিতে।

যথেষ্ট গণিত। উপরের সমাধানটিতে ফিরে যান:

  • 1 ম ক্যাপচারিং গ্রুপটি সমীকরণের মতো দেখতে 2 টি গণনা করার জন্য বিজোড় সংখ্যার একটি সিরিজ বজায় রাখে ।

    যথাযথভাবে বলতে গেলে লুপটি পুনরাবৃত্ত হওয়ার সাথে সাথে 1 ম ক্যাপচারিং গ্রুপের দৈর্ঘ্য 0 (অব্যবহৃত), 1, 3, 5, 7, হবে ...

    (?<=^x)xবিজোড় সংখ্যা সিরিজের জন্য প্রাথমিক মান নির্ধারণ করে। ^ঠিক আছে বর্ণন সম্মতি প্রথম পুনরাবৃত্তির সন্তুষ্ট করার অনুমতি নেই।

    xx\1 2 টি যোগ করুন এবং পরবর্তী বিজোড় সংখ্যায় অগ্রিম করুন।

  • ২ য় ক্যাপচারিং গ্রুপ i 2 এর জন্য বর্গ সংখ্যা সিরিজ বজায় রাখে ।

    যথাযথভাবে বলতে গেলে, দ্বিতীয় ক্যাপচারিং গ্রুপের দৈর্ঘ্য 0, 1, 4, 9, হবে ... লুপটি পুনরাবৃত্ত হওয়ার সাথে সাথে।

    ^মধ্যে (^|\1\2)সেট বর্গ সংখ্যা সিরিজের জন্য প্রাথমিক মান। এবং \1\2পরবর্তী বর্গ সংখ্যায় এটি অগ্রসর করার জন্য বিজোড় সংখ্যাটি বর্তমান বর্গাকার সংখ্যায় যুক্ত করে।

  • তৃতীয় ক্যাপচারিং গোষ্ঠী (যে কোনও চেহারা-এর বাইরে এবং আসলে পাঠ্য গ্রাস করে) আমরা উপরে উত্পন্ন সমীকরণের পুরো ডান হাতের সাথে মেলে।

    ^xমধ্যে (^x|\3\2{12}xx)সেট প্রাথমিক মান, যা + 1সমীকরণের ডান প্রান্তের।

    \3\2{12}xxগ্রুপ 2 ক্যাপচারিং থেকে এন 2 ব্যবহার করে পার্থক্যের বৃদ্ধি (12 এন 2 + 2) যোগ করুন এবং একই সাথে পার্থক্যটি মেলে।

প্রতিটি পুনরাবৃত্তিতে মিলিত পাঠ্যের পরিমাণের কারণে এই ব্যবস্থা সম্ভব হয়েছে এন 2 নির্মাণের জন্য চেহারা-এগিয়ে চালানোর জন্য প্রয়োজনীয় পাঠ্যের পরিমাণের চেয়ে বেশি বা সমান ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.