Codewars – so macht Fortbildung Spaß!

Eventuell habt ihr schon einmal von Codewars gehört?! Dabei handelt es sich um eine Plattform, auf welcher andere Entwickler Aufgaben (Katas) in Textform stellen können, welche dann gelöst werden sollen. Dabei ist natürlich Kreativität gefragt. Für jede gelöste Aufgabe bekommt man Punkte und erhöht sein Level. Die einzelnen Aufgaben sind in verschiedene Schwierigkeitsgrade gegliedert und man bekommt je nach Komplexität unterschiedlich viele Punkte.

Klingt erstmal simpel und langweilig – aber macht unglaublich viel Spaß! Die Challenge besteht weniger darin, die einzelnen Aufgaben einfach nur zu lösen. Viel mehr will man diese möglichst kurz und intelligent lösen. Nachdem man eine Aufgabe gelöst hat, bekommt man die Lösungen der anderen zu sehen. Hier gibt es schon gewaltige Unterschiede in der Länge des Codes.

Hier ist für mich auch der größte Lerneffekt zu verzeichnen. Man hat sich eine Weile mit einem Problem beschäftigt und ist zu einer Lösung gekommen. Aber ob das nun gut und schlau gemacht ist? Weiß man normalerweise nicht. Bei Codewars beschäftige ich mich dann länger mit den Ansätzen von anderen Entwicklern und lerne so, viel schnelleren und performanteren Code zu schreiben.

Ein Beispiel:

Man soll in jeder Zeile des folgenden Dreiecks die Summe berechnen können. Die übergebene Zeile kann natürlich auch 128094839 sein.

             1
          3     5
       7     9    11
   13    15    17    19
21    23    25    27    29
...

Also wie löst man das Ganze?

Meine Lösung war folgende:

function rowSumOddNumbers(n) {
  var res = 0;
  for (i = n * n - n; i < n * n + n; i++) {
    if (i % 2 == 1) res += i;
  }
  return res;
}

Die am besten bewertet Lösung war allerdings viel kürzer:

function rowSumOddNumbers(n) {
  return Math.pow(n, 3);
}

Wäre ich erstmal nicht drauf gekommen. Andere machen es aber noch viel komplizierter. Hier ein sehr langes Beispiel:

function rowSumOddNumbers(n) {
  //find odd numbers
  //the nth row will contain n+1 odd numbers
  var triangle = [];
  var odds = [];
  var sum = 0;
  
  var findOdds = function (n) {
    var numberOdds = 0;
    //find out how many odds there are total
    for(var i = 0; i < n; i++){
      numberOdds = numberOdds + i + 1;
     }
    //create an array of odd numbers
    for(var j = 0; j != numberOdds; j++){
      odds.push((2 * j) + 1); 
    }
  };
  
//sum the last n + 1 numbers of odds
  
  var sumLastRow = function(n){  
    var lastRow = [];
   
     for (var i = 0; i < n; i++){
      lastRow.push(odds[odds.length - (n - i)]);
      }
     
      for (i = 0; i < lastRow.length; i++){
          sum += lastRow[i];
          }     
   }     
   
 findOdds(n);
 sumLastRow(n);
 return sum;
}

Das Ergebnis ist exakt das gleiche. Verrückt, oder? Das schöne ist, dass man sich sicher sein kann, dass alle gezeigten Lösungen auch wirklich funktionieren. Denn beim Programmieren muss man verschiedene Unit-Tests bestehen, welche vom Autor des Katas vorgegeben wurden. So kommt man in den meisten Fällen nicht um eine korrekte Lösung herum, da man die Tests beim Einreichen auch nicht sieht oder kennt. Man kann also faktisch nicht manipulieren. Klasse gemacht!

Ich kann die Plattform jedenfalls voll empfehlen! Das Gute ist, dass man erst einen kleinen Test bestehen muss um sich anzumelden. So wird vermieden, dass ich absolute Beginner oder Bots auf der Seite überhaupt anmelden. Man ist also unter Entwicklern.

Und die Aufgaben sind meistens so kreativ, dass man schon hin und wieder Google braucht. Das meiste ist allerdings mit etwas Köpfchen gut zu schaffen. Allerdings habe ich die ganz schweren Aufgaben bisher auch links liegen lassen. Aber das sind dann richtige Herausforderungen!

Falls ihr nun Lust bekommen habt, meldet euch doch schnell an!


Beitrag veröffentlicht

in

, , ,

von

Schlagwörter: