シェルワンライナー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
となる。最初に大きな整数を用意するところから始めている。あとは二部探索をやるだけである。