
Inhalt
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! 💪
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;
}