एक सार्वभौमिक पूर्णांक अनुक्रम बनाएँ


22

परिभाषा

आइए एक (अनंत) पूर्णांक अनुक्रम को सार्वभौमिक कहें, यदि इसमें प्रत्येक परिमित पूर्णांक अनुक्रम समवर्ती सन्दर्भ के रूप में हो।

दूसरे शब्दों में, पूर्णांक अनुक्रम ( 1 , 2 ,…) सार्वभौमिक है यदि और केवल यदि प्रत्येक परिमित पूर्णांक अनुक्रम (b 1 ,…, b n ) के लिए , एक ऑफसेट k ऐसा है जो ( k + 1) है ,…, A k + n ) = (b 1 ,…, b n )

सकारात्मक अभाज्य संख्याओं का क्रम, उदाहरण के लिए, निम्नलिखित कारणों से दूसरों के बीच सार्वभौमिक नहीं है।

  • इसमें कोई भी नकारात्मक पूर्णांक, 1 या समग्र संख्या नहीं है।

  • हालांकि इसमें 3 शामिल हैं , इसमें सन्निहित बाद (3, 3, 3) शामिल नहीं है

  • हालाँकि इसमें 2 और 5 शामिल हैं , लेकिन इसमें सन्निहित बाद (2, 5) शामिल नहीं है

  • यद्यपि इसमें सन्निहित परिणाम (7, 11, 13) शामिल हैं , लेकिन इसमें सन्निहित बाद (13, 11, 7) शामिल नहीं है

कार्य

उठाओ किसी भी एक सार्वभौमिक पूर्णांक अनुक्रम (एक 1 , एक 2 , ...) और अपनी पसंद का एक प्रोग्रामिंग भाषा में इसे लागू, निम्नलिखित नियमों के पालन करने वाली।

  • आप एक पूर्ण कार्यक्रम या एक फ़ंक्शन सबमिट कर सकते हैं।

  • आपके पास I / O के तीन विकल्प हैं:

    1. कोई इनपुट न लें और पूरे अनुक्रम को प्रिंट या वापस करें।

    2. एक सूचकांक लो n इनपुट के रूप में और प्रिंट या वापसी एक एन

    3. एक सूचकांक लो n इनपुट और प्रिंट या वापसी के रूप में (एक 1 , ..., एक एन )

  • I / O विकल्प 2 और 3 के लिए , यदि आप चाहें तो आप 0- आधारित अनुक्रमित का उपयोग कर सकते हैं।

  • आपका सबमिशन निर्धारक होना चाहिए: यदि एक ही इनपुट के साथ कई बार चला जाए, तो उसे एक ही आउटपुट का उत्पादन करना होगा।

इसके अलावा, जब तक यह तुरंत स्पष्ट न हो, कृपया साबित करें कि आपके द्वारा लिया गया अनुक्रम सार्वभौमिक है। आपका प्रमाण अप्रमाणित अनुमानों पर निर्भर नहीं हो सकता है।

मानक नियम लागू होते हैं। बाइट्स जीतने में सबसे छोटा कोड हो सकता है!


आपका प्रमाण अप्रमाणित अनुमानों पर निर्भर नहीं हो सकता है। मैंने सोचा कि यह निहित है: पी
एरिक आउटगोल्फर

और आप एक संख्या में संख्याओं की सूची कैसे बचाएंगे?
रोजलु 5

जवाबों:


13

भूसी , 5 बाइट्स

यह एक अनंत सूची प्रिंट करता है

ΣṖ…ݱ

इसे ऑनलाइन आज़माएं! या अपने अनुक्रम का पहला सूचकांक खोजें । (अधिकांश दृश्यों के लिए बहुत सी मेमोरी लेता है)

स्पष्टीकरण:

   ݱ   Infinite list [1,-1,2,-2,3,-3,4,-4,5,-5...]
  …     Rangify       [1,0,-1,0,1,2,1,0,-1,-2,...]
 Ṗ      Powerset
Σ       Concatenate

भूसी में अनंत सूचियों के लिए अच्छी तरह से व्यवहार करता है। आप देख सकते हैं यह यहाँ व्यवहार है


तुम कैसे Qकाम करता है पर विस्तृत करना चाहते हो सकता है । (मुझे लगता है कि मुझे मिल गया, लेकिन मुझे यकीन नहीं है।)
डेनिस

@ डेनिस को मैं चाहता था , नहींQ
H.PWiz

9

पायथन 2 , 49 46 43 बाइट्स

def f(n):d=len(`n`);return n/d**(n%d)%d-d/2

