सीक्वेंस रखना / छोड़ना / बढ़ाना


20

यहाँ अनुक्रम मैं बात कर रहा हूँ:

{1, 4, 5, 9, 10, 11, 16, 17, 18, 19, 25, 26, 27...}

1 से शुरू करके, 1 रखें, अगले 2 को छोड़ें, अगले 2 को रखें, 3 को छोड़ें, 3 को रखें और इसी तरह आगे भी रहें। हां, यह OEIS (A064801) पर भी है!

चुनौती

पूर्णांक को देखते हुए n>0, उपरोक्त अनुक्रम का nth शब्द ज्ञात कीजिए

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

Input -> Output       
1->1  
22->49  
333->683
4444->8908
12345->24747

यह कोड गोल्फ है इसलिए बाइट्स जीत में सबसे छोटा जवाब है! सौभाग्य!



3
क्या हम 0 और 1 अनुक्रमण के बीच चयन कर सकते हैं?
श्री एक्सकोडर

1
@ Mr.Xcoder मुझे डर है कि नहीं। यह केवल 1-अनुक्रमित है

क्या हम सभी तत्वों से युक्त एक सूची वापस कर सकते हैं?
गेहूं जादूगर

@WheatWizard यह पूरी तरह से अस्वीकार्य है। क्षमा करें

जवाबों:


12

जावा (ओपनजेडके 8) , 45 44 बाइट्स

n->{int i=0;for(;++i<n;n-=i);return~-n+i*i;}

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

-1 बाइट @Nevay को धन्यवाद

थोड़ी देर तक इस तरह घूरने के बाद, मुझे एक पैटर्न नज़र आया। हर बार जब हम nसंख्या छोड़ते हैं, तो अनुक्रम में अगला नंबर एक पूर्ण वर्ग होता है। यह देखकर, मैंने मानसिक रूप से अनुक्रम को सुविधाजनक विखंडू में तोड़ दिया: [[1],[4,5],[9,10,11],...]मूल रूप से, iवें चंक के साथ शुरू होता है i*i, और इसके लिए ऊपर की ओर पुनरावृत्त होता हैi तत्वों के ।

nइस क्रम में वें नंबर को खोजने के लिए , हम पहले यह पता लगाना चाहते हैं कि कौन सा नंबर किस संख्या में है, और फिर किस स्थान पर कौन सा स्थान है। हम अपनी वेतन वृद्धि संख्या iको nतब तक घटाते हैं , जब तक nवह iहमसे कम नहीं होती है (जो हमें हमारा हिस्सा देती है), और उसके बाद सही प्राप्त n-1करने के i*iलिए जोड़ते हैंposition

उदाहरण:

n = 8
n > 1? Yes, n = n - 1 = 7
n > 2? Yes, n = n - 2 = 5
n > 3? Yes, n = n - 3 = 2
n > 4? No, result is 4 * 4 + 2 - 1 = 17

1
आप return~-n+i*i;1 बाइट बचाने के लिए उपयोग कर सकते हैं ।
नेवई

7

हास्केल, 48 43 41 बाइट्स

