ตัวเลข n แรกโดยไม่มีเลขฐานสองเท่ากับกัน


32

ลำดับประกอบด้วยการแทนทศนิยมของตัวเลขฐานสองของรูปแบบ: 10101...ซึ่งคำ n-th มี n บิต

ลำดับนั้นอาจอธิบายได้ง่ายที่สุดโดยเพียงแสดงความสัมพันธ์ระหว่างเลขฐานสองและเลขฐานสิบของตัวเลข:

0       ->  0
1       ->  1
10      ->  2
101     ->  5
1010    ->  10
10101   ->  21
101010  ->  42

ท้าทาย:

ใช้จำนวนเต็มอินพุทnแล้วคืนค่าตัวเลข n ตัวแรกตามลำดับ คุณอาจเลือกที่จะเรียงลำดับดัชนี 0 หรือ 1 ดัชนี

กรณีทดสอบ:

n = 1   <- 1-indexed
0

n = 18
0, 1, 2, 5, 10, 21, 42, 85, 170, 341, 682, 1365, 2730, 5461, 10922, 21845, 43690, 87381

คำอธิบายได้รับการสนับสนุนเช่นเคย

นี่คือOEIS A000975


ด้วยโซลูชัน MATL ของคุณเองเป็นที่ยอมรับหรือไม่ที่จะแสดงผลลัพธ์ในลำดับที่กลับกัน?
Shaggy

ใช่ตราบใดที่มันถูกจัดเรียง @Shaggy
Stewie Griffin

ผลักโชคของฉันที่นี่ แต่รูปแบบผลลัพธ์นี้จะยอมรับได้[85,[42,[21,[10,[5,[2,[1,0]]]]]]]หรือไม่
Shaggy

คำตอบ:


66

Python 2 , 36 ไบต์

lambda n:[2**i*2/3for i in range(n)]

ลองออนไลน์! คำอธิบาย: การแทนเลขฐานสองของเป็นเช่นนั้นมันก็ยังคงที่คูณด้วยอำนาจที่เหมาะสมของ 2 และใช้เวลาส่วนจำนวนเต็ม230.101010101...


1
น่าเสียดายที่มันเป็นมกราคม 2018 มิฉะนั้นผมจะได้รับการเสนอชื่อมันสำหรับความเข้าใจทางคณิตศาสตร์ที่ดีที่สุดสำหรับการที่ดีที่สุดของ PPCG 2017 หวังว่าฉันจะยังจำมันได้ตั้งแต่ต้นปี 2019; p
Kevin Cruijssen

@KevinCruijssen นี่คือสิ่งที่ดีที่สุดที่ฉันเคยเห็นจากcodegolf.stackexchange.com/a/51574/17360
qwr

3
@KevinCruijssen อย่าลืม!
Bassdrop Cumberwubwubwub

2
@BassdropCumberwubwubwub ขอบคุณสำหรับการเตือนเพราะฉันลืมมันไปหมดแล้ว! มันถูกเพิ่มเข้าไปในการเสนอชื่อ
Kevin Cruijssen

11

05AB1E , 4 ไบต์

บันทึก 2 ไบต์โดยใช้เคล็ดลับ 2/3 ของ Neil

Lo3÷

ลองออนไลน์!

คำอธิบาย

L      # push range [1 ... input]
 o     # raise 2 to the power of each
  3÷   # integer division of each by 3

05AB1E , 6 ไบต์

TRI∍ηC

ลองออนไลน์!

คำอธิบาย

T        # push 10
 R       # reverse it
  I∍     # extend to the lenght of the input
    η    # compute prefixes
     C   # convert each from base-2 to base-10

9

เจลลี่ , ... 4 ไบต์

ขอบคุณไมล์สำหรับ -1 ไบต์!

ḶḂḄƤ

ลองออนไลน์!

คำอธิบาย:

owered range, or Unength. Get [0, 1, 2, 3, ..., n-1]
 Ḃ    it. Get the last bit of each number. [0, 1, 0, 1, ...]
   Ƥ  for each Ƥrefixes [0], [0, 1], [0, 1, 0], [0, 1, 0, 1], ...
  Ḅ   convert it from inary to integer.

วุ้น 4 ไบต์

เวอร์ชั่นของ Jonathan Allan

