Vẽ một kim tự tháp con cháu (bổ sung)


11

Thử thách

Cho một chuỗi các số nguyên không âm, tạo một hàm tạo ra một kim tự tháp con cháu trong đó các con là tổng của cả hai số cha.

Kết quả được xuất ra dưới dạng một chuỗi sử dụng tab \t.

Lưu ý: các tab theo dõi trên mỗi dòng là không bắt buộc

1\t\t2\t\t3\n\t3\t\t5\t\n\t\t8\t\t results in 
1       2       3
    3       5   
        8       

Kết quả tùy chọn có thể được xuất ra dưới dạng một mảng sử dụng vị trí trống làm không gian.

[[1,,2,,3],
[,3,,5,],
[,,8,,]]

Thí dụ:

Cho 4,5,7,3,4,2đầu ra:

4       5       7       3       4       2
    9       12      10      7       6
        21      22      17      13
            43      39      30
                82      69
                    151

Quy tắc

  • Luật tiêu chuẩn được áp dụng
  • Đầu vào có thể là một chuỗi sử dụng bất kỳ dấu phân cách hoặc một mảng
  • Các dòng và tab hàng đầu / cuối được cho phép (nhưng không bắt buộc miễn là đầu ra là một kim tự tháp ngược)

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

Input: 1,3,5

1       3       5
    4       8
        12


Input: 9,8,7,6,5

9       8       7       6       5
    17      15      13      11
        32      28      24
            60      52
                112


Input: 5,5,2,5

[[5,,5,,2,,5],
[,10,,7,,7,],
[,,17,,14,,],
[,,,31,,,]]

Input: 3,3,3

[[3,,3,,3],
[,6,,6,],
[,,12,,]]

Tiêu chí chiến thắng là


Lưu ý: Thử thách này rất gần với Tạo tam giác của Pascal . Sự khác biệt là trình tự bắt đầu tùy chỉnh (pascal đi từ 1 và ở chế độ tăng dần, điều này từ đầu vào và ở chế độ con cháu).

Bài Sandbox



non-negative integerschúng ta phải xử lý 0? Có một số khả năng chơi gôn nếu không gian trống được lấp đầy bằng 0s.
JungHwan Min

Chúng tôi có thể trả về một mảng với các tab hoặc chuỗi / mảng trống ở các vị trí trống không?
Adám

2
"Các dòng và tab hàng đầu / cuối được cho phép" - Chúng tôi có thể bao gồm (các) kết quả trống ở phía dưới trong đầu ra mảng không?
Jonathan Allan

1
@JonathanAllan dấu dòng mới và các tab được phép
Adam

Câu trả lời:


4

APL (Dyalog Unicode) , 31 28 byte SBCS

Hàm tiền tố ngầm. Sử dụng một không gian duy nhất là điểm đánh dấu trống. Trả về danh sách các danh sách số / không gian.

⍳∘≢{∊(⍺⍴''),,∘' '¨2+/⍣⍺⊢⍵}¨⊂

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

⍳∘≢{... }¨⊂ áp dụng dưới đây chức năng cho mỗi người trong số
các ɩ ndices  của  tổng sắp với
toàn bộ lập luận:

⊢⍵ mang lại đối số đúng (đầu vào ban đầu)

2+/⍣⍺ áp dụng tổng hợp theo cặp nhiều lần như được chỉ ra bởi đối số bên trái

,∘' '¨ nối một khoảng trắng vào mỗi số

(Thêm vào ), đó như sau:

  ⍺⍴'' các phần tử đối số bên trái của chuỗi trống (được đệm bằng khoảng trắng)

ε nlist (flatten)




3

Thạch ,  14  13 byte

14 -> 13 giả định mục nhập chỉ dấu cách được cho phép trong đầu ra định dạng danh sách; nếu không tôi sẽ trở lại số 14 ( hỏi )

+ƝƬK€z⁶Zṙ"JC$

Một liên kết đơn nguyên. Đầu ra là một danh sách các danh sách sử dụng các ký tự khoảng trắng làm khoảng trắng (bao gồm một mục duy nhất là dấu cách chỉ dấu cách).

Hãy thử trực tuyến! (bao gồm một chân trang để hiển thị cấu trúc danh sách kể từ khi chạy liên kết đơn âm vì một chương trình đầy đủ sẽ in hoàn toàn đầu ra bị đập vỡ.)


3

Husk , 22 byte

zoΣ~+R"	"oJ"		"msNU¡Ẋ+

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

Giải trình

