Inhalt
Die Fakten:
Plattform: | codewars.com |
Name: | Visible Dots On a Die |
Level: | 7 kyu |
Sprache: | TypeScript |
Beschreibung:
Your task is to return the number of visible dots on a die after it has been rolled(that means the total count of dots that would not be touching the table when rolled)
6, 8, 10, 12, 20 sided dice are the possible inputs for "numOfSides"
topNum is equal to the number that is on top, or the number that was rolled.
for this exercise, all opposite faces add up to be 1 more than the total amount of sides Example: 6 sided die would have 6 opposite 1, 4 opposite 3, and so on. for this exercise, the 10 sided die starts at 1 and ends on 10.
Note: topNum will never be greater than numOfSides
Quelle: codewars.com
Lösung
Pseudo-Code
Wie immer gibt's reichlich Varianten, hier ist eine meiner.
Erst die Lösungsschritte in Pseudo-Code. Los geht’s:
Lösungsschritte
Schritt 1
Als Erstes brauchen wir die Summe aller Seiten.
Schritt 2
Dann brauchen wir noch die Zahl auf der unteren Seite des Würfels.
Schritt 3
Von der Summe müssen wir dann nur noch die Zahl auf der unteren Seite abziehen.
Code
Geil. Übersetzen wir unseren Pseudo-Code in TypeScript:
Lösungsschritte
Meine erste Zeile (ich habe numOfSides
zu numSides
umbenannt):
export function totalAmountVisible(topNum: number, numSides: number): number {
Die Summe aller Seiten berechnen:
const allSidesSum = (numSides / 2) * (numSides + 1);
Auf einem 6-seitigen Würfel zum Beispiel, ergeben 2 gegenüberliegende Seiten immer die Summe 7. Also die Anzahl der Seiten + 1. Das ganze kann man 3x machen. Also (Anzahl der Seiten / 2) mal.
Jetzt berechnen wir die Zahl auf der unteren, nicht sichtbaren Seite:
const bottomNum = numSides + 1 - topNum;
Wie gerade schon erwähnt, ergeben 2 sich gegenüberliegende Seiten auf einem 6-seitigen Würfel 7, also die Anzahl Seiten + 1. Da wir die obere Zahl haben, können wir diese einfach von der Anzahl der Seiten + 1 abziehen.
Jetzt nur noch die untere Zahl von der Summe aller Seiten abziehen und returnen:
return allSidesSum - bottomNum;
}
Whoop whoop! 💪
Komplettlösung
export function totalAmountVisible(topNum: number, numSides: number): number {
const allSidesSum = (numSides / 2) * (numSides + 1);
const bottomNum = numSides + 1 - topNum;
return allSidesSum - bottomNum;
}