Простой двоичный треугольник


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
Можем ли мы вернуть список списков номеров?
Эрик 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.
Эрик Outgolfer

@EriktheOutgolfer ооо спасибо!
HyperNeutrino


3

Желе , 8 байт

⁼€=ḂŒḄµ€

Попробуйте онлайн!

-2 благодаря HyperNeutrino .


О, серьезно .... разделить второй ниндзя: p
Джонатан Аллан

@JonathanAllan Это было действительно изменение правила ... кстати, я думаю, что это тоже игра в гольф ...
Эрик Outgolfer

да, у меня была 15-байтовая сетка, а затем 10-байтовые списки ...
Джонатан Аллан

1
@JonathanAllan Hyper - это хорошо ...
Эрик Аутгольфер

¬^Ḃможет стать, =Ḃпотому что 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 байт (для более длинного)
Mr. Xcoder

3

Japt , 12 9 байт

õÈÇ¥Y^uÃê

Проверьте это онлайн!

Довольно печально по сравнению с желе, но у Джапта нет ничего похожего , так что я должен делать с того, что у меня есть ...

объяснение

 õÈ   Ç   ¥ 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

Уууу, кто-то разорвал цепь Питон-Желе-Питон-Желе!
г-н Xcoder

@ Mr.Xcoder Где Jelly действительно реализован на Python. : p
Эрик Outgolfer

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

Попробуй это здесь!

Pyth , 15 байт

Большое спасибо @Jakube за -1 байт

m++K*d]%d2%td2K

Попробуй это здесь.

Pyth , 16 байт

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

Попробуй это здесь.


Удалите второе ]в первом коде.
Якуб

@Jakube Да, спасибо. Забыл об автолистификации для добавления элементов в списки.
г-н Xcoder

И вот 14-байтовое решение: ms_+Bm%d2d%hd2
Jakube

@Jakube Да, я думал о раздвоении прямо сейчас, но я не мог сделать это, так как я на мобильном телефоне. Еще раз большое спасибо!
Мистер Кскодер

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 байт - вывод на стандартный вывод

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)

Попробуйте онлайн!

Запись в файл, так как я не знаю, как разместить его в консоли if n==99(см. Результат здесь ).


2
Я не думаю, что вам нужно беспокоиться о том, чтобы консоль обернула его для больших n. Лично я угробил бы, 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;

Попробуйте онлайн!

Unglofed

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

Уголь , 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 байтов.

Хороший вопрос, я не думал об этом
Дэвид Бейли

Вы можете сохранить как минимум еще 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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.