このプログラムの要となる関数はこちら この辺は普通 メインプログラムは部分部分のテストコード残ってるせいで乱雑さが増してる感じ