My implementation of assignments of Stanford CS193P