Uwaga: Jest to numer 3 w serii wyzwań dotyczących manipulacji tablicami . Aby zobaczyć poprzednie wyzwanie, kliknij tutaj .
Średnia ruchoma listy
Średnia krocząca z listy jest obliczenie wyniku nowego, wygładzonej z listy, stworzonej przez uśrednienie małych listy zagnieżdżone nakładających oryginału.
Podczas tworzenia średniej ruchomej najpierw generujemy listę nakładających się podlist na podstawie pewnego „rozmiaru okna”, przesuwając to okno za każdym razem w prawo.
Na przykład, biorąc pod uwagę listę [8, 4, 6, 2, 2, 4]
i rozmiar okna 3
, listy podrzędne to:
[8, 4, 6, 2, 2, 4] Sublists:
( ) <- [8, 4, 6]
( ) <- [4, 6, 2]
( ) <- [6, 2, 2]
( ) <- [2, 2, 4]
Następnie obliczamy średnią średnią każdej podlisty, aby uzyskać wynik: [6.0, 4.0, 3.3, 2.7]
(każda wartość zaokrąglona do jednego miejsca po przecinku).
Wyzwanie
Twoim zadaniem jest napisanie programu lub funkcji, która, biorąc pod uwagę listę L i liczbę całkowitą 1 ≤ n ≤ długość (L) , oblicza średnią ruchomą dla L, używając rozmiaru okna n .
Zasady:
- Twój program może używać podziału na liczby całkowite lub zmiennoprzecinkowe. W przypadku podziału zmiennoprzecinkowego dopuszczalne są małe niedokładności wynikające z ograniczeń typu danych, o ile wartość jest prawidłowa.
- Możesz przesłać pełny program lub funkcję (ale nie fragment kodu).
- Możesz założyć, że lista będzie zawierać tylko dodatnie liczby całkowite .
- Standardowe luki są zabronione.
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź (w bajtach)!
Przypadki testowe
Zauważ, że dla ułatwienia odczytu wszystkie wartości są zaokrąglane do jednego miejsca po przecinku.
n=5, [1, 2, 3, 4, 5, 6, 7, 8] -> [3, 4, 5, 6]
n=3, [100, 502, 350, 223, 195] -> [317.3, 358.3, 256]
n=1, [10, 10, 10] -> [10, 10, 10]
n=3, [10, 20, 30] -> [20]
n=2, [90, 40, 45, 100, 101] -> [65, 42.5, 72.5, 100.5]
Odpowiedzi:
Galaretka , 3 bajty
Wypróbuj online!
Całkiem proste dzięki
ṡ
Jak to działa
źródło
Wolfram Language (Mathematica) , 13 bajtów
Mathematica ma wbudowane wszystko
Wypróbuj online!
Pobiera listę, a następnie promień ...
źródło
MovingAverage
ಠ _____ ಠ Nie chcę w to uwierzyćMovingAverage
zwraca zestaw ułamków. Teraz, gdy zostało to dozwolone przez PO,MovingAverage
powinno wystarczyć.Haskell , 47 bajtów
Wypróbuj online!
Zaoszczędzono dwa bajty dzięki xnor!
źródło
tail a
można wyciągnąć na straży.Dyalog APL, 4 bajty
1 bajt zapisany dzięki @Graham
2 bajty zapisane dzięki @ jimmy23013
Czy wspominałem, że APL nie jest językiem golfowym?
z
n
po prawej stronie lubz
L
po prawej.Wypróbuj online!
W jaki sposób?
÷
- podzielL
przezn
⊢+/
- zmniejszyć+
na oknachn
źródło
Python , 48 bajtów
Wypróbuj online!
Funkcja rekurencyjna. Krótszy niż program (50 bajtów)
Wypróbuj online!
Oszczędza to 2 bajty, kończąc z błędem
while
warunek.źródło
Zaciągnij , 3 bajty
Wypróbuj online!
źródło
Perl 6 , 33 bajtów
Sprawdź to
Rozszerzony:
źródło
C,
868483 bajtówWypróbuj online!
Rozwinięty:
źródło
J,
75 bajtówWypróbuj online!
Przyjmuje
n
za prawy argument, a listę za lewą. Podziękowania dla rozwiązania Uriela za pomysł wykonania tylko podsumowania w infixie.Wyjaśnienie
Poprzednie rozwiązanie (7 bajtów)
źródło
Ohm v2 , 3 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
Pyth , 5 bajtów
Wypróbuj tutaj!
Jak to działa
źródło
Oktawa ,
3331 bajtówWypróbuj online!
Wyjaśnienie
Convolution (
conv
) jest zasadniczo ruchomą sumą ważoną. Jeśli wagi zostaną wybrane jako[1/n, ..., 1/n]
(uzyskane jako~~(1:n)/n
), wynikiem będzie średnia ruchoma, z której zachowana zostanie tylko'valid'
część.źródło
R , 72 bajty
Wypróbuj online!
Oblicza
mean
wszystkien
okna wielkości ; gdy okno mija krawędźl
, wyniki sąNA
tak, że je odfiltrowujemy.Pakiet R + zoo, 13 bajtów
The
zoo
Pakiet (infrastruktura S3 dla regularnych i nieregularnych szeregów czasowych) posiada wiele funkcji przydatnych. Możesz spróbować tutaj (skrzypce R) .źródło
Japt v2.0a0, 7 bajtów
Spróbuj
Wyjaśnienie
Domniemane wprowadzanie tablicy
U
i liczby całkowitejV
.Uzyskaj podsekcje
U
o długościV
Mapuj podsekcje.
Podziel każdy element przez
V
.Zsumuj wszystkie elementy.
źródło
Python 3 , 61 bajtów
Wypróbuj online!
źródło
Python 3 , 55 bajtów
Wypróbuj online!
źródło
05AB1E , 5 bajtów
Wyjaśnienie:
Wypróbuj online!
źródło
Mathematica, 21 bajtów
Wypróbuj online!
-3 bajty JungHwan Min
źródło
N[Mean/@##~Partition~1]&
Proton , 46 bajtów
Wypróbuj online!
Zauważ, że pobiera to dane wejściowe poprzez składnię funkcji curry i zwraca listę ułamków.
źródło
CJam,
1412 bajtów-2 bajty dzięki @aditsu
źródło
Jq 1,5 , 61 bajtów
Rozszerzony
Wypróbuj online!
źródło
JavaScript (ES6), 53 bajty
źródło
PHP, 94 bajty
Wypróbuj online!
źródło
Clojure , 48 bajtów
Wypróbuj online!
źródło
Ułożone , 22 bajty
Wypróbuj online!
Wyjaśnienie
infixes
generuje wszystkie okna o podanej długości. Następnie odwzorowujemy naszą średnią funkcję na każdy przyrostek.źródło
Common Lisp , 77 bajtów
Wypróbuj online!
źródło
K (oK) ,
1311 bajtówRozwiązanie:
Wypróbuj online!
Przykłady:
Wyjaśnienie:
oK
ma wbudowane okno przesuwne, a następnie zsumuj wynikowe tablice i podziel przez rozmiar przesuwanego okna, aby uzyskać średnią:źródło
x%[commute]
w lewo i upuścić parenyDataWeave , 50 bajtów
źródło
Funky ,
6766 bajtówZapisano bajt ze składnią curry.
Wypróbuj online!
źródło
Java 8, 111 bajtów
Wyjaśnienie:
Wypróbuj tutaj.
źródło