易二元三角形


18

给定一个正整数作为输入n>=1,输出n以下三角形的第一行:

                  1
                1 0 1
              0 0 1 0 0
            1 1 1 0 1 1 1
          0 0 0 0 1 0 0 0 0
        1 1 1 1 1 0 1 1 1 1 1
      0 0 0 0 0 0 1 0 0 0 0 0 0
    1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
  0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1

这些行在所有零和所有1之间交替,除了中心列被翻转。

测试用例

  • 输入3

  • 输出

        1
      1 0 1
    0 0 1 0 0
    
  • 输入10

  • 输出量

                      1
                    1 0 1
                  0 0 1 0 0
                1 1 1 0 1 1 1
              0 0 0 0 1 0 0 0 0
            1 1 1 1 1 0 1 1 1 1 1
          0 0 0 0 0 0 1 0 0 0 0 0 0
        1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
      0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
    1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
    

您的代码必须适用于任何 n<100。这是,因此以字节为单位的最短代码胜出!

允许尾随空格/换行符和前导换行符!


多余的空白是否可以接受,如果可以,哪个(引导线/引导线/尾部/训练线)?
乔纳森·艾伦

1
我们可以返回数字列表吗?
暴民埃里克(Erik the Outgolfer)'17年

8
@EriktheOutgolfer列表列表很好!

1
由于列表的列表很好,所以我假设不需要居中对齐,对吗?
路易斯·门多

1
这是您的挑战,但是我认为,如果您足够灵活以允许使用列表列表,那么严格设置格式就没有任何意义
Luis Mendo

Answers:


7

果冻,7个字节

Ṭ=Ḃµ€ŒB

在线尝试!

-1个字节感谢外长者埃里克(Erik the Outgolfer)

说明

Ṭ=Ḃµ€ŒB  Main link
    €    For each element in (implicit range of) the input:
Ṭ        List 1s and 0s with 1s in the indices in the left argument (generates `[0, 0, ..., 1]`)
 =Ḃ      Is this equal to `(z % 2)` where `z` is the range number? (Every other row is flipped)
     ŒB  Reflect each row

您可以替换¶Çµ的-1。
暴民埃里克(Erik the Outgolfer)'17年

@EriktheOutgolfer哦,谢谢!
HyperNeutrino


3

果冻,8字节

⁼€=ḂŒḄµ€

在线尝试!

-2感谢HyperNeutrino


哦,认真的...。第二个忍者:p
乔纳森·艾伦

@JonathanAllan这确实是一个规则更改...顺便说一句,我认为这也可以打高尔夫球...
Egg the Outgolfer

是的,我有一个15字节的网格,然后是10字节的列表...
Jonathan Allan

1
@JonathanAllan Hyper表现不错...
Egg the Outgolfer '17

¬^Ḃ=Ḃ之所以会成为原因NOT (XOR (A B))是因为显然只是IFF (A B) 编辑,所以我打高尔夫球的次数比我想像的还要多
-HyperNeutrino


3

Japt12个 9字节

õÈÇ¥Y^uÃê

在线测试!

与Jelly相比有点难过,但是Japt没有类似的东西,所以我必须对自己拥有的东西做出努力...

说明

 õÈ   Ç   ¥ Y^ uà ê
UõXY{XoZ{Z==Y^Yu} ê}      Ungolfed
                          Implicit: U = input number