n#l=[l..l+n]++(n+1)#(l+2*n+3)
((0:0#1)!!)

0-आधारित के बजाय 1-आधारित अनुक्रमण के लिए 4 अतिरिक्त बाइट्स। एक अनावश्यक प्रतिबंध, IMHO।

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

n#l             -- n is one less than the number of element to keep/drop and
                -- l the next number where the keep starts
   [l..l+n]     -- keep (n+1) numbers starting at l
   ++           -- and append a recursive call
   (n+1)#       -- where n is incremented by 1 and
      (l+2*n+3) -- l skips the elements to keep & drop

0#1             -- start with n=1 and l=0 and
 0:             -- prepend a dummy value to shift from 0 to 1-based index
    !!          -- pick the i-th element from the list 

6

पायथन 3 , 47 46 बाइट्स

1 बाइट मिस्टर एक्सकोडर की बदौलत।

def f(n):a=round((2*n)**.5);return~-n+a*-~a//2

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

उच्च संख्या के लिए बहुत तेज़


46 बाइट्स def f(n):a=round((2*n)**.5);return~-n+a*-~a//2:। हालांकि यकीन नहीं ... चालाक दृष्टिकोण!
श्री Xcoder

ओह, डबल लंबोदर एक अतिरिक्त बाइट है, मैं उम्मीद कर रहा था कि एक बाइट बचाएगी ...
स्टीफन

किसी ने इसे कम क्यों किया? क्या इस दृष्टिकोण के साथ कोई समस्या है जिसे हमने नोटिस नहीं किया है?
श्री एक्सकोडर

@ मिस्टर कोडर शायद कॉर्क टिप्पणी के कारण।
लीक नून

a*(a+1)हर पूर्णांक के लिए भी है। क्या पायथन पूर्णांक पर फ्लोट डिवीजन के बारे में शिकायत करता है? क्या यह फ़्लोट्स पर बिटवाइज़ संचालन के बारे में शिकायत करता है? यदि नहीं: (2*n)**.5+.5|0
टाइटस


3

हास्केल , 33 बाइट्स

एक अनाम फ़ंक्शन। इस रूप में उपयोग करें((!!)$0:do n<-[1..];[n^2..n^2+n-1]) 1

(!!)$0:do n<-[1..];[n^2..n^2+n-1]

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

  • अनुक्रम को अनंत सूची के रूप में निर्मित करता है, फिर इसके साथ अनुक्रमित करता है !!0:0- 1 आधारित अनुक्रमण से समायोजित करने के लिए एक डमी तत्व है।
  • सीमा [n^2..n^2+n-1]अंतराल के बिना एक बाद का निर्माण करती है, जिसके वर्ग nऔर युक्त nसंख्याओं के साथ शुरू होता है ।
  • doअंकन सभी के लिए निर्माण किया पर्वतमाला संयोजित करता n>=1


2

पर्ल 6 , 43 बाइट्स

{(1..*).rotor({++$=>++$+1}...*).flat[$_-1]}

झसे आज़माओ

विस्तारित:

{  # bare block lambda with implicit parameter 「$_」

  ( 1 .. * )                  # range starting from 1

  .rotor(                     # break it into chunks

    { ++$  =>  ++$ + 1} ... * # infinite Seq of increasing pairs
    #   1  =>    1 + 1    ==>   1 => 2 ( grab 1 skip 2 )
    #   2  =>    2 + 1    ==>   2 => 3
    #   3  =>    3 + 1    ==>   3 => 4
    # ...  =>  ... + 1

  ).flat\                     # reduce the sequence of lists to a flat sequence
  [ $_ - 1 ]                  # index into the sequence
                              # (adjusting to 0-based index)
}

(1..*).rotor({++$=>++$+1}...*) पैदा करता है:

(
 (1,),
 (4, 5),
 (9, 10, 11),
 (16, 17, 18, 19),
 (25, 26, 27, 28, 29),
 ...
).Seq

2

TeX, 166 बाइट्स

\newcommand{\f}[1]{\count0=0\count1=0\loop\advance\count0 by\the\count1\advance\count1 by1\ifnum\count0<#1\repeat\advance\count0 by#1\advance\count0 by-1
\the\count0}

प्रयोग

\documentclass[12pt,a4paper]{article}
\begin{document}
\newcommand{\f}[1]{\count0=0\count1=0\loop\advance\count0 by\the\count1\advance\count1 by1\ifnum\count0<#1\repeat\advance\count0 by#1\advance\count0 by-1
\the\count0}

\f{1}

\f{22}

\f{333}

\f{4444}

\f{12345}
\end{document}

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


2

जावास्क्रिप्ट, 43 38 बाइट्स

n=>eval("for(r=1;n>r;)n-=r++;r*r+n-1")

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

मैं इस तथ्य का उपयोग करता हूं, कि प्रत्येक त्रिकोणीय संख्या प्लस एक के लिए, परिणाम एक वर्ग संख्या है।

एक उदाहरण के रूप में: त्रिकोणीय संख्याएँ 0, 1, 3, 6, 10 हैं ... इसलिए 1, 2, 4, 7, 11 के लिए ... हम अपने अनुक्रम में 1, 4, 9, 16, 25 ... का निरीक्षण करते हैं। ।

यदि इन ज्ञात संख्याओं के बीच सूचकांक कहीं है, तो हमारे अनुक्रम के तत्व केवल एक से आगे बढ़ते हैं। उदाहरण के लिए, 10 के लिए परिणाम की गणना करने के लिए, हम 7 लेते हैं (एक त्रिकोणीय संख्या प्लस एक के रूप में), परिणाम (16) लें और 10-7 = 3 जोड़ें। इस प्रकार, 16 + 3 = 19।


1

05AB1E , 12 बाइट्स

LεÝÁćn+}˜¹<è

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


बहुत शांत दृष्टिकोण!
एमिग्ना

@ एग्निमा ठीक है, मैं बस कर रहा हूँ [0..a-1] + a**2, यहाँ अच्छी बात यह है कि ÝÁćn+इसके बजाय सिर्फ इमो है D<Ýsn+
आउटगोल्फर

1

CQuents , 27 बाइट्स

#R(2B)^.5)|1:b~-B+A*-b~A//2

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

वर्तमान में लीक के पायथन जवाब का एक बंदरगाह , मुझे लगता है कि हालांकि एक बेहतर तरीका है।


मेरे वैकल्पिक एल्गोरिदम की कोशिश करें
लीक नून



1

गणितज्ञ, 37 बाइट्स

Flatten[Range@#+#^2-1&~Array~#][[#]]&

व्याख्या

Range@#+#^2-1&

Functionजो एक सकारात्मक पूर्णांक लेता है #और #अनुक्रम में लगातार संख्याओं के रन को लौटाता है ।

...~Array~#

इनपुट तक ऐसे सभी रन की सूची तैयार करता है #

Flatten[...][[#]]

Flattensपरिणामी सूची और #वें तत्व को लौटाता है ।



1

टैम्पियो , 310 308 बाइट्स

n:n uni on n unena 1:lle
a unena k:lle on a vuona k:lla vähennettynä a:sta ja k
a vuona nollalla ja k on a
a vuona k:lla vähennettynä nollasta ja k on a
a vuona b:n seuraajalla ja k on yhteenlaskun kutsuttuna k:n kerrottuna 2:lla arvolla ja k:n vähennettynä a:sta arvolla unena k:n seuraajalle seuraaja

उपयोग: का 4:n uniमूल्यांकन करता है9

स्पष्टीकरण:

n:n uni on n unena 1:lle
uni(n)  =  n `uni` 1

a unena k:lle on  a vuona  k:lla vähennettynä a:sta ja k
a `uni` k     =  (a `vuo` (k     `vähennetty` a)    )  k

 a vuona nollalla ja k on a
(a `vuo` 0        )  k =  a

 a vuona  k:lla vähennettynä nollasta ja k on a
(a `vuo` (k     `vähennetty` 0)       )  k =  a

 a vuona  b:n seuraajalla ja k on
(a `vuo` (b   + 1)        )  k =

 yhteenlaskun kutsuttuna k:n kerrottuna 2:lla arvolla
(yhteenlasku            (k   *          2     )

 ja k:n vähennettynä a:sta arvolla unena  k:n seuraajalle seuraaja
((  k   `vähennetty` a     )       `uni` (k   + 1)   )  ) + 1

मानक पुस्तकालय से:

a `vähennetty` b = b - a
yhteenlasku a b  = a + b

1

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

Xanderhall के अवलोकनों से प्रेरित पुनरावर्ती समाधान ।

f=(n,x=1)=>n<x?n+x*x-1:f(n-x,++x)

कोशिश करो

o.innerText=(
f=(n,x=1)=>n<x?n+x*x-1:f(n-x,++x)
)(i.value=12345);oninput=_=>o.innerText=f(+i.value)
<input id=i type=number><pre id=o>



0

गणितज्ञ, 82 बाइट्स

Complement[Range[3#],Array[#+⌊((r=Sqrt[1+8#])-1)/2⌋⌊(r+1)/2⌋/2&,3#]][[#]]&


0

जावास्क्रिप्ट (ईएस 6) 100 98 बाइट्स

var k=n=>{var s=[],i=1,c=1,j;while(s.length<n){for(j=i;j<i+c;j++){s.push(j)}i+=c*2+1;c++}return s}

यह एक तरह का उपवास था, इसलिए मैंने शर्त रखी कि सुधार के लिए बहुत जगह है, बस बुनियादी लूप और काउंटर हैं।


0

रेटिना , 27 बाइट्स

.+
$*
((^1|1\2)+)1
$1$2$&
1

इसे ऑनलाइन आज़माएं! पोर्ट ऑफ @ लीकी नॉन का पायथन उत्तर। पहला और अंतिम चरण केवल उबाऊ दशमलव and एकात्मक रूपांतरण है। दूसरा चरण इस तरह काम करता है: ((^1|1\2)+)एक त्रिकोणीय संख्या मिलान है; $1मिलान किया गया त्रिकोणीय संख्या है, जबकि $2इसका सूचकांक है। अनुगामी का 1अर्थ है कि यह इनपुट की तुलना में सख्ती से कम सबसे बड़ी त्रिकोणीय संख्या से मेल खाता है, इस प्रकार पायथन लूप की तुलना में बिल्कुल कम चलना है, जिसका अर्थ है कि उस मामले में भी और मैच के $1बराबर है।a-i$2 करने के लिए i-1और उनके योग है a-1या ~-aके रूप में आवश्यक। ($& बस परिणाम से मैच को हटाने से रोकता है।) ध्यान दें कि इनपुट के1 बिना मिलान के और आउटपुट इनपुट के समान ही है। यदि आप विकृत थे तो आप उपयोग कर सकते हैं^((^1|1\2)*)1




0

PHP, 48 42 37 + 1 बाइट्स

लीक नन के जवाब से पोर्ट किया गया

while($argn>$a+=$i++);echo$a+~-$argn;

ऑनलाइन के साथ पाइप के रूप में चलाएं -Fया इसे आज़माएं

प्रत्यक्ष दृष्टिकोण, 42 + 1 बाइट्स ( लीक नून्स अन्य उत्तर से चित्रित )

<?=($a=(2*$argn)**.5+.5|0)*-~$a/2+~-$argn;

-nRटीआईओ के ऊपर या असहजता के साथ पाइप के रूप में चलाएं ।

पुराने पुनरावृत्ति समाधान, 48 + 1 बाइट्स

for(;$argn--;$n++)$c++>$z&&$n+=++$z+$c=1;echo$n;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.