Намалюйте піраміду нащадка (додаток)


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,,]]

Критеріями виграшу є


Примітка. Цей виклик дуже близький до створення трикутника Паскаля . Різниця полягає у користувальницькій початковій послідовності (паскаль йде від 1 і в режимі висхідної, це від вхідного і в нащадному режимі).

Пісочний пост



non-negative integersми повинні впоратися 0? Є кілька можливостей для гольфу, якщо порожні місця заповнені 0s.
JungHwan Min

Чи можемо ми повернути масив із вкладками чи порожніми рядками / масивами у порожні позиції?
Адам

2
"Дозволені / провідні нові рядки та вкладки дозволені" - Чи можемо ми включити порожні результати внизу у висновку масиву?
Джонатан Аллан

1
@JonathanAllan
пропускаються

Відповіді:


4

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

Мовчазна префіксальна функція. Використовує один пробіл як маркер порожнього слота. Повертає список списків чисел / пробілів.

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

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

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

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

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

,∘' '¨ додайте пробіл до кожного числа

(), Додайте це до наступного:

  ⍺⍴'' елементи лівого аргументу порожнього рядка (обкладені пробілами)

ϵ nlist (згладити)




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

Python 3 , 101 93 80 байт

Зберегли 7 байтів ( map(str,x)замість for inі init y як '') і позбулися останніх рядків ( 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+'	')

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


@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

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