ক্রপ / ড্রপ / ক্রম বাড়ান


20

এখানে আমি যে ক্রমটির কথা বলছি তা এখানে:

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

1 থেকে শুরু করে, 1 রাখুন, পরের 2 টি ড্রপ করুন, পরের 2 টি রাখুন, 3 টি ড্রপ করুন, 3 রাখুন এবং আরও অনেক কিছু। হ্যাঁ, এটি ওআইআইএসে (A064801) এও!

চ্যালেঞ্জ

একটি পূর্ণসংখ্যা দেওয়া হয়েছে n>0, উপরের ক্রমের নবম পদটি সন্ধান করুন

পরীক্ষার মামলা

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

এটি কোড গল্ফ তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর! শুভকামনা!



3
আমরা কি 0 এবং 1 সূচকের মধ্যে চয়ন করতে পারি?
মিঃ এক্সকডার

1
@ মিঃ এক্সকোডার আমি ভয় করি না। এটি কেবল 1-ইনডেক্সড

আমরা কি সমস্ত উপাদান ক্রমযুক্ত একটি তালিকা ফিরে আসতে পারি?
গম উইজার্ড

@ ওয়েট উইজার্ড এটি সম্পূর্ণরূপে অগ্রহণযোগ্য। দুঃখিত

উত্তর:


12

জাভা (ওপেনজেডিকে 8) , 45 44 বাইট

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

এটি অনলাইন চেষ্টা করুন!

-1 বাইট @ নেভায়ে ধন্যবাদ

এটি কিছুক্ষণ দেখার জন্য, আমি একটি প্যাটার্ন লক্ষ্য করলাম। প্রতিবার আমরা 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 টি অতিরিক্ত বাইট। অপ্রয়োজনীয় বাধা, আইএমএইচও।

এটি অনলাইন চেষ্টা করুন!

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। নিশ্চিত না যদিও ... চালাক পদ্ধতির!
মিঃ এক্সকোডার

হ্যাঁ, ডাবল ল্যাম্বডাস একটি অতিরিক্ত বাইট, আমি আশা করছিলাম যে এটি একটি বাইট সংরক্ষণ করবে ...
স্টিফেন

কেউ কেন এটাকে নিম্নচোট করেছে? আমাদের দৃষ্টিভঙ্গিটি নজরে আসেনি এমন সমস্যা আছে কি?
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার সম্ভবত কর্কট মন্তব্যটির কারণে।
লিকি নুন

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]ফাঁক ছাড়া একটি subsequence নির্মান, বর্গ দিয়ে শুরু nএবং ধারণকারী nনম্বর।
  • doস্বরলিপি সব জন্য নির্মিত রেঞ্জ concatenates 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

টেক্স, 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

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

জাভাস্ক্রিপ্ট (ES6), 33 বাইট

জেন্ডারহলের পর্যবেক্ষণ দ্বারা অনুপ্রাণিত পুনরাবৃত্ত সমাধান ।

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

জাভাস্ক্রিপ্ট (ES6) 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

এটি অনলাইন চেষ্টা করুন! @ LeakyNun এর পাইথন উত্তরটির বন্দর। প্রথম এবং শেষ পর্যায়ে কেবল বিরক্তিকর দশমিক ⇔ অ্যানারি রূপান্তর। দ্বিতীয় স্তরটি এটির মতো কাজ করে: ((^1|1\2)+)এটি একটি ত্রিভুজাকার সংখ্যা ম্যাচার; এটির সূচি $1অনুসারে মিলিত ত্রিভুজাকার সংখ্যা $2। Trailing 1মানে কঠোরভাবে ইনপুট কম বৃহত্তম ত্রিদলীয় সংখ্যার সাথে মেলে, এইভাবে পাইথন লুপ চেয়ে ঠিক এক কম পুনরাবৃত্তির ফলে, যার মানে হল $1সমতূল্য a-iএবং $2করতে i-1এবং তাদের সমষ্টি a-1বা ~-aপ্রয়োজনীয় হিসাবে। ( $&ফলাফলটি মুছে ফেলা থেকে কেবল ম্যাচটিকে বাধা দেয়)) নোট করুন যে কোনও ইনপুট এর সাথে 1কোনও মিল নেই এবং আউটপুট কেবল ইনপুটটির মতোই। আপনি বিভ্রান্ত হলে আপনি ব্যবহার করতে পারেন^((^1|1\2)*)1 সেই ক্ষেত্রেও মেলে




0

পিএইচপি, 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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.