Ḷ€ḂḄ

ลองออนไลน์!

owered range, or Unength.
 €    Apply for each. Automatically convert the number n
      to the range [1,2,..,n]. Get [[0],[0,1],[0,1,2],..].
  Ḃ   it. Get the last bit from each number.
      Current value: [[0],[0,1],[0,1,0],..]
   Ḅ  Convert each list from inary to integer.

เวอร์ชันที่ใช้เล่ห์กล 2/3 ของ Neil ให้ 5 ไบต์ดูประวัติการแก้ไข


ḶḂḄƤคำนำหน้าอย่างรวดเร็วถูกสร้างขึ้นสำหรับสิ่งนี้
ไมล์

ไม่จำเป็นต้องใช้คำนำหน้าด่วนแม้แต่ - Ḷ€ḂḄจะใช้งานได้
Jonathan Allan

5

MATL , 5 ไบต์

:WI/k

ตามคำตอบของนีลคำตอบของนีล

คำอธิบาย

:       % Implicit input, n. Push range [1 2 ... n]
W       % 2 raised to that, element-wise. Gives [2 4 ...2^n] 
I       % Push 3
/       % Divide, element-wise
k       % Round down, element-wise. Implicit display

ลองออนไลน์!


MATL , 9 ไบต์

:q"@:oXBs

ลองออนไลน์!

คำอธิบาย

:       % Implicit input n. Range [1 2 ... n]
q       % Subtract 1, element-wise: gives [0 1 ... n-1]
"       % For each k in [0 1 ... n-1]
  @     %   Push k
  :     %   Range [1 2 ... k]
  o     %   Modulo 2, element-wise: gives [1 0 1 ...]
  XB    %   Convert from binary to decimal
  s     %   Sum. This is needed for k=0, to transform the empty array into 0
        % Implicit end. Implicit display

5

Python 2 , 45 37 36 ไบต์

-3 ไบต์ขอบคุณ user202729
-1 ไบต์ขอบคุณ mathmandan

s=0
exec"print s;s+=s+~s%2;"*input()

ลองออนไลน์!


การเพิ่มsเป็นสองเท่าเป็นการเพิ่มsตัวเองดังนั้นฉันเชื่อว่าคุณสามารถทำได้s+=s+~s%2เพื่อบันทึกไบต์
คณิตศาสตร์

5

Python 3, 68 61 54 48 43 ไบต์

c=lambda x,r=0:x and[r]+c(x-1,2*r+~r%2)or[]  

ขอบคุณuser202729 ที่ช่วยประหยัด 19 ไบต์และovsสำหรับช่วยประหยัด 6 ไบต์

ลองใช้ออนไลน์


ขอบคุณสำหรับ -1 ไบต์ และฉันคิดว่าฉันไม่สามารถแทนที่หากมีและหรือ
Manish Kundu

โอเคทำได้แล้ว
Manish Kundu

2
เนื่องจากx == 0เทียบเท่ากับnot xถ้าxเป็นจำนวนเต็มสลับตัวถูกดำเนินการ (เช่นx if c else y= y if not c else x) จะบันทึกไบต์เพิ่มเติม
user202729

นอกจากนี้คุณยังสามารถวางi%2และใช้1-r%2แทนได้
Rod

1
iแล้วคุณไม่จำเป็นต้องติดตาม
user202729

4

Husk , 7 ไบต์

mḋḣ↑Θݬ

ลองออนไลน์!

ใช้ 1 ฐานดังนั้นอินพุตnให้ผลลัพธ์n รายการแรก

คำอธิบาย

     ݬ   The infinite list [1, 0, 1, 0, 1, ...]
    Θ     Prepend a zero.
   ↑      Take the first n elements.
  ḣ       Get the prefixes of that list.
mḋ        Interpret each prefix as base 2.

4

APL (Dyalog Unicode) , 11 ไบต์SBCS

ถือว่า⎕IO( I ndex O rigin) 0เป็นค่าเริ่มต้นในหลาย ๆ ระบบ ฟังก์ชันนำหน้าเงียบโดยไม่ระบุชื่อ 1 การจัดทำดัชนี

(2⊥⍴∘1 0)¨⍳

ลองออนไลน์!

ɩ ndices 0 ... n-1

