Đếm lên, Thay thế, Lặp lại!


18

Định nghĩa

Xác định mảng thứ n của chuỗi CURR như sau.

  1. Bắt đầu với mảng singleton A = [n] .

  2. Với mỗi số nguyên k trong A , thay thế mục k bằng số tự nhiên k , đếm từ 1 đến k .

  3. Lặp lại bước trước n - 1 lần nữa.

Ví dụ: nếu n = 3 , chúng ta bắt đầu với mảng [3] .

Chúng tôi thay 3 bằng 1, 2, 3 , cho năng suất [1, 2, 3] .

Bây giờ chúng ta thay thế 1 , 23 bằng 1 ; 1, 21, 2, 3 (tương ứng), mang lại [1, 1, 2, 1, 2, 3] .

Cuối cùng, chúng tôi thực hiện các thay thế tương tự như trong bước trước cho tất cả sáu số nguyên trong mảng, mang lại [1, 1, 1, 2, 1, 1, 2, 1, 2, 3] . Đây là mảng CURR thứ ba.

Bài tập

Viết chương trình của hàm, với số nguyên n dương hoàn toàn làm đầu vào, tính toán mảng CURR thứ n .

Đầu ra phải là một danh sách phẳng của một số loại (và mảng được trả về từ một hàm, biểu diễn chuỗi của cú pháp mảng ngôn ngữ của bạn, được phân tách bằng khoảng trắng, v.v.).

Đây là . Có thể mã ngắn nhất trong byte giành chiến thắng!

Các trường hợp thử nghiệm

 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]


Chúng ta có thể lấy đầu vào dưới dạng một mảng đơn (như [2]) chứ không phải là một số nguyên không?
Mego

@Mego Hãy giữ nó ở số nguyên.
Dennis

Tôi cảm thấy nên có một chuỗi OEIS cho việc này.
DanTheMan

@DanTheMan Nó không thực sự là một chuỗi số nguyên ở dạng hiện tại của nó, nhưng tôi đoán nó có thể được biến thành một bằng cách ghép các kết quả cho tất cả các số nguyên dương.
Dennis

Câu trả lời:


23

Thạch, 3 byte

R¡F

Dùng thử trực tuyến

Giải trình

R¡F    Argument n

R      Yield range [1..n]
 ¡     Repeat n times
  F    Flatten the result

Đó là ... đơn giản là tuyệt vời ... so với câu trả lời Jelly của tôi.
Leaky Nun

6
Bài đăng đầu tiên tuyệt vời!
Màu xanh

16

Python, 50 byte

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

Lạm dụng phạm vi! Ví dụ, đối với i=3, chuỗi được đánh giá mở rộng thành.

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

Bằng cách nào đó, mặc dù sử dụng biến đầu vào hàm icho mọi thứ, Python phân biệt từng chỉ số lặp là thuộc một phạm vi riêng như thể biểu thức là

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

với iđầu vào cho hàm.


Thủ thuật này cũng hoạt động trong Firefox 30+ và tiết kiệm cho tôi 3 byte, cảm ơn!
Neil

@DigitalTrauma Cả python và JavaScript đều có eval, rõ ràng bản thân mã cần phải được chuyển nhưng tôi nghĩ bạn có thể giả sử rằng dù sao đi nữa.
Neil

@Neil Ồ, tôi hiểu rồi - Tôi hoàn toàn hiểu lầm :)
Chấn thương kỹ thuật số

12

05AB1E, 6 3 byte

DFL

Giải thích

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

Dùng thử trực tuyến

Đã lưu 3 byte nhờ @Adnan


DFLngắn hơn 3 byte :)
Adnan

1
@Adnan: Không biết L làm việc như thế trong danh sách. Một chút ngạc nhiên rằng nó tự động làm phẳng.
Emigna

3
Đây thực sự là một lỗi mà tôi chưa bao giờ sửa: p.
Ad Nam

6

Võng mạc , 33 byte

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

Đầu vào và đầu ra trong unary.

Hãy thử trực tuyến!

Mặc dù tôi đã không sử dụng hình thức đóng cho thử thách liên quan, nhưng việc điều chỉnh câu trả lời này thật khó khăn.


