नया आदेश # 6: ईस्टर एग


13

परिचय (नजरअंदाज किया जा सकता है)

सभी सकारात्मक पूर्णांकों को अपने नियमित क्रम में रखना (1, 2, 3, ...) थोड़ा उबाऊ है, है ना? इसलिए यहां सभी सकारात्मक पूर्णांकों के क्रमपरिवर्तन (फेरबदल) के आसपास चुनौतियों की एक श्रृंखला है। यह इस श्रृंखला की छठी चुनौती है ( पहली , दूसरी , तीसरी , चौथी और पाँचवीं चुनौती की कड़ियाँ )।

इस चुनौती में एक हल्का ईस्टर विषय है (क्योंकि यह ईस्टर है)। मैंने इस अत्यधिक सुशोभित (और अपनी व्यक्तिगत राय में बदसूरत) हंस अंडे से अपनी प्रेरणा ली।

सजा हुआ हंस अंडा

इसने मुझे उलम सर्पिल की याद दिला दी , जहां सभी सकारात्मक पूर्णांक एक काउंटर-क्लॉकवाइज सर्पिल में रखे गए हैं। इस सर्पिल में अभाज्य संख्याओं से संबंधित कुछ रोचक विशेषताएं हैं, लेकिन यह इस चुनौती के लिए प्रासंगिक नहीं है।

उलाम सर्पिल

अगर हम उलम सर्पिल में संख्या लेते हैं और एक घड़ी की दिशा में घूमते हुए सर्पिल में सभी पूर्णांकों का पता लगाते हैं, तो यह चुनौती पूर्णांक के सकारात्मक क्रमांक पर मिलती है। इस प्रकार, हम प्राप्त करते हैं:

1, 6, 5, 4, 3, 2, 9, 8, 7, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 25, 24, 23, etc.

यदि आप दोनों सर्पिलों को आकर्षित करते हैं, तो आपको (अंडे के खोल) सर्पिलों के कुछ प्रकार के अनंत जाल मिलेंगे ( ध्यान दें कि नया ऑर्डर संदर्भ )।

यह क्रम OEIS में A090861 नंबर के तहत मौजूद है । चूंकि यह एक "शुद्ध अनुक्रम" चुनौती है, कार्य उत्पादन के लिए है के लिए एक दिया इनपुट, जहां के रूप में है A090861a(n)na(n)

कार्य

एक पूर्णांक इनपुट को देखते हुए , उत्पादन पूर्णांक प्रारूप में है, जहां है A090861na(n)a(n)

नोट: 1-आधारित अनुक्रमण यहाँ माना जाता है; आप 0-आधारित अनुक्रमण का उपयोग कर सकते हैं, इसलिए , आदि कृपया अपने उत्तर में इसका उल्लेख करें यदि आप इसका उपयोग करना चाहते हैं।a(0)=1;a(1)=6

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

Input | Output
---------------
1     |  1
5     |  3
20    |  10
50    |  72
78    |  76
123   |  155
1234  |  1324
3000  |  2996
9999  |  9903
29890 |  29796

नियम

  • इनपुट और आउटपुट पूर्णांक हैं।
  • आपके कार्यक्रम को कम से कम 1 से 32767 तक की सीमा में इनपुट का समर्थन करना चाहिए)।
  • अमान्य इनपुट (0, फ़्लोट्स, स्ट्रिंग्स, नकारात्मक मान आदि) अप्रमाणित आउटपुट, त्रुटियों या (बिना परिभाषित) व्यवहार को जन्म दे सकते हैं।
  • डिफ़ॉल्ट I / O नियम लागू होते हैं।
  • डिफ़ॉल्ट कमियां निषिद्ध हैं।
  • यह , इसलिए बाइट्स में सबसे कम उत्तर जीतता है

जवाबों:


12

जेली ,  16 14 11 10 9  8 बाइट्स

-1 लिन के लिए धन्यवाद (mod-2; तार्किक नहीं; स्वयं में जोड़ें: Ḃ¬+-> बिटवाइज़ या 1 के साथ |1) :

|1×r)ẎQi

एक पूर्णांक लिंक जो एक पूर्णांक को स्वीकार करता है n, जो एक पूर्णांक देता है, और a(n)

इसे ऑनलाइन आज़माएं! (बहुत अक्षम है क्योंकि यह परत लिए बाहर चला जाता)n2

एक 11-बाइट संस्करण, ½‘|1×rƲ€ẎQi30 के तहत सभी लेकिन सबसे बड़े परीक्षण के मामले को पूरा करता है - इसे TIO पर आज़माएं - यह परतों को ।n+12

