Codewars Lösung | Equalize the array!


coden
Codewars. Achieve mastery through challenge.
Daniel Kaser|19. 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:Equalize the array!
Level:7 kyu
Sprache:TypeScript

Beschreibung:

No description!!!

Input :: [10,20,25,0]

Output :: ["+0", "+10", "+15", "-10"]

Show some love, rank and upvote!

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

Erstmal rauskriegen was hier überhaupt Masse is...

Schritt 2

OK, ich habs! Und du?

Schritt 3

Die erste Zahl im Input Array wird von jeder Zahl im Array abgezogen.

Schritt 4

Richtig, das ist noch nicht alles...

Schritt 5

Die jeweilige Zahl kommt als String ins Output Array, und zwar mit Vorzeichen.

Code

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

Lösungsschritte
Meine erste Zeile (ich habe array in nums umbenannt):
export function equalize(nums: number[]): string[] {
Dann der Loop. Da wir sonst nichts weiter mit dem Array planen, können wir das Resultat direkt zurückgeben:
  return nums.map((num) => {
Jetzt können wir die Differenz zwischen aktuellem und erstem Element berechnen und in einen String umwandeln. Da wir die Differenz ein paar mal brauchen, speichern wir die jeweilige aktuelle Differenz in einer Variablen zwischen:
const difference = (num - nums[0]).toString();
Jetzt kümmern wir uns um das Vorzeichen. Wenn unsere Variable ein - enthält, ist alles gut. Dann geben wir dem neuen Array einfach die Variable zurück:
if (difference.includes("-")) return difference;
Ein + enthält es aber nicht automatisch. Das müssen wir manuell hinzufügen, wenn kein Vorzeichen vorhanden ist.

Tipp: Das else können wir uns sparen:

    return `+${difference}`;
  });
}
Voilá! 💪

Fragen?

Komplettlösung
export function equalize(nums: number[]): string[] {
  return nums.map((num) => {
    const difference = (num - nums[0]).toString();

    if (difference.includes("-")) return difference;
    return `+${difference}`;
  });
}

Feedback

Schreib mir!