স্ট্রিংয়ের আবর্তনীয় প্রতিসাম্য


9

একটি ঘূর্ণন "একটি স্ট্রিংকে দুটি টুকরো করে বিভক্ত করে এবং তাদের ক্রমকে বিপরীত করে তৈরি করা হয়" । কোনও অপারেশন অধীনে কোনও বস্তু প্রতিসম হয়, যদি বলা অপারেশন প্রয়োগের পরে অবজেক্টটি অপরিবর্তিত থাকে। সুতরাং, একটি "রোটেশনাল প্রতিসাম্য" হ'ল "আবর্তন" এর পরেও একটি স্ট্রিং অপরিবর্তিত থাকে।

একটি খালি স্ট্রিং দেওয়া sথেকে শুধুমাত্র অক্ষর নিয়ে গঠিত aকরার z, আউটপুট স্ট্রিং আবর্তনজনিত প্রতিসাম্য সর্বোচ্চ অর্ডার।

Testcases:

input        output
a            1
abcd         1
abab         2
dfdfdfdfdfdf 6

এই । বাইট জিতে সংক্ষিপ্ত উত্তর। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।



1
পূর্বে সিএমসি হিসাবে জিজ্ঞাসা করা হয়েছিল: chat.stackexchange.com/transcript/message/37509699#37509699
জন ডিভোরাক

এটি স্ট্রিংয়ের আকারের চেয়ে ছোট প্রতিসাম্য ঘূর্ণনের সংখ্যা সন্ধান করার সমান। @ 0 'এ উল্লেখ করে যে তারা একটি চক্রীয় গোষ্ঠী গঠন করে তাই সর্বোচ্চ ক্রম সন্ধান করা গ্রুপটির আকার অনুসন্ধান করার সমান। এটি টাস্কের ব্যাখ্যাটি তৈরি করবে যা বর্তমানে বেশ পরিষ্কার।
অ্যাডহক গার্ফ হান্টার

উত্তর:


8

রেটিনা , 15 বাইট

(^.+?|\1)+$
$#1

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

একটি স্ট্রিং পুনরাবৃত্তি করে পুরো স্ট্রিংয়ের সাথে মিল রাখে (সংক্ষিপ্ত সাবস্ট্রিংগুলি অজ্ঞদের কারণে অগ্রাধিকার দেওয়া হয় .+?) এবং আমরা ব্যবহৃত পুনরাবৃত্তির সংখ্যার সাথে পুরো স্ট্রিংটি প্রতিস্থাপন করে।


ওহ, অবশ্যই নির্দোষ এবং এখানে আমার সাথে লড়াই ছিল .*(.+)$(?<=^(\1)*)...
নিল

5

অভিনন্দন!
Leaky নুন

@ লিক্যুন এইটাই আপনার সমাধান ছিল, তাই না?
এরিক আউটগলফার

আসলে, এটা ছিল।
Leaky নুন

আপনার নাম কি গন্টলেট রেফারেন্স?
ব্যবহারকারী 2357112 মোনিকে

@ ব্যবহারকারী 2357112 এটি আউটগল্ফিংকে বোঝায় না অর্থাত্‍ যখন আপনি কোনও পোস্ট পোস্ট করা সমাধানের চেয়ে খাটো সমাধান পোস্ট করেন।
এরিক আউটগল্ফার


2

পাইথন, 31 বাইট

lambda s:len(s)/(s+s).find(s,1)

প্রথম অশূন্য সূচক খুঁজুন sমধ্যে s+sআউট কতদূর আমরা পেতে তা ঘোরাতে আছে চিত্র sপিছনে, তারপর দৈর্ঘ্য ভাগ sযে সংখ্যা দ্বারা। আইডিয়া ভিত্তিক আমি অন্য কোথাও দেখেছি


2

প্রোলোগ (এসডাব্লুআই) , 64 বাইট

A+B:-findall(X,(append(X,Y,A),append(Y,X,A)),[_|Z]),length(Z,B).

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

একটি প্রাকটিকে সংজ্ঞায়িত করে +/2যা তার প্রথম যুক্তি ( A) হিসাবে একটি অক্ষর (অক্ষর কোডের তালিকার আকারে ) নেয় এবং তার দ্বিতীয় যুক্তি ( B)টিকে সর্বোচ্চ অর্ডারের প্রতিসম ঘূর্ণনের ক্রমে সেট করে ।

ব্যাখ্যা

এই প্রোগ্রামটি এই সত্যটি ব্যবহার করে যে কোনও স্ট্রিংয়ের প্রতিসাম্য ঘূর্ণনের সেটটি একটি চক্রীয় গোষ্ঠী এবং তাই প্রতিসম ঘূর্ণনের সেটটির ক্রমটি সর্বোচ্চ ক্রমের প্রতিসম ঘূর্ণনের ক্রমের সমান। সুতরাং প্রোগ্রামটি ইনপুট স্ট্রিংয়ে প্রতিসাম্য ঘূর্ণনের মোট সংখ্যা খুঁজে বার করে কাঙ্ক্ষিত ফলাফল গণনা করতে সক্ষম হয়।

কোড ব্যাখ্যা

