EKG अनुक्रम की शर्तें


13

परिचय

EKG अनुक्रम 1 और 2 से शुरू होता है, फिर नियम यह है कि अगला शब्द सबसे छोटा धनात्मक पूर्णांक है जो पहले से ही अनुक्रम में नहीं है और जिसका सामान्य कारक अंतिम शब्द 1 से अधिक है (वे कॉपीराइट नहीं हैं)।

पहली शर्तें हैं:

1, 2, 4, 6, 3, 9, 12, 8, 10, 5, 15, ...

इसे ईकेजी कहा जाता है क्योंकि इसकी शर्तों का ग्राफ एक ईकेजी के समान है।

यह OEIS में A064413 अनुक्रम है

चुनौती

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

जैसा कि अनुक्रम का नियम तीसरे कार्यकाल से शुरू होता है, इनपुट पूर्णांक 3 से अधिक या बराबर होना चाहिए। उदाहरण के लिए, दिया गया इनपुट 10आउटपुट है 1क्योंकि 7 वां शब्द है 12और अन्य पहले दस शब्दों में से कोई भी 10 से अधिक नहीं है।

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

3 -> 1

10 -> 1

100 -> 9

1000 -> 70

नियम

  • पूर्णांक 3 से कम होने पर, फ़ंक्शन 0 या एक त्रुटि कोड का उत्पादन कर सकता है।
  • इसके अलावा कोई अन्य विशेष नियम नहीं है: यह कोड गोल्फ है, जितना कम बेहतर होगा!

क्या हम 0-इंडेक्सिंग का उपयोग कर सकते हैं, 1अनुक्रम का 0 15वां शब्द होने के साथ-साथ , उदाहरण के लिए, 10 वां शब्द, बजाय 5?
झबरा

@ शैग्गी मुझे लगता है कि इसे गणितीय तरीके से उपयोग करना उचित है, लेकिन वास्तव में यह परीक्षण के मामलों और वास्तव में स्वयं में पूछे गए फ़ंक्शन के परिणाम को बदल देगा। इस प्रकार मुझे लगता है कि आपको ऐसा करने की अनुमति नहीं दी जानी चाहिए। माफ़ करना।
david

oeis.org/A064413/graph - OEIS रेखांकन लिख सकते हैं? साफ।
मैजिक ऑक्टोपस Urn

जवाबों:


7

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

S‘gṪ’ɗƇḟ¹Ṃṭ
1Ç¡>¹S

यह एक पूर्ण कार्यक्रम है।

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

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

1Ç¡>¹S       Main link. Argument: n (integer)

1            Set the return value to 1.
 Ç¡          Call the helper link n times.
   >¹        Compare the elements of the result with n.
     S       Take the sum, counting elements larger than n.


S‘gṪ’ɗƇḟ¹Ṃṭ  Helper link. Argument: A (array or 1)

S            Take the sum of A.
 ‘           Increment; add 1.
     ɗƇ      Drei comb; keep only elements k of [1, ..., sum(A)+1] for which the
             three links to the left return a truthy value.
  g              Take the GCD of k and all elements of A.
   Ṫ             Tail; extract the last GCD.
    ’            Decrement the result, mapping 1 to 0.
       ḟ¹    Filterfalse; remove the elements that occur in A.
         Ṃ   Take the minimum.
          ṭ  Tack; append the minimum to A.

ध्यान दें कि उत्पन्न अनुक्रम । चूंकि हेल्पर लिंक को कॉल करने से बार लंबाई का अनुक्रम उत्पन्न होता है , इसलिए को व्यावहारिक रूप से अनदेखा कर दिया जाता है।[1,0,2,4,6,3,9,12,8,10,5,15,]nn+10


6

पर्ल 6 , 66 63 59 58 बाइट्स

-4 किंग जोए को धन्यवाद

{sum (1,2,{+(1...all *gcd@_[*-1]>1,*∉@_)}...*)[^$_]X>$_}

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

N = 1000 के लिए TIO पर बहुत धीमा।


@ जॉकिंग के बाद मुझे एहसास हुआ कि first &f,1..*इसे फिर से लिखा जा सकता है +(1...&f), आपकी जंक्शन ट्रिक ने आखिरकार मदद की।
nwellnhof

4

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

f=(n,a=[2,1],k=3)=>a[n-1]?0:a.indexOf(k)+(C=(a,b)=>b?C(b,a%b):a>1)(k,a[0])?f(n,a,k+1):(k>n)+f(n,[k,...a])

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

कैसे?

सहायक समारोह रिटर्न सच अगर दिए गए दो पूर्णांक हैं नहीं coprime:C

C = (a, b) => b ? C(b, a % b) : a > 1

सरणी को आरंभ नहीं हो जाता और सभी मूल्यों है कि अब तक उलटे क्रम में सामने आईं रखती है। इसलिए, अंतिम मान हमेशा ।a[2,1]a[0]

