Codewars Lösung | "Very Even" Numbers.


coden
Codewars. Achieve mastery through challenge.
Daniel Kaser|5. Dezember 2023
2 min.

Inhalt

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

Die Fakten:

Plattform:codewars.com
Name:"Very Even" Numbers.
Level:7 kyu
Sprache:TypeScript

Beschreibung:

Task

Write a function that returns true if the number is a "Very Even" number.

If a number is a single digit, then it is simply "Very Even" if it itself is even.

If it has 2 or more digits, it is "Very Even" if the sum of its digits is "Very Even".

Examples

number = 88 => returns false -> 8 + 8 = 16 -> 1 + 6 = 7 => 7 is odd 

number = 222 => returns true -> 2 + 2 + 2 = 6 => 6 is even

number = 5 => returns false

number = 841 => returns true -> 8 + 4 + 1 = 13 -> 1 + 3 => 4 is even

Note: The numbers will always be 0 or positive integers!

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

Damit wir die Input-Zahl nicht verändern, speichern wir sie als erstes in einer neuen Variablen ab.

Schritt 2

Dann loopen wir solange, wie unsere Zahl zweistellig ist.

Schritt 3

In jeder Iteration summieren wir die Ziffern.

Schritt 4

Nach dem Loop geben wir zurück, ob unsere (einstellige) Zahl gerade ist.

Code

Geil. Übersetzen wir unseren Pseudo-Code in TypeScript:

Lösungsschritte
Meine erste Zeile:
export function isVeryEvenNumber(n: number): boolean {
Erst die Input-Zahl in einer neuen Variable speichern:
let num = n;
Jetzt der Loop solange unsere Zahl zweistellig ist:
  while (num > 9) {
Dann die Ziffern aufsummieren:
    num = num
      .toString()
      .split("")
      .map(Number)
      .reduce((sum, digit) => sum + digit, 0);
  }

Um die Ziffern aufsummieren zu können, müssen wir die Zahl in ihre Ziffern unterteilen. Das wiederum geht nur mit einem String. Bevor wir aber die Ziffern summieren können, müssen wir sie wieder in Zahlen umwandeln.

Nach dem Loop nur noch zurückgeben, ob unsere einstellige Zahl gerade ist:
  return num % 2 === 0;
}
Whoop whoop! 💪

Fragen?

Komplettlösung
export function isVeryEvenNumber(n: number): boolean {
  let num = n;

  while (num > 9) {
    num = num
      .toString()
      .split("")
      .map(Number)
      .reduce((sum, digit) => sum + digit, 0);
  }

  return num % 2 === 0;
}

Feedback

Schreib mir!