Codewars Lösung | Visible Dots On a Die


coden
Codewars. Achieve mastery through challenge.
Daniel Kaser|27. Januar 2024
2 min.

Inhalt

  1. Die Fakten
  2. Beschreibung
  3. Lösung
    1. Pseudo-Code
    2. Code
  4. Feedback

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! 💪

Fragen?

Komplettlösung
export function totalAmountVisible(topNum: number, numSides: number): number {
  const allSidesSum = (numSides / 2) * (numSides + 1);
  const bottomNum = numSides + 1 - topNum;

  return allSidesSum - bottomNum;
}

Feedback

Schreib mir!