นับขึ้นแทนที่ทำซ้ำ!


18

คำนิยาม

กำหนดอาร์เรย์ลำดับที่nของลำดับ CURR ดังนี้

  1. เริ่มต้นด้วยเดี่ยวอาร์เรย์A = [N]

  2. สำหรับแต่ละจำนวนเต็มkในแทนที่รายการkกับkหมายเลขธรรมชาตินับเพิ่มขึ้นจาก1ไปk

  3. ทำซ้ำขั้นตอนก่อนหน้าn - 1ครั้งเพิ่มเติม

ตัวอย่างเช่นถ้าn = 3เราเริ่มต้นด้วยอาร์เรย์[3]

เราแทนที่3กับ1, 2, 3 , ยอม[1, 2, 3]

ตอนนี้เราแทนที่1 , 2และ3ด้วย1 ; 1, 2และ1, 2, 3 (resp.) ยอม[1, 1, 2, 1, 2, 3]

สุดท้ายเราดำเนินการแทนเช่นเดียวกับในขั้นตอนก่อนหน้าสำหรับทุกหกจำนวนเต็มในอาร์เรย์ยอม[1, 1, 1, 2, 1, 1, 2, 1, 2, 3] นี่คืออาร์เรย์ CURR ที่สาม

งาน

เขียนโปรแกรมของฟังก์ชั่นที่ให้จำนวนเต็มบวกnอย่างเคร่งครัดเป็นอินพุตคำนวณอาร์เรย์n th CURR

ผลลัพธ์จะต้องเป็นรายการแบบเรียบบางอย่าง (และอาเรย์ที่ส่งคืนจากฟังก์ชั่นการแทนสตริงของไวยากรณ์อาเรย์ของภาษาของคุณคั่นด้วยช่องว่าง ฯลฯ )

นี่คือรหัสกอล์ฟอาจรหัสที่สั้นที่สุดในไบต์ชนะ!

กรณีทดสอบ

 1 -> [1]
 2 -> [1, 1, 2]
 3 -> [1, 1, 1, 2, 1, 1, 2, 1, 2, 3]
 4 -> [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4]
 5 -> [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5]
 6 -> [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6]

3
ที่เกี่ยวข้อง: นับแทนที่เพิ่มขึ้น! ._
Dennis

เราสามารถรับอินพุตเป็นอาร์เรย์เดี่ยว (เช่น[2]) แทนที่จะเป็นจำนวนเต็มได้หรือไม่?
Mego

@Mego เอาไว้เป็นจำนวนเต็ม
Dennis

ฉันรู้สึกว่าควรมีลำดับ OEIS สำหรับสิ่งนี้
DanTheMan

@DanTheMan มันไม่ใช่ลำดับเลขจำนวนเต็มในรูปแบบปัจจุบัน แต่ฉันคิดว่ามันอาจจะกลายเป็นหนึ่งโดยเชื่อมต่อผลลัพธ์สำหรับจำนวนเต็มบวกทั้งหมด
Dennis

คำตอบ:



16

Python ขนาด 50 ไบต์

lambda i:eval("[i "+"for i in range(1,i+1)"*i+"]")

ขอบเขตการละเมิด! ตัวอย่างเช่นสำหรับi=3สตริงที่จะถูกประเมินขยาย

[i for i in range(1,i+1)for i in range(1,i+1)for i in range(1,i+1)]

อย่างไรก็ตามถึงแม้จะใช้ตัวแปรอินพุตของฟังก์ชั่นiสำหรับทุกอย่าง Python จะแยกความแตกต่างของดัชนีการวนซ้ำแต่ละครั้งว่าเป็นของขอบเขตที่แยกต่างหากราวกับว่านิพจน์นั้น

[l for j in range(1,i+1)for k in range(1,j+1)for l in range(1,k+1)]

ด้วยiอินพุตไปยังฟังก์ชัน


เคล็ดลับนี้ใช้ได้กับ Firefox 30+ ด้วยและช่วยฉันด้วย 3 ไบต์ขอบคุณ!
Neil

