Podana lista liczb całkowitych daje różnicę w przód przy określonej kolejności / głębokości.
Aby uzyskać listę liczb całkowitych:
(10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Różnice w przód dla różnych zleceń / głębokości są następujące:
0 10, 18, -12, 4, 8, -3, -5, 67, 9, 14
1 8, -30, 16, 4, -11, -2, 72, -58, 5
2 -38, 46, -12, -15, 9, 74, -130, 63
3 84, -58, -3, 24, 65, -204, 193
4 -142, 55, 27, 41, -269, 397
5 197, -28, 14, -310, 666
6 -225, 42, -324, 976
7 267, -366, 1300
8 -633, 1666
9 2299
Więc z wejściem
4, (10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Zwróciłbyś listę
(-142, 55, 27, 41, -269, 397)
Wkład
Wejście może odbywać się za pośrednictwem STDIN lub parametrów funkcji.
Liczba całkowita określająca głębokość do zwrócenia. Będzie to 0 do długości listy minus 1
Lista liczb całkowitych, dla których należy obliczyć różnicę w przód
Wydajność
Dane wyjściowe mogą być przesyłane przez STDOUT lub zwracane przez funkcję.
Różnice w przód dla określonej głębokości jako lista liczb całkowitych
Zasady
Wbudowane i zewnętrzne funkcje, które robią to bezpośrednio, są niedozwolone.
Obowiązują standardowe ograniczenia luk .
Najkrótszy kod wygrywa
-
jest to jedyny czasownik w tej funkcji.Python,
6159 bajtówTutaj wykonujemy odejmowanie poprzez skompresowanie wszystkich oprócz ostatniej listy ze wszystkimi oprócz pierwszej listy.
zip(L[1:],L)
jest równoważnyzip(L[1:],L[:-1])
, ze względu nazip
charakter przyjęcia minimalnej długości dwóch list:Alternatywa, która jest równie długa (tylko Python 2):
Niestety, Python 2 nie odcina końca listy, więc nie mogę tego zrobić
map(int.__sub__,L,L[1:])
. Irytująco, Python 3 robi , alemap
nie zwraca listę więc ten kończy się bajt więcej (60 bajtów):Jeśli jednak zezwolimy, aby dane wejściowe były głębokością, po której następowała lista typu
f(3, 2, 5, 6, 7, 5, 10, 25)
(tj. Głębokość 3 i lista[2, 5, 6, 7, 5, 10, 25]
), to jest to 56 bajtów :Oto kolejna alternatywa, która naprawdę zirytowałaby każdego, kto zobaczył to w kodzie produkcyjnym (ten niszczy oryginalną listę):
źródło
L[1]-L.pop(0)
.Mathematica
23 5723 bajtySugestia Martina Büttnera, wykorzystująca możliwości odejmowania odejmowania.
na przykład
Rest@#-Most@#
wykonuje odejmowanie, które daje różnice.Nest wykonuje tę operację określoną liczbę razy, działając zawsze na najnowszej liście.
źródło
Haskell,
4034 bajtówPrzykład użycia:
4 # [10,18,-12,4,8,-3,-5,67,9,14]
które wyjścia[-142,55,27,41,-269,397]
.Jak to działa: wielokrotnie oblicz różnicę między elementami sąsiednimi i zapisz wyniki pośrednie na liście. Weź
n
element th z tej listy.Edycja: @Zgarb znalazł 6 bajtów do zapisania. Niesamowite!
źródło
(zipWith(-)=<<tail)
.JavaScript (ES6),
5249 bajtówProsta funkcja rekurencyjna, używana
map
do skanowania tablicy islice
upuszczania pierwszego elementu przy każdym wywołaniu rekurencyjnym.Edytuj 3 bajty zapisane, dzięki @DocMax, naprawdę inteligentna sugestia
Przetestuj w konsoli Firefox / FireBug
źródło
p
i zapisać 3 znaki:H=(n,l)=>n?H(n-1,l.slice(1).map((a,k)=>a-l[k])):l
.CJam, 15 bajtów
Pobiera dane wejściowe jako tablicę w stylu CJam, a następnie głębokość:
i wypisuje wynik jako tablicę w stylu CJam.
Sprawdź to tutaj.
Wyjaśnienie
źródło
Jawa,
122119 bajtówPrzykład użycia: http://ideone.com/ALgYez
3 bajty dzięki Geobits: v)>
źródło
int
i po prostu przypisaći=e
go innym.> <>
5350 bajtówSposób użycia: Najpierw wypełnij stos (-v w interpreterie Pythona) z głębią, a następnie liczbami całkowitymi.
Na przykład:
Zwroty
Dzięki Sp3000 za pomoc.
źródło
?!
i przenosić niektóre komponenty zamiast0=?
?Preludium ,
95927978 bajtówFormat wejściowy to
gdzie
N
jest głębokość różnic iM
liczba liczb całkowitych na wejściu. DodawanieM
było konieczne, ponieważ w Preludium nie ma możliwości odróżnienia znaku0
od końca danych wejściowych. Dane wyjściowe mają również postać liczb całkowitych oddzielonych znakiem nowej linii. Musiałem założyć nieco dostosowaną specyfikację Preludium, którą opracowaliśmy dla tego wyzwania , ponieważ standardowe Preludium odczytuje liczby całkowite jako wartości bajtów, co uniemożliwia wprowadzenie liczb ujemnych. Zasadniczo jest to interpreter języka Python z dodatkowąNUMERIC_INPUT
flagą.Dla odniesienia jest tylko
483837 znaków spacji - reszta była potrzebna tylko do poprawnego wyrównania kodu.Wyjaśnienie
W Preludium każda linia jest osobnym „głosem”, który działa na swoim własnym stosie. Program jest wykonywany kolumna po kolumnie, gdzie oddzielne głosy są uruchamiane „równolegle”. Wszystkie polecenia są pojedynczymi znakami, a nawiasy są pętlami typu Brainfuck (które są wprowadzane i powtarzane, gdy górna część stosu jest różna od zera). Zauważ, że pionowe położenie nawiasu zamykającego nie ma znaczenia - umieszczenie go innym głosem nadal liczy się jako dopasowanie do ostatniego nawiasu otwierającego, a stos sprawdzany pod kątem stanu pętli jest zawsze głosem, w którym się
(
pojawił. Teraz przejdź do tego programu ...Program można zasadniczo podzielić na dwie części. Dwie dolne linie są używane tylko dla większości pętli w programie (z wyjątkiem pętli głównej
N
), przekazując1
s tam iz powrotem. Dwie górne linie zawierają główną pętlę i rzeczywiste różnicowanie. Poniższa adnotacja zawiera transponowany kod, dzięki czemu mogę dodawać adnotacje do poszczególnych kolumn:źródło
Python,
70686759 bajtówWersja bez gry w golfa, zanim zaczęłam rekursywnie:
źródło
R,
48 39 4644 bajtówRekurencja!
x
jest liczbą iteracji do wykonania iy
jest wektorem liczb całkowitych.if(x)
jest prawdą, dopókix>0
.Recall
wywołuje bieżącą funkcję, ale z nowymi argumentami.Diff
wyprowadza różnice między kolejnymi elementami listy / wektora.Poprzednie wersje:
źródło
Recall()
.Python,
928786 bajtówTo jest mój pierwszy golf w Python. Wszelkie sugestie będą mile widziane :)
56 bajtów dzięki Sp3000: Dźródło
append
wd+=f-e,
. Ogólnie rzecz biorąc, do gry w golfa kodowego nigdy nie będziesz musiał używaćL.append
z tego powodu.c,
6855 bajtówMoże to wymagać nieco wolności ze specyfikacją wejściową. Tablica int jest konstruowana tak, że element 0 jest głębokością, a elementy 1 do (n + 1) są elementami listy wejściowej 0 do n. Następnie adres elementu 1 jest przekazywany do funkcji.
Tablica musi być zakończona zerem. Tablica jest edytowana na miejscu.
Na przykład:
http://ideone.com/m5PDgF
źródło
int *l
?PowerShell
115111 bajtówWykonaj jako taki:
Wydajność:
Przeniesienie nawiasów klamrowych w inne miejsce pozwala wyświetlić każdy krok do odpowiedzi.
źródło
STATA, 126 bajtów
Oczekuje wprowadzenia jako liczba całkowita reprezentująca głębokość, a po nim lista liczb całkowitych oddzielonych spacjami, obie podane za pomocą standardowego monitu. Wyjściem jest oddzielona nowa linia lista liczb całkowitych.
Najpierw konwertuje listę liczb całkowitych (które wyświetla jako 1 długi ciąg) na listę zmiennych lokalnych, których nazwy to 1,2,3, ... Następnie oblicza różnice naprzód, ustawiając wartość y-tej zmiennej lokalnej na wartość y + 1-sza zmienna lokalna minus wartość y-tej zmiennej lokalnej (tj. 18-10 = 8), która zastępuje istniejące wartości dopiero po użyciu. Robi to $ a (wartość zmiennej globalnej a) razy. Następnie wyświetla wartość każdej zmiennej lokalnej, po jednym na raz.
źródło
T-SQL, Too Many :)
Kiedy po raz pierwszy zobaczyłem ten problem, zastanawiałem się, czy istnieje sposób, aby to zrobić w zapytaniu. Choć w większości języków jest banalny, nie dotyczy to w dużej mierze zapytań SQL.
Dane wejściowe przechodzą w zmienne @ (dla głębokości) i @L dla listy liczb całkowitych. @L jest zdefiniowanym przez użytkownika typem tabeli
Konfiguracja wejścia
Zapytanie z kilkoma komentarzami
Wynik
źródło
Japt
-h
,17 lat5 bajtów12 bajtów zapisanych dzięki @Shaggy
Wypróbuj online!
źródło
äÏ-X
zeän
w obu tych zaoszczędzić 2 kolejne bajty.SmileBASIC, 76 bajtów
Wreszcie powód do użycia
ARYOP
!źródło
Clojure, 47 bajtów
Prosta rekurencja funkcji anonimowej. Zapisujesz 1 bajt, jeśli kolejność argumentów jest zamieniana, ponieważ teraz
%2
występuje częściej niż%
.źródło
Galaretka , 2 bajty
Wypróbuj online!
Wyjaśnienie
Bardzo prosta odpowiedź: P
źródło
Japt , 7 bajtów
Kilka alternatyw, które udostępniłem Luisowi dla jego rozwiązania .
Spróbuj
10 bajtów
Spróbuj
źródło