Recamán का क्रम उत्पन्न करें


20

Recamán का क्रम ( A005132 ) एक गणितीय अनुक्रम है, जिसे इस प्रकार परिभाषित किया गया है:

A(0) = 0
A(n) = A(n-1) - n if A(n-1) - n > 0 and is new, else
A(n) = A(n-1) + n

ऊपर का एक सुंदर लॉटेक्स संस्करण (अधिक पठनीय हो सकता है):

A(n)={0if n=0A(n1)nif A(n1)n is positive and not already in the sequenceA(n1)+notherwise

पहले कुछ शब्द हैं 0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11

स्पष्ट करने का is newमतलब है कि क्या संख्या पहले से ही अनुक्रम में है।

एक पूर्णांक को देखते हुए n, फ़ंक्शन तर्क या STDIN के माध्यम nसे, Recamán अनुक्रम की पहली शर्तें लौटाते हैं।


यह एक कोड-गोल्फ चुनौती है, इसलिए सबसे छोटा कोड जीतता है।


'नया क्या है' का क्या मतलब है?
बीटा डिके

यदि कोई संख्या नई है, तो इसका मतलब है कि यह अभी तक अनुक्रम में नहीं है। बस एहसास हुआ कि मैंने अनुक्रम गलत लिखा है, मुझे इसे ठीक करने के लिए एक मिनट दें।
जेम्स विलियम्स

क्रम को ठीक किया।
जेम्स विलियम्स

1
क्या आप अनुक्रम के पहले मूल्यों को जोड़ सकते हैं?
हवलदार हेकेलर

पहले कुछ संख्या जोड़ा गया! (और इसके OEIS पेज का लिंक)
जेम्स विलियम्स

जवाबों:


9

CJam, 34 33 बाइट्स

0ali{_W=_I-__0<4$@#)|@I+@?+}fI1>`

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

उदाहरण चलाते हैं

$ cjam <(echo '0ali{_W=_I-__0<4$@#)|@I+@?+}fI1>`') <<< 33
[0 1 3 6 2 7 13 20 12 21 11 22 10 23 9 24 8 25 43 62 42 63 41 18 42 17 43 16 44 15 45 14 46]

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

0ali                               " Push S := [ 0 ] and read an integer N from STDIN.    ";
    {                      }fI     " For each I in [ 0 ... (N - 1) ]:                     ";
     _W=                           "   X := S[-1].                                        ";
        _I-                        "   Y := X - I                                         ";
            _0<                    "   A := (Y < 0)                                       ";
           _   4$@#)               "   B := (Y ∊ S)                                       ";
                     @I+           "   Z := X + I                                         ";
                    |   @?         "   C := (A || B) ? Z : Y                              ";
                          +        "   S += [C]                                           ";
                              1>`  " Push str(S[1:]).                                     ";

आप क्या परिवर्तन किया?
सोहम चौधरी

मेरे पहले दृष्टिकोण ने ऋणात्मक संख्याओं को अनुक्रम तक बढ़ा दिया, इसलिए मुझे स्पष्ट रूप से जांचना नहीं था कि क्या है A(i) - i > 0। हालाँकि, मैंने छोटे मानों के लिए पर्याप्त संख्या नहीं छोड़ी n। अब, मैं बस वही करता हूं जो कल्पना कहती है।
डेनिस

33 बनाम 45. अब तक करीब और अभी तक। :)
इंगो बुर्क

वाह, e#Cjam में बिना टिप्पणी ... स्वादिष्ट चेरी।
क्रोमियम

8

हास्केल, 74

l=0:0#1
a§v|a<0||a`elem`r v=v|1<2=0-v
a#b=a+(a-bb:l!!b#(b+1)
r=(`take`l)

उदाहरण का उपयोग:

λ> r 20
[0,1,3,6,2,7,13,20,12,21,11,22,10,23,9,24,8,25,43,62]

6

रूबी, 71 70 बाइट्स

f=->n{a=[0];(n-1).times{|i|a+=[[b=a[-1]-i-1]-a!=[]&&b>0?b:b+2*i+2]};a}

परिभाषा का एक बहुत "शब्द-दर-शब्द" कार्यान्वयन।


5

पायथन 2, 78 75 73 69 बाइट्स

कुडोस XNOR और flornquake को
अब लगभग 10 प्रारंभिक जवाब की तुलना में कम बाइट्स

m=p,=0,
exec"p+=1;k=m[-1]-p;m+=k+2*p*(k*(k>0)in m),;"*input()
print m

आप छोटा कर सकते हैं [k,k+2*p][bool]करने के लिए k+2*p*(bool)
xnor

@xnor धन्यवाद, 3 बाइट्स बचाए गए।
Markuz

इसके अलावा, k in m or k<0हो सकता k*(k>=0)in mहै अगर k<0, उत्पाद है 0, जो में है m
xnor

@ एक्सन ब्रिलियंट! धन्यवाद फिर से
Markuz

आप लिख सकते हैं -1के बजाय p-1। संपादित करें: आप mएक टपल भी बना सकते हैं और लिख सकते हैं m=0,और m+=k+2*p*(k*(k>0)in m),
कांटा

4

गोल्फस्क्रिप्ट (41 45 )

इसे यहाँ ऑनलाइन आज़माएँ :

(,1,\{:~1$=~)-:^1<\.^?)!!@|^\{~)2*+}*+}/

व्याख्या

यह मूल 45 बाइट्स समाधान के लिए है, लेकिन यह अभी भी बहुत ज्यादा एक ही है:

(,              # push array [0 .. n-1]
[0]\            # push sequence elements as [0] and reverse stack
{               # foreach element in [0 .. n-1] do:
  :m;           # store current element in m and discard
  .m=           # get the previous sequence element
  m)-:^         # subtract the current index from it and store in ^
  0>            # is that number greater than 0?
  \.^?)!        # is that number new to our sequence?
  @&            # logically and both checks
  {^}           # if true, push ^
  {^m)2*+}      # otherwise, add the index twice and push
  if
  +             # add new element to our sequence
}/
`               # make output pretty

# संपादित करें 1: शेविंग 4 बाइट बंद के लिए डेनिस के लिए धन्यवाद।


4

डीसी , 46 बाइट्स

sn[z+z+d0r:a]sF0[pz-d1>Fd;a0<Fddd:azln!<M]dsMx

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

यह प्रोग्राम अन्यथा खाली स्टैक से इनपुट लेता है और स्टडआउट (न्यूलाइन सीमांकित) को आउटपुट करता है।

मैं इस एक की वास्तव में गर्व है - यह सब कुछ है कि एक समर्पित गोल्फ भाषा नहीं है, और शोकेस मेरी पसंदीदा डीसी गोल्फ चाल से तीन की धड़कन है:

  • स्टैक आकार एक सूचकांक चर के रूप में इस्तेमाल किया
  • पुनर्रचना में "अगर एक तो किसी और सी बी" "बिना शर्त सी, और अगर एक तो डी 'जहां सी और डी गठबंधन बी बनाने के लिए
  • एक विशिष्टता बाधा को हल करने के लिए छोटे से इस्तेमाल किया यादृच्छिक अभिगम सुविधा

व्याख्या

sn             Stores the input in register n
[z+z+0r:a]sF   Defines the macro F, which: 
    z+z+         adds twice the stack size/index variable
    0r:a         resets the "uniqueness" flag to 0 in the array a
               In context, F is the "D" in my description above, 
               changing A(z-1)-z to A(z-1)+z
0              The main loop starts with the previous sequence member on top of 
               the stack and total stack depth equal to the next index. 
               Pushing a zero accomplishes both of these things.
[              Start of the main loop M
  p               Print the previous sequence member, with newline (no pop)
  z-             Calculate A(z-1)-z
  d1>F           If that's nonpositive, (F)ix it to be A(z-1)+z
  d;a            a is my array of flags to see if we've hit this value before
  0<F            If we have, (F)ix it! (nonzero = flag, since ;a is zero by
                 default, and also zero if we just (F)ixed and therefore 
                 don't care about uniqueness right now)
  ddd            Make one copy to keep and two to eat
  :a             Flag this entry as "used" in the uniqueness array a
  zln!<M         If our "index variable" is n or less, repeat!
]dsMx          End of main loop - store it and execute

कि के जंगली, मैं भी अस्तित्व में नहीं पता कि डीसी था
डॉन उज्ज्वल

3

जावास्क्रिप्ट - 81 80 79 70

मेरी मदद के लिए edc65 को कुडोस 9 बाइट्स बचाने

f=n=>{for(a=[x=i=0];++i<n;)a[i]=x+=x>i&a.indexOf(x-i)<0?-i:i;return a}

-9: g = n => {for (a = [x = i = 0]; ++ i <n?) A [i] = x + = x> i & a.indexOf (xi) <0? -I: i? ; वापसी एक}
edc65

@ edc65 ग्रेजी सहस्र :)
विलियम बारबोसा

3

जावास्क्रिप्ट, ES6, 74 69 वर्ण

नवीनतम Firefox के वेब कंसोल में नीचे दिए गए कोड को चलाएँ।

G=n=>(i=>{for(r=[t=0];++i<n;)r[i]=t+=i>t|~r.indexOf(t-i)?i:-i})(0)||r

गोल्फ के लिए इसे और अधिक बाद में कोशिश करेंगे।

उदाहरण का उपयोग:

G(11) -> 0,1,3,6,2,7,13,20,12,21,11

3

MATLAB, 83 78 बाइट्स

नीचे के रूप में सहेजें f.m(73 बाइट्स)

A=0;for i=1:n-1 b=A(i)-i;A(i+1)=b+2*i;if b>0&&~any(A==b) A(i+1)=b;end;end

कमांड विंडो से चलाने के लिए (5 बाइट्स)

n=9;f

ऊपर कानूनी नहीं है, तो यह 90 बाइट्स की आवश्यकता है।

function A=f(n) 
A=0;for i=1:n-1 b=A(i)-i;A(i+1)=b+2*i;if b>0&&~any(A==b) A(i+1)=b;end;end

3

आर: 96 वर्ण

golfed:

A=function(s,n,m,i){if(m==n){return(s)}else{t=i-m;if(t%in%s||t<0){t=i+m};s=c(s,t);A(s,n,m+1,t)}}

Ungolfed:

A = function(s,n,m,i) {
    if(m==n){return(s)}
    else{
        t=i-m
        if(t%in%s||t<0){t=i+m}
        s=c(s,t)
        A(s,n,m+1,t)
    }
}

नमूना रन:

> An(0,34,1)
[1]   0   1   3   6   2   7  13  20  12  21  11  22  10  23   9  24   8
[18]  25  43  62  42  63  41  18  42  17  43  16  44  15  45  14  46  79


3

पर्ल 6 , 62 , 57 बाइट्स

{(0, {$ - @ + @ * 2 * ($ > @! || $ - @ ∈ @ ) दिया @ [* -1]} ... *) [^ $ ]}

{(0,{($!=@_[*-1])+@_-@_*2*($!>@_&&$!-@_∉@_)}...*)[^$_]}

-5 बाइट्स जो राजा के लिए धन्यवाद

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


कि आश्चर्यजनक है ... कि सचमुच लग रहा है मेरी बिल्ली की तरह अपने कीबोर्ड भर में चला गया।
उज्ज्वल डॉन

3

05AB1E , 19 बाइट्स

¾ˆG¯¤N-DŠD0›*åN·*+ˆ

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

व्याख्या

¾ˆ                    # Initialize the global list with 0
  G                   # for N in [1, input-1] do:
   ¯                  # push the global list
    ¤N-               # subtract N from the last item in the list
       D              # duplicate
        Š             # move the copy down 2 spots on the stack
         D            # duplicate again
          0›          # check if it is positive
            *         # multiply, turning negative results to zero
             å        # is the result already present in the list?
              N·*     # multiply by N*2
                 +    # add to the result
                  ˆ   # add this to the list

यह कैसे काम करता है?
lirtosiast

@lirtosiast: एक किया गया है, जबकि बाद से मैं इस चुनौती था, इसलिए इस सबसे अच्छा विवरण मैं अल्प सूचना पर कर सकते हैं। आशा है कि यह पर्याप्त है।
एमीना

3

के (ओके) , 53 बाइट्स

समाधान:

{$[y>c:#x;o[x,(r;*|x+c)(r in x)|0>r:*|x-c;y];x]}[,0;]

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

स्पष्टीकरण:

पुनरावर्ती समाधान।

{$[y>c:#x;o[x,(r;*|x+c)(r in x)|0>r:*|x-c;y];x]}[,0;] / the solution
{                                              }[,0;] / lambda with first arg set as list containing 0
 $[      ;                                  ; ]       / if[condition;true;false]
       #x                                             / length of x
     c:                                               / save as c
   y>                                                 / y greater than? (ie have we produced enough results?)
                                             x        / return x if we are done
          o[                             ;y]          / recurse with new x and existing y
                                      x-c             / subtract c from x
                                    *|                / reverse first, aka last
                                  r:                  / save result as r
                                0>                    / 0 greater than?
                               |                      / or
                       (      )                       / do together
                        r in x                        / r in x?
              ( ;     )                               / use result to index into this 2-item list
                   x+c                                / add c to x
                 *|                                   / reverse first, aka last 
               r                                      / result
            x,                                        / append to x

2

जावा, 144

int[]f(int n){int[]a=new int[n];a[0]=0;int i,j,k,m;for(i=0;i<n-1;){k=a[i++]-i;m=0;for(j=0;j<i;)if(k==a[j++])m=1;a[i]=m<1&k>0?k:k+2*i;}return a;}

2

लुआ - 141 135 139 135

function s(n)a,b={1},{[0]=0}for i=1,n do k=b[i-1]-i c=k+i+i if(k>0)and(a[k]==nil)then b[i],a[k]=k,1 else b[i],a[c]=c,1 end end return b end

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

function s(n)
a,b={1},{[0]=0}
for i=1,n do 
   k=b[i-1]-i 
   c=k+i+i
   if (k>0) and (a[k]==nil) then 
      b[i],a[k]=k,1 
   else 
      b[i],a[c]=c,1
   end 
end 
return b 
end

मैं 2 तालिकाओं का उपयोग, पहले एक कहा जाता है एक और ऐसा बनाया गया है कि एक [i] = 1 iff मैं पहले से ही अनुक्रम में दिखाई दिया है नहीं के बराबर है, अन्यथा, जबकि दूसरी तालिका वास्तव में अनुक्रम रखती है


आपका अनुक्रम 0 से शुरू होना चाहिए, हालांकि
विलियम बारबोसा

1
आप रहे हों तो सही, मैं बहुत सावधानी से सवाल को देखने नहीं था और माना जाता है कि यह मैथवर्ल्ड में एक ही परिभाषा (1 से शुरू) था, मुझे लगता है कि किसी भी अधिक चरित्र भी खर्च नहीं होगा, मैं परीक्षण करने और इसे बाद में सही होगा, मैं अब अपने फोन से लिख रहा हूँ!

2

पायथन, 73

def f(x,t=0):
 if x:t=f(x-1);t+=2*x*(t*(t>0)in map(f,range(x)))
 return t

संपादित 1: अन्य पायथन जवाब पर @ xnor की युक्तियों के लिए धन्यवाद! (मुझे बस एहसास हुआ कि दोनों बहुत समान दिखते हैं।)

संपादन 2: फिर से धन्यवाद, @xnor।


यह एक अनंत लूप देता है। आपको किसी प्रकार के नियंत्रण प्रवाह की आवश्यकता है ताकि f(x)हमेशा तुरंत कॉल न हो f(x-1)
xnor

@xnor ने कोड तय किया।
सोहम चौधरी

1
यह n वें पद, नहीं पहले n पदों वापस जाने के लिए लगता है।
डेनिस

कुछ मामूली सहेजता है: t=0करने के लिए एक वैकल्पिक पैरामीटर के रूप में जा सकते हैं f, और t=t+हो सकता है t+=
क्वांर

2

ग्रोवी: 122 118 111 वर्ण

golfed:

m=args[0] as int
a=[0]
(1..m-1).each{n->b=a[n-1];x=b-n;(x>0&!(x in a))?a[n]=x:(a[n]=b+n)}
a.each{print "$it "}

Ungolfed:

m = args[0] as int
a = [0]
(1..m-1).each { n->
    b = a[n-1]
    x = b-n
    ( x>0 & !(x in a) ) ? a[n] = x : (a[n] = b+n) 
}
a.each{print "$it "}

नमूना रन:

bash$ groovy Rec.groovy 14
0 1 3 6 2 7 13 20 12 21 11 22 10 23

2

क्लोजर: 174 वर्ण

golfed:

(defn f[m a](let[n(count a)b(last a)x(- b n)y(if(and(> x 0)(not(.contains a x)))x(+ b n))](if(= m n)a(f m(conj a y)))))(println(f(read-string(first *command-line-args*))[0]))

Ungolfed:

(defn f[m a]
  (let [n (count a) 
        b (last a) 
        x (- b n) 
        y (if (and (> x 0) (not (.contains a x))) x (+ b n)) ]
    (if (= m n) a (f m (conj a y))) ) )

(println (f (read-string (first *command-line-args*)) [0]) )

नमूना रन:

bash$ java -jar clojure-1.6.0.jar rec.clj 14 
[0 1 3 6 2 7 13 20 12 21 11 22 10 23]

1
मेरा सुझाव है कि आप stdin से पढ़ने के लिए नहीं बल्कि सिर्फ कार्य करने के लिए एक पूर्णांक तर्क ले :) इसके अलावा, आप को परिभाषित करने से कोई लाभ नहीं मिलता है yपर letफार्म, आप अभिव्यक्ति सीधे जहां मूल्य की जरूरत है उपयोग कर सकते हैं।
निकोनिरह

2

मथकड, 54 "बाइट्स"

यहां छवि विवरण दर्ज करें


उपयोगकर्ता दृष्टिकोण से, MathCad प्रभावी रूप से एक 2 डी है व्हाइटबोर्ड, से मूल्यांकन किया जाता भाव के साथ छोड़ दिया करने के लिए ठीक है, ऊपर से नीचे। MathCad एक पारंपरिक "पाठ" इनपुट का समर्थन नहीं करता, लेकिन इसके बजाय एक अभिव्यक्ति, पाठ, प्लॉट या घटक डालने के लिए पाठ और विशेष कुंजी / उपकरण पट्टी / मेनू आइटम का एक संयोजन का उपयोग करता है। उदाहरण के लिए, प्रकार के लिए ":": या "सीटीएल-shft- #" यात्रा चर के लिए प्लेसहोल्डर के पाश ऑपरेटर के लिए (सम्मिलित प्रवेश करने के लिए, यात्रा मूल्यों और एक शरीर परिभाषा ऑपरेटर ( "=" के रूप में स्क्रीन पर दिखाया गया है) में प्रवेश के लिए अभिव्यक्ति)। आप ऊपर की छवि में जो देखते हैं वह ठीक वैसा ही है जैसा कि यूजर इंटरफेस और "टाइप" में दिखाई देता है।

गोल्फ उद्देश्यों के लिए, "बाइट" गणना एक अभिव्यक्ति में प्रवेश करने के लिए आवश्यक कीबोर्ड संचालन के समतुल्य है।


यह सब अच्छी तरह से और अच्छा है , लेकिन वास्तविक कीस्ट्रोक्स क्या हैं ?
जो राजा


2

स्टैक्स , 19 बाइट्स

É╖C8½ΔL▄░▬L+≡ΩSa⌂¼╧

इसे चलाएं और डीबग करें

अनपैक्ड, अनगुल्फेड और टिप्पणी की गई, यह ऐसा दिखता है। यह अनुक्रम को स्टैक पर अब तक रखता है, और A(n - 1)एक्स रजिस्टर में याद रखता है। पुनरावृत्ति सूचकांक का उपयोग किया जाता है n। पहली बार के माध्यम से, यह 0 है, लेकिन उस पुनरावृत्ति में यह बिना किसी विशेष मामलों के 0 उत्पन्न करता है, इसलिए ऑफ-बाय -1 सूचकांक के लिए समायोजित करने की कोई आवश्यकता नहीं है।

0X      push 0 to main stack and store it in X register, which will store A(n - 1)
z       push an empty array that will be used to store the sequence
,D      pop input from input stack, execute the rest of the program that many times
  xi-Y  push (x-register - iteration-index) and store it in the Y register
        this is (A(n - 1) - n)
  0>    test if (A(n - 1) - n) is greater than 0 (a)
  ny#   count number of times (A(n - 1) - n) occurs in the sequence so far (b)
  >     test if (a) > (b)
    y   (A(n - 1) - n)
    xi+ A(n - 1) + n
  ?     if/else;  choose between the two values based on the condition
  X     store the result in the X register
  Q     print without popping
  +     append to sequence array

इसे चलाएं और डीबग करें


दिलचस्प। यह कैसे काम करता है?
उज्ज्वल

1
@donbright: कुछ एनोटेशन और स्पष्टीकरण जोड़े गए।
पुनरावर्ती

2

पायथ, 31 बाइट्स

VQ=+Y?Y?|>NeYhxY-eYN+eYN-eYNZ)Y

साइट पर आपका स्वागत है!
गेहूं जादूगर

स्वागत हे। कोड-केवल जवाब हतोत्साहित किया जाता है, क्योंकि वे स्वचालित रूप से कम गुणवत्ता वाले के रूप में चिह्नित हो जाते हैं। : इस तरह एक विवरण जोड़ें, और एक ऑनलाइन दुभाषिया के लिए एक लिंक जोड़ने पर विचार करें, tio.run/##K6gsyfj/PyzQVjvSPtK@xs4vNTKjIlI3NdJPG4hBdJRm5P//hoYA
mbomb007

2

पायथ , 24 बाइट्स

tu+G-eG_W|g0J-eGH}JGHQ]0

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

tu+G-eG_W|g0J-eGH}JGHQ]0   Implicit: Q=eval(input())
 u                   Q     Reduce [0-Q)...
                      ]0   ... with initial value G=[0], next value as H:
              eG             Last value of G (sequence so far)
             -  H            Take H from the above
            J                Store in J
          g0J                0 >= J
                 }JG         Is J in G?
         |                   Logical OR of two previous results
       _W           H        If the above is true, negate H, otherwise leave as positive
    -eG                      Subtract the above from last value in G
  +G                         Append the above to G
                           The result of the reduction is the sequence with an extra leading 0
