এগিয়ে গণনা এবং পিছনে তারপর দ্বিগুণ


24

চল গুনি...

2 পর্যন্ত গণনা করুন এবং 1 এ ফিরে
4
পর্যন্ত গণনা করুন এবং 1 এ 6 পর্যন্ত গণনা করুন এবং 1 এ ফিরে
যাবেন ... ঠিক আছে আপনি পেয়েছেন ...

এই সমস্ত একসাথে রাখুন এবং আপনি নিম্নলিখিত ক্রম পাবেন

 {1,2,1,2,3,4,3,2,1,2,3,4,5,6,5,4,3,2,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,2,3...}

চ্যালেঞ্জ
n>0 1-সূচকযুক্ত (বা n>=00-সূচকের জন্য) এর জন্য একটি পূর্ণসংখ্যা দেওয়া হয়েছে , এই ক্রমের নবম পদের আউটপুট দেয়

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

Input->Output  

1->1  
68->6  
668->20  
6667->63  
10000->84

বিধি

আপনার প্রোগ্রামটি অবশ্যই এক মিনিটের মধ্যে n = 10000 পর্যন্ত সমাধানগুলি গণনা করতে সক্ষম হবে

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী!


2
কে এক মিনিট সময় নেয় সিদ্ধান্ত নেয়? লেগো থেকে তৈরি একটি সময়-অনুকূল টুরিং মেশিনটি সত্যই দীর্ঘ সময় নিতে পারে, যখন একই ট্যুরিং মেশিনটি অনুকরণ করে বলেছিল, সি, এটি কোন প্রসেসরটি চালায় তার উপর নির্ভর করে সম্ভবত কয়েক সেকেন্ড বা কয়েক মিনিট সময় নেয়। সুতরাং, আমি যদি ট্যুরিং মেশিনের বিবরণটি জমা দিয়ে বলি তবে এটি কী বৈধ?
আর্থার

2
@ আর্থার আমি মনে করি যে আপনি কেন এই বিধিনিষেধ তৈরি করেছিলেন তা আপনি বুঝতে পারবেন ... আমি একটি বড় তালিকা তৈরি করে এন = ১০০০০০ খুঁজে পেতে "চিরকালের" নিতে কোনও অ্যালগরিদম চাইনি here এখানকার বেশিরভাগ লোক উজ্জ্বল উত্তর দিয়েছিল যা লক্ষ লক্ষ খুঁজে পায় সেকন্ডেই.

4
@ বিলস্টটিহান আমি মনে করি যে এই সীমাবদ্ধতা অপ্রয়োজনীয়।
এরিক দি আউটগল্ফার

2
@ এরিক অটগল্ফার গোড গল্ফ উত্তরগুলি জটিল হতে পারে ... সীমা ছাড়াই ১০,০০০ টি টিউপস [1,2 ... 2n..2,1] উত্পাদিত এমন কোনও উত্তর বৈধ হবে restric এই নিষেধাজ্ঞার উত্তর কেবল এইরকমই I ডন ' সমস্যাটি কোথায় আছে তা দেখুন I আমি কেবলমাত্র আপনার উত্তরটি সব পরীক্ষার কেস যুক্তিসঙ্গত সময়ে সন্ধান করতে চাই।

3
@ স্ট্রাক্ল্যাসেথ জেনারেল sensকমত্য এখানে যে এটি তাত্ত্বিকভাবে কাজ করা উচিত, অনুশীলনের অগত্যা নয়।
এরিক দি আউটগল্ফার

উত্তর:


16

জাভাস্ক্রিপ্ট (ES7),  59 ... 44  43 বাইট

টাইটাসকে 1 বাইট সংরক্ষণ করা হয়েছে

প্রত্যাশিত ইনপুট: 1-ইনডেক্সড।

n=>(n-=(r=(~-n/2)**.5|0)*r*2)<++r*2?n:r*4-n

প্রাথমিকভাবে A004738 এর সূত্র দ্বারা অনুপ্রাণিত , যা অনুরূপ ক্রম। তবে আমি সম্পূর্ণরূপে এটি আবার লিখতে শুরু করেছি।

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

কিভাবে?

ক্রমটি একটি ত্রিভুজ হিসাবে সাজানো যেতে পারে, বর্ধিত অংশে আরোহী ক্রমে এবং ডান অংশটি অবতরণ ক্রমে।