Uõ                        Create the range [1..U].    [1, 2, 3, 4]
  XY{              }      Map each item X and 0-index Y in this to
     Xo                     Create the range [0..X).  [[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
       Z{      }            Map each item Z in this to
         Z==Y                 Z is equal to Y         [[1], [0, 1], [0, 0, 1], [0, 0, 0, 1]]
             ^Yu              XORed with Y % 2.       [[1], [1, 0], [0, 0, 1], [1, 1, 1, 0]]
                  ê         Bounce.                   [[1],
                                                       [1, 0, 1],
                                                       [0, 0, 1, 0, 0],
                                                       [1, 1, 1, 0, 1, 1, 1]]
                          Implicit: output result of last expression

内置命令的万岁:P:P:P
HyperNeutrino

Yaay,有人打破了Python-Jelly-Python-Jelly的锁链!
Xcoder先生17年

@ Mr.Xcoder Jelly实际上是在Python中实现的。:p
暴民埃里克(Erik the Outgolfer)'17年

3

Mathematica,77个字节

Table[CellularAutomaton[51,{{1},0},#,{All,All}][[i]][[#-i+2;;-#+i-2]],{i,#}]&

@不是一棵树打高尔夫球到48字节!

Mathematica,48个字节

#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&

嗯,我没有考虑将其视为细胞自动机。真好!
HyperNeutrino

2
同样的东西,但是高尔夫球手:#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&48字节
不是一棵树

3

Pyth,14个字节

感谢@Jakube节省了2个字节!

ms_+Bm%d2d%hd2

在这里尝试!

腐霉菌,15个字节

非常感谢@Jakube的-1个字节

m++K*d]%d2%td2K

在这里尝试。

Pyth,16个字节

m++K*d`%d2`%td2K

在这里尝试。


删除]第一个代码中的第二个。
雅库布

@Jakube是的,谢谢。忘记了将元素追加到列表的自动列表。
Xcoder先生17年

这是一个14字节的解决方案:ms_+Bm%d2d%hd2
Jakube

@Jakube是的,我现在正在考虑分叉,但是由于我在移动设备上,所以我做不到。再次非常感谢!
Xcoder先生17年

3

R,73字节

感谢朱塞佩!不错的收获。

n=scan();for(i in 1:n)cat(c(rep(" ",n-i),x<-rep(1-i%%2,i-1)),i%%2,x,"\n")

在线尝试!

R,78个字节

n=scan();for(i in 1:n)cat(x<-c(rep(" ",n-i),rep(1-i%%2,i-1)),i%%2,rev(x),"\n")

在线尝试!

R,82字节

n=scan();for(i in 1:n){j=i%%2;x=c(rep(" ",n-i),rep(1-j,i-1));cat(x,j,rev(x),"\n")}

在线尝试!

R,110字节-输出到stdout

m=matrix(x<-rep_len(0:1,n<-scan()),n,n-1);m[upper.tri(m,T)]=" ";for(i in 1:n)cat(rev(m[i,]),1-x[i],m[i,],"\n")

在线尝试!

R,130字节-输出到文件

m=matrix(x<-rep_len(0:1,n<-scan()),n,n-1);m[upper.tri(m,T)]=" ";for(i in 1:n)cat(rev(m[i,]),1-x[i],m[i,],"\n",file="a",append=i>1)

在线尝试!

写出文件,因为我不知道如何将其放入控制台n==99(请参见此处的结果)。


2
我认为您不必担心控制台将其包装为较大的n。就个人而言,我会抛弃.file =“ a”,因为STDOUT的输出是正确的。
MickyT


1

帕斯卡181字节

@ThePirateBay节省了27个字节

procedure f(n:integer);var i,j:integer;begin for i:=1to n do begin write(' ':(n-i+1)*2);for j:=1to i*2-1do write((ord(j<>i)+i)mod 2,' ');writeln()end end;

在线尝试!

不戴手套

procedure f (n: integer);
    var i, j: integer;
    begin
        for i := 1 to n do
        begin
            write(' ': (n-i+1) * 2);
            for j := 1 to i*2-1 do
                write((ord(j<>i) + i) mod 2, ' ')
            writeln()
        end
    end;


1

视网膜,25字节

.+
$*0
0
1$`¶
T`d`10`¶.*¶

在线尝试!说明:第一级将输入转换为该长度的零字符串。然后,第二阶段采用该字符串的所有前缀(不包括字符串本身),并为它们加上前缀1。然后,第三阶段切换交替行上的位。


1

05AB1E24 21 18 字节

FNÉN×NÈJûIN>-úˆ}¯»

在线尝试!


编辑:嗯,这是我的第一个05AB1E高尔夫,所以我对可以进行高尔夫的事情并不感到惊讶。编辑历史记录:



1

Mathematica,90个字节

Array[(x=Table[1,f=(2#-1)];x[[⌈f/2⌉]]=0;If[#==1,{1},If[OddQ@#,x/.{1->0,0->1},x]])&,#]&


0

木炭,18字节

EN⪫IE⁺¹ι﹪⁺ι¬λ² ‖O←

在线尝试!链接是详细版本的代码。说明:

EN              For each of the input number of rows
  ⪫             Join with spaces
   I            Convert to string
    E⁺¹ι        For each column
        ﹪⁺ι¬λ²  Calculate the digit
‖O←             Reflect to the left

0

JavaScript中,140个 132字节(以适当的格式)

n=>{A=Array;a='';b=0;for(x of A(n)){for(c of A(n-b))a+=' ';for(c of A(b))a+=b%2;a+=(b+1)%2;for(c of A(b))a+=b%2;a+='\n';b++}return a}

在线试用


如果您不知道,则可以A=Array用来保存8个字节。

好点,我没想到
David Bailey

您可以通过以下方式再保存至少3个字节:1)而不是A=Array;可以A在第一次数组调用(即for(x of(A=Array)(n)))时使用init变量来保存1个字节,2)'\n'用文字换行代替(使用重音符号),3)您不这样做需要加括号,(b+1)%2因为它等效于b+1&1

0

JavaScript(ES6)74 73 71 68 64字节

-7个字节,@ Neil

f=n=>n--?[...f(n), [...Array(n-~n)].map((v,i)=>(n+(i==n))%2)]:[]

在线尝试!

简单的递归函数,可以逐行生成行。输出为数字数组。


输出为格式化字符串:

的JavaScript(ES6) 122个 119 118字节

f=(n,w=2*n+1,N=n,s=" ".repeat((N-n)*2))=>(--n?f(n,w,N)+s+[...Array(n-~n)].map((v,i)=>(n+(i==n))%2).join(" "):s+1)+"\n"

在线尝试!


(n%2+(i==n))%2可以简化为(n+(i==n))%2
尼尔

1&n^i==n可能有效,但我尚未对其进行测试。
尼尔

也尝试一下n--?...:[]。(而且您不需要;in代码高尔夫。)
Neil

2*n+1可能是n-~n,但我永远无法确定。
尼尔

@尼尔谢谢!添加了我可以工作的工作
-Birjolaxew


0

J,32个字节

3 :'-.^:(2|y)(=|.)i.>:+:y'&.>@i.

在线尝试!这是一个匿名函数,它返回一个装箱的值列表。

我想像一下,显式函数定义通过除去大写等来节省字节,但是与默认答案相比,它可能会增加几个字节。

说明

3 :'-.^:(2|y)(=|.)i.>:+:y'&.>@i.
                              i. For i = 0 ... input - 1
3 :'-.^:(2|y)(=|.)i.>:+:y'        Explicit function: compute nth row
                    >:+:y          2n+1
                  i.               Range [0,2n+1)
             (=|.)                 Equate range to reversed range
                                    (yield 0 0 0 ... 1 ... 0 0 0)
                                   If
                                    n = 1 (mod 2)
                                   Then
                                    Negate each value
                          &.>     Box

0

05AB1E,11个字节

FN°SRNF_}ûˆ

在线尝试!

说明

F             # for N in range [0 ... input-1] do:
 N°           # push 10^N
   S          # split to list of digits
    R         # reverse
     NF_}     # N times do: logical negation
         û    # palendromize
          ˆ   # add to global list
              # implicitly display global list

