Solving some interesting/fun/complex (all at the same time) problems in Java