Biorąc pod uwagę liczbę całkowitą n i listę dodatnich liczb całkowitych m 1 , m 2 , ..., wypisz listę liczb całkowitych m 1 ' , m 2 ' , ... gdzie m x ' jest zdefiniowane jako średnia m od xn do m x + n .
Obliczając te średnie, zignoruj wskaźniki, które są poza zakresem (i odpowiednio dostosuj dzielącą sumę). n zawsze będzie wynosić ≥ 1, ale nigdy nie będzie w połowie długości m (zaokrąglonej w dół) lub większej. Oznacza to, że minimalna długość m wynosi 4. Elementy wm będą dodatnimi liczbami całkowitymi, ale dane wyjściowe muszą być dokładne z dokładnością do co najmniej 3 miejsc po przecinku.
Elementami wejściowymi / wyjściowymi, które są listami, mogą być łańcuchy oddzielone spacjami / przecinkami lub tablice / listy / itp. Jeśli dane wejściowe są funkcją, możesz dodatkowo wziąć pierwszy argument n i dodatkowe argumenty jako m x (dotyczy to również argumentów wiersza poleceń).
Oto wizualna reprezentacja n=1
:
1 4 5 7 10
__/ | | |
L avg(1,4) = 2.5
| | |
\___/ | |
L avg(1,4,5) = 3.333
| |
\___/ |
L avg(4,5,7) = 5.333
|
\___/
L avg(5,7,10) = 7.333
\___
L avg(7,10) = 8.5
Final output: 2.5 3.333 5.333 7.333 8.5
Ponieważ jest to code-golf , wygrywa najkrótszy kod w bajtach.
Przypadki testowe ( zostały wykonane ręcznie; powiadamiaj mnie o wszelkich błędach ):
In Out
----------------------------------------------------------------------
n=1, m=12 6 3 9 9 7 6 6
n=1, m=1 4 5 7 10 2.5 3.333 5.333 7.333 8.5
n=1, m=1 3 3 7 4 2 4 2 2 2.333 4.333 4.666 4.333 3.333 2.666 3
n=2, m=1 3 5 9 10 14 15 16 23 3 4.5 5.6 8.2 10.6 12.8 15.6 17 18
n=3, m=1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
n=3, m=1 2 3 4 5 6 7 8 2.5 3 3.5 4 5 5.5 6 6.5
źródło
avg(0,1,2)
To nie to samo coavg(1,2)
. W przypadku „przypadków brzegowych” (ha) nie powinno się uśredniać tylu elementów listy wejściowej.m_i
są pozytywne.Odpowiedzi:
Pyth, 20 bajtów
Zestaw testowy
Całkiem proste, wystarczy wyciąć odpowiednią sekcję z listy, a następnie uśrednić.
źródło
E
poza mapą, ponieważ będzie ona próbowała odczytać nową wartość, jeśli jest w środku. To sprawia, że zajmuje tyle samo bajtów.MATL ,
30282624 bajtówTestowane na Matlabie i Octave. Korzysta z bieżącej wersji (9.1.0) języka / kompilatora.
Dane wejściowe to: najpierw liczba kontrolująca długość okna, a następnie tablica z formatem
[1 4 5 7 10]
.EDYCJA (20 maja 2016 r.): Wypróbuj online! Kod w łączu został
X+
zastąpiony przez,Y+
aby był zgodny z wersją 18.0.0 języka.Przykład
Wyjaśnienie
Równoważny kod Matlaba to
Kod MATL korzysta z ostatnio dodanych funkcji ukrytego wprowadzania danych i automatycznego schowka wprowadzania danych funkcji:
źródło
CJam,
3130 bajtówFormat wejściowy to
n [m1 m2 ... mx]
.Uruchom wszystkie przypadki testowe. (Automatycznie konwertuje zestaw testowy na wymagany format wejściowy.)
Działa to przez wstawianie
n
spacji poprzedzających i dopisujących , a następnie pobieranie wszystkich podciągów długości2n+1
i usuwanie spacji ponownie przed obliczeniem ich średnich.źródło
Julia, 57 bajtów
Jest to funkcja, która akceptuje dwie liczby całkowite i zwraca tablicę liczb zmiennoprzecinkowych.
Podejście tutaj jest bardzo proste. Konstruujemy nową tablicę, biorąc pod uwagę sekcje tablicy wejściowej, obcinając przód i tył.
źródło
Haskell,
9795 bajtówPrzykład użycia:
2 # [1,3,5,9,10,14,15,16,23]
->[3.0,4.5,5.6,8.2,10.6,12.8,15.6,17.0,18.0]
.Jak to działa:
źródło
Pyth, 22 bajty
Wyjaśnienie:
Wypróbuj tutaj .
źródło
JavaScript (ES6), 104
Całkowity rozmiar bieżącej / bieżącej próbki. W JavaScript, odczyt wartości poza granicami tablicy daje niezdefiniowane, które można przekonwertować na 0 za pomocą ~~
Nie golfił
Test
źródło
JavaScript (ES6), 82 bajty
kod:
test:
źródło