画一个后裔金字塔(加法)


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的三角形。区别在于自定义启动顺序(Pascal从1开始,在上升模式下,从输入开始,在后裔模式下)。

沙盒发布



non-negative integers我们要处理0吗?如果空白处填充0s,则有打高尔夫球的可能。
郑焕敏'18

我们可以返回一个带有制表符的数组或在空位置的空字符串/数组吗?
亚当

2
“允许/领先的换行符和制表符” –我们是否也可以在数组输出的底部也包含空结果?
乔纳森·艾伦

1
@JonathanAllan 尾随新行和翼片被允许
ADAM

Answers:


4

APL(Dyalog Unicode)31个 28 字节SBCS

隐式前缀功能。使用单个空格作为空槽标记。返回数字/空格列表的列表。

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

在线尝试!

⍳∘≢{... }¨⊂ 适用以下功能为每个
ɩ ndices  的  与理货
整个参数:

⊢⍵ 产生正确的参数(原始输入)

2+/⍣⍺ 如左参数所示多次应用成对和

,∘' '¨ 在每个数字后面加一个空格

(), 追加到以下内容:

  ⍺⍴'' 空字符串的左参数元素(用空格填充)

ε NLIST(扁平化)




3

果冻 14  13 字节

14-> 13假定列表格式输出中仅允许尾随空格的条目;如果不是,我将回复到14(询问

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

单子链接。输出是使用空格字符作为空格的列表列表(包括一个仅尾随空格的条目)。

在线尝试!(包括页脚以显示列表结构,因为将monadic链接作为完整程序运行将隐式打印粉碎的输出。)


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

JavaScript(ES6),73个字节

奇怪的源代码...总之,这就是

包括前导和尾随空格。

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

在线尝试!



2

Python 3中101个 93 80字节

保存了7个字节(map(str,x)而不是for ininit和init y ''),并摆脱了尾随换行符(x and[而不是print(),这要归功于Jo King

由于ovs,节省了13个字节([*map(sum,zip(x,x[1:]))]而不是[x[j]+x[j+1]for j in range(len(x)-1)])。

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

在线尝试!


@ovs:啊,很酷。我应该意识到我可以映射总和。谢谢!
Emigna

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 -Rx20 18字节

第二行包括一个尾随选项卡。

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.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.