maxCoursesPerSemester = 9; maxCourseSize = 28; minCourseSize = 22; optCourseSize = 24; coursesPerStudent = 4; assignedSemester = attribute(Integer, 'Assigned Semester' ); assignedCourseNumber = attribute(String , 'Assigned Course Number'); assignedSport = attribute(String , 'Assigned Sport' ); assignedSportType = attribute(String , 'Assigned Sport Type' ); chosenSport = attribute(String , 'Chosen Sport' ); chosenSportType = attribute(String , 'Chosen Sport Type' ); isSecondaryChoice = attribute(Integer, 'Is Secondary Choice' ); student = attribute(String , 'Student' ); studentChoices = table('Student Choices', student, chosenSport, chosenSportType, isSecondaryChoice); studentChoices . importCsvData 'student-choices.csv'; courses = table('Courses', assignedCourseNumber, assignedSport, assignedSportType); courses . importCsvData 'courses.csv'; semester = table('Semesters', assignedSemester); semester . importCsvData 'semesters.csv'; courseAssignment = solution('Assignment of Students to Courses', studentChoices, courses); courseAssignment . forEach not equals(assignedSport, 'Dummy Course') . forEach student . then hasSizeFast coursesPerStudent; courseAssignment . forEach not equals(assignedSport, 'Dummy Course') . then equals(chosenSportType, assignedSportType); courseAssignment . forEach not equals(assignedSport, 'Dummy Course') . thenAtLeastFast(1, equals(assignedSportType, 'Team Sport')); courseAssignment . forEach not equals(assignedSport, 'Dummy Course') . thenAtLeastFast(1, equals(assignedSportType, 'Individual Sport')); courseAssignment . forEach not equals(assignedSport, 'Dummy Course') . forEach assignedSport . then hasSizeFast 1; courseAssignment . forEach not equals(assignedSport, 'Dummy Course') . forEach student . forEach not equals(chosenSport, assignedSport) . then hasSizeFast 0; courseAssignment . forEach not equals(assignedSport, 'Dummy Course') . then not equals(isSecondaryChoice, 1); courseScheduling = solution('Course Scheduling', courseAssignment, semester); courseScheduling . forEach not equals(assignedSport, 'Dummy Course') . forEach(student, assignedSemester) . then hasSizeFast 1; courseScheduling . forEach not equals(assignedSport, 'Dummy Course') . forEach(assignedCourseNumber, assignedSemester) . then hasMinimumSize minCourseSize; courseScheduling . forEach not equals(assignedSport, 'Dummy Course') . forEach(assignedCourseNumber, assignedSemester) . then hasSizeFast optCourseSize; courseScheduling . forEach not equals(assignedSport, 'Dummy Course') . forEach(assignedCourseNumber, assignedSemester) . then hasMaximumSize maxCourseSize; courseScheduling . forEach not equals(assignedSport, 'Dummy Course') . forEach assignedSemester . then uniqueValueCountIsAtMost(maxCoursesPerSemester, assignedCourseNumber);