(...  ใช้ฟังก์ชั่นโดยปริยายต่อไปนี้กับแต่ละรายการ

⍴∘1 0 วนรอบการสร้างรายการใหม่ตาม[1,0]ความยาวนั้น

2⊥ แปลงจาก base-2 (ไบนารี) เป็นหมายเลขปกติ


4

Perl v5.10 -n , 24 + 1 ไบต์

-3 ไบต์ขอบคุณNahuel Fouilleul !

say$v=$v*2|$|--while$_--

ลองออนไลน์!

ตรรกะเดียวกับรุ่น Ruby ของฉัน แต่สั้นกว่าเพราะ Perl มีความกระชับมากกว่า ด้วยเหตุผลบางอย่างแปลก, printจะไม่ทำ seperator (บ้า!) ดังนั้นผมจึงต้องใช้sayจากv5.10;ในสั่งซื้อสำหรับการทำงานผมไม่แน่ใจว่าวิธีการที่จะทำคะแนนนี้ดังนั้นฉันออกจากมันออกมาตอนนี้ ?. ..

คำอธิบาย

say    # Like shouting, but milder.
  $v = $v*2 | $|-- # Next element is this element times 2 bitwise-OR
                   # with alternating 0 1 0 1..., so 0b0, 0b1, 0b10, 0b101...
                   # $. is OUTPUT_AUTOFLUSH, which is initially 0 and
                   #   setting all non-zero values seem to be treated as 1
  while $_-- # do for [input] times

สำหรับการให้คะแนนฉันจะบอกว่า: 27 + 1 ( -n) = 28 bytes, เพราะใช้ perl one-liner, หนึ่งอันควรใช้-eและใช้ 5.10 คุณแค่ต้องใช้-E, ซึ่งมีความยาวเท่ากัน
Nahuel Fouilleul

สามารถบันทึกได้ 3 ไบต์โดยใช้$|--แทน($.^=1)
Nahuel Fouilleul


4

APL (Dyalog) 7 ไบต์

3÷⍨2*⍳

ลองออนไลน์!


APL (Dyalog) 11 ไบต์

(22|⍳)¨1+⍳

ลองออนไลน์!

⎕IO←0การใช้ประโยชน์


ส่งคืนคำที่มีมากเกินไปหนึ่งคำ ทำงานภายใต้⎕IO←0( แต่อ้างว่าเป็น 1 การจัดทำดัชนี!) และการเปลี่ยนแปลง0,ที่จะ1+:(2⊥2|⍳)¨1+⍳
อดัม

4

C , 81 55 59 ไบต์

1 การจัดทำดัชนี

i,j;f(c){for(i=j=0;i<c;)printf("%d ",i++&1?j+=j+1:(j+=j));}

โปรแกรมเต็มรูปแบบ golfed น้อย:

i;j;main(c,v)char**v;{c=atoi(*++v);for(;i<c;i++)printf("%d ",i&1?j+=j+1:(j+=j));}

ลองออนไลน์!

แก้ไข 2: ฉันอยู่ภายใต้การสันนิษฐานว่าฟังก์ชั่นไม่จำเป็นต้องนำมาใช้ซ้ำได้ในขณะนี้ที่ฉันคิดว่ามันทำให้รู้สึกที่สมบูรณ์แบบที่พวกเขาจะต้องนำมาใช้ใหม่: P

แก้ไข: ฉันอยู่ภายใต้ความเข้าใจผิดที่ฉันต้องรวมโปรแกรมทั้งหมดในคำตอบกลับกลายเป็นว่าฉันเพียงต้องการฟังก์ชั่นที่ทำ เยี่ยมมาก

ฉันแน่ใจว่าฉันสามารถโกนทิ้งได้ไม่กี่ไบต์ที่นี่และที่นั่น ฉันได้ใช้เทคนิคเล็กน้อยแล้ว ชุดโปรแกรมขนาดใหญ่มีไว้เพื่อรับการโต้แย้งและเปลี่ยนให้เป็น int นี่คือรหัสกอล์ฟครั้งแรกของฉัน ถ้าฉันทำอะไรผิดบอกฉัน: หน้า


2
ยินดีต้อนรับสู่ PPCG! :) ฉันไม่ใช่คน C แต่คุณสามารถรวบรวมคำแนะนำจากโซลูชันของ Steadyboxได้
Shaggy