कैसे?

क्रमपरिवर्तन प्राकृतिक संख्याओं को लंबाई के उलटे हुए स्लाइस में लेना है [1,5,3,11,5,17,7,23,9,29,11,35,13,...]- पांच पूर्णांक छः यानी पांच मॉडुलो के साथ सकारात्मक पूर्णांक के साथ विषम विषम पूर्णांक [1, 2*3-1, 3, 4*3-1, 5, 6*3-1, 7, 8*3-1, 9, ...]

यह समाप्‍त और उसके बाद उलटी सीमाओं [1..x]के समान है, जहां xइन स्लाइस लंबाई (यानी प्रत्येक स्लाइस की अधिकतम) का संचयी योग है - [1,6,9,20,25,42,49,72,81,110,121,156,169,...], जो विषम पूर्णांक वर्ग है जिसे खुद को बढ़ाए जाने के साथ गुणा किया गया है [1*1, 2*3, 3*3, 4*5, 5*5, 6*7, 7*7,...]

चूंकि अंतर सभी 1 से अधिक हैं, हम बाइट (उलट) को [x..k]सीधे पर्वतमाला बनाकर बचा सकते हैं, जहां kस्लाइस का 1-इंडेक्स इंडेक्स है।

इस संरचना के कारण क्रमपरिवर्तन एक स्व-संयुग्मित क्रमपरिवर्तन है, अर्थात हम जानते हैं कि , इसलिए मूल्य (1-अनुक्रमित) सूचकांक ( ) पर खोजने के बजाय हम वास्तव में हो सकते हैं () की पहली घटना का ( 1-अनुक्रमित) सूचकांक प्राप्त करें ।P(n)=vP(v)=nn|1×r)ẎQị@n|1×r)ẎQi

|1×r)ẎQi - Link: integer, n       e.g. 10
    )    - for each k in [1..n]:  vs = [ 1, 2, 3, 4, 5, 6, 7, 8, 9,10]
|1       -   bitwise-OR (k) with 1     [ 1, 3, 3, 5, 5, 7, 7, 9, 9,11]
  ×      -   multiply (by k)           [ 1, 6, 9,20,25,42,49,72,81,110]
   r     -   inclusive range (to k)    [[1],[6..2],[9..3],[20..4],...,[110..10]]
     Ẏ   - tighten                     [1,6,5,4,3,2,9,8,7,6,5,4,3,20,...,4,......,110,...,10]
      Q  - de-duplicate                [1,6,5,4,3,2,9,8,7,20,...,10,......,110,...82]
       i - first index with value (n)  20

2
बहुत अच्छा। और आपने MATL उत्तर को पार कर लिया!
21

1
अब बंधे ... :-)
लुइस मेंडो

@LuisMendo मुझे एहसास हुआ कि मैं यहाँ कुछ डरपोक कर सकता हूँ और एक बाइट बचा सकता हूँ :)
जोनाथन एलन

1
@JonathanAllan Aww। वह एक उत्तोलन का हकदार है :-)
लुइस मेंडो

1
@ लियन मैं वास्तव में एक अलग 9 बटर को अपडेट कर रहा हूं। तुम्हारी संभावना 8 कर देगा!
जोनाथन एलन

6

जावास्क्रिप्ट (ईएस 7),  46 45  41 बाइट्स

0 अनुक्रमित।

n=>((x=n**.5+1&~1)*2-(n<x*x+x)*4+3)*x+1-n

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

कैसे?

यह A090861 के उदाहरण कार्यक्रमों में प्रयुक्त 1-अनुक्रमित सूत्र पर आधारित है ।

xn सर्पिल की परत सूचकांक है, जो केंद्र वर्ग के लिए शुरू होता है :0

xn=n1+12

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

kn प्रत्येक परत के निचले भाग (केंद्र वर्ग सहित) के लिए सेट है , और हर जगह:62