নীচে প্রথম 32 টি শর্তাবলী সহ প্রথম 4 টি সারি রয়েছে:

            1 | 2
        1 2 3 | 4 3 2
    1 2 3 4 5 | 6 5 4 3 2
1 2 3 4 5 6 7 | 8 7 6 5 4 3 2

এখন, কিছু ভেরিয়েবল প্রবর্তন করা যাক:

 row  | range   | ascending part              | descending part
 r    | x to y  | 1, 2, ..., i                | 4(r+1)-(i+1), 4(r+1)-(i+2), ...
------+---------+-----------------------------+-----------------------------------------
  0   |  1 -  2 |                           1 | 4-2
  1   |  3 -  8 |                   1   2   3 | 8-4  8-5  8-6
  2   |  9 - 18 |           1   2   3   4   5 | 12-6 12-7 12-8  12-9  12-10
  3   | 19 - 32 |   1   2   3   4   5   6   7 | 16-8 16-9 16-10 16-11 16-12 16-13 16-14

আমরা শীর্ষে 2 টি উপাদান দিয়ে শুরু করি এবং প্রতিটি নতুন সারিতে 4 টি উপাদান যুক্ত করি। সুতরাং, 0-সূচী সারি r এর উপাদানগুলির সংখ্যাটি এই হিসাবে প্রকাশ করা যেতে পারে:

a(r) = 4r + 2

সারি আর এর 1-সূচক প্রারম্ভিক অবস্থান এক্স এই গাণিতিক সিরিজ প্লাস এক, যা বাড়ে করার জন্য সব পূর্ববর্তী পদ সমষ্টি দেওয়া হয়:

x(r) = r * (2 + a(r - 1)) / 2 + 1
     = r * (2 + 4(r - 1) + 2) / 2 + 1
     = 2r² + 1

পারস্পরিকভাবে, 1-ইনডেক্স পজিশন দেওয়া হয় n ক্রমানুসারে হলে, সংশ্লিষ্ট সারিটি এর সাথে পাওয়া যাবে:

r(n) = floor(sqrt((n - 1) / 2))

বা জেএস কোড হিসাবে:

r = (~-n / 2) ** 0.5 | 0

একবার আমরা r (n) জানাজানি হয়ে গেলে , আমরা সূচনার অবস্থানটি x (r) বিয়োগ করে n থেকে বিয়োগ করব :

n -= r * r * 2

আমরা n কে একটি (আর) / 2 + 1 = 2 আর + 2 এর সাথে তুলনা করি আরোহী অংশে বা অবতরণী অংশে রয়েছি কিনা তা নির্ধারণের জন্য আমরা করি:

n < ++r * 2 ?

যদি এই অভিব্যক্তিটি সত্য হয় তবে আমরা এন । অন্যথায়, আমরা 4 (আর + 1) - এন । তবে যেহেতু শেষ বিবৃতিতে ইতিমধ্যে আর বাড়ানো হয়েছিল, তাই এটি সরল করা হয়েছে:

n : r * 4 - n

1
ঠিক আছে, আমি মনে করি আমি বুঝতে পেরেছি। প্রতিটি আপ-ডাউন অংশের দৈর্ঘ্য 2,6,10,14 ... সুতরাং যোগফলটি সারসংক্ষেপের বর্গক্ষেত্রের সাথে বৃদ্ধি পায়, সুতরাং স্কয়ার্ট। খুব সুন্দর!
জলি জোকার

7

হাস্কেল , 37 বাইট

(!!)$do k<-[1,3..];[1..k]++[k+1,k..2]

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

শূন্য-ইন্ডেক্স। এতে তালিকা তৈরি করে সূচি তৈরি করে। 2 বাইট সংরক্ষণের জন্য Ørjan জোহানসেনকে ধন্যবাদ!


হাস্কেল , 38 বাইট

(!!)[min(k-r)r|k<-[0,4..],r<-[1..k-2]]

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

শূন্য-ইন্ডেক্স। এতে তালিকা তৈরি করে সূচি তৈরি করে।


হাস্কেল , 39 বাইট

n%k|n<k=1+min(k-n)n|j<-k+4=(n-k)%j
(%2)

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

শূন্য-ইন্ডেক্স। একটি পুনরাবৃত্তি পদ্ধতি।




3

পার্ল 6 , 29 বাইট

{({|(1...$+=2...2)}...*)[$_]}

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

0 ভিত্তিক