ভারী উত্তোলনের সিংহভাগই findall/3প্রিডিটকে কল করে সম্পন্ন হয় । findall/3সম্পৃক্ত প্রথম আর্গুমেন্ট (জন্য সব বিভিন্ন সম্ভাব্য মান খুঁজে বের করে Xএই ক্ষেত্রে) যেমন যে অভিব্যক্তি দ্বিতীয় যুক্তি হিসেবে দেওয়া (সত্য (append(X,Y,A),append(Y,X,A)), সেটিতে আরো পরে)। শেষ অবধি এটি Xচূড়ান্ত যুক্তিতে ( [_|Z]) যুক্তি হিসাবে এই সম্ভাব্য প্রতিটি মানকে সংরক্ষণ করে ।

অভিব্যক্তি মধ্যে পাস findall/3দ্বিতীয় arugment হিসেবে (append(X,Y,A),append(Y,X,A))ব্যবহার append/3করে নির্দিষ্ট করার সম্পৃক্ত Xকিছু এখনো অনির্দিষ্ট সঙ্গে ঘনিভূত Yসমান হতে হবে A, ইনপুট স্ট্রিং, এবং একই যে Yসঙ্গে ঘনিভূত Xআবশ্যক এছাড়াও সমান হতে A। এর অর্থ এটির Xকিছু উপসর্গ হতে হবে Aএটি যদি সামনে থেকে সরানো Aহয় এবং পিছনে যুক্ত করা হয় তবে ফলস্বরূপ স্ট্রিংটি সমান AXএই সম্পত্তির সাথে গুলিগুলির সেটটির প্রতিসাম্যিক ঘূর্ণনের সাথে প্রায় একের সাথে চিঠিপত্র থাকে A। ডাবল কাউন্টিংয়ের সর্বদা ঠিক একটি ক্ষেত্রে রয়েছে যা খালি স্ট্রিং এবং Aএর উপসর্গ উভয়ের কারণে ঘটেAযা 0-ঘূর্ণনের সাথে সামঞ্জস্য করে A। যেহেতু 0এর -rotation Aসবসময় প্রতিসম ফলে তালিকার দৈর্ঘ্য হল Xs থেকে findall/3উপর প্রতিসম ঘুর্ণন সংখ্যার চেয়ে এক বেশি হবে A

দ্বিগুণ গণনা সমস্যা সমাধানের জন্য, আমি findall/3প্রেডিকেটের তৃতীয় যুক্তির সাথে প্যাটার্ন মিলটি ব্যবহার করি use প্রোলোগের তালিকায় তাদের মাথার জোড়া (প্রথম উপাদান) এবং তাদের লেজ (বাকি অংশ) হিসাবে উপস্থাপিত হয়। সুতরাং এমন [_|Z]একটি তালিকা প্রতিনিধিত্ব করে যার লেজ সমান Z। এর অর্থ Zহ'ল দৈর্ঘ্যটি প্রিডিকেট দ্বারা পাওয়া উপসর্গের সংখ্যার চেয়ে কম findall/3এবং এইভাবে প্রতিসাম্যের ঘূর্ণনের সংখ্যার সমান A। অবশেষে, আমি দৈর্ঘ্যের উপর length/2সেট Bকরতে প্রিডিকেট ব্যবহার করি Z


2

জাভাস্ক্রিপ্ট (ES6), 42 41 বাইট

@ L4m2- এর জন্য 1 বাইট সংরক্ষণ করা হয়েছে

s=>s.length/s.match`(.+?)\\1*$`[1].length

পরীক্ষার মামলা


f=s=>s.length/s.match`(.+?)\\1*$`[1].length
l4m2

1

জাপট , 7 বাইট

¬x@¥UéY

এটি অনলাইন পরীক্ষা!

ব্যাখ্যা

 ¬ x@   ¥ UéY
 q xXY{ ==UéY}  // Expanded
Uq xXY{U==UéY}  // Variable introduction
                // Implicit: U = input string
Uq              // Split U into chars.
   xXY{      }  // Map each item X and index Y by this function, then sum the results:
       U==UéY   //   Return U equals (U rotated by Y characters).
                // Implicit: output result of last expression



0

হাস্কেল , 49 বাইট

g x=sum[1|a<-[1..length x],drop a x++take a x==x]

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

হাস্কেল , 49 বাইট

g x=sum[1|(a,_)<-zip[1..]x,drop a x++take a x==x]

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

ব্যাখ্যা

এটি 0 0 নির্দেশিত সরল সমাধান ব্যবহার করে। যেহেতু স্ট্রিংয়ের আবর্তনগুলি একটি চক্রাকার গোষ্ঠী গঠন করে সর্বোচ্চ ক্রমের উপাদানটি গ্রুপের আকারের সমান হয় সুতরাং আমরা প্রতিসাম্যিক ঘূর্ণনের সংখ্যাটি আবিষ্কার করে ইউনিটের ক্রম পেতে পারি।

কোডগুলি সহজ তালিকা উপলব্ধি করে এবং মূল স্ট্রিং সংরক্ষণ করে এমন ঘূর্ণনের সংখ্যা গণনা করে।


আপনি এই জাতীয় 3 বাইট সংরক্ষণ করার drop<>takeপরিবর্তে ব্যবহার করতে পারেন । (++)
ბიმო

@ বিএমও (<>)আমার সাথে কাজ করা হাস্কেলের সংস্করণে উপস্থাপিত নয়।
অ্যাডহক গারফ হান্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.