स्वीकार्य अनुक्रमों के लिए परीक्षण


13

कार्यकारी सारांश: परीक्षण करें कि पूर्णांकों का एक इनपुट अनुक्रम "स्वीकार्य" है, जिसका अर्थ है कि यह किसी भी मापांक के लिए सभी अवशेष वर्गों को कवर नहीं करता है।

"स्वीकार्य" अनुक्रम क्या है?

पूर्णांक m, 2 को देखते हुए, रेसिड्यू क्लासेस modulo m सामान्य अंतर m के केवल m संभव अंकगणितीय प्रगति हैं। उदाहरण के लिए, जब m = 4, 4 अवशेष वर्ग modulo 4 हैं

..., -8, -4, 0, 4, 8, 12, ...
..., -7, -3, 1, 5, 9, 13, ...
..., -6, -2, 2, 6, 10, 14, ...
..., -5, -1, 3, 7, 11, 15, ...

Kth अवशिष्ट वर्ग में सभी पूर्णांक होते हैं जिनका शेष m m के द्वारा विभाजित होता है k। (जब तक कोई व्यक्ति नकारात्मक पूर्णांक के लिए "शेष" सही ढंग से परिभाषित करता है)

पूर्णांक a1, a2, ..., ak का एक क्रम स्वीकार्य मॉडुलो मीटर है यदि यह अवशेषों के कम से कम एक वर्ग को प्रतिच्छेद करने में विफल रहता है। उदाहरण के लिए, {0, 1, 2, 3} और {-4, 5, 14, 23} स्वीकार्य मॉडुलो 4 नहीं हैं , लेकिन {0, 1, 2, 4} और {0, 1, 5, 9} {0, 1, 2, -3} हैं स्वीकार्य सापेक्ष 4. इसके अलावा, {0, 1, 2, 3, 4} है नहीं स्वीकार्य सापेक्ष 4, जबकि {0, 1, 2} है स्वीकार्य सापेक्ष 4।

अंत में, पूर्णांक का एक क्रम बस स्वीकार्य है यदि यह प्रत्येक पूर्णांक m। 2 के लिए स्वीकार्य modulo m है।

चुनौती

एक प्रोग्राम या फ़ंक्शन लिखें जो पूर्णांक के अनुक्रम को इनपुट के रूप में लेता है, और यदि अनुक्रम स्वीकार्य है और अनुक्रम स्वीकार्य नहीं है तो (सुसंगत) मिथ्या मान यदि अनुक्रम स्वीकार्य नहीं है तो (सुसंगत) सत्य मान लौटाता है।

पूर्णांकों का इनपुट अनुक्रम किसी भी उचित प्रारूप में हो सकता है। आप मान सकते हैं कि इनपुट अनुक्रम में कम से कम दो पूर्णांक हैं। (आप यह भी मान सकते हैं कि इनपुट पूर्णांक अलग-अलग हैं यदि आप चाहते हैं, हालांकि यह संभवतः मदद नहीं करता है।) आपको सकारात्मक और नकारात्मक पूर्णांक (और 0) को संभालने में सक्षम होना चाहिए।

सामान्य स्कोरिंग: सबसे छोटा जवाब, बाइट्स में, जीतता है।

नमूना इनपुट

निम्नलिखित इनपुट अनुक्रमों में से प्रत्येक को एक सत्य मान देना चाहिए:

0 2
-1 1
-100 -200
0 2 6
0 2 6 8
0 2 6 8 12
0 4 6 10 12
-60 0 60 120 180
0 2 6 8 12 26
11 13 17 19 23 29 31
-11 -13 -17 -19 -23 -29 -31

निम्नलिखित इनपुट अनुक्रमों में से प्रत्येक को एक गलत मूल्य देना चाहिए:

0 1
-1 4
-100 -201
0 2 4
0 2 6 10
0 2 6 8 14
7 11 13 17 19 23 29
-60 0 60 120 180 240 300

