@@ -444,6 +444,78 @@ Function<List<Requirement>>() main (){
444444}
445445` ;
446446
447+ export const EDU_REQ_BTLL = `${ SEVEN_BREADTHS_BTLL }
448+ Function<List<Requirement>>() main (){
449+ List<Course> courses get_attr(this, "allCourses")
450+
451+ List<Requirement> breadth7 seven_breadths_requirements(courses)
452+ Requirement arts_and_lit get_element(breadth7, 0)
453+ Requirement biological_sciences get_element(breadth7, 1)
454+ Requirement historical_studies get_element(breadth7, 2)
455+ Requirement international_studies get_element(breadth7, 3)
456+ Requirement philosophy_and_values get_element(breadth7, 4)
457+ Requirement physical_sciences get_element(breadth7, 5)
458+ Requirement social_and_behavioral_sciences get_element(breadth7, 6)
459+
460+ List<Requirement> return [arts_and_lit, biological_sciences, historical_studies, international_studies, philosophy_and_values, physical_sciences, social_and_behavioral_sciences]
461+ }
462+ ` ;
463+
464+ export const ENVDES_REQ_BTLL = `
465+ ` ;
466+
467+ export const CHEMISTRY_REQ_BTLL = `
468+ ` ;
469+
470+ export const RCNR_REQ_BTLL = `${ RNC_BTLL }
471+ Function<boolean>(Course) is_upper_div_course (course){
472+ string number get_attr(course, "number")
473+ boolean return or([regex_match(number, "^1[0-9][0-9]"), regex_match(number, "^2[0-9][0-9]"), regex_match(number, regex_match(number, "^C1[0-9][0-9]"), regex_match(number, "^C2[0-9][0-9]"), regex_match(number, "^W1[0-9][0-9]"), regex_match(number, "^W2[0-9][0-9]"), regex_match(number, "^N1[0-9][0-9]"), regex_match(number, "^N2[0-9][0-9]")])
474+ }
475+
476+ Function<boolean>(Course) is_rcnr_dept_course (course){
477+ string subject get_attr(course, "subject")
478+ boolean is_envecon equal([subject, "ENVECON"])
479+ boolean is_espm equal([subject, "ESPM"])
480+ boolean is_eneres equal([subject, "ENERES"])
481+ boolean is_nusctx equal([subject, "NUSCTX"])
482+ boolean is_plantbi equal([subject, "PLANTBI"])
483+ boolean return or([is_envecon, is_espm, is_eneres, is_nusctx, is_plantbi])
484+ }
485+
486+ Function<number>(number, Course) add_course_units (acc, course){
487+ number units get_attr(course, "units")
488+ number return add([acc, units])
489+ }
490+
491+ Function<List<Requirement>>() main (){
492+ List<Course> courses get_attr(this, "allCourses")
493+
494+ // Reading & Composition
495+ List<Requirement> rc_reqs rc_requirements(courses)
496+ Requirement rca get_element(rc_reqs, 0)
497+ Requirement rcb get_element(rc_reqs, 1)
498+
499+ // At least 36 upper-division units total
500+ List<Course> upper_div_courses filter(courses, (c) {
501+ boolean return is_upper_div_course(c)
502+ })
503+ number upper_div_units reduce(upper_div_courses, add_course_units, 0)
504+ NumberRequirement upper_div_total {upper_div_units, 36, "Total Upper Division Units"}
505+
506+ // At least 15 of those 36 upper division units must be in Rausser departments
507+ List<Course> rcnr_upper_div_courses filter(courses, (c) {
508+ boolean is_upper is_upper_div_course(c)
509+ boolean is_rcnr is_rcnr_dept_course(c)
510+ boolean return and([is_upper, is_rcnr])
511+ })
512+ number rcnr_upper_div_units reduce(rcnr_upper_div_courses, add_course_units, 0)
513+ NumberRequirement rcnr_upper_div {rcnr_upper_div_units, 15, "Rausser Upper Division Units"}
514+
515+ List<Requirement> return [rca, rcb, upper_div_total, rcnr_upper_div]
516+ }
517+ ` ;
518+
447519export const EECS_REQ_BTLL = `
448520Function<boolean>(Course) eecs_upper_div_finder (course){
449521 string subject get_attr(course, "subject")
@@ -500,7 +572,7 @@ Function<boolean>(Course) natural_science_upper_div_finder (course){
500572 number units get_attr(course, "units")
501573
502574 // Must be 3 units or more and upper division (100+)
503- boolean is_upper_div or([regex_match(number, "^1[0-9][0-9]"), regex_match(number, "^2[0-9][0-9]"), regex_match(number, "^C [0-9]")])
575+ boolean is_upper_div or([regex_match(number, "^1[0-9][0-9]"), regex_match(number, "^2[0-9][0-9]"), regex_match(number, regex_match(number, "^C1 [0-9][0-9]"), regex_match(number, "^C2[0-9][0-9]"), regex_match(number, "^W1[0-9][0-9]"), regex_match(number, "^W2[0-9][0-9]"), regex_match(number, "^N1[0-9][0-9]"), regex_match(number, "^N2[0-9][0-9]")])
504576 boolean has_enough_units or([greater_than(units, 3), equal([units, 3])])
505577 boolean is_valid_units and([is_upper_div, has_enough_units])
506578
@@ -857,7 +929,7 @@ Function<boolean>(Course) technical_elective_finder (course){
857929 number units get_attr(course, "units")
858930
859931 // Must be upper division (100+) or C### and NOT 195–199
860- boolean is_upper_div or([regex_match(number, "^1[0-9][0-9]"), regex_match(number, "^2[0-9][0-9]"), regex_match(number, "^C[0-9][0-9]"), regex_match(number, "^ C1[0-9][0-9]"), regex_match(number, "^C2[0-9][0-9]"), regex_match(number, "^W[0-9][0-9]"), regex_match(number, "^ W1[0-9][0-9]"), regex_match(number, "^W2[0-9][0-9]"), regex_match(number, "^N [0-9][0-9]"), regex_match(number, "^N1 [0-9][0-9]")])
932+ boolean is_upper_div or([regex_match(number, "^1[0-9][0-9]"), regex_match(number, "^2[0-9][0-9]"), regex_match(number, "^C1[0-9][0-9]"), regex_match(number, "^C2[0-9][0-9]"), regex_match(number, "^W1[0-9][0-9]"), regex_match(number, "^W2[0-9][0-9]"), regex_match(number, "^N1 [0-9][0-9]"), regex_match(number, "^N2 [0-9][0-9]")])
861933 boolean is_excluded_seminar regex_match(number, "^19[5-9]")
862934 boolean is_valid_number and([is_upper_div, not(is_excluded_seminar)])
863935
0 commit comments