競技プログラミングのためのF#入門
1 2 3 |
|
入力の配列が既にソートされていて必ず要素が存在する前提の問題です. 入力のソートは絶対に必要で, 後者は探索処理として適切な仕様決めが必要です. ここでは二分探索の結果をOption
にし, Option.defaultValue (-1)
でモノがない場合は決して存在しない配列の添字-1
を返すとします.
命令型の言語ではwhile
で処理する方が多いように思います. ここでは再帰関数で処理します. 二分探索はアルゴリズムのどの本にも載っているため細かい解説は省略します.
1 2 3 4 5 6 7 |
|
最後のOption.map ((+) 1)
だけ注意します. これは適合する配列の値が得られたelif Ia.[m]=X then Some m
でm
を返した点に対する修正です. 0-originのF#の配列の添字としてはm
である一方, 問題では1-originであるためその分を加算処理しています.