+%(M!&là thẻ dài nhất mà tôi từng thấy.
Rò rỉ Nun

6

Python 2, 82 byte

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

Đây không phải là giải pháp ngắn nhất, nhưng nó minh họa một phương pháp thú vị:

  • Viết các 2^(2*n-1)số đầu tiên vào nhị phân
  • Giữ những người có chính xác nnhững
  • Đối với mỗi số, hãy đếm số lượng các số 0 ở cuối và thêm 1.

4

Trên thực tế, 9 byte

;#@`♂RΣ`n

Hãy thử trực tuyến!

Giải trình:

;#@`♂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

Cảm ơn Leaky Nun cho một byte và cảm hứng cho 2 byte khác.


;#@"♂R♂i"*ƒtiết kiệm một byte
Leaky Nun

@LeakyNun Bắt tốt - ;#@`♂R♂i`ntiết kiệm một cái khác!
Mego

Tôi đã định thử tổng kết, lol.
Leaky Nun

Tôi nghĩ rằng 9 sẽ là giải pháp tối ưu ở đây
Mego

Liên kết của bạn vẫn còn lỗi thời.
Leaky Nun

4

C #, 128 byte

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;

Với using static System.Linq.Enumerable, bạn có thể làm điều này:int[]J(int n){var l=new[]{n};while (n-- > 0){l = l.Select(p => Range(1, p)).SelectMany(m => m).ToArray();}return l;}
die maus

4

APL, 11 byte

{∊⍳¨∘∊⍣⍵+⍵}

Kiểm tra:

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

Giải trình:

  • +⍵: bắt đầu bằng ,
  • ⍣⍵: làm những lần sau :
    • ⍳¨∘∊: làm phẳng đầu vào, rồi tạo danh sách [1..N] cho mỗi N trong đầu vào
  • : làm phẳng kết quả của điều đó

2
Đơn giản hơn:{(∊⍳¨)⍣⍵⊢⍵}
Adám

@ Adám: Ah, vâng, xe lửa hoạt động khác với J. Tôi đã bắt đầu {(∊∘(⍳¨))⍣⍵+⍵}và sau đó nghĩ, làm thế nào tôi có thể thoát khỏi những cái niềng răng đó?
bến tàu

2

CJam, 14 byte

{_a\{:,:~:)}*}

Kiểm tra nó ở đây.

Giải trình

_a   e# Duplicate N and wrap it in an array.
\    e# Swap with other copy of N.
{    e# Do this N times...
  :, e#   Turn each x into [0 1 ... x-1].
  :~ e#   Unwrap each of those arrays.
  :) e#   Increment each element.
}*

2

Toán học, 27 26 byte

1 byte được lưu với một số cảm hứng từ câu trả lời của Essari.

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

Khá đơn giản: cho đầu vào xchúng ta bắt đầu với {x}và sau đó áp dụng Rangexlần ( RangeListablecó nghĩa là nó sẽ tự động áp dụng cho các số nguyên trong danh sách tùy tiện lồng nhau). Cuối cùng Flattenkết quả.


2

Clojure, 59 byte

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

Giải trình:

Thực sự thẳng về phía trước để giải quyết vấn đề. Làm việc từ trong ra ngoài:

(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 byte

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

Đây chỉ là một bản dịch đơn giản của mô tả vấn đề sang mã.

Chỉnh sửa: Đã lưu một byte nhờ @Dennis.


Bạn printcó thể đi ra ngoài exec.
xnor

Vâng, đó là những gì tôi đã có lúc đầu, nhưng nó chỉ đơn giản là in [k]vì một số lý do. Tôi đã từ bỏ việc cố gắng tìm hiểu xem đó có phải là vấn đề phạm vi hay điều gì khác không.
Andrew Epstein

Vâng, nó trông giống như một vấn đề phạm vi . Nó hoạt động tốt trong Python 2.
xnor

2

R, 60 49 byte

Khá đơn giản sử dụng unlistsapply.

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

Cảm ơn @MickyT vì đã lưu 11 byte


@MickyT thx cho tiền boa, tôi có thể sử dụng seqđể giảm số byte
bouncyball

Xin lỗi tôi đã đọc sai câu hỏi
MickyT

2

php 121

Không thực sự rất nhiều trong cách thủ đoạn đằng sau này. Làm phẳng một mảng trong php không phải là ngắn nên cần phải xây dựng nó phẳng ngay từ đầu

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

Giữ cho nó bằng phẳng là một ý tưởng tốt. Nhưng chức năng gọi lại cũng không ngắn. Đánh bại bạn 15 byte. Bạn có thể lưu 4 byte bằng thẻ ngắn <?hoặc 6 byte có -rvà không có thẻ.
Tít

2

Haskell, 33 byte

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

Cảm ơn nimi vì đã tiết kiệm một byte.

Phiên bản pointfree dài hơn (35 byte):

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

iterate(>>= \a->[1..a])cho một byte ít hơn.
nimi

2

JavaScript (Firefox 30-57), 63 60 byte

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

Cổng câu trả lời Python của @ xnor.


Tôi đã thử điều này với Firefox 42 ( SyntaxError: missing : in conditional expression) và Babel ( Unexpected token (1:21)). Tôi đang làm gì sai?
Dennis

@Dennis Xin lỗi, nhưng tôi không biết; Thực tế tôi có Firefox 42 trên một trong những máy của tôi vì một số lý do và tôi đã kiểm tra lại và nó chạy tốt ở đó. (Tôi cũng đã kiểm tra Firefox 37 và 47 để chắc chắn.)
Neil

Huh, trang không được làm mới và tôi đã thử nghiệm phiên bản cũ của bạn. Một cái mới hoạt động tốt.
Dennis

@Dennis Ah, có vẻ như đi lạc )vào phiên bản đó bằng cách nào đó.
Neil