टिप्स

  • ध्यान दें कि 3 या उससे कम पूर्णांक का कोई भी क्रम स्वचालित रूप से स्वीकार्य है। 4. अधिक सामान्यतः, लंबाई k का एक क्रम स्वचालित रूप से स्वीकार्य modulo m होता है जब m> k। यह निम्नानुसार है कि वास्तव में स्वीकार्यता के लिए परीक्षण के लिए केवल मीटर की एक सीमित संख्या की जांच की आवश्यकता होती है।
  • ध्यान दें कि 2 भी 4 को विभाजित करता है, और यह कि कोई भी अनुक्रम स्वीकार्य मोडुलो 2 है (अर्थात, सभी सम या विषम) स्वचालित रूप से स्वीकार्य मोडुलो है 4. अधिक सामान्यतः, यदि m n n को विभाजित करता है और एक अनुक्रम स्वीकार्य मोडुलो m है, तो यह है स्वचालित रूप से स्वीकार्य मॉडुलो एन। स्वीकार्यता की जांच करने के लिए, इसलिए यदि आप चाहें तो केवल प्राइम मी पर विचार करना पर्याप्त है।
  • यदि a1, a2, ..., ak एक स्वीकार्य अनुक्रम है, तो a1 + c, a2 + c, ..., ak + c किसी पूर्णांक c (धनात्मक या ऋणात्मक) के लिए भी स्वीकार्य है।

गणितीय प्रासंगिकता (वैकल्पिक पठन)

A1, a2, ..., ak पूर्णांक का अनुक्रम है। मान लीजिए कि असीम रूप से कई पूर्णांक n हैं जैसे n + a1, n + a2, ..., n + ak सभी अभाज्य हैं। फिर यह दिखाना आसान है कि a1, a2, ..., ak को स्वीकार्य होना चाहिए। वास्तव में, मान लीजिए कि a1, a2, ..., ak स्वीकार्य नहीं है, और मी एक संख्या है जैसे a1, a2, ..., ak, स्वीकार्य मोडुलो m नहीं है। फिर कोई फर्क नहीं पड़ता कि हम क्या चुनते हैं, संख्याओं में से एक n + a1, n + a2, ..., n + ak एक से अधिक होना चाहिए, इसलिए प्रधानमंत्री नहीं हो सकते।

प्रधानमंत्री k-tuples अनुमान इस बयान, जो अभी भी संख्या सिद्धांत में एक खुली समस्या यह है की बातचीत है: यह दावा है कि अगर A1, A2, ..., एके एक स्वीकार्य अनुक्रम (या है k-टपल ), तो वहाँ असीम रूप से कई पूर्णांक n होने चाहिए जैसे n + a1, n + a2, ..., n + ak सभी अभाज्य हैं। उदाहरण के लिए, स्वीकार्य अनुक्रम 0, 2 यह कथन देता है कि असीम रूप से कई पूर्णांक n होने चाहिए जैसे कि n और n + 2 दोनों प्रमुख हैं, यह जुड़वाँ primes अनुमान है (अभी भी अप्रमाणित)।


3
[_60:0:60:120:180]मुझे सच दे रहा है; वास्तव में यह समावेशी mसे 2लेकर प्रत्येक में कम से कम एक वर्ग को प्रतिच्छेद नहीं करता है 5; इसके अतिरिक्त, यह हर में केवल एक ही वर्ग से काटती mसे 2करने के लिए 5समावेशी।
लीक

1
मेरे पास [-60, 0, 60, 120, 180] के लिए समान है क्योंकि @LeakyNun के लिए यह स्वीकार्य होना चाहिए।
कार्ल नैप

-60 0 60 120 180 240 300प्रत्येक अवशेष वर्ग प्रतिरूप 7 को प्रतिच्छेद करता है, इसलिए यह स्वीकार्य नहीं है।
ग्रेग मार्टिन

क्या हम अब और परीक्षण कर सकते हैं?
लीके नन

@LeakyNun: किसी भी m के लिए, पहला m m एक स्वीकार्य अनुक्रम के रूप में m से बड़ा है। (दूसरा-टू-लास्ट ट्रुथ टेस्ट केस इसका उदाहरण है m = 7 के साथ।) मिथ्या परीक्षण के मामले पूर्णांक 1, ..., m से शुरू करके, k, m को चुनकर और यादृच्छिक गुणकों को जोड़कर उत्पन्न किया जा सकता है। किसी भी या सभी आरंभिक पूर्णांक 1, ..., मी।
ग्रेग मार्टिन

जवाबों:



7

ब्रेकीलॉग , 25 24 19 बाइट्स

5 बाइट्स कार्ल नेफ के लिए धन्यवाद।