z(Σ~+R" "(J"  "ms))NU¡Ẋ+  -- example input: [1,2,3]
                     ¡    -- infinitely do and collect in list
                      Ẋ+  -- | sum adjacent
                          -- : [[1,2,3],[3,5],[8],[],[],...
                    U     -- keep up until first repetition: [[1,2,3],[3,5],[8],[]]
z(                )N      -- zip with natural numbers under (example on 1 [1,2,3])
   ~+    (       )        -- | join arguments modified by
     R" "                 -- | | replicate tab: " "
               ms         -- | | show each: ["1","2","3"]
          J"  "           -- | | join with 2 tabs: ["1","  ","2","  ","3"]
                          -- | : [" ","1","  ","2","  ","3"]
  Σ                       -- | concatenate: " 1  2  3"
                          -- : [" 1  2  3","  3  5","   8"]

2

JavaScript (ES6), 73 byte

Mã nguồn kỳ lạ ... Dù sao, đó là !

Bao gồm khoảng trắng hàng đầu và dấu.

f=(a,p=`
`)=>p+a.join`		`+(1/(y=a.shift())?f(a.map(x=>y+(y=x)),p+`	`):'')

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



2

Python 3 , 101 93 80 byte

Đã lưu 7 byte ( map(str,x)thay vì for invà init y như '') và thoát khỏi các dòng mới ( x and[thay vì print(), nhờ Jo King .

Đã lưu 13 byte ( [*map(sum,zip(x,x[1:]))]thay vì [x[j]+x[j+1]for j in range(len(x)-1)]) nhờ các lò nướng .

f=lambda x,y='':x and[y+'		'.join(map(str,x))]+f([*map(sum,zip(x,x[1:]))],y+'	')

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


@ovs: À, tuyệt. Tôi nên nhận ra rằng tôi có thể lập bản đồ tổng. Cảm ơn!
Emigna

1

Võng mạc , 35 byte

+¶<`\d+ *(?=(\d+)?)
    $#1*$.(*_$1*)   

Hãy thử trực tuyến! Giải trình:

+

Lặp lại cho đến khi bộ đệm ngừng thay đổi,

¶<`

In nội dung của bộ đệm trước khi thay thế, với một dòng mới, và

\d+ *(?=(\d+)?)
    $#1*$.(*_$1*)   

Thay thế một số duy nhất bằng một cặp tab, nhưng một số theo sau là một số khác với một tab, tổng và một tab khác.



1

Màu đỏ , 151 byte

func[b][m: length? b repeat n m[loop n - 1[prin"^-"]print replace/all
form b" ""^-^-"c: copy[]repeat i -1 + length? b[append c b/(i) + b/(i + 1)]b: c]]

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

Dễ đọc hơn:

f: func [ b ] [
    m: length? b
    repeat n m [
        loop n - 1 [ prin tab ]
        print replace/all form b " " rejoin [ tab tab ]
        c: copy []
        repeat i (length? b) - 1 [
            append c b/(i) + b/(i + 1)
        ]
        b: c
    ]
]


1

C # (Trình biên dịch C # trực quan) , 163 byte

b=>{var s="";var c=b.Length;for(int i=0;i<c;i++){for(int z=0;z<i;z++)s+="\t";for(int x=0;x<c-i;x++){s+=b[x]+"\t\t";b[x]=x==c-i-1?0:b[x]+b[x+1];}s+="\n";}return s;}

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

Có thể đọc được

b =>    {
            var s = "";
            var c = b.Length;
            for (int i = 0; i < c; i++)
            {
                for (int z = 0; z < i; z++)
                    s += "\t";
                for (int x = 0; x < c - i; x++)
                {
                    s += b[x] + "\t\t";
                    b[x] = x == c - i - 1 ? 0 : b[x] + b[x + 1];
                }
                s += "\n";
            }
            return s;
        }

1

Japt -Rx , 20 18 byte

Dòng thứ hai bao gồm một tab trailing.

Nc¡=ä+
Ëq' ² iEç'  

Thử nó


Giải trình

                  :Implicit input of array U
N                 :The array of inputs (NOT the input array)
 c                :Concatenate
  ¡               :  Map U
    ä+            :    Consecutive sums of U
   =              :    Reassign to U for next iteration
\n                :Reassign the resulting 2D-array to U
Ë                 :Map each array at index E
 q                :  Join with
  '\t             :   Tab
     ²            :   Repeated twice
       i          :  Prepend
          '\t     :   Tab
         ç        :   Repeated
        E         :   E times
                  :Implicitly join with newlines, trim (not strictly necessary) and output.
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.