1

J, 18 byte

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

Phương pháp tiếp cận thẳng dựa trên quá trình được mô tả trong thử thách.

Sử dụng

   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

Giải trình

([:;<@(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

Thạch, 7 byte

Nhanh lên, trước khi Dennis trả lời (jk)

WR€F$³¡

Hãy thử trực tuyến!

WR€F$³¡  Main monadic chain. Argument: z

W        Yield [z].
     ³¡  Repeat the following z times:
 R€          Convert each number in the array to the corresponding range.
   F         Flatten the array.

1

F #, 63 byte

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

Trả về một hàm ẩn danh lấy n làm đầu vào.

Thay thế mọi mục nhập k trong A bằng [1..k], lặp lại quá trình n lần, bắt đầu bằng A = [n].


1

Swift 3, 58 byte

Có nghĩa là chạy trực tiếp trong sân chơi, với n được đặt thành đầu vào:

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

Ungolfed, với hầu hết các ký hiệu tay ngắn được hoàn nguyên:

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 byte

Thủ tục

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;}

Sử dụng

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;}

Đầu ra mẫu:

[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 byte

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

Chỉnh sửa: Đã lưu 1 byte nhờ @xnor. Đã lưu 2 byte nhờ @ Dennis ♦.


Bạn có thể loại bỏ các parens xung quanh exec. Trong Python 2, nó là một từ khóa, không phải là một hàm. Tôi đếm 68 byte btw.
Dennis

@Dennis Ah, điều đó có nghĩa là tôi đã nhầm lẫn và ban đầu là 69 byte ...
Neil

1

Tiện ích Bash + GNU, 49

  • Lưu 1 byte nhờ @Dennis.

Chức năng đệ quy đường ống FTW!

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

nđược truyền vào dòng lệnh. Đầu ra được phân tách dòng mới.

Việc sử dụng số ddliệu thống kê nguyên nhân được gửi đến STDERR. Tôi nghĩ rằng điều này là ổn, nhưng nếu không, ddcó thể được thay thế với catchi phí thêm 1 byte.


1
Theo mặc định, đầu ra bên ngoài tới STDERR được cho phép. Bạn có thể thay thế {...;}bằng (...)để lưu một byte.
Dennis

@Dennis vâng, tất nhiên rồi! Rõ ràng là bạn đã nhận được lời khuyên này từ tôi :)
Chấn thương kỹ thuật số

0

Perl 5, 53 byte

Một chương trình con:

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

Xem nó trong hành động như

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

0

Ruby, 61 byte

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

Chào! Chào mừng đến với PPCG. Một lời giải thích ngắn sẽ tốt đẹp!
TheCoffeeCup

Chào mừng đến với PPCG! Trừ khi thử thách ghi đè lên, tất cả các bài nộp cần phải là chương trình hoặc chức năng đầy đủ , không chỉ là đoạn trích. (Và trong trường hợp này, thử thách thực sự xác nhận yêu cầu này.)
Martin Ender

0

PHP, 100 98 byte

Chạy với 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);

Trong mỗi lần lặp, tạo một vòng lặp sao chép tạm thời từ 1 .. (giá trị đầu tiên bị xóa) cho đến khi $atrống.


Hai cái này vẫn và có thể sẽ vẫn ở mức 100 byte:

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

Trong mỗi vòng lặp lặp lại thông qua mảng thay thế mỗi số bằng một phạm vi.

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);

Trong mỗi vòng lặp thông qua chỉ số tăng mảng theo số trước đó và thay thế từng phần tử được lập chỉ mục bằng một phạm vi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.