この先は各関数の理解とプログラマーのテクニックなんで、自分から教えれることはないが、今回のお題に対して自分なら添付のように書きます。