จำนวนเอาต์พุตสูงสุด 2 ^ n-1“ เรียงลำดับ”


38

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

รายการแรกตัวเลขทั้งหมดที่สามารถสร้างได้ด้วยเพียงหนึ่ง1และส่วนที่เหลือ0ในการเป็นตัวแทนไบนารี (เรียงลำดับ) จากนั้นตัวเลขทั้งหมดที่สามารถสร้างขึ้นด้วยสองติดต่อกัน 1ส่วนที่เหลือ0จากนั้นสามติดต่อกัน 1และอื่น ๆ

เรามาดูกันว่ามันมีลักษณะอย่างไรสำหรับn = 4 :

0001  -  1
0010  -  2
0100  -  4
1000  -  8
0011  -  3
0110  -  6
1100  -  12
0111  -  7
1110  -  14
1111  -  15

ดังนั้นเอาต์พุตสำหรับn = 4คือ: 1, 2, 4, 8, 3, 6, 12, 7, 14, 15 (รูปแบบเอาต์พุตเสริม)

กรณีทดสอบ:

n = 1
1

n = 2
1 2 3

n = 3
1, 2, 4, 3, 6, 7

n = 8
1, 2, 4, 8, 16, 32, 64, 128, 3, 6, 12, 24, 48, 96, 192, 7, 14, 28, 56, 112, 224, 15, 30, 60, 120, 240, 31, 62, 124, 248, 63, 126, 252, 127, 254, 255

n = 17
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 3, 6, 12, 24, 48, 96, 192, 384, 768, 1536, 3072, 6144, 12288, 24576, 49152, 98304, 7, 14, 28, 56, 112, 224, 448, 896, 1792, 3584, 7168, 14336, 28672, 57344, 114688, 15, 30, 60, 120, 240, 480, 960, 1920, 3840, 7680, 15360, 30720, 61440, 122880, 31, 62, 124, 248, 496, 992, 1984, 3968, 7936, 15872, 31744, 63488, 126976, 63, 126, 252, 504, 1008, 2016, 4032, 8064, 16128, 32256, 64512, 129024, 127, 254, 508, 1016, 2032, 4064, 8128, 16256, 32512, 65024, 130048, 255, 510, 1020, 2040, 4080, 8160, 16320, 32640, 65280, 130560, 511, 1022, 2044, 4088, 8176, 16352, 32704, 65408, 130816, 1023, 2046, 4092, 8184, 16368, 32736, 65472, 130944, 2047, 4094, 8188, 16376, 32752, 65504, 131008, 4095, 8190, 16380, 32760, 65520, 131040, 8191, 16382, 32764, 65528, 131056,16383, 32766, 65532, 131064, 32767, 65534, 131068, 65535, 131070, 131071

นี่คือดังนั้นรหัสที่สั้นที่สุดในแต่ละภาษาชนะ!

คำอธิบายที่ดีนั้นได้รับการสนับสนุนอย่างมากรวมถึงคำตอบใน "ภาษาปกติ"!



2
@zeppelin ฉันคิดเหมือนกันในตอนแรก แต่อันนี้แตกต่างกันมาก
ETHproductions


6
โบนัสจำนวนจินตภาพหากมีคนทำเช่นนี้โดยไม่มีการแปลงฐาน (ใช้คณิตศาสตร์แบบเก่า)
Stewie Griffin

เขียนสิ่งนี้ซึ่งเป็นการผสมผสานระหว่างสองสิ่งที่ฉันเดาลองออนไลน์!
PrincePolka

คำตอบ:


38

Pythonขนาด 53 ไบต์

f=lambda n,i=1:n*[f]and[i]+f(n-1,2*i)+i%2*f(n-1,i-~i)

ลองออนไลน์!

ฟังก์ชั่นวนซ้ำจะสร้างรายการที่เรียงลำดับตามการสั่งซื้อล่วงหน้าจากต้นไม้ต้นนี้ (ตัวอย่างพร้อมn=4):

      1
     / \
    2   3
   /   / \
  4   6   7
 /   /   / \
8   12  14  15

1 2 4 8 3 6 12 7 14 15

สาขาซ้ายเป็นสองเท่าของค่าและสาขาที่เหมาะสมไม่และอยู่เฉพาะสำหรับคี่i->i*2+1 ดังนั้นเดินการสั่งซื้อล่วงหน้าที่ไม่ใช่ใบเป็นiT(i)=[i]+T(i*2)+i%2*T(i*2+1)