সম্প্রসারিত:

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

  (
    # generate an outer sequence

    {           # bare block lambda

      |(        # flatten into outer sequence

        # generate an inner sequence

        1       # start at 1

        ...     # go (upward) towards:

        $       # an anonymous state variable (new one for each outer sequence)
          += 2  # increment by 2

        ...     # go (downward) towards:

        2       # stop at 2 (1 will come from the next inner sequence)

      )
    }

    ...         # keep generating the outer sequence until:
    *           # never stop

  )[ $_ ]       # index into outer sequence
}

অভ্যন্তরীণ ক্রম 1...$+=2...2উত্পাদন করে

(1, 2).Seq
(1, 2, 3, 4, 3, 2).Seq
(1, 2, 3, 4, 5, 6, 5, 4, 3, 2).Seq
(1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2).Seq
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2).Seq
...

এটি 1-ভিত্তিক 0,হওয়ার জন্য, দ্বিতীয়টির আগে {যুক্ত করুন বা -1পরে যুক্ত করুন$_


3

আর, 64 বাইট

function(n)unlist(sapply(seq(2,n,2),function(x)c(2:x-1,x:2)))[n]

একটি যুক্তি গ্রহণ করে এমন ফাংশন n। এটি 2:n২ এর ইনক্রিমেন্ট সহ একটি ভেক্টর তৈরি করে এইগুলির জন্য প্রতিটি ভেক্টর 1:(x-1)এবং x:2তৈরি করা হয়। এটি মোটামুটি দীর্ঘতর হবেn । আমরা unlistএটি, একটি ভেক্টর পেতে এবং nতৃতীয় এন্ট্রি নিতে ।


আপনি কি 1:n*2তার পরিবর্তে করতে পারেন seq(2,n,2)? এটি আপনার প্রয়োজনের চেয়ে বড় হবে তবে এটি ভাল হওয়া উচিত! এছাড়াও আমি মনে করি না এটি যেভাবেই এর সাথে কাজ seq(2,n,2)করেছে n=1!
জিউসেপ

2

পাইথন 2 , 56 বাইট

def f(x):n=int((x/2)**.5);print 2*n-abs(2*n*n+2*n+1-x)+2

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

এটি 0-সূচকযুক্ত।

-১ বাইট @ জাস্টিনমারিনারে ধন্যবাদ

কিভাবে এই কাজ করে

আমরা নোট করি যে 1-ইনডেক্সড- nতম গ্রুপ ( 1, 2, ... 2n ..., 2, 1) 0-সূচী অনুসারে উপাদানগুলি থেকে 2(n-1)^2আসে 2n^2

সূচকে উপাদানটি সন্ধান xকরতে আমরা nযে গ্রুপ নম্বরটি রয়েছে তা সন্ধান করতে পারি that এর xথেকে আমরা গ্রুপটির কেন্দ্র থেকে দূরত্ব গণনা করি x। (এই দূরত্বটি abs(2*n**2+2*n+2-x))।

তবে, যেহেতু উপাদানগুলি একটি দলের কেন্দ্র থেকে আরও দূরে হ্রাস পেয়েছে , তাই আমরা গ্রুপের সর্বাধিক মান থেকে দূরত্ব বিয়োগ করি।


আমি এই অংশটি গল্ফ করেছি: print 2*n-abs(2*n*n+2*n+1-x)+2- 2*n*n+2*nহতে পারে 2*n*-~nএবং +2+2*nরূপান্তরিত হতে পারে -~n*2, যা আমাদের এটি শুরুতে স্থানান্তর করতে দেয় যা বাইট সংরক্ষণ করে ( 53 বাইট )
মিঃ এক্সকোডার

2

05 এ বি 1 ই , 8 বাইট

কোড:

ÅÈ€1Ÿ¦¹è

05AB1E এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

ÅÈ           # Get all even numbers until input (0, 2, ..., input)
  €1         # Insert 1 after each element
    Ÿ        # Inclusive range (e.g. [1, 4, 1] -> [1, 2, 3, 4, 3, 2, 1])
     ¦       # Remove the first element
      ¹è     # Retrieve the element at the input index

5
আপনি remove অপসারণ না করে সঠিকভাবে কাজ করে না , যা বাইট
অফ

€1কি অদ্ভুত ...
ম্যাজিক অক্টোপাস Urn

2

জাভাস্ক্রিপ্ট, 39 বাইট

f=(n,t=2)=>n>t?f(n-t,t+4):n>t/2?t-n+2:n

2

জেলি , 10 , 9 বাইট

ḤŒḄṖµ€Fị@

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

এছাড়াও 1 সূচকযুক্ত এবং বেশ দ্রুত শেষ হয়েছে।

একটি বাইট সংরক্ষিত হয়েছে @ এরিক দ্য আউটগল্ফারকে ধন্যবাদ!

ব্যাখ্যা:

হাইপোথিটিক্যালি, ধরা যাক ইনপুট ( a) 3।

    µ€      # (Implicit) On each number in range(a):
            #
Ḥ           # Double
            #   [2, 4, 6]
            #
 ŒḄ         # Convert to a range, and Bounce
            #   [[1, 2, 1], [1, 2, 3, 4, 3, 2, 1], [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]]
            #
   Ṗ        # Pop
            #   [[1, 2], [1, 2, 3, 4, 3, 2], [1, 2, 3, 4, 5, 6, 5, 4, 3, 2]]
            #
     F      # Flatten
            #   [1, 2, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2]
            #
      ị@    # Grab the item[a]
            #   1
            #

আপনার Ḥ€ŒḄ€Ṗ€Fị@µ€ḤŒḄṖµ€Fị@
কোডটির

10,000 এর প্রয়োজনীয়তা মেনে চলার জন্য এটি 12 ḤŒḄṖমিনিটের ½ĊÇ€Fị@জন্য সত্যই হওয়া উচিত (9 আই বাইট কোডটি স্থানীয়ভাবে চালানো আমার আই 7-তে প্রায় 2:20 সময় নেয় এবং 7 জিবি ব্যবহার করে)
জোনাথন অ্যালান

1

এমএটিএল , 15 বাইট

li:"@EZv4L)]vG)

1-ভিত্তিক।

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

এটি টিআইওর বৃহত্তম টেস্ট মামলার বাইরে চলে গেছে তবে আমার ডেস্কটপ কম্পিউটারে সময়মতো শেষ হয় (এমএটিএলবি আর ২০১7 এ চলমান সংকলক)। অতিবাহিত সময় প্রদর্শনের জন্য, Z`কোডের শেষে যুক্ত করুন ।

>> matl 'li:"@EZv4L)]vG)Z`'
> 10000
84
15.8235379852476

ব্যাখ্যা

কোড প্রয়োজনের তুলনায় আরও অনেক পদ তৈরি করে। বিশেষত, এটি nঅনুক্রমের "টুকরাগুলি" গণনা করে, যেখানে প্রতিটি টুকরা একটি গণনা আপ এবং 1 এ ফিরে আসে।

l       % Push 1
i       % Push input, n
:       % Range [1 2 ...n]
"       % For each k in that range
  @E    %   Push 2*k
  Zv    %   Symmetric range: [1 2 ... 2*k-1 2*k 2*k-1 ... 2 1]
  4L)   %   Remove last entry: [1 2 ... 2*k-1 2*k 2*k-1 ... 2]
]       % End
v       % Concatenate all stack contents into a column vector
G)      % Get n-th entry. Implicitly display