f(n)केवल एक n लौटाता है । यह nआधार के सबसे छोटे अंक का उपयोग dउच्च अंकों में से एक को निकालने के लिए करता है।

इसे ऑनलाइन आज़माएं! यह स्क्रिप्ट (डेनिस के सौजन्य से) किसी भी परिमित अनुक्रम को लेती है और आपको nवह क्रम देती है जहाँ से यह क्रम शुरू होता है।

व्याख्या

n/d**(n%d)%d-d/2
     (n%d)         least significant digit of n
n/d**(   )%d       get n%d-th digit of n
            -d/2   offset to get negative values

उदाहरण के लिए, nश्रेणी के 3141592650लिए 3141592659, d=10और अंतिम अंकों में से nएक अन्य अंक का चयन करता है। फिर हम -d/2नकारात्मक मान प्राप्त करने के लिए जोड़ते हैं।

n%d:       0  1  2  3  4  5  6  7  8  9
f(n)+d/2:  0  5  6  2  9  5  1  4  1  3
f(n):     -5  0  1 -3  4  0 -4 -1 -4 -2

स्टैंडअलोन विकल्प, 43 बाइट्स:

n=input();d=len(`n`);print n/d**(n%d)%d-d/2

आप उपयोग कर सकते हैं len(`n`)के बजाय len(str(n))
डेनिस

धन्यवाद @ डेनिस। अगर किसी को जरूरत हो तो मैं और स्पष्टीकरण जोड़ सकता हूं।
जेफ

मैंने एक फ़ंक्शन लिखा, जो एक परिमित अनुक्रम दिया, आपके अनुक्रम में एक ऑफसेट ढूंढता है। इसे ऑनलाइन आज़माएं!
डेनिस

यह बहुत अच्छा है।
हिस्टोक्रेट

अच्छा लगा। केवल बात यह है कि यह ऊपर से टूट जाएगा n=2**63-1क्योंकि प्रतिनिधित्व एक Lजोड़ा जाता है ( str(n)यदि आवश्यक हो तो तीन बाइट्स के लिए पता होगा)।
जोनाथन एलन

5

ब्रेकीलॉग 2, 11 बाइट्स

≜~×-₂ᵐ~ȧᵐ≜∋

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

मैंने एक सूची में योगात्मक विभाजनों का उपयोग करके एक एल्गोरिथ्म की भी कोशिश की, लेकिन यह कोई छोटा नहीं था। यह एक जनरेटर है जो आउटपुट के रूप में पूर्णांकों की एक अनंत धारा का उत्पादन करता है; TIO लिंक में उनमें से पहले दस हजार को प्रिंट करने के लिए एक हेडर है।

व्याख्या

कार्यक्रम अनुक्रम में सभी संभव पूर्णांकों की कोशिश करके शुरू होता है ( डिफ़ॉल्ट रूप से पूर्णांक के लिए सभी शेष संभावनाओं की कोशिश करता है)। यह 0, 1, -1, 2, -2, आदि है (हालांकि नकारात्मक पूर्णांक कार्यक्रम के अंत तक नहीं पहुंचते हैं)। यह कार्यक्रम का एकमात्र "अनंत" कदम है; अन्य सभी परिमित हैं।

तब पूर्णांक के सभी संभावित कारकों को उत्पन्न करता है, अलग-अलग आदेशों को अलग-अलग मानता है, और केवल 2 ऊपर से मूल्यों का उपयोग करता है (इसलिए केवल सूक्ष्म रूप से कई हैं); ध्यान दें कि गुणनखंड में संमिश्र संख्या की अनुमति है, न कि केवल प्राइम्स। इसका मतलब यह है कि पूर्णांक be 2 के सभी संभावित अनुक्रम फ़ंक्शन के निष्पादन में कुछ बिंदु पर इस कदम से उत्पन्न होंगे (जैसा कि आवश्यक रूप से कुछ उत्पाद है, और प्रारंभिक द्वारा कुछ बिंदु पर वह उत्पाद उत्पन्न होगा )।