0

J,17个字节

(2&|~:0=i:)&.>@i.

在线尝试!

输出装箱数组的列表。

说明

(2&|~:0=i:)&.>@i.  Input: n
               i.  Range from 0 to n, exclusive end
           & >     Unbox each and perform on each x
        i:           Range from -x to x, inclusive
      0=             Equal to 0
    ~:               Not equal
 2&|                 x mod 2
           &.>       Perform inverse of unbox (box)

0

Java 8,121 111 109 101字节

n->{String r[]=new String[n],t;for(int i=0,j;i<n;r[i++]=t+i%2+t)for(j=0,t="";j++<i;t+=i%2);return r;}

我当前的字节分数(101)也是二进制三角形的一行。:)

说明:

在这里尝试。

n->{                         // Method with integer parameter and String-array return-type
  String r[]=new String[n],  //  Result String-array
         t;                  //  Temp String
  for(int i=0,j;             //  Some index-integers
      i<n;                   //  Loop (1) from 0 to `n` (exclusive)
      r[i++]=                //    After every iteration, set the next row to:
        t+                   //     `t` +
        i%2                  //     Center digit (`i` has already been raised by 1 now)
        +t)                  //     + `t` again
    for(j=0,t="";            //   Reset index `j` and the temp-String `t`
        j++<i;               //   Inner loop (2) from 0 to `i` (exclusive)
      t+=i%2                 //    Append `t` with an outer digit
    );                       //   End of inner loop (2)
                             //  End of loop (1) (implicit / single-line body)
  return r;                  //  Return resulting String-array
}                            // End of method

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.