Легкий двійковий трикутник


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

Рядки чергуються між усіма нулями та всіма, за винятком перевернутого центрального стовпця.

Тестові справи

  • Вхід :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

8
@EriktheOutgolfer список списків добре!

1
Оскільки список списків прекрасний, я припускаю, що орієнтоване по центру не потрібно, чи не так?
Луїс Мендо

1
Це ваше завдання, але, на мою думку, якщо ви досить гнучкі, щоб дозволити список списків, то не має сенсу бути чітким із форматуванням
Луїс Мендо

Відповіді:


7

Желе , 7 байт

Ṭ=Ḃµ€ŒB

Спробуйте в Інтернеті!

-1 байт завдяки Еріку Переможнику

Пояснення

Ṭ=Ḃµ€Œ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

@EriktheOutgolfer ooh дякую!
HyperNeutrino


3

Желе , 8 байт

⁼€=ḂŒḄµ€

Спробуйте в Інтернеті!

-2 завдяки HyperNeutrino .


О серйозно .... розділити другий ніндзя: p
Джонатан Аллан

@JonathanAllan Це було дійсно зміна правил ... btw Я думаю, що це теж можна зіграти ...
Erik the Outgolfer

так, у мене була 15-байтна сітка, а потім 10 байтних списків ...
Джонатан Аллан

1
@JonathanAllan Hyper - це добре ...
Erik the Outgolfer

¬^ḂМожу стати, =Ḃтому що NOT (XOR (A B))просто IFF (A B) редагувати, мабуть, я гольфував більше, ніж думав, що маю o_O lol
HyperNeutrino

3

Python 2 , 50 байт

lambda n:[[i%2]*i+[~i%2]+i*[i%2]for i in range(n)]

Спробуйте в Інтернеті!

Python 2 , 53 байти

lambda n:[(([i%2]*i+[~i%2])*2)[:-1]for i in range(n)]

Спробуйте в Інтернеті!

Python 2 , 67 байт

lambda n:[[[i%2,~i%2][j==i]for j in range(2*i+1)]for i in range(n)]

Спробуйте в Інтернеті!


2
Ха-ха, тепер ми зв'язані :)
Містер Xcoder

65 байт (для довшого)
Містер Xcoder

3

Japt , 12 9 байт

õÈÇ¥Y^uÃê

Перевірте це в Інтернеті!

Зовсім Трохи сумно за порівнянні з желе, але 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

Яай, хтось зламав ланцюг Python-Jelly-Python-Jelly!
Містер Xcoder

@ Mr.Xcoder Де Jelly реально реалізований у Python. : p
Erik the Outgolfer

3

Математика, 77 байт

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

@Не дерево перебуває в гольфі до 48 байт!

Математика, 48 байт

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

Так, я не думав розглядати це як стільниковий автомат. Приємно!
HyperNeutrino

2
Те саме, але гольфіст:, #&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&48 байт
Не дерево

3

Піт , 14 байт

Дякуємо @Jakube за збереження 2 байтів!

ms_+Bm%d2d%hd2

Спробуйте тут!

Pyth , 15 байт

Дякую @Jakube за -1 байт

m++K*d]%d2%td2K

Спробуйте тут.

Pyth , 16 байт

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

Спробуйте тут.


Видаліть другий ]з першого коду.
Jakube

@Jakube Так, спасибі Забув про автоматичне розмежування для додавання елементів до списків.
Містер Xcoder

І ось рішення в 14 байт:ms_+Bm%d2d%hd2
Jakube

@Jakube Так, я зараз думав про роздвоєння, але не міг цього зробити, оскільки перебуваю на мобільному телефоні. Ще раз дякую!
Містер Xcoder

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
Я не думаю, що вам не потрібно турбуватися про те, щоб консоль обгорнула її для більших. Особисто я би вибрався, file = "a", оскільки вихід у STDOUT правильний.
MickyT


1

Паскаль , 181 154 байт

27 байт збережено завдяки @ThePirateBay

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

05AB1E , 24 21 18 байт

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

Спробуйте в Інтернеті!


Редагувати: Ну, це мій перший гольф 05AB1E, тому я не здивований, що речі можна пограти в гольф. Редагувати історію:






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 байт.

Добре, я не думав про це
Девід Бейлі

Ви можете зберегти щонайменше 3 байти: 1) Замість цього A=Array;ви можете ввести змінну Aпід час виклику першого масиву (тобто for(x of(A=Array)(n))), який зберігає 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--?...:[]. (І вам не потрібен ;гольф з кодом.)
Ніл

2*n+1можливо n-~n, але я ніколи не можу точно згадати.
Ніл

@Neil Дякую! Додано тих, над якими я міг працювати
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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.