Powiedzmy, że ta tablica pokazuje, ile pompek wykonałem każdego dnia w ciągu ostatnich 28 dni:
[
20,20,20,30,30,30,30,
35,35,40,40,40,45,45,
50,50,50,50,50,50,50,
60,70,80,90,100,110,120
]
Jak widać, w ubiegłym tygodniu wzrósł gwałtowny trend wzrostowy i właśnie tę część danych najbardziej mnie interesuje. Im dalej w przeszłości, tym mniej chcę, aby te dane pojawiały się w mojej „średniej” „liczba pompek.
W tym celu chcę wypracować „średnią”, w której każdy tydzień jest wart więcej niż w poprzednim tygodniu.
Informacje podstawowe, nie będące częścią tego problemu.
Normalna średnia:
Suma wszystkich wartości / liczba wartości
Powyżej:
1440/28 = 51,42857142857143
Średnia ważona:
Podziel tablicę na 4 grupy po 7 i uruchom nową tablicę.
- Dodaj pierwszą grupę do tablicy.
- Dodaj drugą grupę do tablicy dwa razy.
- Dodaj trzecią grupę do tablicy trzy razy.
- Dodaj czwartą grupę do tablicy cztery razy.
Zsumuj wszystkie nowe tablice i podziel przez długość nowej tablicy.
Powyżej:
Konwertuj tablicę na to:
[
20,20,20,30,30,30,30, # first week once
35,35,40,40,40,45,45,
35,35,40,40,40,45,45, # second week twice
50,50,50,50,50,50,50,
50,50,50,50,50,50,50,
50,50,50,50,50,50,50, # third week thrice
60,70,80,90,100,110,120,
60,70,80,90,100,110,120,
60,70,80,90,100,110,120,
60,70,80,90,100,110,120 # Fourth week four times
]
Następnie uruchom normalną średnią dla tej tablicy.
4310/70 = 61,57142857142857
Należy pamiętać, że jest wyższa niż normalna średnia wartość z powodu trendu wzrostowego w ostatnim tygodniu.
Zasady:
- Dane wejściowe to płaska tablica 28 nieujemnych liczb całkowitych.
- Dowolny język, w którym chcesz pisać.
- Podaj liczbę.
- Zawsze lubię widzieć linki do TIO .
- Spróbuj rozwiązać problem przy użyciu jak najmniejszej liczby bajtów.
- Wynik powinien być dziesiętny z dokładnością do co najmniej 4 miejsc po przecinku (skrócone lub zaokrąglone w górę od wartości przypadku testowego jest w porządku) lub dokładny ułamek.
Przypadki testowe:
Przypadek 1: Trend wzrostowy
[
20,20,20,30,30,30,30,
35,35,40,40,40,45,45,
50,50,50,50,50,50,50,
60,70,80,90,100,110,120
]
Normalna średnia: 51,42857142857143 Średnia ważona: 61,57142857142857
Przypadek 2: Pozostawienie ciszy za sobą
(Miałem zły tydzień, ale to było jakiś czas temu)
[
50,50,50,50,50,50,50,
10,10,10,10,10,10,10,
50,50,50,50,50,50,50,
50,50,50,50,50,50,50
]
Normalna średnia: 40 Średnia ważona: 42
Przypadek 3: poddanie się
Miałem zły tydzień, to szybko obniża moją średnią.
[
50,50,50,50,50,50,50,
50,50,50,50,50,50,50,
50,50,50,50,50,50,50,
10,10,10,10,10,10,10
]
Normalna średnia: 40 Średnia ważona: 34
Przypadek 4: Uśrednianie
Okej, więc bawię się tutaj, myślałem, że może to być ta sama wartość dla normalnych i ważonych średnich, ale oczywiście tak nie było.
[
60,60,60,60,60,60,60,
30,30,30,30,30,30,30,
20,20,20,20,20,20,20,
15,15,15,15,15,15,15
]
Normalna średnia: 31,25 Średnia ważona: 24,0
Problem bonusowy:
Która kombinacja 28 wartości miałaby tę samą średnią normalną i średnią ważoną?
Miłej gry w golfa!
źródło
new_avg = α*weekly_sum + (1-α)*old_avg
dla niektórychα∈(0,1)
0
Codziennie robię pompki, więc moja średnia ważona jest taka sama jak moja normalna średnia.Odpowiedzi:
Łuska , 6 bajtów
Wypróbuj online!
Wykorzystuje sztuczkę, której Dennis użył, by obezwładnić moją galaretkę. Zamiast powtarzać każdą porcję N razy, pobiera przyrostki z listy porcji, które po spłaszczeniu dadzą ten sam wynik, z wyjątkiem kolejności.
źródło
Python 3 , 38 bajtów
Wypróbuj online!
źródło
05AB1E ,
87 bajtówZaoszczędzono 1 bajt dzięki Mr. Xcoder
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 7 bajtów
Wypróbuj online!
Jak to działa
źródło
x"J$
jest równoważneṫJ
w tym kontekście. Ciekawy!R + pryr,
3228 bajtówi ten sam średni wynik tydzień w tygodniu doprowadziłby do równości średnich.
Wypróbuj online!
Zaoszczędź 4 bajty dzięki produktowi kropkowemu dzięki Giuseppe .
Czysty R użyłby jeszcze dwóch bajtów
function
źródło
sum
function(s)weighted.mean(s,rep(1:4,e=7))
weighted.mean
. Uwielbiam, gdyR
outgolfsPython
.MATL , 10 bajtów
Wypróbuj online!
Od wieków nie opublikowałem odpowiedzi MATL! Pomyślałem, że mogę wziąć udział w LOTM w maju 2018 roku !
Wyjaśnienie:
źródło
K:7Y"*s70/
10 bajtów.Galaretka , 9 bajtów
Wypróbuj online!
Jak to działa
źródło
Haskell , 35 bajtów
Premia: jeśli
a,b,c,d
są to kwoty tygodniowe, normalna średnia jest taka sama jak średnia ważona iff:Jednym z rozwiązań jest sytuacja, gdy pierwszy i ostatni tydzień mają takie same kwoty, podobnie drugi i trzeci tydzień mają tę samą sumę, ale istnieje nieskończenie wiele rozwiązań, jeśli twoje bicepsy są w stanie to zrobić. Przykład: [15,10,10,10,10,10,10,5,20,20,20,25,25,20,20,30,20,20,20,20,20,20,10,20,20 , 0,10,10,10]
Wypróbuj online!
źródło
JavaScript (Node.js) , 49 bajtów
Wypróbuj online!
Rozwiązanie inne niż ogólne
JavaScript (Node.js) ,
3936 bajtówWypróbuj online!
źródło
a=>a.reduce((s,x,i)=>(I+=d=-~(i/7),s+x*d),I=0)/I
. I szybka wskazówka: użyj,<hr>
aby utworzyć poziomą linię w przecenie---
(potrzebuje własnego akapitu)?Stax , 6 bajtów
Uruchom i debuguj na staxlang.xyz!
Rozpakowane (7 bajtów) i objaśnienie:
źródło
Stax ,
108 bajtówUruchom i debuguj
Objaśnienie (rozpakowane):
źródło
$
do spłaszczenia, jeśli wszystkie elementy są liczbami całkowitymi - sprawdzanie teraz za pomocą OP.Oktawa , 33 bajty
Wypróbuj online!
źródło
Węgiel drzewny , 14 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
K4 / K (oK) ,
191614 bajtówRozwiązanie:
Wypróbuj online!
Przykład:
Wyjaśnienie:
Ocena jest przeprowadzana od prawej do lewej. Podzielić 7 1s, 7 2s, 7 3s i 7 4s przez 70 podzielone przez dane wejściowe; następnie podsumuj.
źródło
Excel: 33 bajty
(3 bajty zapisane z odpowiedzi @ wernisch poprzez uruchomienie danych w 2 liniach z A1: N1 i A2: N2)
Przepraszamy za niedostarczenie tego jako komentarza. Nie mam wystarczającej reputacji, aby to zrobić.
źródło
Japt ,
1110 bajtówSpróbuj
Wyjaśnienie
źródło
Trójkątność , 49 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Perl 5
-pa
, 28 bajtówWypróbuj online!
Dane wejściowe są oddzielone spacjami, a nie przecinkami.
źródło
$.
dyspozycji jako idealny mnożnik. Nie ma potrzeby$i
APL + WIN, 13 bajtów
Monity o tablicę jako wektor liczb całkowitych:
Wyjaśnienie:
źródło
Java 8, 57 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
J , 16 bajtów
Wyjaśnienie:
Wypróbuj online!
źródło
Clojure,
4846 bajtówOstatecznie było to krótsze niż połączenie mapcat + subvec.
źródło
TI-Basic, 25 bajtów
Alternatywne rozwiązanie, 39 bajtów
źródło
Rubinowy , 65 bajtów
Wypróbuj online!
źródło
size
właściwości. Wypróbuj online!Excel,
3633 bajtów-3 bajty dzięki @tsh.
Wprowadź w pierwszym rzędzie (
A1
doAB1
).źródło
A1:AB1
->1:1
?Julia 0.6 , 27 bajtów
Wypróbuj online!
repeat
Połączenie tworzy matrycę kolumny 28 wartości zawiera siedem 1, a następnie siedem 2'S, itp Następnie transpozycji go'
, a następnie wykonać mnożenie macierzy z wejściem (mutiplication jest niejawne tutaj). Ponieważ jest to zwielokrotnienie macierzy macierzy 1x28 z macierzą 28x1, otrzymujemy jedną wartość, która jest potrzebną sumą ważoną. Podziel to,70
aby uzyskać średnią ważoną.źródło