संख्या के लिए अनिश्चित आकार की एक सूची मैप करें!


11

यह अच्छी तरह से जाना जाता है, अनंत का अध्ययन करने वाले गणित के क्षेत्र में, कि किसी भी परिमित सेट की मात्रा का कार्टेशियन उत्पाद भी गणना योग्य है

आपका कार्य इसे कार्यान्वित करने के लिए दो कार्यक्रम लिखना है, एक सूची से पूर्णांक तक का मानचित्र, एक पूर्णांक से सूची में मैप करना।

आपका फ़ंक्शन विशेषण और नियतात्मक होना चाहिए, जिसका अर्थ है कि 1हमेशा एक निश्चित सूची में 2मैप किया जाएगा , और हमेशा एक और निश्चित मानचित्र पर मैप किया जाएगा, आदि ...

इससे पहले , हमने पूर्णांकों को एक सूची में मैप किया था, जिसमें केवल 0और 1

हालाँकि, अब इस सूची में गैर-ऋणात्मक संख्याएँ होंगी।

चश्मा

  • कार्यक्रम / समारोह, उचित इनपुट / आउटपुट प्रारूप।
  • क्या मैप किए गए पूर्णांक से शुरू 1होता है या से शुरू होता है 0, आपकी पसंद है, जिसका अर्थ है कि 0किसी भी चीज़ के लिए (लेकिन हो सकता है) नक्शा नहीं है।
  • खाली सरणी []को एन्कोड किया जाना चाहिए।
  • इनपुट / आउटपुट किसी भी आधार में हो सकता है।
  • दो कार्यों के बीच कोड साझा करने की अनुमति है

स्कोरिंग

यह । सबसे कम स्कोर जीतता है।

स्कोर दो कार्यक्रमों / कार्यों की लंबाई (बाइट्स में) है।


"हालांकि, अब सूची में गैर-नकारात्मक संख्याएं शामिल होंगी।"
लीक नून

तो, स्पष्ट होने के लिए, हम मैपिंग कर रहे हैं N^inf -> N?
मेगो

@Mego N ^ inf गणनीय नहीं है। N ^ k जहां k किसी भी परिमित संख्या है।
लीक नून

हम इस बारे में चैट में चर्चा कर रहे हैं।
लीक नून

चाहे वह 1 से शुरू हो या 0 से शुरू हो, आपकी पसंद है। क्या यह सूची में एकल पूर्णांक और पूर्णांक पर लागू होता है।
डेनिस

जवाबों:


10

जेली , 18 16 बाइट्स

पूर्णांक की सूची, 10 8 बाइट्स

TṪạL;³ÆẸ

सकारात्मक पूर्णांकों के लिए गैर-नकारात्मक पूर्णांक की मानचित्र सूचियां। इसे ऑनलाइन आज़माएं!

सूची बद्ध करने के लिए, 8 बाइट्स

ÆE©Ḣ0ẋ®;

गैर-नकारात्मक पूर्णांकों की सूचियों के लिए सकारात्मक पूर्णांक को मैप करता है। इसे ऑनलाइन आज़माएं!

पृष्ठभूमि

चलो पी 0 , पी 1 , पी 2 , ⋯ आरोही क्रम में रूढ़ अंक के अनुक्रम हो।

गैर नकारात्मक पूर्णांक में से प्रत्येक सूची के लिए एक: = [एक 1 , ⋯, एक एन ] , हम नक्शा एक करने के लिए पी 0 जेड (ए) पी 1 एक 1 ⋯ पी एन एक एन , जहां जेड (ए) की संख्या है ए के शून्य से पीछे चल रहा है ।

ऊपर के नक्शे को सीधा में उलटा। एक सकारात्मक पूर्णांक कश्मीर के लिए , हम इसे लगातार मुख्य शक्तियों n = p 0 α 0 p 1 α 1 α p n α n , जहां α n > 0 के उत्पाद के रूप में विशिष्ट रूप से फैक्टर करते हैं , फिर सूची को 1 , ⋯, के रूप में फिर से बनाते हैं। α n ] , α 0 शून्य जोड़ते हुए ।

यह काम किस प्रकार करता है

पूर्णांक के लिए सूची

TṪạL;³ÆẸ  Main link. Argument: A (list of non-negative integers)