ตกลงที่เหมาะสมมากขึ้นตอนนี้ฉันได้รวมโปรแกรมทั้งหมดเมื่อทั้งหมดที่ฉันต้องการคือฟังก์ชั่นและส่วนที่เหลือสามารถทำได้ในส่วนท้าย ฉันคิดว่านี่สามารถปรับปรุงได้อย่างมากแล้ว
Minerscale

ยินดีต้อนรับสู่ PPCG! คุณสามารถบันทึกไบต์โดยการลบi++และการเปลี่ยนแปลงไปi&1 i++&1นอกจากนี้แม้จะเป็นตัวแปรทั่วโลกiและjจะเริ่มต้นที่จะเป็นศูนย์แรกที่พวกเขาต้องการที่จะเริ่มต้นได้ภายในฟังก์ชันเพราะการส่งฟังก์ชั่นจะต้องมีนำมาใช้ใหม่
Steadybox

1
ยิ่งไปกว่านั้นมันเป็นไปได้ที่จะประหยัด 2 ไบต์มากขึ้นโดยกำจัดสิ่งที่ประกอบไปด้วยทั้งหมด
user202729

2
50 ไบต์: i,j;f(c){for(i=j=0;i<c;)printf("%d ",j+=j+i++%2);} ลองออนไลน์!
Steadybox

4

Haskell , 47 40 53 49 44 40 34 ไบต์

-4 ไบต์ขอบคุณ user202729
-6 ไบต์ขอบคุณ Laikoni

(`take`l)
l=0:[2*a+1-a`mod`2|a<-l]

ลองออนไลน์!


คุณสามารถแทนที่otherwiseด้วยเช่น1>0( otherwise == True)
ข้อบกพร่อง

หากต้องการตีกอล์ฟให้มากขึ้นคุณสามารถใช้ตัวป้องกันในการกำหนดบางสิ่งเช่นนี้ลองออนไลน์!
ข้อบกพร่อง

1
PS: ยังตรวจสอบเคล็ดลับสำหรับการเล่นกอล์ฟใน Haskellเช่นเดียวกับของเรา Haskell เนตของ monads และผู้ชาย
ข้อบกพร่อง

1
คุณต้องทำให้ฟังก์ชั่นที่ผลตอบแทนแรกnองค์ประกอบของรายการที่nคือการโต้แย้ง
มนุษย์โดยรวม

1
ใช่แล้ว ฉันสามารถแนะนำให้ดูคู่มือกฎการเล่นกอล์ฟใน Haskellซึ่งพยายามรวบรวมฉันทามติในปัจจุบันเกี่ยวกับสิ่งที่ได้รับอนุญาตและสิ่งที่ไม่
Laikoni

4

ทับทิมขนาด 26 ไบต์

->n{(1..n).map{|i|2**i/3}}

ลองออนไลน์!

เอาชนะคำตอบทับทิมเก่าทั้งหมด

คำอธิบาย

1/3ในรูปแบบไบนารี่0.01010101...ดังนั้นถ้าคุณคูณมันด้วยพลังสองคุณจะได้:

n| 2^n/3
-+---------
1|0.1010101...
2|01.010101...
3|010.10101...
4|0101.0101...
5|01010.101...
6|010101.01...

แต่รูบี้ปูตัวเลขบนการแบ่ง int ให้ลำดับที่ฉันต้องการ


4

J , 9 ไบต์

