एक लूपिंग सरणी बनाएं


15

परिचय

एक सूचक सरणी एक सरणी है Lअशून्य पूर्णांकों जहां के 0 ≤ L[i]+i < len(L)सभी सूचकांकों के लिए रखती है i(यह मानते हुए 0-आधारित अनुक्रमण)। हम कहते हैं कि सूचकांक सूचकांक को i इंगित करता है L[i]+i। सूचक सूचक एक लूप है यदि सूचकांकों में लंबाई का एक चक्र होता है len(L)। यहाँ कुछ उदाहरण हैं:

  • [1,2,-1,3]एक सूचक सरणी नहीं है, क्योंकि यह 3एक सूचकांक को इंगित नहीं करता है।
  • [1,2,-1,-3]एक सूचक सरणी है, लेकिन लूप नहीं है, क्योंकि कोई सूचकांक इंगित नहीं करता है -1
  • [2,2,-2,-2] एक सूचक सरणी है, लेकिन लूप नहीं है, क्योंकि सूचकांक दो चक्र बनाते हैं।
  • [2,2,-1,-3] एक पाश है।

इनपुट

आपका इनपुट किसी भी उचित प्रारूप में नॉनजरो पूर्णांकों की गैर-रिक्त सूची है। यह अनसुलझा हो सकता है और / या डुप्लिकेट हो सकता है।

उत्पादन

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

उदाहरण

इनपुट के लिए [2,-4,2], एक स्वीकार्य आउटपुट होगा [2,2,-1,1,-4]

नियम और स्कोरिंग

आप एक पूर्ण कार्यक्रम या एक फ़ंक्शन लिख सकते हैं। सबसे कम बाइट गिनती जीतता है, और मानक खामियों को रोक दिया जाता है। आपके उत्तर में उदाहरण इनपुट और आउटपुट के एक जोड़े को शामिल करना सराहनीय है।

परीक्षण के मामलों

ये प्रारूप में दिए गए हैं input -> some possible output(s)

[1] -> [1,-1] or [1,1,1,-3]
[2] -> [2,-1,-1] or [1,2,-2,-1]
[-2] -> [1,1,-2] or [3,1,2,-2,-4]
[2,-2] -> [2,-1,1,-2] or [2,-1,2,-2,-1]
[2,2,2] -> [2,-1,2,-2,2,-2,-1] or [2,2,2,2,-3,-5]
[2,-4,2] -> [2,2,-1,1,-4] or [2,5,1,1,1,-4,2,-7,-1]
[3,-1,2,-2,-1,-5] -> [2,3,-1,2,-1,-5] or [3,3,-1,-1,2,2,-1,6,1,1,1,1,-12,-5]
[-2,-2,10,-2,-2,-2] -> [10,-1,1,-2,-2,1,-2,-2,1,-2,-2]
[-15,15,-15] -> [15,-1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,-15,-15]
[1,2,3,4,5] -> [1,2,3,-1,4,-1,5,-1,-1,-9,-1,-1]

जवाबों:


11

जेली, 12 बाइट्स

ż~Ṣ€FxA$;L$U

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

पृष्ठभूमि

पूर्णांक n, ~ n , जहाँ n ~ 0 और ~ को बिटवाइज़ NOT, अर्थात ~ n = - (n + 1) की जोड़ी पर विचार करें।

रखने से n की प्रतियां n की बाईं करने के लिए n + 1 की प्रतियां ~ n , अगर हम सबसे दायीं ओर से सूचक सरणी traversing शुरू ~ n , हम सब को पार करेंगे 2n + 1 तत्वों और अपने आप को सबसे बाईं ओर की बाईं पर मिल n

उदाहरण के लिए, यदि n = 4 :

X  4  4  4  4  -5 -5 -5 -5 -5
                            ^
            ^
                         ^
         ^
                      ^
      ^
                   ^
   ^
                ^
^

विशेष मामले n = 0 के लिए , तत्व n खुद को 0 बार दोहराया जाता है , इसे छोड़कर:

X -1
   ^
^

प्रत्येक पूर्णांक के लिए कश्मीर इनपुट में, हम एक जोड़ी फार्म कर सकते हैं n, ~ n जिसमें कश्मीर सेटिंग से एन = कश्मीर अगर कश्मीर> 0 और एन = ~ कश्मीर अगर कश्मीर <0 । यह काम करता है क्योंकि ~ एक इन्वोल्यूशन है, यानी ~~ k = k

यह सब करने के लिए छोड़ दिया है उत्पन्न tuples श्रृंखला है और उनके संयुक्त लंबाई prepend, तो सबसे बाएं तत्व हमें सबसे सही में वापस ले जाता है।

उदाहरण

[1] -> [3, 1, -2, -2]
[2] -> [5, 2, 2, -3, -3, -3]
[-2] -> [3, 1, -2, -2]
[2, -2] -> [8, 1, -2, -2, 2, 2, -3, -3, -3]
[2, 2, 2] -> [15, 2, 2, -3, -3, -3, 2, 2, -3, -3, -3, 2, 2, -3, -3, -3]
[2, -4, 2] -> [17, 2, 2, -3, -3, -3, 3, 3, 3, -4, -4, -4, -4, 2, 2, -3, -3, -3]
[3, -1, 2, -2, -1, -5] -> [26, 4, 4, 4, 4, -5, -5, -5, -5, -5, -1, 1, -2, -2, 2, 2, -3, -3, -3, -1, 3, 3, 3, -4, -4, -4, -4]
[-2, -2, 10, -2, -2, -2] -> [36, 1, -2, -2, 1, -2, -2, 1, -2, -2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 1, -2, -2, 1, -2, -2]
[-15, 15, -15] -> [89, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15]
[1, 2, 3, 4, 5] -> [35, 5, 5, 5, 5, 5, -6, -6, -6, -6, -6, -6, 4, 4, 4, 4, -5, -5, -5, -5, -5, 3, 3, 3, -4, -4, -4, -4, 2, 2, -3, -3, -3, 1, -2, -2]

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

ż~Ṣ€FxA$;L$U  Main link. Argument: A (list of integers)

 ~            Yield the bitwise not of each k in A.
ż             Zipwith; pair each k in A with ~k.
  Ṣ€          Sort each pair, yielding [~n, n] with n ≥ 0.
    F         Flatten the list of pairs.
       $      Combine the previous two links into a monadic chain:
      A         Yield the absolute values of all integers in the list.
                |n| = n and |~n| = |-(n + 1)| = n + 1
     x          Repeat each integer m a total of |m| times.
          $   Combine the previous two links into a monadic chain:
         L      Yield the length of the generated list.
        ;       Append the length to the list.
           U  Upend; reverse the generated list.

आपको विशेष मामले को संभालने की आवश्यकता नहीं है n = 0, क्योंकि कल्पना " नॉनज़रो पूर्णांक " कहती है ।
पीटर टेलर

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