चक्रीय अंतर सेट सत्यापित करें


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
गोल्फ विचार: हमें बाध्य होने की जरूरत नहीं rहै 0 < r <= max(input)/2, बल्कि 0 < r < max(input)इसलिए कि हम r > max(input)/2मामलों में केवल घटाव को पलट कर मामले प्राप्त कर सकते r <= max(input)/2हैं।
जुन्गवान मिन

जवाबों:


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%▲¹×-¹¹ḣ½▲

इसे ऑनलाइन आज़माएं!

तीन सुपरस्क्रिप्ट 1s बेकार लगते हैं ...

व्याख्या

Ë#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@#]&

इसे ऑनलाइन आज़माएं!

ध्यान दें, हम (हम सभी modulos की गिनती की जांच कर सकते समरूपता के कारण दो से अधिकतम तत्व को विभाजित करने की जरूरत नहीं है 1करने के लिए max(input) - 1)।

व्याख्या

#~Permutations~{2}

इनपुट के सभी लंबाई -2 क्रमपरिवर्तन लें।

#-#2&@@@

प्रत्येक के अंतर का पता लगाएं

Mod[ ... ,Max@#]

इनपुट के अधिकतम तत्व द्वारा परिणाम मॉड।

Counts@

प्रत्येक तत्व की आवृत्तियों का पता लगाएं।

SameQ@@

वापसी करें कि क्या सभी संख्याएँ समान हैं।



3

जावास्क्रिप्ट (ईएस 6), 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 वह फ़ंक्शन है जो चेक करता है। यह सिर्फ सभी अंतरों और गणनाओं की गणना करता है।


letwhereएक बाइट बचाने के बजाय एक पैटर्न गार्ड में : इसे ऑनलाइन आज़माएं!
लाकोनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.