C# :: Aufgabe #377

2 Lösungen Lösungen öffentlich

Turmspringen/Wasserspringen (Punktewertung)

Anfänger - C# von JKooP - 02.04.2021 um 09:28 Uhr
Bei internationalen Wettkämpfen bewerten in Einzelwettbewerben sieben Wettkampfrichter die Sprünge.
Jeder vergibt pro Sprung 0 bis 10 Punkte, mit Schritten von halben Punkten.
Die zwei höchsten und niedrigsten Wertungen werden gestrichen.
Die verbleibenden drei Wertungen werden addiert und das Ergebnis mit dem Schwierigkeitsgrad multipliziert.
Das Endresultat entspricht der erzielten Punktzahl des Springers.

Beispiel 1:
Schwierigkeitsgrad: 2,1
Punkte: 7,5 | 7,5 | 7,0 | 8,0 | 8,0 | 7,5 | 8,5
Gestrichen: 7,5 | 7,5 | 7,0 | 8,0 | 8,0 | 7,5 | 8,5
Wertung: 7,5 + 7,5 + 8,0 = 23 * 2,1 = 48,3

Beispiel 2:
Schwierigkeitsgrad: 1,6
Punkte: 7,5 | 7,5 | 7,5 | 7,5 | 7,5 | 7,5 | 7,5
Gestrichen: 7,5 | 7,5 | 7,5 | 7,5 | 7,5 | 7,5 | 7,5
Wertung: 7,5 + 7,5 + 7,5 = 22,5 * 1,6 = 36

Erstelle eine Methode/Funktion, mit der die obige Aufgabenstellung gelöst werden kann.

Viel Spaß

Lösungen:

vote_ok
von JKooP (18090 Punkte) - 01.05.2021 um 16:30 Uhr
NET 5.x; C# 9.x; VS-2019
Einfache Ausgabe (nur Gesamtpunkte):
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;

var diffLevel = 2.1;
var points = new List<double>() { 7.5, 7.5, 7.0, 8.0, 8.0, 7.5, 8.5 };
Console.WriteLine($"{GetResult(points, diffLevel):0.00}");

static double GetResult(List<double> points, double diffLevel) => points.OrderBy(x => x).Skip(2).Take(3).ToList().Sum() * diffLevel;
vote_ok
von JKooP (18090 Punkte) - 01.05.2021 um 16:34 Uhr
NET 5.x; C# 9.x; VS-2019
Erweiterte Ausgabe (mit Zwischenergebnissen):
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;

var diffLevel = 2.1;
var points = new List<double>() { 7.5, 7.5, 7.0, 8.0, 8.0, 7.5, 8.5 };
var (up, rp, r) = GetResult(points, diffLevel);

Console.WriteLine($"Nicht gewertet:\t{string.Join(", ", up.Select(x => x.ToString("#0.0")))}");
Console.WriteLine($"Gewertet:\t{string.Join(", ", rp.Select(x => x.ToString("#0.0")))}");
Console.WriteLine($"Resultat:\t{rp.Sum().ToString("#0.0")} * {diffLevel} = {r.ToString("#0.00")}");

static (List<double> unratedPoints, List<double> ratedPoints, double result) GetResult(List<double> points, double diffLevel)
{
    var ordered = points.OrderBy(x => x).ToList();
    var unrated = ordered.Take(2).Concat(ordered.TakeLast(2)).ToList();
    var rated = ordered.Skip(2).Take(3).ToList();
    var result = rated.Sum() * diffLevel;
    return (unrated, rated, result);
}
1800872

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.