kn={2if n4xn2+2xn6otherwise

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

फिर द्वारा दिया जाता है:an

an=8xn2+knxn+2n

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

जिसका अनुवाद इसमें किया जा सकता है:

n=>8*(x=(n-1)**.5+1>>1)*x+(n<=4*x*x+2*x?-2:6)*x+2-n

इसे 0-अनुक्रमित करने से तुरंत 5 बाइट बचती हैं:

n=>8*(x=n**.5+1>>1)*x+(n<4*x*x+2*x?-2:6)*x+1-n

सूत्र का उपयोग करके इसे और सरल बनाया जा सकता है:

xn=2×n+12

जिसे इस प्रकार व्यक्त किया जा सकता है:

x=n**.5+1&~1

के लिए अग्रणी:

n=>2*(x=n**.5+1&~1)*x+(n<x*x+x?-1:3)*x+1-n

और अंत में:

n=>((x=n**.5+1&~1)*2-(n<x*x+x)*4+3)*x+1-n




3

पायथन 3.8, 104 74 65 60 57 बाइट्स

lambda n:(-2,6)[n>4*(x:=(n**.5+1)//2)*x+2*x]*x+2+~n+8*x*x

संपादित करें: 74 से 57 बाइट्स प्राप्त करने के लिए जॉनथन एलन को धन्यवाद!

यह समाधान 0-आधारित अनुक्रमण का उपयोग करता है।


1
39, आयात से परहेज कुछ बेमानी कोष्ठकों को हटाने, और का उपयोग कर सहेजें >के स्थान पर <=और x*xके स्थान पर x**2... इसलिए की तरह: def f(n):x=((n-1)**.5+1)//2;return 8*x**2+(-2,6)[n>4*x*x+2*x]*x+2-n... TIO
जोनाथन एलन

बहुत बढ़िया! मैं संपादन शामिल करूंगा। आपकी टिप्पणी को देखने से पहले मैंने कुछ बदलाव किए और इसे 74 बाइट्स में बदल दिया। क्या यह मायने रखता है कि आपका रिटर्न तैरता है? मुझे नहीं लगता ...
कापोस्की

पूर्णांकों का फ्लोट अभ्यावेदन ठीक होना चाहिए। पायथन 3.8 असाइनमेंट का उपयोग करके कुछ और सहेजें ... EDIT: इसे शून्य अनुक्रमित करें
जोनाथन एलन

बहुत ही शांत। सीधे किसी भी अतिरिक्त संपादन करने के लिए स्वतंत्र महसूस करें!
कपकोसी

3

2

बेगुंज, 67 57 बाइट्स

यह समाधान इनपुट मानों के लिए 0-आधारित अनुक्रमण को मानता है।

p&v-*8p00:+1g00:<
0:<@.-\+1*g00+*<|`
0g6*\`!8*2+00g4^>$:0

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

व्याख्या

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

radius = 0
while n > 0
  radius += 1
  n -= radius*8

लूप के अंत में, n का पिछला मान उस त्रिज्या में सर्पिल में ऑफसेट है:

offset = n + radius*8

हम तब निर्धारित कर सकते हैं कि हम सर्पिल के ऊपर या नीचे के भाग पर निम्नानुसार हैं:

bottom = offset >= radius*6

और एक बार हमारे पास इन सभी विवरणों के साथ, सर्पिल मूल्य की गणना की जाती है:

value = ((bottom?10:2) + 4*radius)*radius + 1 - offset

त्रिज्या एकमात्र मूल्य है जिसे हमें "वैरिएबल" के रूप में संग्रहीत करने की आवश्यकता है, इसे Befunge-93 में अधिकतम मूल्य तक सीमित करते हैं, इसलिए यह एल्गोरिथ्म 65024 तक के इनपुट को संभाल सकता है।


1

जाप , 15 बाइट्स

जोनाथन के जेली समाधान का पोर्ट। 1 अनुक्रमित।

gUòȲ+X*v)õÃcÔâ

कोशिश करो

gUòȲ+X*v)õÃcÔâ     :Implicit input of integer U
g                   :Index into
 Uò                 :  Range [0,U]
   È                :  Map each X
    ²               :    Square X
     +X*            :    Add X multiplied by
        v           :    1 if X is divisible by 2, 0 otherwise
         )          :    Group result
          õ         :    Range [1,result]
           Ã        :  End map
            c       :  Flatten
             Ô      :    After reversing each
              â     :  Deduplicate

मैंने सिर्फ जोनाथन को बताया कि x+(1-x%2)वह x|1(जेली में एक बाइट को बचा रहा है), जो इस जवाब से भी लाभान्वित हो सकता है, मैंने शर्त लगाई।
लिन

0

सी ++ (जीसीसी) , 88 बाइट्स

#import<cmath>
int a(int n){int x=(sqrt(n-1)+1)/2;return x*(8*(x+(n>4*x*x+2*x))-2)+2-n;}

1 अनुक्रमित; OEIS पृष्ठ पर सूत्र का उपयोग करता है, लेकिन कुछ बाइट्स को बचाने के लिए हेरफेर किया गया है।

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


sqrt(n-1)/2+.5इसके बजाय सुझाव दें(sqrt(n-1)+1)/2
सीलिंगकैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.