[:#.\2|i.

มันทำงานอย่างไร?

i. - รายการ 0..n-1

2| - รายการไอเท็ม mod 2

\ - คำนำหน้าทั้งหมด

#. - เป็นทศนิยม

[: - แคปส้อม (เพราะฉันมีจำนวนคู่ (4) ของคำกริยา)

ลองออนไลน์!


3

เรติน่า 28 ไบต์

)K`0
"$+"+¶<`.+
$.(*__2*$-1*

ลองออนไลน์!

เป็นพื้นฐาน 0 ดังนั้นอินพุตnให้ผลลัพธ์n + 1ครั้งแรก

คำอธิบาย

ใช้การเรียกซ้ำจาก OEIS:

a(n) = a(n-1) + 2*a(n-2) + 1

ไปผ่านโปรแกรม:

)K`0

นี่เป็นสเตจคงที่: มันจะตัดอินพุตและตั้งค่าสตริงการทำงาน0เป็นค่าเริ่มต้นของลำดับ )wraps ขั้นตอนนี้ในกลุ่ม กลุ่มนั้นไม่ได้ทำอะไรเลย แต่เกือบทุกสเตจ (รวมถึงสเตจกลุ่ม) บันทึกผลลัพธ์ในบันทึกและเราจะต้องใช้สำเนา0บนบันทึกนั้นสองชุดเพื่อให้โปรแกรมทำงานได้

"$+"+¶<`.+
$.(*__2*$-1*

มีการกำหนดค่ามากมายที่นี่: "$+"+ล้อมรอบด้วยการวนซ้ำ "$+"จะถือว่าเป็นทดแทนและ$+หมายถึงการป้อนข้อมูลของโปรแกรมคือn ซึ่งหมายความว่าการวนซ้ำจะทำงานnครั้ง

จากนั้น¶<ตัดแต่ละการวนซ้ำในขั้นตอนเอาต์พุตซึ่งพิมพ์อินพุตของสเตจด้วยการป้อนบรรทัดต่อท้าย (ดังนั้นการทำซ้ำครั้งแรกจะพิมพ์ศูนย์การทำซ้ำครั้งที่สองจะพิมพ์ผลลัพธ์การทำซ้ำครั้งแรกและอื่น ๆ )

สเตจจะแทนที่สตริงการทำงานทั้งหมดด้วยการแทนที่บนบรรทัดสุดท้าย อันนั้นใช้ประโยชน์จากวงเล็บปิดโดยนัยและข้อโต้แย้งโดยนัยสำหรับโอเปอเรเตอร์การทำซ้ำ*ดังนั้นจึงสั้นสำหรับ:

$.($&*__2*$-1*_)

สิ่งของในวงเล็บสามารถแบ่งออกเป็นสามส่วน:

  • $&*_: ให้สตริงของ(n-1) _ s
  • _: _ให้เป็นหนึ่งเดียว
  • 2*$-1*_: ให้สตริงของ2 * a _(n-1) การ$-1อ้างอิงถึงผลสุดท้ายในบันทึกผลคือการวนซ้ำก่อนสุดท้าย นั่นเป็นเหตุผลที่เราจำเป็นต้องคัดลอกเลขศูนย์ในบันทึกเพื่อเริ่มต้นมิฉะนั้นจะอ้างถึงอินพุตของโปรแกรมในการทำซ้ำครั้งแรก

จากนั้น$.(…)วัดความยาวของสตริงผลลัพธ์ กล่าวอีกนัยหนึ่งเราได้คำนวณa(n) = a(n-1) + 1 + 2*a(n-2)โดยผ่านเอกภาพ (ไม่ใช่จริง ๆ : $.(…)ขี้เกียจและไม่ได้ประเมินเนื้อหาของมันหากสามารถกำหนดความยาวที่เกิดขึ้นได้โดยตรงผ่านการคำนวณดังนั้นนี่จึงค่อนข้างมีประสิทธิภาพ)

ผลลัพธ์ของการวนซ้ำขั้นสุดท้าย ( องค์ประกอบลำดับที่n + 1ของลำดับ) จะถูกพิมพ์เนื่องจากเอาต์พุตโดยนัยของ Retina ในตอนท้ายของโปรแกรม


3

Brain-Flakขนาด 36 ไบต์

{([()]{}<((({}<>)<>){}([{}]()))>)}<>

ลองออนไลน์!

คำอธิบาย:

จำนวนในลำดับถัดไปจะได้รับโดยหรือn*2+1n*2+0

{([()]{}< Loop input times
  (
   (({}<>)<>){} Copy n to other stack; n*2
   ([{}]())  i = 1-i
  ) push n*2 + i
>)} End loop
<> Output other stack


2

> <> , 22 + 3 (แฟล็ก -v) ไบต์

0:nao::1+2%++$1-:?!;$!

ลองออนไลน์!

คำอธิบาย

สแต็กจะเริ่มต้นได้ด้วยตัวนับลูป

0:nao                  : Push 0 to the stack, duplicate and print with a new line.
                         [7] -> [7, 0]
     ::1+              : Duplicate the stack top twice more then add 1 to it.
                         [7, 0] -> [7, 0, 0, 1]
         2%++          : Mod the stack top by 2 then add all values on the stack bar the loop counter.
                         [7, 0, 0, 1] -> [7, 1]
             $1-:?!;$! : Swap the loop counter to the top, minus 1 from it and check if zero, if zero stop the program else continue.

2

Java 8, 115 81 80 52 ไบต์

n->{for(int i=2;n-->0;i*=2)System.out.println(i/3);}

ท่าเรือ@Neil 's งูหลาม 2 คำตอบ
1 ทำดัชนีและส่งออกโดยตรงแต่ละค่าในบรรทัดแยก

คำอธิบาย:

ลองออนไลน์

n->{                           // Method with integer parameter and no return-type
  for(int i=2;                 //  Start integer `i` at 2
      n-->0;                   //  Loop `n` times:
      i*=2)                    //    Multiply `i` by 2 after every iteration
    System.out.println(i/3);}  //   Print `i` integer-divided by 3 and a new-line

คำตอบเก่า 80 ไบต์:

n->{String t="",r=t;for(Long i=0L;i<n;)r+=i.parseLong(t+=i++%2,2)+" ";return r;}

อินพุต 1 ดัชนีและคั่นด้วยเว้นวรรค Stringเอาต์พุตที่

คำอธิบาย:

ลองออนไลน์

n->{                             // Method with integer parameter and String return-type
  String t="",r=t;               //  Temp and result-Strings, both starting empty
  for(Long i=0L;i<n;)            //  Loop from 0 to `n` (exclusive)
    r+=                          //   Append the result-String with:
       i.parseLong(        ,2);  //    Binary to integer conversion
                   t+=           //     append the temp-String with:
                      i  %2      //      current index `i` modulo-2
                       ++        //      and increase `i` by one afterwards
       +" ";                     //    + a space
  return r;}                     //  Return the result-String

2

Perl 6 ,  35 30 27 25  20 ไบต์

{[\~](0,+!*...*)[^$_]».&{:2(~$_)}}

ลองดู (35)

{(0,{$_*2+|($+^=1)}…*)[^$_]}

ลองดู (30)

{(⅓X*(2,4,82**$_))».Int}

ลองดู (30)

{(⅔,* *2…*)[^$_]».Int}

ลองดู (27)

{((2 X**1..$_)X/3)».Int}

ลองดู (25)

{(2 X**1..$_)Xdiv 3}

ลองดู (20)

ขยาย:

{
 (
  2                  # 2
    X**              # cross to the power of
       1..$_         # Range from 1 to the input (inclusive)
            )

             Xdiv    # cross using integer divide
                  3  # by 3
}


2

C, 47 46 ไบต์

a;f(n){for(a=0;n--;a+=a-~a%2)printf("%d ",a);}

การสะสมaเริ่มต้นด้วยศูนย์ ในแต่ละขั้นตอนเราเพิ่มเป็นสองเท่า ( a+=a) และเพิ่มหนึ่งรายการหากบิตที่มีนัยสำคัญน้อยที่สุดก่อนหน้านี้เป็นศูนย์ ( !(a%2)หรือเทียบเท่า-(~a)%2 )

โปรแกรมทดสอบ

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    while (*++argv) {
        f(atoi(*argv));
        puts("");
    }
}

ผล

$ ./153783 1 2 3 4 5 6
0 
0 1 
0 1 2 
0 1 2 5 
0 1 2 5 10 
0 1 2 5 10 21 

2

Japt , 10 9 7 6 ไบต์

ทั้งหมดได้มาอย่างเป็นอิสระจากโซลูชั่นอื่น ๆ

1 การจัดทำดัชนี

õ!²mz3

ลองมัน


คำอธิบาย

õ        :[1,input]
 !²      :Raise 2 to the power of each
   m     :Map
    z3   :Floor divide by 3

ลองมัน


รุ่น 7 ไบต์

õ_ou ì2

ลองมัน

õ            :[1,input]
 _           :Pass each through a function
   o         :[0,current element)
    u        :Modulo 2 on above
      ì2     :Convert above from base-2 array to base-10

เวอร์ชัน 9 ไบต์

õ_îA¤w)n2