চমৎকার! টিআইও মাঝে মাঝে ধীর হয় ...

1
ঠিক আছে, এখানে আলগা হওয়ার মূল কারণটি হল অ্যালগরিদম (যা প্রয়োজনের তুলনায় অনেক বেশি পদ তৈরি করে)। এছাড়াও, এমএটিএল সংকলকটি বিশেষভাবে দ্রুত নয়
লুইস মেন্ডো

1

হুশ , 12 10 বাইট

!ṁ§¤+hḣṫİ0

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

1-ইনডেক্সড, বেশ দ্রুত কাজ করে

ব্যাখ্যা

!ṁ§¤+hḣṫİ0
 ṁ      İ0    Map the following function over the even numbers and concatenate the results together
  §   ḣṫ      Get the ranges 1-n and n-1, then... 
   ¤+h         remove the last element from both of them and concatenate them together
!             Return the element of the resulting list at the given index

8 টি বাইট ব্যবহার করছে

@ জাগারব এটি দুর্দান্ত ধারণা এবং আপনার উত্তর হিসাবে সম্ভবত এটি পোস্ট করা উচিত :)
লিও



1

অক্ষিপট , 62 বাইট

.+
$*
^((^.|\2..)*)\1.
6$*1$2$2;1
(?=.+;(.+))\1(.+).*;\2.*
$.2

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ইনপুটটি 1-সূচকযুক্ত। প্রথম পর্যায়ে কেবল অ্যানারি রূপান্তর থেকে দশমিক। দ্বিতীয় পর্যায়ে সর্বাধিক বর্গ সংখ্যা sঅর্ধেকের চেয়ে কম কঠোরভাবে খুঁজে পায় n; $1হয় , যখন $2হয় 2s-1। এটি দুটি মান গণনা করে, প্রথমটি বর্তমান / ডাউন রানের সংখ্যাগুলির সংখ্যা, যা 4(s+1) = 4s+4 = 2$2+6দ্বিতীয়টি এবং দ্বিতীয়টি সেই রানের মধ্যে অবস্থিত n-2s² = n-(2$1+1)+1 = n-$&+1, যা কেবলমাত্র কঠোর বৈষম্য প্রয়োগের 1জন্য 1ব্যবহারের জন্য তৈরি করতে হবে । চূড়ান্ত পর্যায়ে তারপরে সেই অবস্থান থেকে রানের শুরু এবং শেষ উভয় ক্ষেত্রেই গণনা করা হয় এবং নীচের ফলাফলটি গ্রহণ করে এটি দশমিক রূপে রূপান্তরিত করে।



