isEndOfWorld()解けたかどうか判定するメソッドisEndOfWorld()を考えます。
コンストラクタでtower[0]にリングを積んだので、解けた場合は
tower[2]にすべてのリングがある。
tower[1]にすべてのリングがある。
のどちらかの状態になっています。
これをそのまま調べるには
int numOfRings = tower[0].size() + tower[1].size() + tower[2].size();
として、
tower[2].size() == numOfRings || tower[1].size() == numOfRings
を調べれば良いです。
でも、変数numOfRingsを導入するのがなんだか嫌だった(本当にただそれだけ)ので、先程の条件を
tower[0]、tower[1]にはリングがない。
tower[0]、tower[2]にはリングがない。
と読み替えて、
(tower[0].empty() && tower[1].empty()) || (tower[0].empty() && tower[2].empty())
を調べ、この値を返しています。