यह जानने के लिए कि क्या अनुक्रम के अगले शब्द के रूप में योग्य है, हम परीक्षण करते हैं कि क्या निम्न अभिव्यक्ति बराबर है :k0

a.indexOf(k) + C(k, a[0])

a.indexOf(k) या तो बराबर है:

  • 1ka
  • 0k
  • i1

a.indexOf(k) + C(k, a[0])0kak1+true=0



4

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

#>¹↑¡§ḟȯ←⌋→`-Nḣ2

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

व्याख्या

#>¹↑¡§ḟȯ←⌋→`-Nḣ2  Implicit input, say n=10
              ḣ2  Range to 2: [1,2]
    ¡             Construct an infinite list, adding new elements using this function:
                   Argument is list of numbers found so far, say L=[1,2,4]
             N     Natural numbers: [1,2,3,4,5,6,7...
           `-      Remove elements of L: K=[3,5,6,7...
      ḟ            Find first element of K that satisfies this:
                    Argument is a number in K, say 6
     §    →         Last element of L: 4
         ⌋          GCD: 2
       ȯ←           Decrement: 1
                    Implicitly: is it nonzero? Yes, so 6 is good.
                  Result is the EKG sequence: [1,2,4,6,3,9,12...
   ↑              Take the first n elements: [1,2,4,6,3,9,12,8,10,5]
#                 Count the number of those
 >¹               that are larger than n: 1

3

MATL , 29 बाइट्स

qq:2:w"GE:yX-y0)yZdqg)1)h]G>z

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

स्पष्टीकरण:

	#implicit input, n, say 10
qq:	#push 1:8
2:	#push [1 2]. Stack: {[1 .. 8], [1 2]}
w	#swap top two elements on stack
"	#begin for loop (do the following n-2 times):
 GE:	#push 1...20. Stack: {[1 2], [1..20]}
 y	#copy from below. Stack:{[1 2], [1..20], [1 2]}
 X-	#set difference. Stack: {[1 2], [3..20]}
 y0)	#copy last element from below. Stack:{[1 2], [3..20], 2}
 yZd	#copy from below and elementwise GCD. Stack:{[1 2], [3..20],[1,2,etc.]}
 qg)	#select those with gcd greater than 1. Stack:{[1 2], [4,6,etc.]}
 1)	#take first. Stack:{[1 2], 4}
 h	#horizontally concatenate. Stack:{[1 2 4]}
 ]	#end of for loop
G>z	#count those greater than input
	#implicit output of result

कृपया आप बता सकते हैं कि आप इनपुट (साथ GE:) को दोगुना क्यों करते हैं ?
डेविड

2
a(n)2na(n)n2n=1000while

3

एपीएल (Dyalog यूनिकोड) , 39 बाइट्स SBCS

-2 बाइट्स ngn के लिए धन्यवाद, -1 बाइट उचित सशर्त जाँच का उपयोग करके।

{+/⍵<⍵⍴3{(1=⍺∨⊃⌽⍵)∨⍺∊⍵:⍵∇⍨⍺+1⋄⍵,⍺}⍣⍵⍳2}

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


ऑपरेंड फ़ंक्शन के लिए अपने स्वयं के बाएं तर्क को पास करता है, इसलिए इसकी कोई आवश्यकता नहीं है । यह भी सही पर बात के साथ नहीं बंधेगा क्योंकि यह एक फ़ंक्शन ( ) के साथ शुरू होता है , इसलिए इसकी कोई आवश्यकता नहीं है
nn


2

एपीएल (एनएआरएस), चरस 121, बाइट्स 242

∇r←a w;i;j;v
r←w⋄→0×⍳w≤2⋄i←2⋄r←⍳2⋄v←1,1,(2×w)⍴0
j←¯1+v⍳0
j+←1⋄→3×⍳1=j⊃v⋄→3×⍳∼1<j∨i⊃r⋄r←r,j⋄i+←1⋄v[j]←1⋄→2×⍳w>i
r←+/w<r
∇

रनिंग टाइम में यहां एक मिनट में टेस्ट:

  a¨3 10 100 1000 2000
1 1 9 70 128 

प्राकृतिक प्रकार और सीमा के लिए कोई जाँच नहीं है ...


1

जाप, 23 21 बाइट्स

@_jX ªAøZ}f}gA=ì)Aè>U

कोशिश करो

@_jX ªAøZ}f}gA=ì)Aè>U
                          :Implicit input of integer U
             A            :10
               ì          :Digit array
              =           :Reassign to A
@          }g             :While the length of A < U+1, take the last element as X,
                          :pass it through the following function & push the result to A
 _       }f               :  Find the first integer Z >= 0 that returns falsey
  jX                      :    Is Z co-prime with X?
     ª                    :    OR
      AøZ                 :    Does A contain Z?
                )         :End loop
                 Aè>U     :Count the elements in A that are greater than U

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