LeetCode 799. Champagne Tower in F#
URL
leetcode.com/problems/champagne-tower
Code
github.com/syohex/dotnet-study/blob/master/..
let champagneTower (poured: int) (queryRow: int) (queryGlass: int) : double =
let glasses = Array2D.zeroCreate<double> 101 101
glasses.[0, 0] <- double poured
for i in 0 .. queryRow do
for j in 0 .. queryGlass do
let v = glasses.[i, j] - 1.0
if v > 0.0 then
let half = v / 2.0
glasses.[i + 1, j] <- glasses.[i + 1, j] + half
glasses.[i + 1, j + 1] <- glasses.[i + 1, j + 1] + half
let ret = glasses.[queryRow, queryGlass]
if ret >= 1.0 then 1.0 else ret
This is difficult to solve by functional programming