1

পার্ল 5 , 43 + 1 (-পি) = 44 বাইট

$_=($n=2*int sqrt$_/2)+2-abs$n/2*$n+$n+1-$_

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

আমি সরাসরি একটি এন-তম উপাদান গণনা করার জন্য একটি সূত্র নিয়ে কাজ করছিলাম। তারপরে আমি দেখেছি @ ফায়ার ফ্লেম 241 সেই কাজটি করেছে এবং আমি এটি পার্লে গল্ফ করেছি।

# পার্ল 5 , 50 + 1 (-n) = 51 বাইট

push@r,1..++$",reverse 2..++$"while@r<$_;say$r[$_]

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

ফলাফল 0 সূচী হয়।


1

হাস্কেল , 115 81 বাইট

y%x=snd(span(<x)$scanl(+)y[y+1,y+3..])!!0
g 1=1
g x|1%x>2%x=1+g(x-1)|1>0=g(x-1)-1

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

এখানে কিছু ম্যাজিক চলছে। আমি যদিও একটি সাধারণ পদ্ধতির ব্যবহার করি তবে সম্ভবত আরও খাটো হতে পারে।

ব্যাখ্যা

প্রথমে আমরা সংজ্ঞায়িত করি %%একটি ফাংশন যা দুটি ভেরিয়েবল গ্রহণ করে xএবং y। এটি একটি তালিকা তৈরি করে scanl(+)y[y+1,y+3..]এবং সেই তালিকার প্রথম উপাদানটির চেয়ে বড় খুঁজে পায় xscanl(+)আমরা করব এমন ত্রিভুজাকার সংখ্যাগুলি পেতে, আমরা করবো scanl(+)0[1..]বর্গ সংখ্যাগুলি পেতে কেবল পুনরাবৃত্ত পরিমাণগুলি সম্পাদন করে scanl(+)0[1,3..]। বিশেষত দুটি তালিকাগুলি আমরা নির্মাণ করব scanl(+)2[3,5..]এবং scanl(+)1[2,4..]সেগুলি হ'ল প্যাটার্নের প্রতিচ্ছবি পয়েন্ট।

এখন আমরা মূল ফাংশনটি সংজ্ঞায়িত করি gযা একটি নেয় x। যদি xএক হয় তবে আমরা ফিরে 1আসি কারণ এটি প্রথম মান। অন্যথায় আমরা পরের দুটি প্রতিচ্ছবি পয়েন্টগুলি পরীক্ষা করে দেখি, যদি ডাউন প্রতিফলন বড় হয় তবে 1%x>2xআমরা তার উত্তরসূরিটি g$x-1ফিরে পাই অন্যথায় আমরা পূর্বসূরিকে ফেরত দেবg$x-1

ঠিক আছে তবে কেন কাজ করে?