फिर हमें सभी पूर्णांक अनुक्रमों के सेट पर उन अनुक्रमों के सेट को मैप करने की आवश्यकता होती है, जो दो चरणों में किया जाता है: -₂प्रत्येक तत्व से 2 ( ) घटाकर , हमें सभी गैर-पूर्णांक अनुक्रमों के सेट, फिर प्लस या माइनस प्रदान करते हैं। ( अर्थात, "एक मान जिसका पूर्ण मूल्य है") प्रत्येक तत्व ()। उत्तरार्द्ध कदम स्पष्ट रूप से नॉनडेर्मिनिस्टिक है, इसलिए ब्रेकीलॉग इसे एक जनरेटर के रूप में मानते हैं, सभी संभावित सूचियों को उत्पन्न करते हैं जिनके तत्व इनपुट सूची के संबंधित तत्व के प्लस या माइनस होते हैं। इसका मतलब है कि अब हमारे पास सभी संभावित पूर्णांक अनुक्रमों के लिए एक जनरेटर है, और यह उन्हें एक क्रम में उत्पन्न करता है, जिसका अर्थ है कि वे सभी उत्पन्न होते हैं (विशेष रूप से, आपको प्रत्येक तत्व का पूर्ण मूल्य लेने पर मिलने वाला आदेश, प्रत्येक में 2 जोड़ते हैं तत्व, और फिर परिणामी तत्वों के उत्पाद द्वारा आदेश)।

दुर्भाग्य से, प्रश्न एकल अनुक्रम चाहता है, अनुक्रमों का अनुक्रम नहीं, इसलिए हमें दो और आदेशों की आवश्यकता है। सबसे पहले, Brachylog अनुरोधों के अनुक्रमों को स्पष्ट रूप से उत्पन्न करने के लिए सख्ती से अनुरोध करता है (जैसा कि इस पद्धति के माध्यम से उत्पन्न अनुक्रम की अवधारणा का वर्णन करने वाले डेटा संरचना का उत्पादन करने के लिए विरोध किया जाता है, और वास्तव में आवश्यक होने तक अनुक्रमों को उत्पन्न नहीं करता है); यह दोनों इस मामले में कार्यक्रम को तेज करने के लिए होता है, और यह सुनिश्चित करता है कि आउटपुट अनुरोधित क्रम में निर्मित हो। अंत में, जनरेटर एक समय में एक व्यक्ति के अनुक्रमों के तत्वों को आउटपुट करने का कारण बनता है (अगले अनुक्रम पर आगे बढ़ते हुए एक बार यह पिछले सभी तत्वों को आउटपुट करता है)।

अंतिम परिणाम: प्रत्येक संभव पूर्णांक अनुक्रम उत्पन्न होता है और आउटपुट, एक समय में एक तत्व, और सभी को एक एकल सार्वभौमिक अनुक्रम में एक साथ मिलाया जाता है।


ais523 ... है कि तुम !?
घातक

यदि यह नहीं है, तो यह एक संयोग का नरक है, उनके हटाए गए खाते से पोस्ट पर विचार करना एक ही खाता संख्या दिखाता है।
पूरी तरह से


4

पायथन 2 , 100 99 बाइट्स

  • अंडा के लिए एक बाइट धन्यवाद बचा ; itertoolsअनिश्चित काल के लिए अंतर्निहित एक से अधिक पुनरावृति ।
from itertools import*
for n in count():
 for P in permutations(range(-n,n)*n):
	for p in P:print p

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

अनिश्चित काल के सभी nपरमिटों को बार-बार पूर्णांक [-n; n)के सभी nonnegative पूर्णांकों के लिए दोहराता है n
आप इस संशोधित संस्करणk का उपयोग करके किसी भी परिणाम के लिए पहले ऑफसेट की खोज कर सकते हैं ।


while~0:। हेह हे ...
चास ब्राउन

99 बाइट्स का उपयोग करitertools.count
ovs

@ ओव्स थैंक्स; उस बिल्ट-इन का पता नहीं था।
जोनाथन फ्रेच

2

पर्ल 6 , 91 बाइट्स

loop (my$i=1;;$i++){my@n=(-$i..$i);my@m=@n;loop (my$k=1;$k <$i;$k++){@m=@m X@n;};print @m;}

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

यह कुछ अन्य उत्तरों के समान विधि का उपयोग करता है। यह कार्टेशियन उत्पादों का उपयोग तत्वों को मुद्रित करने के लिए करता है (-1,0,1), फिर सभी तत्वों के जोड़े का आदेश देता है (-2,-1,0,1,2), फिर सभी तत्वों के तीन गुना आदेश दिए जाते हैं (-3,-2,-1,0,1,2,3), आदि।

मैं पर्ल के लिए नया हूं, इसलिए अधिक गोल्फिंग हो सकता है जो किया जा सकता है।

अधिक पठनीय संस्करण:

loop (my $i = 1; ; $i++) {
  my @n = (-$i..$i);
  my @m = @n;
  loop (my $k=1; $k <$i; $k++) {
    @m = @m X @n;
  }
  print @m;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.