子孫のピラミッドを描く(追加)


11

チャレンジ

負でない整数のシーケンスを指定して、子が両方の親数の合計である子孫ピラミッドを出力する関数を作成します。

結果は、tabを使用して文字列として出力されます\t。

注:各行の末尾のタブは不要です

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

オプションとして、空の位置をスペースとして使用して、結果を配列として出力できます。

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

例:

与えられた4,5,7,3,4,2出力:

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

ルール

  • 標準の規則が適用されます
  • 入力は、任意のセパレータまたは配列を使用した文字列にすることができます
  • 行頭または行末の改行とタブは許可されます(ただし、出力が逆ピラミッドである限り必須ではありません)

テストケース

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,,]]

勝利基準は


注:この課題は、Generate Pascalのtriangleに非常に近いものです。違いは、カスタム開始シーケンスです(pascalは1から始まり、アセンダントモードで、これは入力から、子孫モードで)。

サンドボックスポスト



non-negative integers処理する必要があり0ますか?空のスペースが0sで満たされている場合、いくつかのゴルフの可能性があります。
— ジョンファンミン

空の位置にタブまたは空の文字列/配列を持つ配列を返すことができますか?
— アダム

2
「先頭と末尾の改行とタブは許可されます」-配列出力の下部に空の結果を含めることもできますか?
— ジョナサンアラン

1
@JonathanAllanの末尾の改行とタブは許可されています
— アダム

回答:


4

APL(Dyalog Unicode)、31 28 バイトSBCS

暗黙のプレフィックス機能。空のスロットマーカーとして単一のスペースを使用します。数字/スペースのリストのリストを返します。

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

オンラインでお試しください!

⍳∘≢{... }¨⊂ のそれぞれについて、以下の関数を適用ɩ ndices  の  で集計全体の引数:
⍳∘≢
⊂

 ⊢⍵ 正しい引数を返します(元の入力)

 2+/⍣⍺ 左引数で示された回数だけペアワイズ和を適用

 ,∘' '¨ 各番号にスペースを追加します

 (… ), 以下に追加してください:

  ⍺⍴'' 空の文字列の左引数要素(スペースで埋められます)

 ∊ ϵ nlist(平坦化)




3

ゼリー、 14  13 バイト

14-> 13は、リスト形式の出力で末尾のスペースのみのエントリが許可されることを想定しています。そうでない場合、私は14に戻ります(尋ねられます)

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

モナドリンク。出力は、スペースとしてスペース文字を使用したリストのリストです(単一の末尾スペースのみのエントリが含まれます)。

オンラインでお試しください!(フルプログラムとしてモナドリンクを実行すると、破壊された出力が暗黙的に出力されるため、リスト構造を表示するフッターが含まれます。)


3

殻、22バイト

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

オンラインでお試しください!

説明

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

Pythonの3、101の 93 80バイト

Jo Kingのおかげで、(およびyのmap(str,x)代わりに)7バイトを保存し、(の代わりに)末尾の改行を削除しました。 for in''x and[print(

ovsのおかげで([*map(sum,zip(x,x[1:]))]代わりに[x[j]+x[j+1]for j in range(len(x)-1)])13バイト節約されました。

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

オンラインでお試しください!


@ovs:ああ、クール。合計をマップできることに気付いたはずです。ありがとう!
— エミグナ

1

網膜、35バイト

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

オンラインでお試しください!説明:

+

バッファの変化が止まるまで繰り返し、

¶<`

置換の前にバッファーの内容を印刷し、末尾に改行を付けます。

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

単一の数字をタブのペアで置き換えますが、数字の後に別の数字が続き、タブ、合計、および別のタブがあります。



1

赤、151バイト

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]]

オンラインでお試しください!

より読みやすい:

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#(Visual C#コンパイラ)、163バイト

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

オンラインでお試しください!

読みやすい:

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バイト

2行目には、末尾のタブが含まれます。

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

それを試してみてください


説明

                  :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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.