সবার আগে "কীভাবে আমরা শিখার পথ খুঁজে পাই?" একই ধরণের ক্রমাগত উল্লম্বের মধ্যে দূরত্বটি নোট করা এটি গুরুত্বপূর্ণ। আপনি লক্ষ্য করবেন যে পার্থক্যগুলি প্রতিবার 2 দ্বারা বাড়ছে। এটি বোধগম্য হয় কারণ ত্রিভুজগুলির ঘাঁটি প্রতিটি সময় 2 দিয়ে আরও প্রশস্ত হয়। আমরা যেমন তালিকার আক্ষরিক ব্যবহার করে একটি তালিকা ধ্রুবক পার্থক্য করতে পারি [2,4..]এবং আমরা scanl(+)প্রথম তালিকার অবস্থান এবং প্রথম পার্থক্যের ভিত্তিতে এই তালিকাগুলিকে আমাদের শীর্ষ বাক্সে রূপান্তর করতে ব্যবহার করি ।

সুতরাং এখন যেহেতু আমাদের উপরের এবং নীচের দিকে উল্লম্বগুলি সন্ধান করার একটি উপায় রয়েছে আমরা সেই তথ্যগুলি মানগুলি পেতে ব্যবহার করতে পারি। আমরা বলি যে প্রথম মানটি 1অন্যথায় আমাদের উত্তরসূরি বা পূর্বসূরীর হয়। পরবর্তী ভার্টেক্সটি যদি upর্ধ্বমুখী হয় তবে আমরা পূর্বসূরিকে নিতে চাই, অন্যথায় আমরা উত্তরসূরিটি গ্রহণ করি।

হাস্কেল , 56 51 51 46 বাইট

এখানে কম গণিত এবং আরও কম বাইট সহ আমার আরও ভাল সমাধান।

d x|e<-[1..x-1]=e++map(x+1-)e
(([1..]>>=d)!!0)

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



1

সি # (.নেট কোর) , 120 বাইট

ব্যাখ্যা: বেশ সহজ, প্রথম নেস্টেড লুপটি আমাদের সর্বোচ্চের উপরে উঠে যায়, দ্বিতীয়টি নীচে নেমে আসে 2 এ।

x=>{var a=0;for(int i=2,j=0;j<x;i+=2){for(var b=1;b<=i&j<x;b++,j++){a=b;}for(var c=i-1;c>1&j<x;c--,j++){a=c;}}return a;}

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


1

রুবি , 78 75 বাইট

স্টেপ হেনকে ধন্যবাদ 1 বাইট সংরক্ষিত

মিস্টার এক্সকোডারকে ধন্যবাদ 1 বাইট সংরক্ষিত

->n{a=0;b=2;c=1;n.times{if a==b then c=0;b+=2;end;c=1if a<2;a+=c<1?-1:1};a}

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

আশা করি আরও বেশি করে বাই-কাউন্ট টেনে নেওয়ার জন্য আমি কিছু টিপস পেতে পারি। আমি একটি সহজ পদ্ধতির গ্রহণ করার চেষ্টা করেছি।


পিপিসিজিতে আপনাকে স্বাগতম! c=1 ifগল্ফ করা যেতে পারেc=1if
স্টিফেন

76 বাইট:->n{a=0;b=2;c=1;n.times{if a==b then c=0;b+=2;end;c=1if a==1;a+=c<1?-1:1};a}
মিঃ এক্সকোডার

1

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

n->{int i=2;for(;n>i;i+=4)n-=i;return n>i/2?i-n+2:n;}

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

-2 বাইট নেভাকে ধন্যবাদ।

1-ইন্ডেক্স।

টিএল; ডিআর আমরা ক্রমটি সুবিধাজনক অংশগুলিতে বিভক্ত করি, খণ্ডটি খুঁজে পাইn পাওয়া যায়, তারপরে এটি সন্ধান করুনnth খণ্ড অবস্থান।

এখানে, আমরা সিকোয়েন্সটি বিভক্ত করতে পারি [[1,2],[1,2,3,4,3,2],[1,2,3,4,5,6,5,4,3,2],...], যা আমাদের মাপের আকার দেয় 4i-2। শুরু করে i=2, আমরা এগুলি iথেকে বিয়োগ করি n, মূলত একবারে একটি অংশকে মূল দিকে উপরে নিয়ে যাই । একবার আমরা সন্তুষ্ট n<=i, আমরা জানিn বর্তমান খণ্ডে এখন সঠিক মানের অবস্থান।