ลองมัน

õ            :[1,input]
 _           :Pass each through a function
   A         :10
    ¤        :Convert to binary
     w       :Reverse
  î          :Repeat the above until it's length equals the current element
      )      :Close nested methods
       n2    :Convert from binary to base-10


1

MATL, 7 bytes

:&+oRXB

Try it online!

Explanation:

         % Implicitly grab input, n
:        % Range: 1 2 ... n

 &+      % Add the range to itself, transposed
         % 2 3 4 5 ...
         % 3 4 5 6 ...
         % 4 5 6 7 ...
         % 5 6 7 8 ...

   o     % Parity (or modulus 2)
         % 0 1 0 1 ...
         % 1 0 1 0 ...
         % 0 1 0 1 ...
         % 1 0 1 0 ...

    R    % Upper triangular matrix:
         % 0 1 0 1
         % 0 0 1 0
         % 0 0 0 1
         % 0 0 0 0

    XB   % Convert rows to decimal:
         % [5, 2, 1, 0]
         % Implicitly output

The output would be 0, 1, 2, 5 ... if P was added to the end (flip), making it 8 bytes.


1
Good idea, &+
Luis Mendo

1

Ruby -n, 32 30+1 bytes

Since we have exactly 1 line of input, $. is godly convenient!

EDIT: I'm amazed that I managed to outgolf myself, but it seems using -n which counts as 1 (by rule 2 in default special conditions, since Ruby can be run with ruby -e 'full program' (thus -n is 1) all instances of gets which is only used once can be golfed down 1 char this way; I believe this is a milestone for ruby, please speak up if you disagree with this train of thought before I repeatedly reuse it in the future)