T         Yield all indices of A that correspond to truthy (i.e., non-zero) items.
 Ṫ        Tail; select the last truthy index.
          This returns 0 if the list is empty.
   L      Yield the length of A.
  ạ       Compute the absolute difference of the last truthy index and the length.
          This yields the amount of trailing zeroes of A.
    ;³    Prepend the difference to A.
      ÆẸ  Convert the list from prime exponents to integer.

सूची में पूर्णांक

ÆE©Ḣ0ẋ®;  Main link. Input: k (positive integer)

ÆE        Convert k to the list of its prime exponents.
  ©       Save the list of prime exponents in the register.
   Ḣ      Head; pop the first exponent.
          If the list is empty, this yields 0.
    0ẋ    Construct a list of that many zeroes.
      ®;  Concatenate the popped list of exponents with the list of zeroes.       

उदाहरण आउटपुट

निम्नलिखित सूचियों में पहले एक सौ सकारात्मक पूर्णांक मानचित्र।

  1: []
  2: [0]
  3: [1]
  4: [0, 0]
  5: [0, 1]
  6: [1, 0]
  7: [0, 0, 1]
  8: [0, 0, 0]
  9: [2]
 10: [0, 1, 0]
 11: [0, 0, 0, 1]
 12: [1, 0, 0]
 13: [0, 0, 0, 0, 1]
 14: [0, 0, 1, 0]
 15: [1, 1]
 16: [0, 0, 0, 0]
 17: [0, 0, 0, 0, 0, 1]
 18: [2, 0]
 19: [0, 0, 0, 0, 0, 0, 1]
 20: [0, 1, 0, 0]
 21: [1, 0, 1]
 22: [0, 0, 0, 1, 0]
 23: [0, 0, 0, 0, 0, 0, 0, 1]
 24: [1, 0, 0, 0]
 25: [0, 2]
 26: [0, 0, 0, 0, 1, 0]
 27: [3]
 28: [0, 0, 1, 0, 0]
 29: [0, 0, 0, 0, 0, 0, 0, 0, 1]
 30: [1, 1, 0]
 31: [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 32: [0, 0, 0, 0, 0]
 33: [1, 0, 0, 1]
 34: [0, 0, 0, 0, 0, 1, 0]
 35: [0, 1, 1]
 36: [2, 0, 0]
 37: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 38: [0, 0, 0, 0, 0, 0, 1, 0]
 39: [1, 0, 0, 0, 1]
 40: [0, 1, 0, 0, 0]
 41: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 42: [1, 0, 1, 0]
 43: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 44: [0, 0, 0, 1, 0, 0]
 45: [2, 1]
 46: [0, 0, 0, 0, 0, 0, 0, 1, 0]
 47: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 48: [1, 0, 0, 0, 0]
 49: [0, 0, 2]
 50: [0, 2, 0]
 51: [1, 0, 0, 0, 0, 1]
 52: [0, 0, 0, 0, 1, 0, 0]
 53: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 54: [3, 0]
 55: [0, 1, 0, 1]
 56: [0, 0, 1, 0, 0, 0]
 57: [1, 0, 0, 0, 0, 0, 1]
 58: [0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
 59: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 60: [1, 1, 0, 0]
 61: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 62: [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
 63: [2, 0, 1]
 64: [0, 0, 0, 0, 0, 0]
 65: [0, 1, 0, 0, 1]
 66: [1, 0, 0, 1, 0]
 67: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 68: [0, 0, 0, 0, 0, 1, 0, 0]
 69: [1, 0, 0, 0, 0, 0, 0, 1]
 70: [0, 1, 1, 0]
 71: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 72: [2, 0, 0, 0]
 73: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 74: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
 75: [1, 2]
 76: [0, 0, 0, 0, 0, 0, 1, 0, 0]
 77: [0, 0, 1, 1]
 78: [1, 0, 0, 0, 1, 0]
 79: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 80: [0, 1, 0, 0, 0, 0]
 81: [4]
 82: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
 83: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 84: [1, 0, 1, 0, 0]
 85: [0, 1, 0, 0, 0, 1]
 86: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
 87: [1, 0, 0, 0, 0, 0, 0, 0, 1]
 88: [0, 0, 0, 1, 0, 0, 0]
 89: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 90: [2, 1, 0]
 91: [0, 0, 1, 0, 1]
 92: [0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
 93: [1, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 94: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
 95: [0, 1, 0, 0, 0, 0, 1]
 96: [1, 0, 0, 0, 0, 0]
 97: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 98: [0, 0, 2, 0]
 99: [2, 0, 0, 1]
100: [0, 2, 0, 0]

ये जबरदस्त है।
लीक नून

3

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

d=lambda n:map(len,bin(n).split('1')[1:])
e=lambda l:int('1'.join(a*'0'for a in[2]+l),2)

डेमो:

>>> for i in range(33):
...     print e(d(i)), d(i)
... 
0 []
1 [0]
2 [1]
3 [0, 0]
4 [2]
5 [1, 0]
6 [0, 1]
7 [0, 0, 0]
8 [3]
9 [2, 0]
10 [1, 1]
11 [1, 0, 0]
12 [0, 2]
13 [0, 1, 0]
14 [0, 0, 1]
15 [0, 0, 0, 0]
16 [4]
17 [3, 0]
18 [2, 1]
19 [2, 0, 0]
20 [1, 2]
21 [1, 1, 0]
22 [1, 0, 1]
23 [1, 0, 0, 0]
24 [0, 3]
25 [0, 2, 0]
26 [0, 1, 1]
27 [0, 1, 0, 0]
28 [0, 0, 2]
29 [0, 0, 1, 0]
30 [0, 0, 0, 1]
31 [0, 0, 0, 0, 0]
32 [5]

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

यहां एक अधिक "कुशल" समाधान है जहां आउटपुट की बिट-लेंथ एक्सपोनेंशियल की बजाय इनपुट की बिट-लेंथ में रैखिक है।

def d(n):m=-(n^-n);return d(n/m/m)+[n/m%m+m-2]if n else[]
e=lambda l:int('0'+''.join(bin(2*a+5<<len(bin(a+2))-4)[3:]for a in l),2)

मेरे समाधान के रूप में एक ही एल्गोरिथ्म का उपयोग करता है :)
लीक नून

@ केनीलाऊ: मैंने आपके समाधान को नहीं देखा था। वे समान दिखते हैं लेकिन समान नहीं हैं (0s और 1s स्वैप किए गए हैं)। और आपकी खाली सूची को राउंड-ट्रिप करने में विफल रहता है।
एंडर्स कासोर्ग

मैं देखता हूं, याद दिलाने के लिए धन्यवाद।
लीक नून

वैसे, मैंने कहा कि आउटपुट किसी भी बेस में हो सकता है ।
लीक नून

के बाद से कार्यों के बीच साझा करने कोड की अनुमति दी है, ऐसा लगता है कि तुम सिर्फ निर्माण कर सकते हैं eके लिए उलटा होने के लिए d: e=lambda l,i=0:l!=d(i)and-~e(l,i+1)
xnor

1

पायथन 2, 204 202 बाइट्स

p=lambda x,y:(2*y+1<<x)-1
u=lambda n,x=0:-~n%2<1and u(-~n//2-1,x+1)or[x,n//2]
e=lambda l:l and-~reduce(p,l,len(l)-1)or 0
def d(n):
 if n<1:return[]
 r=[];n,l=u(n-1);exec"n,e=u(n);r=[e]+r;"*l;return[n]+r

Z + x Z + <-> Z + bijection को बार-बार लागू करने से काम करता है, जो सूची की लंबाई के अनुसार है।

0: []
1: [0]
2: [1]
3: [0, 0]
4: [2]
5: [0, 0, 0]
6: [1, 0]
7: [0, 0, 0, 0]
8: [3]
9: [0, 0, 0, 0, 0]
10: [1, 0, 0]
11: [0, 0, 0, 0, 0, 0]
12: [0, 1]
13: [0, 0, 0, 0, 0, 0, 0]
14: [1, 0, 0, 0]
15: [0, 0, 0, 0, 0, 0, 0, 0]
16: [4]
17: [0, 0, 0, 0, 0, 0, 0, 0, 0]
18: [1, 0, 0, 0, 0]
19: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
20: [0, 0, 1]
21: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
22: [1, 0, 0, 0, 0, 0]
23: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
24: [2, 0]
25: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
26: [1, 0, 0, 0, 0, 0, 0]
27: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
28: [0, 0, 0, 1]
29: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
30: [1, 0, 0, 0, 0, 0, 0, 0]
31: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

एक प्रश्न: कौन सा फ़ंक्शन "लिस्ट टू पूर्णांक" फ़ंक्शन है, और कौन सा "पूर्णांक टू लिस्ट" फ़ंक्शन है?
user48538

@ zyabin101 eपूर्णांक की सूची है, सूची से पूर्णांक d(एनकोड / डीकोड) है।
orlp

मुझे यह समाधान पसंद है।
लीक नून

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