Ich bin auf dieses Problem gestoßen, als ich an einer anderen Herausforderung für diese Site arbeitete. Bei dieser Herausforderung verwende ich " Mario Kart 8 Scoring ". Die Anzahl der Punkte, die der Spieler auf Platz k erhält, wird durch dieses 1-indizierte Array dargestellt: [15,12,10,9,8,7,6,5,4,3,2,1]. Also bekommt der 1. Platz 15 Punkte, der 2. Platz 12 Punkte usw.
Es ist einfach genug, Punkte wie diese zu vergeben, aber der schwierige Teil hängt davon ab, wie ich mit Krawatten umgehe. Ich gebe jedem Spieler, der bindet, den Durchschnitt der Punkte, die für jeden Bindungsplatz vergeben wurden. Wenn zum Beispiel nur der 1. und der 2. Gleichstand besteht, erhalten beide Spieler (15 + 12) / 2 = 13,5 Punkte. (Hinweis: Sie dürfen auf das nächste int runden, also sind auch 13 oder 14 zulässig.) Dann erhalten die Plätze 3 bis 12 die normale Punktzahl für ihre Position.
Herausforderung
Bei 12 nicht-negativen Ganzzahlwerten, die absteigend sortiert sind, wird die Anzahl der Punkte ausgegeben, die jeder Spieler erhält. Sie können auch die Punkteliste [15,12,10,9, ...] als Eingabe verwenden. Beachten Sie, dass die Anzahl der Punkte, die jeder Spieler erhält, nicht von den tatsächlichen Werten der Punkte abhängt, sondern davon, wie diese mit den anderen Punkten verglichen werden.
Testfälle
- [21,21,15,14,12,9,6,5,4,3,2,1] => [ 14,14 , 10,9,8,7,6,5,4,3,2, 1]
- [20,15,15,15,10,9,8,7,6,5,4,3] => [15, 10,10,10 , 8,7,6,5,4,3,2, 1]
- Erklärung: (12 + 10 + 9) / 3 = 10,3333
- [1,1,1,1,1,1,1,1,1,1,1] => [ 7,7,7,7,7,7,7,7,7,7, 7 ]
- Erklärung: (15 + 12 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1) / 12 = 6,8333
- [20,20,20,20,10,10,10,9,8,7,6,5] => [ 12,12,12,12 , 7,7,7 , 5,4,3,2, 1]
- Erklärung: (15 + 12 + 10 + 9) / 4 = 11,5, (8 + 7 + 6) / 3 = 7
- [100,99,98,95,95,95,94,93,93,92,91,91] => [15,12,10, 8,8,8 , 6, 5,5 , 3, 2, 2 ]
- Erklärung: (9 + 8 + 7) / 3 = 8, (5 + 4) / 2 = 4,5, (2 + 1) / 2 = 1,5
Verwandte: Rang eine Liste von Partituren mit "übersprungen"
quelle
ave
), sonst ist es nur ein Ausschnitt (was nicht erlaubt ist). Zum Glück sparen Sie dadurch 5 Bytes.Perl 5 , 109 +1 (-a) = 110 Bytes
Probieren Sie es online!
Beinhaltet 17 Bytes, um die Punktwerte fest zu codieren.
quelle
MATL ,
1210 Bytes2 Bytes weniger dank @geokavel !
Eingaben sind ein Spaltenvektor (
;
als Trennzeichen) von Ganzzahlen und ein Spaltenvektor mit den Punkten. Die Ausgabe enthält die Ergebnisse durch Zeilenumbrüche getrennt.Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
05AB1E , 12 Bytes
Probieren Sie es online!
Erläuterung
quelle
C # (.NET Core) , 154 Byte
Probieren Sie es online!
C # (.NET Core) + unter Verwendung von Linq, 170 + 23 Bytes
Probieren Sie es online!
quelle
J, 15 Bytes
Probieren Sie es online!
Nimmt die Liste der Punkte (
1 2 ... 12 15
) als Argument für die rechte Hand und die zu bewertenden Werte als Argument für die linke Hand. Wenn dies keine logische Eingabe ist, addieren Sie 1 Byte für ein~
-passiv, um die Reihenfolge zu invertieren, in der die Eingaben verwendet werden.Möglicherweise gibt es ein paar Dinge zum Golfen, darunter
Erläuterung
Ich werde dies in ein paar Funktionen aufteilen.
avg_and_dupe
Nimmt den Durchschnitt einer Liste und dupliziert ihn so oft wie die Länge der Listescore
bewertet eine Eingabe (linkes Argument) anhand einer Liste von Bewertungen (rechtes Argument).avg_and_dupe
Das funktioniert so gut, weil es wie zwei Gabeln behandelt wird . Wenn Sie sich immer noch am Kopf kratzen (ich weiß, dass ich es am Anfang war), fragen Sie und ich kann Ihnen eine ausführlichere Erklärung geben, warum dies so funktioniert.
Ergebnis
Wenn es immer noch verwirrend ist, kann ich auch eine Erklärung für
/.
-key hinzufügen, aber ich denke, die Wiki-Seite erklärt es ziemlich gut.quelle
You can also take the points list [15,12,10,9,...] as input.
wenn das Sie alle Bytes speichertPython 2 , 66 Bytes
-8 Bytes dank Leaky Nun.
Probieren Sie es online!
quelle
Jelly , 11 Bytes
Probieren Sie es online!
-3 Bytes dank fireflame für das Bemerken neuer Jelly-Features: D
quelle
S÷L
und mould anstelle vonxL
, was$
statt zwei erlaubtµ
.Python 3 , 67 Bytes
Probieren Sie es online!
Python 2 ,
10870 BytesProbieren Sie es online!
quelle
Python 3 , 72 Bytes
Probieren Sie es online!
quelle
Proton , 62 Bytes
Probieren Sie es online!
Proton , 63 Bytes
Probieren Sie es online!
quelle
Dyalog APL, 14 Bytes
Nimmt die Liste der Punkte als linkes Argument und die Punkteliste als rechtes Argument. Fügen Sie 2 Bytes hinzu, um es einzuschließen,
()
wenn es direkt und nicht als benannte Funktion aufgerufen wird.{
...}⌸
gruppieren Sie das rechte Argument mit der Taste im linken Argument und wenden Sie die Funktion in geschweiften Klammern auf jede Gruppe an (Key Operator).⊂≢⍴+/÷≢
ist eine Gabel, wo:+/÷≢
ist der Durchschnitt der Punkte für die Gruppe (Summe geteilt durch die Summe)≢⍴
Tally-Umformung (Durchschnittswert wiederholen, um der Anzahl der Elemente in der Gruppe zu entsprechen)⊂
boxt das Ergebnis ein (um der Vermischung des Ergebnisses, das der Key Operator anwendet, entgegenzuwirken)∊
wird eingetragen und das Ergebnis des Schlüsseloperators (der ein verschachtelter Vektor von Vektoren ist) in eine einfache Liste eingeteilt.TryAPL online
quelle
Haskell, 152 Bytes
Es ist ein Schmerz zu importieren
groupBy
undon
so musste ich meine eigenen machen.Die Mittelungsfunktion wird in Kürze verkürzt.
Das Erfordernis der Signatur könnte wahrscheinlich mit Compiler-Flags vermieden werden.
quelle