@DigitalTrauma ทั้งไพ ธ อนและจาวาสคริปต์evalนั้นเห็นได้ชัดว่าตัวเองต้องใส่รหัส แต่ฉันคิดว่าคุณน่าจะสันนิษฐานได้
Neil

@ Neil โอ้ฉันเห็น - ฉันเข้าใจผิดอย่างสมบูรณ์ :)
บาดเจ็บดิจิตอล

12

05AB1E, 6 3 ไบต์

DFL

อธิบาย

D     # duplicate input
 F    # input times do
  L   # range(1,N)

ลองออนไลน์

บันทึกแล้ว 3 ไบต์ขอบคุณ @Adnan


DFLสั้นลง 3 ไบต์ :)
Adnan

1
@Adnan: ไม่รู้ว่า L ทำงานแบบนั้นในรายการ ค่อนข้างน่าแปลกใจที่มันแบนโดยอัตโนมัติ
Emigna

3
จริงๆแล้วมันเป็นข้อบกพร่องที่ฉันไม่เคยแก้ไข: p.
Adnan

6

จอตาติน่า 33 ไบต์

$
$.`$*0
+%(M!&`1.*(?=0)|^.+
O`.+

อินพุทและเอาท์พุท unary

ลองออนไลน์!

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


+%(M!&เป็นแท็กที่ยาวที่สุดที่ฉันเคยเห็น
Leun Nun

6

Python 2, 82 ไบต์

lambda n:[1+bin(i)[::-1].find('1')for i in range(1<<2*n-1)if bin(i).count('1')==n]

นี่ไม่ใช่วิธีแก้ปัญหาที่สั้นที่สุด แต่แสดงวิธีการที่น่าสนใจ:

  • เขียน2^(2*n-1)ตัวเลขตัวแรกในรูปของเลขฐานสอง
  • ให้ผู้ที่มีว่าnคน
  • สำหรับแต่ละหมายเลขให้นับจำนวนศูนย์ต่อท้ายและเพิ่ม 1

4

ที่จริงแล้ว 9 ไบต์

;#@`♂RΣ`n

ลองออนไลน์!

คำอธิบาย:

;#@`♂RΣ`n
;#@        dupe n, make a singleton list, swap with n
   `♂RΣ`n  call the following function n times:
    ♂R       range(1, k+1) for k in list
      Σ      concatenate the ranges

ขอบคุณ Leaky Nun สำหรับไบต์และเป็นแรงบันดาลใจให้อีก 2 ไบต์


;#@"♂R♂i"*ƒบันทึกไบต์
Leun Nun

@LeakyNun Good catch - ;#@`♂R♂i`nบันทึกอีกอันหนึ่ง!
Mego

ฉันกำลังจะลองหาผลรวมกันฮ่า ๆ
Leun Nun

ฉันคิดว่า 9 จะเป็นคำตอบที่ดีที่สุดที่นี่
Mego

ลิงก์ของคุณยังคงล้าสมัย
Leun Nun

4

C #, 128 ไบต์

List<int>j(int n){var l=new List<int>(){n};for(;n>0;n--)l=l.Select(p=>Enumerable.Range(1,p)).SelectMany(m=>m).ToList();return l;

ด้วยusing static System.Linq.Enumerableคุณสามารถทำสิ่งนี้ได้:int[]J(int n){var l=new[]{n};while (n-- > 0){l = l.Select(p => Range(1, p)).SelectMany(m => m).ToArray();}return l;}
ตาย

4

APL ขนาด 11 ไบต์

{∊⍳¨∘∊⍣⍵+⍵}

ทดสอบ:

      {∊⍳¨∘∊⍣⍵+⍵} 3
1 1 1 2 1 1 2 1 2 3

คำอธิบาย:

  • +⍵: เริ่มต้นด้วย,
  • ⍣⍵: ทำเวลาต่อไปนี้:
    • ⍳¨∘∊: ป้อนข้อมูลให้เรียบแล้วสร้างรายการ [1..N] สำหรับแต่ละ N ในอินพุต
  • : เรียบผลลัพธ์ของสิ่งนั้น

2
เรียบง่าย:{(∊⍳¨)⍣⍵⊢⍵}
อดัม

@ Adám: อาใช่รถไฟทำงานแตกต่างจาก J. ฉันเริ่มด้วย{(∊∘(⍳¨))⍣⍵+⍵}แล้วคิดว่าฉันจะกำจัดวงเล็บเหล่านั้นได้อย่างไร
marinus


2

Mathematica, 27 26 ไบต์

1 ไบต์บันทึกด้วยแรงบันดาลใจจากคำตอบของ Essari

Flatten@Nest[Range,{#},#]&

ค่อนข้างตรงไปตรง: สำหรับการป้อนข้อมูลxที่เราเริ่มต้นด้วย{x}แล้วใช้Rangeไปxครั้ง ( Rangeเป็นListableซึ่งหมายความว่ามันจะนำไปใช้กับจำนวนเต็มภายในรายการซ้อนกันโดยพล) ในตอนท้ายFlattenผลลัพธ์


2

Clojure, 59 ไบต์

(fn[n](nth(iterate #(mapcat(fn[x](range 1(inc x)))%)[n])n))

คำอธิบาย:

วิธีการแก้ปัญหาตรงไปตรงมาจริงๆ ทำงานจากภายในสู่ภายนอก:

(1) (fn[x](range 1(inc x))) ;; return a list from 1 to x
(2) #(mapcat (1) %)         ;; map (1) over each item in list and flatten result
(3) (iterate (2) [n])       ;; call (2) repeatedly e.g. (f (f (f [n])))
(4) (nth (3) n))            ;; return the nth value of the iteration

2

Python 3, 75 74 ไบต์

def f(k):N=[k];exec('A=N;N=[]\nfor i in A:N+=range(1,i+1)\n'*k+'print(N)')

นี่เป็นเพียงการแปลคำอธิบายปัญหาไปยังรหัสอย่างตรงไปตรงมา

แก้ไข: บันทึกหนึ่งไบต์ด้วย @Dennis


คุณสามารถไปข้างนอกprint exec
xnor

ใช่นั่นคือสิ่งที่ฉันมีในตอนแรก แต่มันก็พิมพ์[k]ด้วยเหตุผลบางอย่าง ฉันเลิกพยายามคิดว่ามันเป็นปัญหาขอบเขตหรืออย่างอื่น
Andrew Epstein

ใช่มันดูเหมือนจะเป็นปัญหาขอบเขต มันทำงานได้ดีใน Python 2
xnor

2

R, 60 49 ไบต์

การใช้unlistและsapply.

y=x=scan();for(i in 1:x)y=unlist(sapply(y,seq));y

ขอบคุณ @MickyT สำหรับการบันทึก 11 ไบต์


@MickyT ขอบคุณสำหรับเคล็ดลับฉันสามารถใช้seqเพื่อลดจำนวนไบต์
bouncyball

ขออภัยฉันอ่านคำถามผิด
MickyT

2

php 121

ไม่มากนักในทางของกลอุบายที่อยู่เบื้องหลังอันนี้ การทำให้อาเรย์เป็นแบบแบนนั้นไม่สั้นดังนั้นจึงจำเป็นต้องสร้างมันให้แบนตั้งแต่แรก

<?php for($a=[$b=$argv[1]];$b--;)$a=array_reduce($a,function($r,$v){return array_merge($r,range(1,$v));},[]);print_r($a);

ทำให้แบนเป็นความคิดที่ดี แต่ฟังก์ชันการเรียกกลับไม่สั้นเช่นกัน เอาชนะคุณ 15 ไบต์ คุณสามารถบันทึก 4 ไบต์ด้วยแท็กสั้น<?หรือ 6 ไบต์ด้วย-rและไม่มีแท็ก
ติตัส

2

Haskell, 33 ไบต์

f n=iterate(>>= \a->[1..a])[n]!!n

ขอบคุณ nimi สำหรับการบันทึกไบต์

รุ่นที่ไม่มีจุดหมายมีความยาวมากกว่า (35 ไบต์):

(!!)=<<iterate(>>= \a->[1..a]).pure

iterate(>>= \a->[1..a])น้อยกว่าหนึ่งไบต์
nimi

2

JavaScript (Firefox 30-57), 63 60 ไบต์

f=n=>eval(`[${`for(n of Array(n+1).keys())`.repeat(n--)}n+1]`)

คำตอบ Python ของพอร์ตของ @ xnor


ฉันลองสิ่งนี้กับ Firefox 42 ( SyntaxError: missing : in conditional expression) และ Babel ( Unexpected token (1:21)) ผมทำอะไรผิดหรือเปล่า?
Dennis

@Dennis ขออภัย แต่ฉันไม่มีความคิด อันที่จริงฉันมี Firefox 42 บนหนึ่งในเครื่องของฉันด้วยเหตุผลบางอย่างและฉันตรวจสอบอีกครั้งและมันก็ทำงานได้ดีที่นั่น (ฉันตรวจสอบ Firefox 37 และ 47 ด้วยเพื่อให้แน่ใจ)
Neil

หืมหน้าไม่รีเฟรชและฉันทดสอบเวอร์ชันเก่าของคุณ อันใหม่ใช้ได้ดี
Dennis

@Dennis Ah ดูเหมือนว่าจะหลงทาง)ไปยังรุ่นนั้น
Neil

1

J, 18 ไบต์

([:;<@(1+i.)"0)^:]

วิธีการตรงไปตรงมาตามกระบวนการที่อธิบายไว้ในความท้าทาย

การใช้

   f =: ([:;<@(1+i.)"0)^:]
   f 1
1
   f 2
1 1 2
   f 3
1 1 1 2 1 1 2 1 2 3
   f 4
1 1 1 1 2 1 1 1 2 1 1 2 1 2 3 1 1 1 2 1 1 2 1 2 3 1 1 2 1 2 3 1 2 3 4

คำอธิบาย

([:;<@(1+i.)"0)^:]  Input: n
                 ]  Identity function, gets the value n
(     ...     )^:   Repeat the following n times with an initial value [n]
      (    )"0        Means rank 0, or to operate on each atom in the list
         i.           Create a range from 0 to that value, exclusive
       1+             Add 1 to each to make the range from 1 to that value
    <@                Box the value
 [:;                  Combine the boxes and unbox them to make a list and return
                    Return the final result after n iterations



1

F #, 63 ไบต์

fun n->Seq.fold(fun A _->List.collect(fun k->[1..k])A)[n]{1..n}

ส่งคืนฟังก์ชันที่ไม่ระบุชื่อโดยใช้ n เป็นอินพุต

แทนที่ทุกรายการ k ใน A ด้วย [1..k], ทำซ้ำกระบวนการ n ครั้งโดยเริ่มต้นด้วย A = [n]


1

Swift 3, 58 Bytes

หมายถึงทำงานโดยตรงในสนามเด็กเล่นโดยที่ n ตั้งค่าเป็นอินพุต:

var x=[n];for i in 0..<n{x=x.reduce([]){$0+[Int](1...$1)}}

Ungolfed, ด้วยสัญกรณ์มือสั้นที่สุดหวนกลับ:

let n = 3 //input

var x: Array<Int> = [n]
for i in 0..<n {
    x = x.reduce(Array<Int>[], combine: { accumulator, element in
        accumulator + Array<Int>(1...element)
    })
}

1

Java, 159 ไบต์

ขั้นตอน

int[] q(int y){int z[]=new int[]{y};for(int i=0;i<y;i++){int d=0,a=0;for(int c:z)d+=c;int[]r=new int[d];for(int c:z)for(int j=0;j<c;)r[a++]=++j;z=r;}return z;}

การใช้

public static void main(String[] args){String out = "["; int [] b = q(6);for(int c:b)out+=c+", ";System.out.println(out+"]");}

public static int[] q(int y){int z[]=new int[]{y};for(int i=0;i<y;i++){int d=0,a=0;for(int c:z)d+=c;int[]r=new int[d];for(int c:z)for(int j=0;j<c;)r[a++]=++j;z=r;}return z;}

ตัวอย่างผลลัพธ์:

[1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, ]

1

Python 2, 69 68 66 ไบต์

def f(n):a=[n];exec'a=sum([range(1,i+1)for i in a],[]);'*n;print a

แก้ไข: บันทึก 1 ไบต์ขอบคุณ @xnor บันทึก 2 ไบต์ขอบคุณ @ Dennis ♦


คุณสามารถลบ parens execรอบ ใน Python 2 เป็นคำหลักไม่ใช่ฟังก์ชัน ฉันนับ 68 ไบต์ btw
Dennis

@Dennis อานั่นหมายความว่าฉัน miscounted และมันก็เดิม 69 ไบต์ ...
นีล

1

ยูทิลิตี Bash + GNU, 49

  • บันทึก 1 ไบต์ขอบคุณ @Dennis

ฟังก์ชั่น recursive แบบไปป์ FTW!

f()((($1))&&xargs -l seq|f $[$1-1]||dd)
f $1<<<$1

nถูกส่งผ่านบรรทัดคำสั่ง เอาต์พุตถูกคั่นด้วยบรรทัดใหม่

การใช้ddสถิติสาเหตุทำให้ถูกส่งไปยัง STDERR ฉันคิดว่านี่เป็นสิ่งที่ดี แต่ถ้าไม่ddสามารถแทนที่ด้วยcatค่าใช้จ่าย 1 ไบต์พิเศษ


1
เอาต์พุตภายนอกไปยัง STDERR ได้รับอนุญาตโดยค่าเริ่มต้น คุณสามารถแทนที่{...;}ด้วย(...)เพื่อบันทึกไบต์
Dennis

@ เดนนิสใช่แน่นอน! เห็นได้ชัดว่าคุณมีเคล็ดลับนี้จากฉัน :)
ดิจิตอลบาดเจ็บ

0

Perl 5, 53 ไบต์

รูทีนย่อย:

{($i)=@_;for(1..$i){my@c;push@c,1..$_ for@_;@_=@c}@_}

เห็นมันในการดำเนินการเป็น

perl -e'print "$_ " for sub{($i)=@_;for(1..$i){my@c;push@c,1..$_ for@_;@_=@c}@_}->(3)'

0

Ruby, 61 ไบต์

def f(n);a=[n];n.times{a=a.map{|i|(1..i).to_a}.flatten};a;end

Hi! ยินดีต้อนรับสู่ PPCG คำอธิบายสั้น ๆ น่าจะดี!
TheCoffeeCup

ยินดีต้อนรับสู่ PPCG! ยกเว้นกรณีที่มีการคัดค้านข้อเสนอนี้จำเป็นต้องเป็นโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบไม่ใช่แค่ตัวอย่าง (และในกรณีนี้ความท้าทายยืนยันข้อกำหนดนี้จริง ๆ )
Martin Ender

0

PHP, 100 98 ไบต์

php -r '<code>' <n>ทำงานด้วย

for($a=[$n=$argv[1]];$n--;$a=$b)for($b=[],$k=0;$c=$a[$k++];)for($i=0;$i++<$c;)$b[]=$i;print_r($a);

ในการวนซ้ำแต่ละครั้งจะสร้างการคัดลอกวนซ้ำชั่วคราวจาก 1 .. (ลบค่าแรก) จนกว่า$aจะว่างเปล่า


ทั้งสองนี้ยังคงอยู่และอาจจะยังคงอยู่ที่ 100 ไบต์:

for($a=[$n=$argv[1]];$n--;)for($i=count($a);$i--;)array_splice($a,$i,1,range(1,$a[$i]));print_r($a);

ในแต่ละการวนซ้ำวนย้อนหลังผ่านอาร์เรย์เพื่อแทนที่แต่ละหมายเลขด้วยช่วง

for($a=[$n=$argv[1]];$n--;)for($i=$c=0;$c=$a[$i+=$c];)array_splice($a,$i,1,range(1,$c));print_r($a);

ในแต่ละการวนซ้ำวนรอบดัชนีที่เพิ่มขึ้นตามหมายเลขก่อนหน้าและแทนที่แต่ละองค์ประกอบที่ทำดัชนีด้วยช่วง

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