Нарисуйте пирамиду-потомок (дополнение)

11

Вызов

Учитывая последовательность неотрицательных целых чисел, создайте функцию, которая выводит пирамиду-потомок, где дочерние элементы являются суммой обоих родительских чисел.

Результат выводится в виде строки с использованием табуляции \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 . Разница заключается в пользовательской последовательности запуска (паскаль идет от 1 и в режиме восходящего, это от входа и в режиме потомка).

Песочница

Луис Фелипе Де Иисус Муньос
источник
non-negative integersмы должны справиться 0? Есть некоторые возможности игры в гольф, если пустые места заполнены с 0.
JungHwan Мин
Можем ли мы вернуть массив с табуляциями или пустыми строками / массивами в пустых позициях?
Адам
2
«Передние / конечные символы новой строки и табуляции разрешены» - можем ли мы включить пустые результаты внизу в вывод массива?
Джонатан Аллан
1
@JonathanAllan трейлинг-переводы строк и вкладок разрешены
Адам

Ответы:

4

APL (Dyalog Unicode) , 31 28 байт SBCS

Функция молчаливого префикса. Использует один пробел в качестве маркера пустого слота. Возвращает список списков чисел / пробелов.

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

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

⍳∘≢{... }¨⊂ применять ниже функции для каждого из
тех ɩ ndices  о  подсчете с
всем аргументом:

⊢⍵ привести правильный аргумент (исходный ввод)

2+/⍣⍺ применить попарную сумму столько раз, сколько указано левым аргументом

,∘' '¨ добавить пробел к каждому номеру

(... ), добавить это к следующему:

  ⍺⍴'' элементы левого аргумента пустой строки (дополненные пробелами)

ε NLIST (Flatten)

Адам
источник
3

05AB1E , 15 байтов

gFD„		ý'	N×ì,ü+

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

Emigna
источник
Это много пробелов ... вкладки?
Юнг Хван Мин
... или ноль пробелов и несколько вкладок: p
Джонатан Аллан
Действительно, это вкладки :)
Emigna
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

JavaScript (ES6), 73 байта

Странный исходный код ... Во всяком случае, это !

Включает в себя ведущие и конечные пробелы.

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

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

Arnauld
источник
2

Python 3 , 101 93 80 байт

Благодаря Джо Кингу удалось сохранить 7 байтов ( map(str,x)вместо for inи init y as '') и избавиться от завершающих строк новой строки ( x and[вместо print() .

Сохранено 13 байтов ( [*map(sum,zip(x,x[1:]))]вместо [x[j]+x[j+1]for j in range(len(x)-1)]) благодаря ovs .

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

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

Emigna
источник
@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

Perl 6 , 50 48 байтов

{$_,{say "	"x$++~.join("		");$_[1..*]Z+@$_}...0}

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

Блок анонимного кода, который принимает список целых чисел и печатает перевернутую пирамиду.

Джо Кинг
источник
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;
        }
Hyarus
источник
1

Джапт -Rx , 20 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.
мохнатый
источник