competitive coding from scratch