Ermitteln des Durchschnitts einer Liste (z. B. [2,6,7]
)
- Holen Sie sich die Länge der Liste:
[2,6,7] -> 3
- Addieren Sie die Zahlen in der Liste:
2 + 6 + 7 = 15
. - Teilen Sie die Summe durch ihre Zahl:
15 / 3 = 5
.
Sie sollten die Durchschnittswerte zweier Listen positiver ganzer Zahlen N und M vergleichen , indem Sie einen Wert zurückgeben, wenn N einen höheren Durchschnitt aufweist, einen anderen Wert, wenn M einen höheren Durchschnitt aufweist, und einen anderen Wert im Falle eines Gleichstands.
I / O-Regeln
Alle standardmäßigen Eingabe- und Ausgabemethoden sind zulässig.
Eingang
Sie können Eingaben in Form von zwei separaten Listen, einer verschachtelten Liste oder anderen Elementen vornehmen, die Sie für die Aufgabe als geeignet erachten. Bitte geben Sie das Format an.
Ausgabe
Die angegebenen Werte müssen eindeutig sein und aus mindestens einem Nicht-Leerzeichen bestehen. Außerdem müssen sie zwischen den Läufen konsistent sein (ein einzelner Wert für N , ein einzelner Wert für M , ein einzelner Wert für Tie ). Bitte geben Sie diese in Ihrer Antwort an. Die Werte können nicht leere Strings, Bool-Werte, Ganzzahlen oder alles sein, was Sie für geeignet halten.
Technische Daten
Die Listen müssen nicht unbedingt gleich lang sein.
Sie werden garantiert, dass die Listen nicht leer sind.
Testfälle
Ich entschied mich für die Werte N wins
, M wins
und Tie
, was ziemlich viel selbstverständlich sind.
N, M -> Output (Durchschnittswerte) [7], [6] -> N gewinnt (N hat 7, M hat 6) [4,5], [4,4] -> N gewinnt (N hat 4,5, M hat 4) [2,3,4], [4,5,6] -> M gewinnt (N hat 3, M hat 5) [4,1,3], [7,3,2,1,1,2] -> Krawatte (beide haben 2,666 ...) [100,390,1], [89,82,89] -> N Siege (N hat 163,666 ..., M hat 86,666 ...) [92,892], [892,92] -> Krawatte (Listen sind grundsätzlich identisch) [10,182], [12,78,203,91] -> Krawatte (beide haben 96)
Es gelten Standardlücken . Erklärungen sind erwünscht! Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
quelle
Antworten:
Eigentlich 5 Bytes
Probieren Sie es online!
1
fürN > M
,0
fürN = M
,-1
fürN < M
.Erläuterung:
quelle
Mathematica, 15 Bytes
Probieren Sie es online!
Function
das erwartet eine Liste von zwei Listen.Mean/@#
Nimmt man das arithmetische Mittel jeder Liste in der Eingabe, so werden diese Mittelwerte übergebenOrder
, die zurückgegeben werden,-1
wenn die erste Liste gewinnt,0
wenn ein Gleichstand besteht und1
wenn die zweite Liste gewinnt.quelle
JavaScript (ES6),
52-50Byte(2 Bytes dank @Shaggy gespeichert.)
Hier sind zwei 50-Byte-Lösungen:
Gibt Infinity für N, -Infinity für M und NaN für einen Gleichstand zurück.
Die erste Lösung erfordert aufgrund der Rekursion möglicherweise einige Erläuterungen:
Wird beim ersten Aufruf der Funktion
a
als Durchschnitt desN
Arrays initialisiert :M
Hat an dieser Stelle einen Wert, so heißt der erste Teil des bedingten Ausdrucks:M ? (a-f(M))/0 : a ----------
Die Funktion ist in diesem Ausdruck bezeichnet, diesmal Substitution
M
fürN
.Bei diesem zweiten Aufruf der Funktion
a
wird der Durchschnitt vonN
–– initialisiert, derM
beim vorherigen Aufruf ermittelt wurde.Da es während dieses Funktionsaufrufs keinen zweiten Parameter gibt, wird der zweite Teil des Bedingungsausdrucks ausgelöst, der den Durchschnitt zurückgibt:
M ? (a-f(M))/0 : a --
Wir können den Ausdruck jetzt besser verstehen:
Es ist:
Die Differenz zwischen den Durchschnittswerten ist eine positive Zahl, eine negative Zahl oder 0.
Wenn Sie die Differenz durch 0 dividieren , erhalten Sie Infinity , -Infinity oder NaN - und die erforderlichen drei unterschiedlichen Werte.
Testfälle:
Code-Snippet anzeigen
quelle
A
zu den Funktionsparametern wechseln?Mathematica, 21 Bytes
1 für
#
Siege, -1 für#2
Siege, 0 für Gleichstand.quelle
Sign[#-#2&@@Mean/@#]&
MATL , 8 Bytes
Soooo viele Modifikatoren (
Y
undZ
). Ich kann keinen Weg finden, es kürzer zu machen.sum / number_of_elements
ist drei Bytes. Es könnte eine bessere Möglichkeit sein-ZS
, aber ich kann keine finden.Probieren Sie es online!
Gibt zurück,
1
wenn die erste Eingabe größer ist,0
wenn sie gleich ist und-1
wenn die zweite Eingabe größer ist.quelle
05AB1E , 9 Bytes
1 wenn
M
gewinnt, -1 wennN
gewinnt und 0 für ein Unentschieden.Probieren Sie es online!
Erläuterung
quelle
Julia , 27 Bytes
Probieren Sie es online!
Gibt zurück,
1
wenn der erste Durchschnitt größer ist,-1
wenn der zweite größer ist und0
wenn sie gleich sind.quelle
Python 2 , 43 Bytes
Probieren Sie es online!
quelle
Oktave , 27 Bytes
Probieren Sie es online!
Nimmt zwei Vektoren
x.y
als Eingabe, nimmt denmean
von beiden Vektoren und subtrahiert einen vom anderen. Holen Sie sich das Zeichen dafür, zu bekommen1
,0
und-1
für die drei verschiedenen Alternativen.quelle
Python 2, 49 Bytes
Probieren Sie es online aus
quelle
APL (Dyalog) , 11 Bytes
Fordert zur Eingabe einer Liste mit zwei Listen auf. Druckt
1
Wird wenn der linke Durchschnitt höher ist, 0, wenn derselbe Durchschnitt vorliegt, und¯1
wenn der rechte Durchschnitt höher ist.Probieren Sie es online!
⎕
Prompt(
…)¨
Wenden auf jede folgende stillschweigende Funktion an:+/
die Summe÷
geteilt durch≢
die Bilanz-/
Fügen Sie ein Minus dazwischen ein (und werten Sie es aus)×
signumquelle
Javascript,
81665856 Bytes15 Bytes gespart dank Luke
2 Bytes gespart dank Justin Mariner
Gleichstand ist 0, M ist 1 und N ist -1. Wird mit der Currying-Syntax aufgerufen, z.
f([7])([6])
quelle
eval(a.join`+`)
.a=>(b=a.map(c=>eval(c.join`+`)/c.length))[0]-b[1]?b[0]>b[1]:0
für 61 Bytes. Es nimmt Eingaben als Array von Arrays und Ausgaben0
für einen Gleichstandtrue
für M undfalse
für N.a
) , um das erste Mal verwendet wird :n=>m=>Math.sign((a=b=>eval(b.join`+`)/b.length)(m)-a(n))
.PHP , 68 Bytes
Probieren Sie es online!
PHP , 69 Bytes
Probieren Sie es online!
Raumschiffoperator -1 weniger als, 0 Gleichstand, 1 größer als
quelle
Haskell,
6543 Bytes22 Bytes gespart dank nimi!
Es muss einen viel besseren Weg geben ... Aber Typumwandlungen haben mich fertig gemacht.Verwendung
Gibt zurück,
GT
wenn das erste Argument gewinnt,LT
wenn das zweite Argument gewinnt undEQ
wenn sie gleich sind.Probieren Sie es online!
quelle
sum$x
mit zu werfenf.
. Auch:length x
kann ersetzt werdensum[1|_<-x]
, so dass man abschütteln kannf
vollständig:a x=sum x/sum[1|_<-x]
.#
:...(a x)$a y
.(.a).compare.a
. Verbrauch:( (.a).compare.a ) [7] [6]
.[1|_<-x]
ist dasselbe wie(1<$x)
.J, 10 Bytes
Eine Liste links, eine rechts. Gibt _1 zurück, wenn der linke Durchschnitt kleiner ist, 1, wenn er größer ist, und 0, wenn sie gleich sind
(+/%#)
ist eine Standard-J-Gabel zur Berechnung des Durchschnitts einer Liste&
bietet eine Variation der dyadischen Gabel. es wendet die rechte Seite (in diesem Fall das Durchschnittsverb) auf beide Argumente an und leitet sie dann an das Verb auf der linken Seite weiter, das in diesem Fall ...*@-
subtrahieren, gefolgt von "Vorzeichen von": Der rechte Durchschnitt wird von dem linken subtrahiert, und wir erhalten das Vorzeichen des Ergebnisses - _1, 1 oder 0quelle
Pyth,
10876 BytesVielen Dank an @isaacg für das Speichern eines Bytes
Die Eingabe wird als verschachtelte Liste verwendet
[N, M]
. Ausgänge-1
wennN < M
,1
obN > M
und0
ob sie gleich sind.Probieren Sie es online
quelle
h.+
mit-F
TI-Basic,
2521131210 Bytes-2 Bytes dank Lirtosiast
quelle
Ans
anstelle von Golf gespielt werdenC
mean(L₁)>mean(L₂:Ans+3(mean(L₁)=mean(L₂
21 Bytes : .(
und das entfernen)
.Gelee , 7 Bytes
Ein monadischer Link, der eine Liste der beiden Listen akzeptiert und Folgendes
N,M
zurückgibt:[-1]
forN
;[1]
fürM
; und[0]
für ein Unentschieden.Als Full - Programm gibt es das Ergebnis (Einzelstücklisten drucken dessen Inhalt nur so
-1
,1
oder0
).Probieren Sie es online!
Wie?
quelle
S÷L
, und konvertieren Sie es dann in Single-Link, überS÷¥L$
das es verkürzt werden kann,S÷Lµ
da es sich bei der befindet ganz€
am anfang des programms und dann legst du direkt dort eine karte an und da es kein eingebautes vergleichsmodul gibt, das du verwenden würdest_/Ṡ
, kannst du es auch auf kürzen,IṠ
da das immer noch 3 verschiedene cmp ausgaben sind ... ja, ziemlich sicher kann es nicht sein getan in 5. Auch 5 wird nicht helfen, da ich FGITW würde. :)Perl 6 , 25 Bytes
Probieren Sie es online!
Nimmt ein einziges Argument, eine aus zwei Elementen bestehende Liste von Zahlenlisten. Gibt zurück,
1
wenn die erste Liste einen höheren Durchschnitt aufweist,-1
wenn die zweite Liste einen höheren Durchschnitt aufweist und0
wenn die Durchschnittswerte gleich sind.quelle
JavaScript (ES6), 60 Byte
Ausgänge
0
fürTie
,true
fürN
undfalse
fürM
.quelle
JavaScript (ES6),
6054 Bytes-6 Bytes dank @Luke und @Neil
Nimmt Eingaben als Array mit zwei Elementen an
[N, M]
. Ausgängetrue
,0
oderfalse
fürN
,Tie
oderM
, respectively.Erläuterung
Testschnipsel
Geben Sie Zahlen durch Leerzeichen / Kommas getrennt ein.
Code-Snippet anzeigen
quelle
Math.sign(y-x)
indem Sie durch ersetzeny-x?x>y:0
. Ausgänge0
fürTie
,true
fürN
undfalse
fürM
.x-y&&x>y
vielleicht?Pip , 13 Bytes
Dies ist eine Funktion, die eine Liste von Listen aufnimmt. Gibt zurück,
1
wenn der erste Durchschnitt größer ist,-1
wenn der zweite größer ist,0
wenn er gebunden ist. Führen Sie hier alle Testfälle aus.Hintergrund
Diese Lösung nutzt zwei der Pip-Metaoperatoren:
$
, falten. Nehmen Sie einen binären Operator und wenden Sie ihn zwischen den Elementen einer Liste an. Zum Beispiel+
ist Addition,$+
summiert aber eine Liste. Beachten Sie,$
dass ein binärer Operator zu einem unären Operator wird.*
, Karte. Nehmen Sie einen unären Operator und wenden Sie ihn auf jedes Element einer Liste an. Gibt zum Beispiel#
die Länge einer Liste an,#*
gibt aber (eine Liste von) die Länge der Listenelemente an.$+*
Maps falten / plus über eine Liste und summieren die einzelnen Elemente der Liste.Das andere, was Sie über Pip wissen sollten, ist, dass viele Operatoren standardmäßig in Listen arbeiten. Zum Beispiel
[1 2 3] * 5
gibt[5 10 15]
;[1 2 3] * [2 3 4]
gibt[2 6 12]
; und[[1 2] [3 4]] * [5 6]
gibt[[5 10] [18 24]]
.Erläuterung
Wir verwenden eine Beispieleingabe von
[[2 3 4] [2 3 4 6]]
:{...}
Definiert eine Funktion. Das (erste) Argument ist an die lokale Variable gebunden
a
.#*a
Ordnen Sie
#
dem Argument der Funktion zu und ermitteln Sie die Länge der Unterlisten. Ergebnis:[3 4]
a/#*a
Teilen Sie die Elemente der Unterlisten
a
durch ihre jeweilige Länge. Ergebnis:[[0.667 1 1.333] [0.5 0.75 1 1.5]]
$+*a/#*a
Ordnen Sie
$+
diesem Ergebnis eine (aufklappbare) Addition zu und addieren Sie die Unterlisten. Ergebnis:[3 3.75]
$CM$+*a/#*a
Falte auf
CM
, was ergibt-1
,0
oder1
abhängig vom Vergleich seiner beiden Operanden (wie Pythonscmp
). Ergebnis:-1
(weil3
kleiner als3.75
).Sie können Funktionen in Pip auch definieren, indem Sie Ausdrücke schreiben, die die Identitätsfunktion enthalten
_
. Zum Beispiel_*_
ist eine Funktion, die ihr Argument quadriert - syntaktischer Zucker für{a*a}
und weniger Bytes. In der aktuellen Version des Interpreters gibt es jedoch einen Fehler, der die_
Arbeit mit dem*
Metaoperator verhindert. Sobald das Fest ist, kann diese Lösung 11 Bytes :$CM$+*_/#*_
.quelle
C (gcc), 91
98BytesFalscher Platz für C und wahrscheinlich die einzige Antwort, die keine Division benötigt. Zumindest der Code wird ohne Schieberegler angezeigt.
Rück 0,1,2 für
M>N
,M=N
,M<N
jeweils. Nimmt als Einganglength of M
,length of N
,M
,N
.quelle
Brachylog , 8 Bytes
Probieren Sie es online!
Gibt aus,
1
ob die erste Liste einen größeren Durchschnitt aufweist,-1
die zweite Liste einen größeren Durchschnitt aufweist und0
ob sie gebunden sind.Erläuterung
quelle
Java, 105 Bytes
Lambda, das eine verschachtelte Liste gemäß zulässiger Eingaben annimmt.
Überträgt die Liste der Listen in einen Stream, wandelt beide in ihre Durchschnittswerte um und gibt dann das Vorzeichen der Differenz zurück.
1
Wenn die erste Liste größer ist,-1
wenn die zweite Liste größer ist,0
für ein Unentschieden.quelle
Stream
s direkt, wie ich es getan habe .R
3834 BytesFunktion, die zwei numerische Vektoren als Eingabe verwendet. Gibt 1 zurück, wenn der erste Listenmittelwert höher ist, 0, wenn sie gleich sind, und -1, wenn der zweite Listenmittelwert höher ist.
quelle
f=
.{}
aus dem Funktionskörper entfernen .MATL , 6 Bytes
Sei nicht so gemein! *
Stapelreihenfolge eingeben:
Ausgabe:
Probieren Sie es online!
* Diese Antwort wurde gespielt, ohne gegen arme, wehrlose Zahlen zu sein.
quelle
Java (OpenJDK 8) ,
7662 BytesProbieren Sie es online!
Da der Input alles sein kann, habe ich mich entschieden,
IntStream
s als Input zu nehmen . Sie können eine solche Eingabe von einem Standardint[]
mit erhaltenArrays.stream(array)
.Die Ausgabe erfolgt
1
für "N Siege",-1
für "M Siege" und0
für Unentschieden.Speichert
quelle
java.util.Arrays.stream(array).map(java.util.Arrays::stream)
). Erst als ich die Frage heute erneut las, dachte ich, dass dieses Eingabeformat genauso gültig ist wie jedes andere..orElse(0)
das eine sinnvolle Verkürzung von.getAsDouble()
?(a,b)->Math.signum(a.average().orElse(0)-b.average().orElse(0));
ist 64 BytesDyalog APL, 14 Bytes
1
wenn die linke ist größer,¯1
wenn die rechte ist und0
auf Krawatte.Wie?
¨∘⊢
für jede Liste+/÷≢
Durchschnitt berechnen (+/
Summe÷
durch≢
Länge teilen )-/
subtrahieren Sie die Durchschnitte×
Zeichen des Ergebnissesquelle
Common Lisp ,
7471 BytesProbieren Sie es online!
quelle