t                          Remove a leading 0, implicit print

1

पॉवर्सशेल (103)

$n=Read-Host;$a=@(0);$n-=1;1..$n|%{$x=$a[-1]-$_;if($x-gt0-and!($a-like$x)){$a+=$x}else{$a+=$x+2*$_}};$a

एक और 'शब्द-दर-शब्द' यहाँ भी लागू होता है। PowerShell के लिए आश्चर्यजनक रूप से पठनीय, भी।

अनुक्रम में सरणी एक $ संग्रहीत है, और बाहर एक प्रति पंक्ति अवधि छपा है।

$ N = 20 के लिए यदि हम कथन $a-join","प्राप्त करते हैं

0,1,3,6,2,7,13,20,12,21,11,22,10,23,9,24,8,25,43,62

1

C #: 140 अक्षर

int i,w,t,y;int[]F(int n){var r=new int[n--];for(;i<n;y=0){w=r[i++]-i;for(t=0;y<i&&t<1;)t=w==r[y++]?1:0;r[i]=w>0&&t<1?w:r[i-1]+i;}return r;}

1

सी ++: 180 पात्रों (158 CIN और अदालत में बयान के बिना)

int a[5000000][2]={0},i,k,l;a[0][0]=0;a[0][1]=1;cin>>k;for(i=1;i<=k;i++){l=a[i-1][0];if(l-i>0&&a[l-i][1]!=1){ a[i][0]=l-i;a[l-i][1]=1;}else{ a[i][0]=l+i;a[l+i][1]=1;}cout<<a[i][0]<<endl;

प्रोग्रामिंग पहेलियाँ और कोड गोल्फ स्टैक एक्सचेंज में आपका स्वागत है! कृपया अपने हल के वर्ण / बाइट गिनती को अपने हेडर में संपादित करें, जैसा कि अन्य उत्तरों में दिखाया गया है। इसके अलावा, कृपया अपने कोड को गोल्फ करें (वर्ण गणना को कम करने के लिए व्हॉट्सएप हटाएं) जितना संभव हो सके। धन्यवाद!
दरवाज़े

निश्चित बात, मैं ऐसा करूँगा।
अभय जैन

1

गणितज्ञ - 81 बाइट्स

Fold[#~Append~(#[[-1]]+If[#[[-1]]>#2&&FreeQ[#,#[[-1]]-#2],-#2,#2])&,{0},Range@#]&

प्रयोग

Fold[#~Append~(#[[-1]]+If[#[[-1]]>#2&&FreeQ[#,#[[-1]]-#2],-#2,#2])&,{0},Range@#]&[30]
{0,1,3,6,2,7,13,20,12,21,11,22,10,23,9,24,8,25,43,62,42,63,41,18,42,17,43,16,44,15,45}

1

पीएचपी , 89 बाइट्स

$f=function($n){for(;$i<$n;$s[$r[$i++]=$p=$m]=1)if($s[$m=$p-$i]|0>$m)$m=$p+$i;return$r;};

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

Ungolfed:

$f = function ($n) {
    for (; $i < $n; $s[$r[$i++] = $p = $m] = 1) {
        if ($s[$m = $p - $i] | 0 > $m) {
            $m = $p + $i;
        }
    }

    return $r;
};
  • $r मेरी परिणाम के लिए
  • $s ट्रैकिंग seens के लिए
  • $p पिछले मान
  • $m मीटर ext मूल्य

1

आम LISP (139 बाइट्स)

(defun r(n)(do*(s(i 0(1+ i))(a 0(car s))(b 0(- a i)))((> i n)(nreverse s))(push(cond((= 0 i)0)((and(> b 0)(not(find b s)))b)(t(+ a i)))s)))

Ungolfed:

(defun recaman (n)
  (do*
   (series               ; starts as empty list
    (i 0 (1+ i))         ; index variable
    (last 0 (car s))     ; last number in the series
    (low 0 (- last i)))

   ((> i n)              ; exit condition
    (nreverse series))   ; return value

    (push                ; loop body
     (cond
       ((= 0 i) 0)       ; first pass
       ((and
         (> low 0) (not (find low s)))
        low)
       (t (+ last i)))
     series)))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.