Es gibt unzählige - mehr oder eher weniger informative - Artikel zum Thema “Wie finde ich gute Softwareentwickler?". Sehr häufig kommt der Vorschlag, die Bewerberin eine Programmieraufgabe lösen zu lassen. Das Problem bei der Sache ist: Gute Entwicklerinnen lösen die Aufgabe potentiell mit Bravour, sind aber genervt und suchen sich vielleicht einen Arbeitgeber, der ihnen nicht die Zeit raubt. Im Netz kursiert seit einiger Zeit der “FizzBuzz-Test” - der ist kurz, anders und irgendwie witzig.
Die Aufgabe ist denkbar einfach: Nimm die Zahlen von 1 bis 100. Ersetze die durch 3 teilbaren durch “Fizz”, die durch 5 teilbaren durch “Buzz” und die, die durch beides teilbar sind, durch “FizzBuzz”. Das richtige Ergebnis ist also
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, FizzBuzz, 31, 32, Fizz, 34, Buzz, Fizz, 37, 38, Fizz, Buzz, 41, Fizz, 43, 44, FizzBuzz, 46, 47, Fizz, 49, Buzz, Fizz, 52, 53, Fizz, Buzz, 56, Fizz, 58, 59, FizzBuzz, 61, 62, Fizz, 64, Buzz, Fizz, 67, 68, Fizz, Buzz, 71, Fizz, 73, 74, FizzBuzz, 76, 77, Fizz, 79, Buzz, Fizz, 82, 83, Fizz, Buzz, 86, Fizz, 88, 89, FizzBuzz, 91, 92, Fizz, 94, Buzz, Fizz, 97, 98, Fizz, Buzz
Klingt simpel? Ist es eigentlich auch. Trotzdem scheinen sich viele schwer damit zu tun.
Eine sehr einfache Lösung wäre
(1 .. 100).map { i ->
when {
i % 3 == 0 && i % 5 == 0 -> "FizzBuzz"
i % 3 == 0 -> "Fizz"
i % 5 == 0 -> "Buzz"
else -> i
}
}
Unschön: Es wird doppelt geprüft, ob i durch 3 bzw 5 teilbar ist.
(1 .. 100).map { i ->
when {
i % 15 == 0 -> "FizzBuzz"
i % 3 == 0 -> "Fizz"
i % 5 == 0 -> "Buzz"
else -> i
}
}
Zahlen, die durch 3 und 5 teilbar sind, sind natürlich auch durch 15 teilbar. Sieht schöner aus, ist aber im Prinzip nur mathematisch-syntaktischer Zucker.
Es geht natürlich auch anders.
(1 .. 100).map { i ->
when(i % 3) {
0 -> i to "Fizz"
else -> i to ""
}
}.map { (i, j) ->
when(i % 5) {
0 -> i to j + "Buzz"
else ->i to j
}
}.map { (i, j) ->
when(j) {
"" -> i
else -> j
}
}
In dieser Lösung bilden wir im ersten map
ein Tupel aus der Zahl und einem String (“Fizz” oder leer). Im zweiten map
wird der String im Tupel wenn passend um “Buzz” ergänzt wodurch wir “", “Fizz”, “Buzz” oder “FizzBuzz” erhalten. Im letzten map
wird der leere String durch die Zahl ersetzt. Fertig :-) Die Lösung basiert darauf, dass wir state erzeugen und uns das Ergebnis der Prüfungen merken.
Ich persönlich finde den Test eine nette Knobelei, die man im Prinzip am Whiteboard “programmieren” kann. Auf http://wiki.c2.com/?FizzBuzzTest gibt es eine Reihe weiterer Beispiele in unterschiedlichen Sprachen.
29 Jan 2019 #Bewerbungsgespräche #Kotlin #Assessment