চক্রীয় পার্থক্য সেটগুলি যাচাই করুন


14

একটি চক্রীয় পার্থক্য সেটটি অনন্য সম্পত্তি সহ ধনাত্মক পূর্ণসংখ্যার একটি সেট:

  1. আসুন nবৃহত্তম সেট পূর্ণ সেট।
  2. দিন r(সেটে অগত্যা) কোন পূর্ণসংখ্যা হতে 0 থেকে বেশি কিন্তু কম বা সমান n/2
  3. দিন kহতে সমাধান সংখ্যার জন্য (b - a) % n = rযেখানে aএবং bসেটের কোনো সদস্য। প্রতিটি সমাধান একটি অর্ডারযুক্ত জোড় (a,b)। (আরও মনে রাখবেন যে মডুলোর এই সংস্করণটি nঅনেক ভাষায় প্রয়োগের বিপরীতে একে যোগ করে নেতিবাচক সংখ্যাকে ইতিবাচক করে তোলে ))
  4. অবশেষে, যদি এবং কেবল যদি এটি একটি চক্রীয় পার্থক্য সেট হয় তবে এর মান kআপনার পছন্দের উপর নির্ভর করে না r। এটি হ'ল সমস্ত মানই rউপরের সম্মিলনে একই সংখ্যার সমাধান দেয়।

এটি নিম্নলিখিত উদাহরণ দিয়ে চিত্রিত করা যেতে পারে:

Cyclic difference set: {4,5,6,8,9,11}
0 < r <= 11/2, so r = 1,2,3,4,5
r=1: (4,5) (5,6) (8,9)
r=2: (4,6) (6,8) (9,11)
r=3: (5,8) (6,9) (8,11)
r=4: (4,8) (5,9) (11,4)  since (4-11)%11=(-7)%11=4
r=5: (4,9) (6,11) (11,5)

প্রতিটি মানের rক্ষেত্রে একই সংখ্যার সমাধান থাকে 3, সুতরাং এটি একটি চক্রীয় পার্থক্য সেট।

ইনপুট

ইনপুটটি ইতিবাচক পূর্ণসংখ্যার একটি তালিকা হবে। যেহেতু এই একটি সেট সম্পত্তি, অনুমান যে ইনপুট করা হয় না সাজানো। আপনি ধরে নিতে পারেন এটি nকমপক্ষে 2, যদিও kশূন্য হতে পারে।

আউটপুট

আপনার প্রোগ্রাম / ফাংশনটিতে সত্যবাদী মান আউটপুট করা উচিত যদি সেটটি একটি চক্রীয় পার্থক্য সেট হয়, বা অন্যথায় মিথ্যা মান।

পরীক্ষার কেস

বৈধ চক্রীয় পার্থক্য সেট:

10,12,17,18,21
7,5,4
57,1,5,7,17,35,38,49
1,24,35,38,40,53,86,108,114,118,135,144,185,210,254,266,273
16,3,19,4,8,10,15,5,6
8,23,11,12,15,2,3,5,7,17,1

( ডেটা উত্স , যদিও তাদের কনভেনশন আলাদা)

অবৈধ চক্রীয় পার্থক্য সেট:

1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8

1
পারি aএবং bএকই সদস্য (অগত্যা না a ≠ b)?
এরিক আউটগল্ফার

2
@EriktheOutgolfer যদি bএবং aএকই সংখ্যক, তারপর হয় (b-a)%n = 0, কিন্তু 0 মান যে আপনার জন্য সমাধান খুঁজছেন এক নয়। সুতরাং তাদের একই সংখ্যা হওয়ার বিষয়ে স্পষ্টভাবে নিষেধাজ্ঞা নেই, তবে তারা কখনও হবে না।
PhiNotPi

1
যদি আমি 7 7 7অবৈধ ইনপুট হত তবে আমি সত্যিই এটি পছন্দ করব । একটি সেট মানগুলির পুনরাবৃত্তি করে না
টন হসপেল

