Dodawanie do góry nogami piramidy polega na pobieraniu listy liczb i sukcesywnym dodawaniu ich razem, aż do osiągnięcia jednej liczby.
Po podaniu liczb 2, 1, 1
następuje następujący proces:
2 1 1
3 2
5
To kończy się liczbą 5
.
TWOJE ZADANIE
Biorąc pod uwagę prawą stronę Upside-Down Pyramid (Rosnąco), napisz program lub funkcję, która zwróci oryginalną listę.
Nowe dodatkowe wyzwanie : spróbuj to zrobić w mniej niż O (n ^ 2)
PRZYKŁAD
f([5, 2, 1]) => [2, 1, 1]
f([84,42,21,10,2]) => [4,7,3,8,2]
UWAGA: Piramida do góry nogami nigdy nie będzie pusta i zawsze będzie składać się WYŁĄCZNIE z dodatnich liczb całkowitych.
Try doing this in less than O(n)
z pewnością nie można przydzielić tablicy o rozmiarze n ani zmienić w niej elementów O (n) szybciej niż złożoność O (n)?Odpowiedzi:
JavaScript (ES6),
62 58 4946 bajtówZaoszczędź 3 bajty dzięki @Oliver
Zwraca listę jako ciąg rozdzielany przecinkami.
Wypróbuj online!
Skomentował
źródło
Haskell , 22 bajty
Wypróbuj online!
źródło
Haskell, 42 bajty
Wypróbuj online!
źródło
TI-BASIC, 54 bajty
Dane wejściowe to lista prawej strony trójkąta w
Ans
, jak opisano w wyzwaniu.Wyjście to górny rząd wspomnianego trójkąta.
Przykłady:
Objaśnienie:
To rozwiązanie narusza fakt, że trójkąt utworzony przy użyciu prawej strony trójkąta, gdy początkiem jest zmiana w każdym elemencie.
Innymi słowy,
staje się:
Tak więc powstała lista jest prawą stroną tego nowego trójkąta, którą można utworzyć, ustawiając ostatni element na indeks długości jego listy nadrzędnej na liście wynikowej.
Uwaga: TI-BASIC jest językiem tokenizowanym. Liczba znaków nie jest równa liczbie bajtów.
źródło
Galaretka , 6 bajtów
Monadyczny link akceptujący listę liczb całkowitych, która daje listę liczb całkowitych.
Wypróbuj online!
W jaki sposób?
Buduje cały trójkąt, a następnie wyodrębnia wymagane elementy.
źródło
U
zamiast sṚ
!IƬUZḢA
działałby również z danym pytaniem; Zastanawiam się, czy gdzieś jest bajt oprócz…ạƝƬZṪ€
też działa, ale znów jest szóstką.MathGolf ,
1411 bajtówWypróbuj online!
Wyjaśnienie
źródło
Python 2 , 56 bajtów
Funkcja rekurencyjna przyjmująca listę dodatnich liczb całkowitych, która zwraca listę liczb całkowitych nieujemnych.
Wypróbuj online!
źródło
Galaretka , 5 bajtów
Wypróbuj online!
Możemy założyć, że cała piramida jest dodatnia, więc możemy użyć operacji && zamiast operacji „właściwej”.
źródło
Pari / GP , 36 bajtów
Na podstawie komentarza @Lynn :
Pari / GP ma wbudowaną matrycę Pascal, a jej odwrotność jest dokładnie taką, jakiej potrzebujemy:
Wypróbuj online!
źródło
R ,
6967 bajtówWypróbuj online!
Zwraca wektor kolumny.
-2 bajty dzięki Kirill L.
Również na podstawie komentarza Lynn :
Jest dłuższy niż druga odpowiedź R, ale było to interesujące podejście do gry w golfa.
źródło
JavaScript (ES6), 127 bajtów
Oryginalny kod
Och, straciłem ... dużo ... do poprzedniej odpowiedzi ...
źródło
Wolfram Language (Mathematica) , 57 bajtów
Wypróbuj online!
źródło
05AB1E ,
1211 bajtówPort odpowiedzi galaretki @JonathanAllan , chociaż jestem galaretką na temat wygodniejszych wbudowań Jelly w tym przypadku. ;)
-1 bajt dzięki @Emigna .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
R.¥.Γ¥}¨
, zaczynając od listy, której delta jest wejściem.R ,
55635553 bajtówWypróbuj online!
-2 bajty dzięki Giuseppe.
źródło
Perl 6 , 37 bajtów
Wypróbuj online!
Wielokrotnie zmniejsza się przez odejmowanie elementarne, a następnie zwraca ostatnią liczbę każdej listy w odwrotnej kolejności.
Wyjaśnienie:
źródło
Python 2 , 78 bajtów
Wypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 164 bajty
Wypróbuj online!
źródło
Węgiel drzewny , 19 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Zapętlaj raz dla każdego terminu na oryginalnej liście.
Wydrukuj ostatni termin na liście, ale przesuń kursor na początek poprzedniego wiersza, aby wyprowadzić terminy w odwrotnej kolejności.
Oblicz delty, wstawiając na początku wartość fikcyjną, abyśmy mogli użyć operacji, która nie zmienia długości listy.
źródło
APL + WIN, 34 lub 28 bajtów
Wypróbuj online! Dzięki uprzejmości Dyalog Classic
Monity o wektor po prawej stronie.
lub wdrażając podejście @ Lynn:
Wypróbuj online! Dzięki uprzejmości Dyalog Classic
Monity o wektor po prawej stronie.
źródło
Attache , 29 bajtów
Wypróbuj online!
Wystarczy iterować
Delta
funkcję, aż będzie pusta. Znacznie krótszy niż bardzo pełnePeriodicSteps
rozwiązanie ...źródło
C, 76 bajtów
wejście :
(*a = pointer to array, n = last element's index of that array)
wyjście :
return int* = output
Wyjaśnienie
przechodzi od prawej do góry, ponieważ ostatnie elementy są takie same zarówno na wejściu, jak i na wyjściu, funkcja wewnątrz pętli po prostu znajduje kolejne wyższe liczby w trójkącie, stopniowo sięgając do góry, pozostawiając odpowiedź nienaruszoną na końcu.
bez golfa (z C ++)
źródło
Japt ,
119 bajtówSpróbuj
2 bajty zapisane dzięki Oliverowi.
1211 bajtówSpróbuj
1 bajt zapisany dzięki Oliverowi.
źródło
y(f)
jest wystarczająco złe, ale całkowite zapomnienie o nowej linii jest niewybaczalne! Wkrótce się zaktualizuje. Dzięki :)Julia 0.6 , 44 bajty
Wypróbuj online!
Ta sama zasada iteracyjna jak moja odpowiedź R.
Julia 0.6 , 55 bajtów
Wypróbuj online!
@ Algorytm Lynna (odwrotność macierzy Pascala pomnożonej przez dane wejściowe).
źródło