Das Codility-Problem 'When John Gambles at the Casino' fordert 2026 weiterhin Programmierer heraus. In diesem Artikel analysieren wir das Problem, Lösungsansätze und optimale Algorithmen. John startet mit einem Budget und wettet, bis er gewinnt oder pleite ist – berechnen Sie Wahrscheinlichkeiten.
Ideal für Coding-Interviews. Wir erklären Mathe, Code in Python/JS und Edge-Cases detailliert.
Problemverständnis
John hat initiales Geld X, wettet Y pro Runde. Gewinnt er Z oder verliert Y. Wie oft gewinnt er, bevor Bankrott?
Es geht um unendliche Sequenzen von Win/Loss mit gegebener Wahrscheinlichkeit P.
- Input: X, Y, Z, P
- Output: Erwartete Gewinnanzahl
- Constraints: X,Y,Z >0, P in [0,1]
Mathematische Lösung
Verwenden Sie dynamische Programmierung oder Matrix-Exponentiation für Effizienz.
DP-Ansatz: dp[i] = Erwartung bei Guthaben i. Übergänge: Win -> i+Z-Y, Loss -> i-Y.
- Base: dp[0]=0
- Rekursion: dp[i] = P*dp[i+Z-Y] + (1-P)*dp[i-Y] +1 (für jeden Gamble)
- O(X*max(Z)) Komplexität
Code-Beispiel Python
Implementierung mit Memoization.
- def solution(X, Y, Z, P):
- memo = {}
- return dp(X) // rekursive Funktion mit Cache
Optimierungen und Tests
Edge-Cases: P=0 (0 Wins), P=1 (unendlich, aber cap). Zeitlimits beachten.
- Test: X=10,Y=1,Z=2,P=0.5 -> ~10
- Skalierung auf X=10^6
- Matrix-Methode für O(log N)
Häufige Fragen
Was ist das Codility-Problem?
Ein Wahrscheinlichkeitsproblem über Gambles bis Pleite oder Win-Streak.
Welche Sprache empfohlen?
Python für Klarheit, C++ für Speed bei großen X.
Häufige Fehler?
Unendliche Loops bei P=1, Floating-Point-Präzision.
Wo üben?
Auf Codility, LeetCode ähnliche DP-Probleme.