1
@ টনহসপেল সম্পন্ন হয়েছে এবং সম্পন্ন হয়েছে। 7 7 7অন্য ব্যবহারকারীর দ্বারা অনুরোধ করা হয়েছিল, তবে এটি সেট না করে আমি এটি সরিয়েছি।
PhiNotPi

1
Golfing ধারনা: আবদ্ধ আমরা প্রয়োজন হবে না rদ্বারা 0 < r <= max(input)/2, কিন্তু এর পরিবর্তে 0 < r < max(input)আমরা প্রাপ্ত করতে পারবেন না কারণ r > max(input)/2কেবলমাত্র বিয়োগ আলোকসম্পাতের দ্বারা মামলা r <= max(input)/2মামলা।
JangHwan মিন

উত্তর:


9

জেলি , 14 7 বাইট

_þ%ṀṬSE

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

কিভাবে এটা কাজ করে

_þ%ṀṬSE  Main link. Argument: A (array of unique elements / ordered set)

_þ       Subtract table; yield a 2D array of all possible differences of two
         (not necessarily distinct) elements of A.
  %Ṁ     Take the differences modulo max(A).
    Ṭ    Untruth; map each array of differences modulo max(A) to a Boolean array
         with 1's at the specified indices. Note that all 0's in the index array
         are ignored, since indexing is 1-based in Jelly.
     S   Take the sum of these arrays, counting occurrences.
      E  Test if all resulting counts are equal.

5

হুশ , 13 বাইট

Ë#m%▲¹×-¹¹ḣ½▲

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

তিনটি সুপারস্ক্রিপ্ট অপব্যয় বলে মনে হচ্ছে ...

ব্যাখ্যা

Ë#m%▲¹×-¹¹ḣ½▲  Input is a list, say x=[7,5,4]
            ▲  Maximum: 7
           ½   Halve: 3.5
          ḣ    Inclusive range from 1: [1,2,3]
Ë              All elements are equal under this function:
                Argument is a number, say n=2.
      ×-¹¹      Differences of all pairs from x: [0,-2,2,-3,0,3,-1,1,0]
  m%▲¹          Map modulo max(x): [0,5,2,4,0,3,6,1,0]
 #              Count occurrences of n: 1

4

ওল্ফ্রাম ভাষা (গণিত) , 53 52 বাইট

SameQ@@Counts@Mod[#-#2&@@@#~Permutations~{2},Max@#]&

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

দ্রষ্টব্য, প্রতিসমতার কারণে আমাদের সর্বোচ্চ উপাদানটি দুটি দ্বারা ভাগ করার দরকার নেই (আমরা সমস্ত মডুলোর সংখ্যা পরীক্ষা করতে পারি) 1 করতে পারি max(input) - 1)।

ব্যাখ্যা

#~Permutations~{2}

ইনপুটটির সমস্ত দৈর্ঘ্য -২ ক্রমানুসরণ নিন।

#-#2&@@@

প্রত্যেকের পার্থক্য খুঁজুন

Mod[ ... ,Max@#]

ইনপুট সর্বাধিক উপাদান দ্বারা ফলাফল মোড।

Counts@

প্রতিটি উপাদানের ফ্রিকোয়েন্সি সন্ধান করুন।

SameQ@@

সমস্ত সংখ্যার সমান কিনা তা ফিরিয়ে দিন।



3

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

ফেরত পাঠায় 0 বা 1

a=>a.map(b=>a.map(c=>x[c=(c-b+(n=Math.max(...a)))%n-1]=-~x[c]),x=[])|!x.some(v=>v^x[0])

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


3

পার্ল, 68 67 66 বাইট

+2জন্য অন্তর্ভুক্তap

perl -apE '\@G[@F];pop@G;s:\d+:$G[$_-$&].=1for@F:eg;$_="@G"=~/^1*( 1*)\1*$/' <<< "4 5 6 8 9 11"



2

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

l s=all((g 1==).g)[1..t-1]where t=maximum s;g j=[1|x<-s>>=(`map`s).(-),x==j||x+t==j]

l হল ফাংশন যা চেক করে। এটি কেবল সমস্ত পার্থক্য এবং গণনা গণনা করে।


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