Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題68

問題68 Unix時刻の限界

表示できる時刻の最大値を求める問題だった。特別なコマンドでも打つのかと思ったがそうではなく、答えは最初に広い範囲を設定した後二部探索で縮めていくやり方だった。

解答例は

f=0;t=$(bc <<< 2^100); while [ $(bc <<< $t-$f) != 1 ]; do m=$(bc <<< "($f+$t)/2"); echo $m; date -d @$m && f=$m || t=$m;done

となる。最初に大きな整数を用意するところから始めている。あとは二部探索をやるだけである。