v=0
?1.upto($_){p v=v*2|$.^=1}

Try it online!

Explanation

# while gets(); -- assumed by -n
v=0            # First element of the sequence
?1.upto($_){   # Do from "1" to "$LAST_READ_LINE" aka: Repeat [input] times
  p            # print expression
  v=v*2|$.^=1  # Next element is current element times two
               # bitwise-or 0 or 1 alternating
               # $. = lines of input read so far = 1 (initially)
}
# end           -- assumed by -n

Interesting. It's possible in 27 bytes, though.
Eric Duminil

1
Nice! Seems that we all got outgolfed by 26b though.
Unihedron

1

AWK a=0, 31 bytes

{for(;$1--;a=a*2+1-a%2)print a}

Try it online!

Uses the formula shamelessly stolen from this other Ruby answer.

While not having a=0 would work (awk treats "empty" as 0), the first element of 0 won't get printed and instead be an empty line, which while I would argue is a valid output probably won't pass, so there's a=0 which can be inserted as command line argument.


I like your formula ^^
Asone Tuhid


1

brainfuck, 40 bytes

,[>.>>[>]<[.->[>]+[<]+<]+<[[-<+>]>-<]<-]

Try it online!

0-indexed. Input as char code, output as unary with null bytes separating series of char code 1s. Assumes 8-bit cells unless you want to input over 255. Assumes negative cells, though this could be fixed at the expense of several bytes.

Previously, 50 bytes

,[[<]>->>[<-<->>>>-<]<[->>++<<]>>+[-<<+>>]<<.<<+>]

Try it online!

Inputs as char code, outputs as char code. 1-indexed. Probably could be golfed a little.

@Unihedron points out I forgot to specify that this needs infinite sized cells, otherwise it tops out at the 8th number.


When I run it with `` (0d018) as par the test case, your code prints ` *UªUªUªUªUªUª` (0x01 02 05 0a 15 2a 55 aa 55 aa 55 aa 55 aa 55 aa 55 aa; 0d001 002 005 010 021 042 085 170 085 170 085 170 085 170 085 170 085 170) :( tio.run/##SypKzMxLK03O/…
Unihedron

Ok, seems it is a cell size problem. I think either your code should adapt to big integers or you need to specify the implementation that would run your code properly, but the default of 8-bit cells isn't enough
Unihedron

Forgot about that, thanks @Unihedron! I'll have a think about an 8-bit version, probably outputting in unary.
Jo King

Using an interpreter with 32-bit cells, it works. Though I think I might have a try at a bitinteger (8bit) version myself if you haven't by the weekend :D
Unihedron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.