Narysuj piramidę potomną (dodatek)

11

Wyzwanie

Biorąc pod uwagę sekwencję liczb całkowitych nieujemnych, utwórz funkcję, która generuje potomną piramidę, w której dzieci są sumą obu liczb nadrzędnych.

Wynik jest wyprowadzany jako ciąg przy użyciu tabulacji \t.

Uwaga: końcowe tabulatory w każdej linii nie są wymagane

1\t\t2\t\t3\n\t3\t\t5\t\n\t\t8\t\t results in 
1       2       3
    3       5   
        8       

Opcjonalnie wynik może być wyprowadzony jako tablica z wykorzystaniem pustej pozycji jako spacji.

[[1,,2,,3],
[,3,,5,],
[,,8,,]]

Przykład:

Dane 4,5,7,3,4,2wyjściowe:

4       5       7       3       4       2
    9       12      10      7       6
        21      22      17      13
            43      39      30
                82      69
                    151

Zasady

  • Obowiązują standardowe zasady
  • Dane wejściowe mogą być łańcuchem przy użyciu dowolnego separatora lub tablicy
  • Wiodące / końcowe znaki nowej linii i tabulatory są dozwolone (ale nie są wymagane, o ile wynik jest odwróconą piramidą)

Przypadki testowe

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

Kryterium wygranej jest


Uwaga: To wyzwanie jest bardzo zbliżone do generowania trójkąta Pascala . Różnica polega na niestandardowej sekwencji początkowej (pascal przechodzi od 1 iw trybie wstępującym, to od wejścia i w trybie potomnym).

Post w piaskownicy

Luis Felipe De Jesus Munoz
źródło
Nieco spokrewniony .
AdmBorkBork
non-negative integersczy musimy sobie poradzić 0? Istnieje kilka możliwości gry w golfa, jeśli puste miejsca są wypełnione 0s.
JungHwan Min
Czy możemy zwrócić tablicę z tabulatorami lub pustymi łańcuchami / tablicami w pustych pozycjach?
Adám
2
„Dozwolone / końcowe znaki nowego wiersza i tabulatory są dozwolone” - Czy możemy dołączyć pusty wynik (wyniki) na dole również w wynikach tablicy?
Jonathan Allan
1
@JonathanAllan końcowe znaki nowej linii i tabulatory są dozwolone
Adám

Odpowiedzi:

4

APL (Dyalog Unicode) , 31 28 bajtów SBCS

Funkcja ukrytego przedrostka. Używa pojedynczego miejsca jako znacznika pustego miejsca. Zwraca listę list liczb / spacji.

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

Wypróbuj online!

⍳∘≢{... }¨⊂ zastosować poniżej funkcji dla każdego z
tych ɩ ndices  z  tym zgadzają z
całego argumentu:

⊢⍵ podaj właściwy argument (oryginalne dane wejściowe)

2+/⍣⍺ zastosuj sumę parowania tyle razy, ile wskazuje lewy argument

,∘' '¨ dodaj spację do każdego numeru

(), Dołącz to do następujących elementów:

  ⍺⍴'' lewy argument elementów pustego łańcucha (wypełniony spacjami)

ε nlist (spłaszczyć)

Adám
źródło
3

05AB1E , 15 bajtów

gFD„		ý'	N×ì,ü+

Wypróbuj online!

Emigna
źródło
To dużo spacji ... tabulatorów?
JungHwan Min
... lub zero spacji i kilka zakładek: p
Jonathan Allan
Rzeczywiście, to są zakładki :)
Emigna
3

Galaretka ,  14  13 bajtów

14 -> 13 zakłada, że ​​na wyjściu formatu listy dozwolony jest tylko znak spacji; jeśli nie, wrócę do 14 ( zapytany )

+ƝƬK€z⁶Zṙ"JC$

Link monadyczny. Dane wyjściowe to lista list wykorzystujących spacje jako spacje (zawiera pojedynczy końcowy wpis tylko spacji).

Wypróbuj online! (zawiera stopkę pokazującą strukturę listy, ponieważ uruchomienie linku monadycznego, ponieważ pełny program niejawnie wydrukuje zniszczone dane wyjściowe).

Jonathan Allan
źródło
3

Łuska , 22 bajty

zoΣ~+R"	"oJ"		"msNU¡Ẋ+

Wypróbuj online!

Wyjaśnienie

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"]
ბიმო
źródło
2

JavaScript (ES6), 73 bajty

Dziwny kod źródłowy ... W każdym razie, to jest !

Obejmuje wiodące i końcowe białe znaki.

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

Wypróbuj online!

Arnauld
źródło
2

Python 3 , 101 93 80 bajtów

Zaoszczędziłem 7 bajtów ( map(str,x)zamiast for ini init as '') i pozbyłem się nowych linii ( x and[zamiast print() dzięki Jo Kingowi .

Zaoszczędzono 13 bajtów ( [*map(sum,zip(x,x[1:]))]zamiast [x[j]+x[j+1]for j in range(len(x)-1)]) dzięki ovs .

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

Wypróbuj online!

Emigna
źródło
@ovs: Ach, spoko. Powinienem był zrozumieć, że mogę zmapować sumę. Dzięki!
Emigna
1

Siatkówka , 35 bajtów

+¶<`\d+ *(?=(\d+)?)
    $#1*$.(*_$1*)   

Wypróbuj online! Wyjaśnienie:

+

Powtarzaj, aż bufor przestanie się zmieniać,

¶<`

Wydrukuj zawartość bufora przed podstawieniem, z końcowym znakiem nowej linii i

\d+ *(?=(\d+)?)
    $#1*$.(*_$1*)   

Zastąp pojedynczy numer parą tabulatorów, ale liczbą, po której następuje kolejny numer, tabulator, sumę i inną tabulator.

Neil
źródło
1

C (brzęk) , 112 bajtów

j,k;f(*i,c){for(j=c+1;--j;puts("")){for(k=c-j;k--;)printf("\t");for(;++k<j;i[k]+=i[k+1])printf("%d\t\t",i[k]);}}

Wypróbuj online!

ErikF
źródło
Zaproponuj putchar(9)zamiastprintf("\t")
ceilingcat
1

Czerwony , 151 bajtów

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

Wypróbuj online!

Bardziej czytelny:

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
    ]
]
Galen Iwanow
źródło
1

Perl 6 , 50 48 bajtów

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

Wypróbuj online!

Anonimowy blok kodu, który pobiera listę liczb całkowitych i drukuje odwróconą piramidę.

Jo King
źródło
1

C # (kompilator Visual C #) , 163 bajty

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;}

Wypróbuj online!

Czytelny:

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
źródło
1

Japt -Rx , 20 18 bajtów

Drugi wiersz zawiera tabulator końcowy.

Nc¡=ä+
Ëq' ² iEç'  

Spróbuj


Wyjaśnienie

                  :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.
Kudłaty
źródło