ต้นไม้ยุติที่ระดับความลึกnโดยที่nอินพุตอยู่ที่ไหน นี่คือความสำเร็จโดยการลดลงnในแต่ละขั้นตอนลงและหยุดเมื่อมันเป็น 0

กลยุทธ์ทางเลือกคือการยกเลิกค่าที่iเกิน2**nกว่าการติดตามความลึก ฉันพบว่านี่เป็นอีกหนึ่งไบต์:

f=lambda n,i=1:2**n/i*[f]and[i]+f(n,2*i)+i%2*f(n,i-~i)
f=lambda n,i=1:[f][i>>n:]and[i]+f(n,2*i)+i%2*f(n,i-~i)

4
ว้าว. ไม่เพียง แต่เป็นเคล็ดลับที่เจ๋ง / ฉลาดจริงๆ แต่มันมีประสิทธิภาพมาก +1 คำตอบที่ดีจริงๆ!
DJMcMayhem

2
[f]เป็นสัมผัสที่น่าขบขันไม่สามารถพูดได้ว่าผมเคยเห็นว่าก่อนที่จะ
FryAmTheEggman

18

เยลลี่ 6 ไบต์

Ḷ2*ẆS€

มีคุณสมบัตินี้สำหรับโบนัสจินตนาการ

ลองออนไลน์!

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

Ḷ2*ẆS€  Main link. Argument: n

Ḷ       Unlength; yield [0, ..., n-1].
 2*     Yield [2**0, ..., 2**(n-1)].
   Ẇ    Sliding window; yield all subarrays of consecutive elements.
        The subarrays are sorted by length, then from left to right.
    S€  Map the sum atom over the substrings.

1
เป็นอุปกรณ์ในอุดมคติสำหรับความท้าทายนี้และมีการนำไปใช้เพื่อผลลัพธ์ที่ได้จะเป็นคำสั่งที่เหมาะสมสำหรับความท้าทายนี้ ทำได้ดีมาก :-)
ETHproductions

ไม่ใช่ 12 ไบต์ (อย่างน้อยในหน่วย UTF-8)
Gareth

1
@Gareth ใช่ แต่ Jelly ยังรองรับชุดอักขระไบต์เดียวซึ่งมีสัญลักษณ์ 256 ตัวเท่านั้นที่เข้าใจ
เดนนิส

9

Mathematica ขนาด 40 ไบต์