আমরা তখন তুলনা করে মূল্য পেতে nকরতে i, খণ্ড মাপ। প্রতিটি খণ্ডের মধ্যবিন্দু সমান i/2+1; যদি এর nচেয়ে কম হয়, আমরা কেবল ফিরে আসি n। যদিn বেশী, আমরা ফিরে i-n+2

উদাহরণ

n = 16, i = 2

Is n > i? Yes, n = n - 2 = 14, i = i + 4 = 6
Is n > i? Yes, n = n - 6 = 8, i = i + 4 = 10
Is n > i? No, stop looping.
10 / 2 + 1 = 6
Is n > 6? Yes, return i - n + 2 = 8 - 6 + 2 = 4

আপনার দরকার নেই +1, return n>i/2?i-n+2:nযথেষ্ট।
নেভায়ে

হাহ। ধন্যবাদ, পূর্ণসংখ্যা বিভাগ
Xenderhall

1

পাইথন 2 , 5! বাইটস (120 বাইট: পি)

r=range
a=[]
for i in r(2,998,2): 
	for j in r(1,i+1): a.append(j)
	for j in r(i-1,1,-1): a.append(j)
print a[input()-1]

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

সোজা, তালিকা তৈরি করে এবং তারপরে ইনপুট'স উপাদানটি গ্রহণ করে


ধন্যবাদ যিনি ভোট দিয়েছেন! এখন আমার 50 টি রেপ রয়েছে যাতে আমি মন্তব্য করতে পারি! তীব্রভাবে
ছোঁড়াছুড়ি


0

কিউবিআইসি , 47 বাইট

g=q{p=p+1~p=:|_Xg\g=g+q~g=1or g>=r|r=r+1┘q=q*-1

ব্যাখ্যা

g=q         var g is the current value of the sequence; set to 1 at the start
{           DO infinitely
p=p+1       raise the step counter (var p)
~p=:|_Xg    IF p equals the input term a (read from cmd line) THEN QUIT, printing g
\           ELSE
g=g+q       raise (or decrement) g by q (q is 1 at the start of QBIC)
~g=1        IF g is at the lower bound of a subsequence
    or g>=r OR g is at the upper bound (r start as 2 in QBIC)
|r=r+1      THEN increment r (this happens once on lower bound, and once on upper, 
            total of 2 raise per subsequence)
┘q=q*-1     and switch q from 1 to -1

0

রাদা , 54 বাইট

f n{seq 1,n|{|i|seq 1,2*i;seq 2*i-1,2}_|head n+2|tail}

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

সাথে কল করুন: try f(n)

এই ফাংশনটি দ্রুত উত্তরটি ফেরত দেয় তবে এর পরে কিছু অপ্রয়োজনীয় গণনা করা হয় এবং শেষ পর্যন্ত স্মৃতি থেকে বেরিয়ে যায়।

যেহেতু ফাংশনটি আসল উত্তরটি ডাকা হওয়ার খুব শীঘ্রই ফিরে আসে (স্পষ্টভাবে এক মিনিটের মধ্যে), আমি মনে করি এই উত্তরটি বৈধ।

(রাদা ফাংশনে সমান্তরালতার কারণে তারা প্রস্থান করার আগে মানগুলি ফিরিয়ে দিতে পারে))



0

পিএইচপি, 65 + 1 বাইট

for($x=$d=$z=1;--$argn;)$d=($x+=$d)>1?$x>$z?-1:$d:!!$z+=2;echo$x;

পাইপ হিসাবে চালনা করুন-R বা এটি অনলাইনে চেষ্টা করুন (বা অন্য সংস্করণগুলির মধ্যে কোনওটিই অসুবিধে করুন)।

Tsh´s রিকার্স জাভা স্ক্রিপ্ট একটি বন্দর লাগে 66 বাইট:

function f($n,$t=2){return$t<2*$n?$t<$n?f($n-$t,$t+4):$t-$n+2:$n;}

আর্নৌল্ডস দ্রবণটির একটি বন্দর 62 + 1 নেয়:

$n=$argn;echo($n-=($r=(~-$n/2)**.5|0)*$r*2)<++$r*2?$n:$r*4-$n;

জেন্ডারহেলস জাভার একটি গল্ফযুক্ত বন্দরটিতে এখন পর্যন্ত সংক্ষিপ্ততম কোড রয়েছে (55 + 1 বাইট):

for($n=$argn;$n+2>$i+=4;)$n-=$i-2;echo$n*2>$i?$i-$n:$n;

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