Uzyskiwanie średniej z listy (np. [2,6,7]
)
- Uzyskaj długość listy:
[2,6,7] -> 3
- Podsumowując numery na liście:
2 + 6 + 7 = 15
. - Podzielenie sumy przez ich ilość:
15 / 3 = 5
.
Powinieneś porównać średnie z dwóch list dodatnich liczb całkowitych N i M , zwracając wartość, jeśli N ma wyższą średnią, inną wartość, jeśli M ma wyższą średnią, a drugą w przypadku remisu.
Zasady we / wy
Wszystkie standardowe metody wejścia i wyjścia są dozwolone.
Wejście
Możesz wziąć dane wejściowe jako dwie osobne listy, listę zagnieżdżoną lub cokolwiek innego, co uważasz za odpowiednie dla zadania. Proszę podać format.
Wynik
Podane wartości muszą być odrębne i muszą składać się z co najmniej jednego znaku spacji. Ponadto muszą być spójne między przebiegami (pojedyncza wartość dla N , pojedyncza wartość dla M , pojedyncza wartość dla Tie ). Podaj je w swojej odpowiedzi. Wartości mogą być niepustymi ciągami, wartościami Bool, liczbami całkowitymi lub cokolwiek, co uważasz za odpowiednie.
Okular
Listy niekoniecznie będą miały taką samą długość.
Masz gwarancję, że listy nie są puste.
Przypadki testowe
Wybrałem wartości N wins
, M wins
oraz Tie
, które są bardzo oczywiste.
N, M -> Dane wyjściowe (średnie) [7], [6] -> N wygrywa (N ma 7, M ma 6) [4,5], [4,4] -> N wygrywa (N ma 4,5, M ma 4) [2,3,4], [4,5,6] -> M wygrywa (N ma 3, M ma 5) [4,1,3], [7,3,2,1,1,2] -> Remis (oba mają 2,666 ...) [100.390,1], [89.82,89] -> N wygrywa (N ma 163,666 ..., M ma 86,666 ...) [92, 892], [892,92] -> Remis (listy są w zasadzie identyczne) [10,182], [12,78,203,91] -> Krawat (oba mają 96)
Obowiązują domyślne luki . Wyjaśnienia są zachęcane! To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
źródło
Odpowiedzi:
Właściwie 5 bajtów
Wypróbuj online!
1
dlaN > M
,0
dlaN = M
,-1
dlaN < M
.Wyjaśnienie:
źródło
Mathematica, 15 bajtów
Wypróbuj online!
Function
która oczekuje listy dwóch list.Mean/@#
przyjmuje średnią arytmetyczną każdej listy z danych wejściowych, a następnie te środki są przekazywane doOrder
, która zwraca,-1
jeśli pierwsza lista wygra,0
jeśli istnieje remis i1
jeśli druga lista wygra.źródło
JavaScript (ES6),
5250 bajtów(Zaoszczędź 2 bajty dzięki @Shaggy.)
Oto dwa 50-bajtowe rozwiązania:
Zwraca Infinity dla N, -Infinity dla M i NaN dla remisu.
Pierwsze rozwiązanie może wymagać nieco wyjaśnienia z powodu rekurencji:
Przy pierwszym wywołaniu funkcji
a
inicjowana jest jako średniaN
tablicy:M
ma wartość w tym momencie, więc pierwsza część wyrażenia warunkowego nazywa się:M ? (a-f(M))/0 : a ----------
Funkcja jest wywoływana w tej wypowiedzi, tym razem zastępując
M
naN
.Przy drugim wywołaniu funkcji
a
inicjalizowana jest jako średniaN
––M
z poprzedniego wywołania.Ponieważ podczas wywołania funkcji nie ma drugiego parametru, wyzwalana jest druga część wyrażenia warunkowego, która zwraca średnią:
M ? (a-f(M))/0 : a --
Teraz możemy lepiej zrozumieć wyrażenie:
Jego:
Różnica między średnimi będzie liczbą dodatnią, liczbą ujemną lub 0.
Podzielenie różnicy przez 0 prowadzi do nieskończoności , -Infinity lub NaN - dostarczanie trzy różne wartości, w razie potrzeby.
Przypadki testowe:
Pokaż fragment kodu
źródło
A
do parametrów funkcji?Mathematica, 21 bajtów
1 za
#
wygrane, -1 za#2
wygrane, 0 za remis.źródło
Sign[#-#2&@@Mean/@#]&
MATL , 8 bajtów
Wymień wiele modyfikatorów (
Y
iZ
). Nie mogę znaleźć sposobu, aby go skrócić.sum / number_of_elements
to trzy bajty. Może to być lepszy sposób-ZS
, ale nie mogę go znaleźć.Wypróbuj online!
Zwraca,
1
jeśli pierwsze wejście jest większe,0
jeśli łączą się, a-1
jeśli drugie wejście jest większe.źródło
05AB1E , 9 bajtów
1 jeśli
M
wygrywa, -1 jeśliN
wygrywa i 0 za remis.Wypróbuj online!
Wyjaśnienie
źródło
Julia , 27 bajtów
Wypróbuj online!
Zwraca,
1
jeśli pierwsza średnia jest większa,-1
jeśli druga jest i0
jeśli wiążą się.źródło
Python 2 , 43 bajty
Wypróbuj online!
źródło
Oktawa , 27 bajtów
Wypróbuj online!
Pobiera dwa wektory
x.y
jako dane wejściowe, bierzemean
oba wektory i odejmuje jeden od drugiego. Uzyskaj znak tego, aby dostać1
,0
a-1
dla trzech różnych alternatyw.źródło
Python 2, 49 bajtów
Wypróbuj online
źródło
APL (Dyalog) , 11 bajtów
Monituje o listę dwóch list. Drukuje,
1
jeśli lewa ma wyższą średnią, 0, jeśli mają taką samą średnią, a¯1
jeśli prawa ma wyższą średnią.Wypróbuj online!
⎕
skłonić(
…)¨
Zastosuj następującą funkcję ukrytą dla każdego:+/
Suma÷
podzielony przez≢
podsumowanie-/
wstaw (i oceń) minus między nimi×
signumźródło
JavaScript,
81665856 bajtówzaoszczędził 15 bajtów dzięki Łukaszowi
zapisane 2 bajty dzięki Justin Mariner
Krawat to 0, M to 1, a N to -1. Wywoływany przy użyciu składni curry, np.
f([7])([6])
źródło
eval(a.join`+`)
.a=>(b=a.map(c=>eval(c.join`+`)/c.length))[0]-b[1]?b[0]>b[1]:0
dla 61 bajtów. Pobiera dane wejściowe jako tablicę tablic i dane wyjściowe0
dla remisu,true
dla M ifalse
N.a
) po raz pierwszy jest używany:n=>m=>Math.sign((a=b=>eval(b.join`+`)/b.length)(m)-a(n))
.PHP , 68 bajtów
Wypróbuj online!
PHP , 69 bajtów
Wypróbuj online!
operator statku kosmicznego -1 mniej niż, 0 remis, 1 większy niż
źródło
Haskell,
6543 bajtówZaoszczędź 22 bajty dzięki nim!
Musi być o wiele lepszy sposób ... Ale przerobiły mnie konwersje typu.Stosowanie
Zwraca,
GT
jeśli pierwszy argument wygrywa,LT
jeśli drugi argument wygrywa iEQ
jeśli wiążą się.Wypróbuj online!
źródło
sum$x
pomocąf.
. Też:length x
można zastąpićsum[1|_<-x]
, więc można pozbyć sięf
całkowicie:a x=sum x/sum[1|_<-x]
.#
:...(a x)$a y
.(.a).compare.a
. Zastosowanie:( (.a).compare.a ) [7] [6]
.[1|_<-x]
jest taki sam jak(1<$x)
.J, 10 bajtów
Jedna lista podana po lewej, jedna po prawej. Zwróci _1 jeśli lewa średnia jest mniejsza, 1 jeśli jest większa, a 0 jeśli są równe
(+/%#)
jest standardowym widelcem J do obliczania średniej z listy&
zapewnia odmianę dyadycznego widelca. stosuje prawą stronę (w tym przypadku średni czasownik) do obu argumentów, a następnie przekazuje je wraz z czasownikiem po lewej stronie, która w tym przypadku jest ...*@-
odejmij, a po nim „znak”: więc średnia avg jest odejmowana od lewej, a my otrzymujemy znak wyniku - _1, 1 lub 0źródło
Pyth,
10876 bajtówDzięki @isaacg za uratowanie bajtu
Wejście jest traktowana jako zagnieżdżonej listy
[N, M]
. Dane wyjściowe,-1
jeśliN < M
,1
jeśliN > M
i0
jeśli są one równe.Wypróbuj online
źródło
h.+
z-F
TI-Basic,
2521131210 bajtów-2 bajty dzięki lirtosiast
źródło
Ans
zamiastC
:mean(L₁)>mean(L₂:Ans+3(mean(L₁)=mean(L₂
21 bajtów.(
i)
.Galaretka , 7 bajtów
Monadyczny link akceptujący listę dwóch list,
N,M
który zwraca:[-1]
dlaN
;[1]
dlaM
; i[0]
na remis.Jako pełny program drukuje wynik (listy pojedynczy element wydrukować tylko ich treść, tak
-1
,1
albo0
).Wypróbuj online!
W jaki sposób?
źródło
S÷L
, a następnie przekształcasz go w pojedynczy link, za pomocąS÷¥L$
którego można go skrócić,S÷Lµ
ponieważ jest na na samym początku programu, a potem umieściłeś€
tam prawo do mapowania, a potem, ponieważ nie ma wbudowanego narzędzia do porównywania, którego byś użył,_/Ṡ
ale możesz skrócić,IṠ
ponieważ wciąż są to 3 różne wyjścia cmp ... tak, całkiem pewne, że nie może być zrobione w 5. Również 5 nie pomoże, odkąd I FGITW. :)Perl 6 , 25 bajtów
Wypróbuj online!
Bierze pojedynczy argument, dwuelementową listę list liczb. Zwraca,
1
jeśli pierwsza lista ma wyższą średnią,-1
jeśli druga lista ma, i0
jeśli średnie są równe.źródło
JavaScript (ES6), 60 bajtów
Wyjścia
0
dlaTie
,true
dlaN
ifalse
dlaM
.źródło
JavaScript (ES6),
6054 bajtów-6 bajtów dzięki @Luke i @Neil
Pobiera dane wejściowe jako tablicę 2-elementową
[N, M]
. Wyjściatrue
,0
albofalse
zaN
,Tie
alboM
, odpowiednio.Wyjaśnienie
Test Snippet
Wprowadź liczby oddzielone spacjami / przecinkami.
Pokaż fragment kodu
źródło
Math.sign(y-x)
jey-x?x>y:0
. Wyjścia0
dlaTie
,true
dlaN
ifalse
dlaM
.x-y&&x>y
być może?Pip , 13 bajtów
Jest to funkcja, która pobiera listę list. Zwraca,
1
jeśli pierwsza średnia jest większa,-1
jeśli druga jest większa,0
jeśli jest remis.Tutaj uruchom wszystkie przypadki testowe.tło
To rozwiązanie intensywnie wykorzystuje dwa metaoperatory Pipa:
$
, złóż. Weź operator binarny i zastosuj go między elementami listy. Na przykład,+
jest dodaniem, ale$+
sumuje listę. Zauważ, że$
czyni operator binarny operatorem jednoargumentowym.*
mapa Weź jednoargumentowy operator i zastosuj go do każdego elementu listy. Na przykład#
podaje długość listy, ale#*
podaje (listę) długości elementów listy.$+*
mapy składają się / na liście, sumując każdy z elementów listy.Inną rzeczą, którą należy wiedzieć o Pip, jest to, że wielu operatorów domyślnie pracuje na listach. Na przykład
[1 2 3] * 5
daje[5 10 15]
;[1 2 3] * [2 3 4]
daje[2 6 12]
; i[[1 2] [3 4]] * [5 6]
daje[[5 10] [18 24]]
.Wyjaśnienie
Użyjemy przykładowego wejścia
[[2 3 4] [2 3 4 6]]
:{...}
Definiuje funkcję. (Pierwszy) argument jest powiązany ze zmienną lokalną
a
.#*a
Odwzoruj
#
na argument funkcji, uzyskując długości list podrzędnych. Wynik:[3 4]
a/#*a
Podziel (elementy) podlist
a
przez ich odpowiednie długości. Wynik:[[0.667 1 1.333] [0.5 0.75 1 1.5]]
$+*a/#*a
Zamapuj
$+
(dodaj po złożeniu) do tego wyniku, sumując listy podrzędne. Wynik:[3 3.75]
$CM$+*a/#*a
Fold on
CM
, co daje-1
,0
lub w1
zależności od porównania dwóch operandów (takich jak Pythoncmp
). Wynik:-1
(ponieważ3
jest mniejszy niż3.75
).Możesz także zdefiniować funkcje w Pipie, pisząc wyrażenia zawierające funkcję tożsamości
_
. Na przykład_*_
jest funkcją, która podnosi argument do kwadratu - cukier składniowy dla{a*a}
i mniej bajtów. Jednak obecna wersja interpretera zawiera błąd, który uniemożliwia_
pracę z*
metaoperatorem. Raz, że jest stałe, to rozwiązanie może być 11 bajtów :$CM$+*_/#*_
.źródło
C (gcc), 91
98bajtyNiewłaściwe miejsce dla C i prawdopodobnie jedyna odpowiedź, która nie wymaga podziału. Przynajmniej kod jest wyświetlany bez suwaka.
Powrót do 0,1,2
M>N
,M=N
,M<N
odpowiednio. Zajmuje wejście jakolength of M
,length of N
,M
,N
.źródło
Brachylog , 8 bajtów
Wypróbuj online!
Wyprowadza,
1
jeśli pierwsza lista ma wyższą średnią,-1
czy druga lista ma wyższą średnią i0
jeśli są powiązane.Wyjaśnienie
źródło
Java, 105 bajtów
Lambda, która pobiera listę zagnieżdżoną, zgodnie z dopuszczalnymi danymi wejściowymi.
Przesyła strumieniowo listę list, konwertuje obie wartości na ich średnie, a następnie zwraca znak różnicy.
1
jeśli pierwsza lista jest większa,-1
jeśli druga lista jest większa,0
dla remisu.źródło
Stream
s bezpośrednio, tak jak ja .R
3834 bajtówFunkcja przyjmująca jako dane wejściowe dwa wektory numeryczne. Zwraca 1, jeśli średnia z pierwszej listy jest wyższa, 0, jeśli są takie same i -1, jeśli średnia z drugiej listy jest wyższa.
źródło
f=
.{}
z ciała funkcji.MATL , 6 bajtów
Nie bądź taki wredny! *
Kolejność stosu wejściowego:
Wynik:
Wypróbuj online!
* Ta odpowiedź została zagrana w golfa, nie będąc wrednym dla żadnych biednych, bezbronnych liczb.
źródło
Java (OpenJDK 8) ,
7662 bajtówWypróbuj online!
Ponieważ dane wejściowe mogą być dowolne, postanowiłem wziąć
IntStream
s jako dane wejściowe. Możesz uzyskać takie dane wejściowe ze standardu zaint[]
pomocąArrays.stream(array)
.Dane wyjściowe dotyczą
1
„N zwycięstw”,-1
„M zwycięstw” i0
remisu.Oszczędza
źródło
java.util.Arrays.stream(array).map(java.util.Arrays::stream)
). Dopiero kiedy ponownie przeczytam pytanie dzisiaj, pomyślałem, że ten format wejściowy jest tak samo ważny jak każdy..orElse(0)
byłoby realne skrócenie.getAsDouble()
?(a,b)->Math.signum(a.average().orElse(0)-b.average().orElse(0));
to 64 bajtyDyalog APL, 14 bajtów
1
jeśli lewy jest większy,¯1
jeśli prawy jest i0
na remis.W jaki sposób?
¨∘⊢
dla każdej listy+/÷≢
oblicz średnią (+/
suma÷
podzielona przez≢
długość)-/
odejmij średnie×
znak wynikuźródło
Common Lisp ,
7471 bajtówWypróbuj online!
źródło