Join@@Table[2^j(2^i-1),{i,#},{j,0,#-i}]&

ทุกหมายเลขในรายการที่ต้องการคือความแตกต่างของสองพลังของ 2 ดังนั้นเราจะสร้างมันขึ้นมาเพื่อที่จะใช้Tableแล้วเรียบ ฉันคิดว่าสิ่งนี้จะได้รับโบนัสจินตนาการของ Stewie Griffin :)

Mathematica, 35 ไบต์

Tr/@Rest@Subsequences[2^Range@#/2]&

พอร์ตของเดนนิสอัลกอริทึมวุ้น ฉันไม่เคยรู้Subsequencesมาก่อนเลย! (ฉันยังไม่เห็นว่ามีการโพสต์คำตอบที่แน่นอนนี้ ... ขึ้นโหวต!


1
หมายเหตุ: วิธีนี้เหมือนกับรหัส Mathematica ของ @mileโพสต์ 5 ชั่วโมงก่อนการแก้ไขของ @GregMartin อย่างไรก็ตามตามฉันทามติเมตาคำตอบนี้ยังคงใช้ได้
JungHwan Min

ฮึฉันไม่เห็น - ขอบคุณที่ชี้ให้เห็น
Greg Martin

8

JavaScript (ES6), 59 58 55 ไบต์

for(q=prompt(n=1);p=q--;n-=~n)for(m=n;p--;m*=2)alert(m)

โปรแกรมเต็มรูปแบบที่รับอินพุตผ่านการแจ้งเตือนและแจ้งเตือนแต่ละหมายเลขติดต่อกัน นอกจากนี้ยังมีคุณสมบัติสำหรับโบนัสจินตนาการ

ตัวอย่างการทดสอบ

(หมายเหตุ: ใช้console.logแทนalert)


คำแนะนำ (หลังจากตรวจสอบ "ไม่แสดงป๊อปอัปอีกต่อไป"): เปลี่ยนเป็น console.log สำหรับตัวอย่างทดสอบ
Tejas Kale

@TejasKale ความคิดที่ดีขอบคุณ!
ETHproductions

7

JavaScript (ES6), 55 51 ไบต์

ส่งคืนรายการจำนวนเต็มที่คั่นด้วยช่องว่าง

n=>(F=k=>k>>n?--j?F(k>>j|1):'':k+' '+F(k*2))(1,j=n)

โบนัสจำนวนจินตภาพที่เป็นมิตร

จัดรูปแบบและแสดงความคิดเห็น

n => (                    // main function, takes n as input
  F = k =>                // recursive function, takes k as input
    k >> n ?              // if k is greater or equal to 1 << n:
      --j ?               //   decrement j ; if j is > 0:
        F(k >> j | 1)     //     do a recursive call with an additional bit set
      :                   //   else
        ''                //     stop recursion
    :                     // else
      k + ' ' + F(k * 2)  //   append k to output and do a recursive call with k * 2
  )(1, j = n)             // start the recursion with k = 1 and j = n

กรณีทดสอบ






4

Haskell, 47 ไบต์

f n=[1..n]>>= \b->take(n-b+1)$iterate(2*)$2^b-1

ตัวอย่างการใช้งาน: ->f 4 ลองออนไลน์! .[1,2,4,8,3,6,12,7,14,15]

วิธีการทำงาน: สำหรับแต่ละหมายเลขbใน[1..n]ให้เริ่มต้นด้วยค่า2^b-1ซ้ำสองครั้งและรับn-b+1องค์ประกอบจากรายการนี้



4

Groovy, 90 89 ไบต์

{(0..<2**it).collect{0.toBinaryString(it)}.sort{it.count("1")}.collect{0.parseInt(it,2)}}

การแปลงแบบไบนารีนั้นโง่มาก

-1 ต้องขอบคุณ Gurupad Mamadapur


3
การแปลงไบนารีสำเร็จรูปขนาด 28 ไบต์เจ็บปวดมาก
Magic Octopus Urn

1
{(1..<2**it)...บันทึกเป็นไบต์
Gurupad Mamadapur


3

ยูทิลิตีBash + Unix ขนาด 51 ไบต์

dc<<<2i`seq -f%.f $[10**$1-1]|grep ^1*0*$|sort -r`f

ลองออนไลน์!

อินพุต n ถูกส่งผ่านในอาร์กิวเมนต์

ใช้ seq เพื่อพิมพ์ตัวเลขทั้งหมดด้วยตัวเลข n หรือน้อยกว่า (นี่คือตัวเลขฐาน -10 ดังนั้นจึงมีตัวเลขพิเศษมากมายที่นี่มันสิ้นเปลืองและใช้เวลานาน แต่นี่คือรหัสกอล์ฟ!)

การเรียกไปที่ grep จะเก็บเฉพาะหมายเลขที่ประกอบด้วย 1s ตามด้วย 0

จากนั้นใช้ sort -r เพื่อเรียงลำดับเหล่านี้ในลำดับพจนานุกรมย้อนกลับ

ในที่สุด dc ถูกตั้งค่าเป็นฐาน 2 อินพุต - มันจะดันตัวเลขที่เรียงลำดับบนสแต็กแล้วพิมพ์สแต็กจากบนลงล่าง (นี่จะพิมพ์รายการสุดท้ายที่ผลักก่อน ฯลฯ ซึ่งเป็นสาเหตุที่ฉันใช้ sort -r แทนที่จะเรียงลำดับ)

แก้ไขข้อผิดพลาด: ฉันไม่ได้ใช้ตัวเลือก -f% .f ถึง seq ซึ่งจำเป็นสำหรับการนับจำนวนเต็มตั้งแต่ 1000000 on (ขอบคุณ @TobySpeight ที่ชี้ให้เห็นว่ามีปัญหา)


" สิ้นเปลืองและสิ้นเปลืองเวลา " ... และฉลาด ! ขอบคุณสำหรับสิ่งนี้ - มันเป็นเครื่องเตือนความจำที่ดีว่าจงใจละเลยประสิทธิภาพการคำนวณเมื่อเล่นกอล์ฟ มันยากจริงๆเมื่อคุณใช้เวลาที่เหลือในวันของคุณเขียนโค้ดที่รวดเร็วและชัดเจน ...
Toby Speight

ค่าบางค่าขาดหายไป: dc<<<2i`seq $[10**7-1]|grep ^1*0*$|sort -r`f | wc -รายงานเพียง 12 ค่า ฉันคิดว่าคุณต้องการgrep ^1[01]*$แทน
Toby Speight

@TobySpeight ขอบคุณ - มีข้อผิดพลาดซึ่งฉันได้แก้ไขแล้ว ปัญหาไม่ได้อยู่กับ regex ปัญหาคือ seq ต้องการตัวเลือก (ฉันไม่แน่ใจว่าทำไมคุณถึงได้รับ 12 ค่าเอาต์พุตเท่านั้น - แม้ว่ารุ่นที่ไม่ถูกต้องจะสร้างค่าเอาต์พุต 21 ค่าที่ถูกต้องของค่า 28 ที่ถูกต้องหากคุณใช้งานบน TIO มันอาจเกินขีด จำกัด เวลา 1 นาทีของ TIO .) ฉันได้ทำการทดสอบทั้ง Linux และ OS X แล้ว
Mitchell Spector

1
ที่จริงแล้วฉันเข้าใจผิดคำถาม - คำสำคัญ "ต่อเนื่อง" ที่นั่นตรงไปฉันเลย!
Toby Speight


2

Perl 6 , 38 ไบต์

->\n{map {|(2**$_-1 X+<0..n-$_)},1..n}

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

->\n{                                }  # A lambda with argument n.
                                 1..n   # Numbers from 1 to n.
     map {                     },       # Replace each one with a list:
            2**$_-1                     #   2 to that power minus 1,
                    X+<                 #   bit-shifted to the left by each element of
                       0..n-$_          #   the range from 0 to n minus the number.
          |(                  )         #   Slip the list into the outer list.

คือมันสร้างตัวเลขเช่นนี้:

1 2 4 8 = (2^1)-1 bit-shifted to the left by 0 1 2 3 places
3 6 12  = (2^2)-1 bit-shifted to the left by 0 1 2   places
7 14    = (2^3)-1 bit-shifted to the left by 0 1     places
15      = (2^4)-1 bit-shifted to the left by 0       places      n rows
                                                  
             n                                     n-1

รหัส:


Perl 6 , 44 ไบต์

->\n{map {|(2**$_-1,* *2...^*>2**n-1)},1..n}

นี่เป็นวิธีแรกของฉันก่อนที่ฉันจะคิดถึงวิธีการเปลี่ยนบิต (ง่ายกว่า) ด้านบน

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

->\n{                                      }  # A lambda with argument n.
                                       1..n   # Numbers from 1 to n.
     map {                           }        # Replace each one with:
            2**$_-1                              # 2 to that power minus 1,
                   ,* *2                         # followed by the result of doubling it,
                        ...^                     # repeated until (but not including)
                            *>2**n-1             # it's larger than 2^n-1.
          |(                        )            # Slip the list into the outer list.

คือมันสร้างตัวเลขเช่นนี้:

1 2 4 8 = (2^1)-1, times 2, times 2, times 2
3 6 12  = (2^2)-1, times 2, times 2
7 14    = (2^3)-1, times 2
15      = (2^4)-1                                 n rows
                                    
             n                       as many columns as possible in
                                     each row without exceeding (2^n)-1

2

Haskell 59 46 Bytes

ฉันเริ่มต้นด้วย f n=[0..n]>>= \b->take(n-b).iterate(*2).sum.map(2^)$[0..b]

จากคำตอบของ nimi ด้านบนจะได้รับข้อมูลเชิงลึกที่sum.map(2^)$[0..x]สามารถย่อให้ลง2^x-1

จบลงด้วย

e n=[1..n]>>= \x->map(\y->2^y*(2^x-1))[0..n-x]

[1..n] - รายการที่มีจำนวนบิตต่อเนื่องที่เราต้องการวนรอบ `

>> = -แปลอย่างต่อเนื่องสำหรับแต่ละองค์ประกอบในรายการทางซ้ายส่งผ่านไปยังฟังก์ชันทางด้านขวาและต่อผลลัพธ์ทั้งหมด

\ x -> - ประกาศฟังก์ชัน lambda ด้วยอาร์กิวเมนต์เดียว

แผนที่ xy - ใช้ฟังก์ชัน x กับสมาชิกทุกคนในรายการ y

ในกรณีของเรา x = (\ y-> 2 ^ y * (2 ^ x-1)) - ฟังก์ชั่นแลมบ์ดาอีก 2 ^ y * (2 ^ x-1) สูตรนี้เกิดขึ้นจากการคูณสองเพิ่มศูนย์ไปทางขวาในไบนารี (ตัวอย่าง 0001 ถึง 0010) 2 ^ x - 1 คือจำนวนบิตที่เรากำลังทำงานด้วย ดังนั้นสำหรับ 11 เรามี 2 ^ 0 * 3 (เช่นไม่เปลี่ยนเลย) == 0011 แล้ว 2 ^ 1 * 3 = 0110 จากนั้น 2 ^ 2 * 3 - 1100

[0..nx]สร้างรายการจำนวนครั้งที่เราสามารถเลื่อนบิตได้ ถ้าเราทำงานกับ 1 เดียวจากนั้นดูที่ 0001 เราต้องการเปลี่ยน 3 ครั้ง (4-1) ถ้าเราทำงานสอง 11 เราต้องการ 4-2 และอื่น ๆ


2

Python 3, 59 ไบต์

หมายเหตุ: สิ่งนี้ทำขึ้นโดยอิสระจากโซลูชันของovsและDennisแม้ว่าจะคล้ายกันมากกับทั้งสอง

lambda n:[(2<<i)-1<<j for i in range(n)for j in range(n-i)]

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

for i in range(n)for j in range(n-i)  # Iterate over number of ones, then number of places
                                      # shifted over. i = ones, j = shifts

(2<<i)                                # Create a one followed by i zeroes
      -1                              # Subtract one from above to get i ones.
        <<j                           # Shift j places.

ลองออนไลน์!

เคล็ดลับ (ทั้งการเข้ารหัสและเงินสด) ยินดีต้อนรับเสมอ!


2

Japt , 11 ไบต์

o@o!²ãXÄ mx

ทดสอบออนไลน์!

คำอธิบาย

วิธีนี้ใช้แนวทางของ @ Dennis มาก:

o@ o!²  ãXÄ  mx
oX{o!p2 ãX+1 mx}
                  // Implicit: U = input integer
oX{            }  // Create the range [0...U) and map each item X by this function:
   o              //   Create the range [0...U)
    !p2           //     and map each item Z to 2.p(Z); that is, 2**Z.
                  //     (p2 would map each item Z to Z.p(2); ! reverses the arguments.)
        ãX+1      //   Get all overlapping slices of length X + 1.
             mx   //   Map each of these slices Z through Z.x(); that is, sum each slice.
                  // Implicit: output result of last expression


2

PHP, 59 56 53 ไบต์

for(;$p>($k*=2)?:($p=1<<$argn)>$k=$i+=$i+1;)echo$k,_;

รับอินพุตจาก STDIN; -Rทำงานด้วย

ชำรุด

for(;$p>($k*=2)         // 3. inner loop: shift-0 $k while $k<$p (false in first iteration)
    ?:
    ($p=1<<$argvn)      // 1. init $p=2^N, outer loop:
    >$k=$i+=$i+1        // 2. shift-1 $i while $i<$p, init $k to new $i
;)
    echo$k,_;           // 4. print $k

คุณสามารถใช้$argnความคิดที่ดีมาก หลังจากอ่านคำถามที่ฉันมีในหัวของฉันแก้ปัญหาที่มีมากกว่า 200 Bytes
JörgHülsermann

@ JörgHülsermannขอบคุณที่เตือนฉันถึง STDIN ฉันชอบที่จะรวมลูปเข้าด้วยกัน
ติตัส

1

J , 19 ไบต์

(0-.~&,>:+/\2&^)@i.

นี้จะใช้วิธีการเดียวกันใน @Dennis' วิธีการแก้ปัญหา

ลองออนไลน์!

คำอธิบาย

(0-.~&,>:+/\2&^)@i.  Input: integer n
                 i.  Range [0, 1, ..., n-1]
(              )@    Operate on that range
            2&^        Compute 2^x for each x in that range
       >:              Increment each in that range
           \           For each overlapping sublist of size (previous) in powers of 2
         +/              Reduce by addition
 0                     The constant 0
     &,                Flatten each
  -.~                  Remove zeroes

1

Python 3, 91 ไบต์

a=int(input())
print(*[int('1'*-~b,2)<<c for b in range(a)for c in range(a-b)],sep=', ')

โปรแกรมแบบเต็มโดยคั่นด้วยเครื่องหมายจุลภาค + ช่องว่างตามที่ระบุ

คำอธิบาย:

ยกเลิกการแยกรายการสัญลักษณ์ดาว ดังนั้นเป็นเช่นเดียวกับprint(*[1,2,3]) print(1,2,3)ส่งผ่านคอนint()สตรัคเตอร์เป็นสตริง '1' ติดต่อกัน

-~bประเมินถึงb+1แต่คุณไม่จำเป็นต้องล้อมรอบด้วยวงเล็บเมื่อคูณสตริง

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


2
คุณสามารถพิมพ์รายการ รูปแบบผลลัพธ์ไม่เข้มงวดนัก
mbomb007

1

Java 7, 108 ไบต์

static void x(int i){int a=0,t=1<<i,b;while((a=(a<<1)+1)<t){b=a;do System.out.println(b);while((b<<=1)<t);}}

2^nคู่ค่าเริ่มต้นเป็นเวลานานเป็นผลที่มีขนาดเล็กกว่า หลังจากนั้นการปรับปรุงค่าเริ่มต้นที่จะเป็นและเริ่มต้นอีกครั้งจากที่นั่นจนในที่สุดก็มาถึง(initial_value * 2) + 1(2^n)-1

เช่นสำหรับn=4:

0001 -> init
0010
0100
1000
return, double init and add one
0011 -> init
0110
1100
return, double init and add one
0111 -> init
1110
return, double init and add one
1111 -> init
done

ลองออนไลน์!


1

Ruby, 50 ไบต์

->r{1.upto(r){|x|p a=2**x-1;p a while(a*=2)<2**r}}

ฉันลองใช้วิธี "ฉลาด" บางอย่าง แต่นี่น่าจะเป็นวิธีที่สั้นที่สุด

คำอธิบาย:

การวนซ้ำแต่ละครั้งจะเริ่มต้นด้วย 2 ^ n-1 และคูณด้วย 2 จนกว่าจะถึงขีด จำกัด สูงสุด ไม่มีอะไรแฟนซีแค่คณิตศาสตร์พื้นฐาน


1

QBIC , 37 ไบต์ - โบนัสจินตภาพ = ยัง 37 ไบต์ ...

:[a|e=2^b-1┘while e<2^a┘?e┘e=e*2┘wend

น่าเสียดายที่ฉันยังไม่ได้สร้างwhile-wendQBIC เลย ... คำอธิบาย:

:       Get N from the command line
[a|     For b = 1 to N; The sequence is reset N times
e=2^b-1 Set the first number of this sub-sequence (yields 1, 3, 7, 15 ...)
┘       Line-break - syntactic separation of commands because there's no command for WHILE yet.
while   Pure QBasic code - lower-case is not (really) interpreted by QBIC
e<2^a   Continue as long as we don't exceed the maximum value
┘?e     Print the number in the sequence
┘e=e*2  Double the number
┘wend   And loop as long as we're not exceeding maximum, reset the sequence otherwise.
        FOR loop auto-closed by QBIC

แก้ไข: QBIC ตอนนี้ได้รับการสนับสนุนสำหรับWHILE:

:[a|e=2^b-1≈e<2^a|?e┘e=e*2

นี่เป็นเพียง 26 ไบต์! นี่คือWHILE:

≈e<2^a|          ≈ = WHILE, and the TRUE condition is everything up to the |
       ...       Loop code goes here
          ]      Close construct: adds a WEND instruction
                 In the program above, this is done implicitly because of EOF.


1

R , 69 48 46 ไบต์

n=scan();for(i in 1:n)print((2^i-1)*2^(i:n-i))

ตัวเลขทศนิยมแต่ละตัวที่สอดคล้องกับตัวเลขi in 1..nในระบบเลขฐานสองจะถูกคูณด้วย2^(0..n-i)เช่นn-i+1พลังแรกของสอง (1, 2, 4, ... )

ลองออนไลน์!


1

Stax , 9 ไบต์

übg▓}╥é►╪

เรียกใช้และแก้ไขข้อบกพร่องออนไลน์!

คำอธิบาย

โบนัสจำนวนจินตภาพหากมีคนทำเช่นนี้โดยไม่มีการแปลงฐาน (ใช้คณิตศาสตร์แบบเก่า)

ไม่มีการแปลงฐานที่นี่

ใช้เวอร์ชันที่ไม่มีการแพ็ก (10 ไบต์) เพื่ออธิบาย

m|2vx_-DQH
m             For input=`n`, loop over `1..n`
 |2v          Power of two minus one
    x_-D      Do `n-j` times, where `j` is the current 1-based loop index
        Q     Output the current value
         H    And double it

0

แบตช์, 92 - 0 = 92 ไบต์

@for /l %%i in (1,1,%1)do @for /l %%j in (%%i,1,%1)do @cmd/cset/a"(1<<%%i)-1<<%%j-%%i"&echo(

การลบ 0 สำหรับโบนัสในจินตนาการของ @ StewieGriffin

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.