lybb '(eM-yA ;:? [M] z:% anodA) 
l: 2' (eM-yA ?:? [M] z:% anodA)
एल: 2 '(EMG: rz:% adlM)

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

सभी टेस्टकेस की पुष्टि करें!

l:2'(eMg:?rz:%adlM)
l:2                  Temp = [2:length(input)]
   '(             )  true if the following cannot be proven:
     eM                  M is an element of the interval
                         indicated by Temp, i.e. from 2
                         to the length of input inclusive,
       g:?rz:%adlM       every element of input modulo M
                         de-duplicated has length M.

4

अजगर, 61 60 बाइट्स

q=lambda l,d=2:d>len(l)or q(l,d+1)&(len({v%d for v in l})<d)

Ideone पर सभी परीक्षण मामले

संपादित करें: तार्किक और बिटवाइज़ के साथ और एक बाइट को बचाने के लिए


2

जावास्क्रिप्ट (ईएस 6), 59 बाइट्स

a=>a.every((_,i)=>!i++|new Set(a.map(e=>(e%i+i)%i)).size<i)

@ KarlNapf के सेट का उपयोग करता है चाल की चाल।


1
ठीक है, यह एक चाल नहीं है, बस गणित ;-)
कार्ल नेफ

2

पायथन, 67 64 बाइट्स

अनाम लंबोदर के रूप में:

lambda N:all(len({i%m for i in N})<m for m in range(2,len(N)+1))
  • Edit1: के set()साथ प्रतिस्थापित किया गया{}
  • Edit2: जनरेटर के चारों ओर वर्ग कोष्ठक की आवश्यकता नहीं है all(...)
  • Edit3: जैसा कि जोनाथन एलन ने बताया, rangeऊपर जाना चाहिएlen(N)+1

फ़ंक्शन के रूप में पुराना कोड (96 बाइट्स):

def f(N):
 for m in range(2,len(N)+1):
    if len(set(i%m for i in N))==m:return False
 return True

1
इसके द्वारा मैं आपको अपने दृष्टिकोण के लिए क्रेडिट देता हूं जिसने मुझे 5 बाइट्स बचाए।
लीक

@LeakyNun आपका स्वागत है!
कार्ल नेप


2

MATL , 11 बाइट्स

"X@QGy\un>v

ट्रुथ एक सरणी (कॉलम वेक्टर) है जिसमें सभी शामिल हैं। मिथ्या एक सरणी है जिसमें कम से कम एक शून्य होता है। आप इस लिंक का उपयोग करके इन परिभाषाओं की जाँच कर सकते हैं ।

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें: सत्य , मिथ्या (थोड़ा संशोधित कोड, प्रत्येक मामला स्पष्टता के लिए एक क्षैतिज वेक्टर पैदा करता है)।

व्याख्या

"       % Take input array. For each; i.e. repeat n times, where n is arrray size
  X@Q   %   Push iteration index plus 1, say k. So k is 2 in the first iteration,
        %   3 in the second, ... n+1 in the last. Actually we only need 2, ..., n;
        %   but the final n+1 doesn't hurt
  G     %   Push input again
  y     %   Duplicate k onto the top of the stack
  \     %   Modulo. Gives vector of remainders of input when divided by k
  un    %   Number of distinct elements
  >     %   True if that number is smaller than k
  v     %   Vertically concatenate with previous results
        % End for each. Implicitly display 

मैं अभी भी इस साइट पर उन्मुख हो रहा हूं, इसलिए अगर यह एक अच्छी तरह से पूछा जाने वाला प्रश्न है, तो क्षमा करें, लेकिन: मुझे लगता है कि सत्य / मिथ्या मूल्य कुछ प्रकार के वास्तविक स्थिरांक होने चाहिए, न कि पैटर्न जैसे "एक सरणी युक्त" कम से कम एक शून्य ”। अंत में स्थिरांक पर पहुंचने के लिए किसी को सरणी (बिटवाइज़ और इस मामले में) का उपयोग नहीं करना चाहिए?
ग्रेग मार्टिन

@GregMartin यह एक बहुत अच्छा सवाल है। इसके उत्तर के बारे में हमारे पास बहुत ठोस सहमति है; यहाँ
लुइस मेंडू

1
समझ गया, और अब मुझे आपके पहले लिंक का बिंदु दिखाई दे रहा है। स्पष्टीकरण के लिए धन्यवाद!
ग्रेग मार्टिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.