intermediate programming assignment