+sub generate_id {
+ my ($section, $number) = split("-", shift);
+ my $id = 0;
+ foreach (split //, $section) {$id=26*$id+(ord($_)-1)%32;}
+ $id=10000*$id+$number;
+ return $id;
+}
+
+sub off_for_exams {
+ $_[3] =~ /\d{8}-(\d\d\d\d)(\d\d)(\d\d)/;
+ my @finalday = localtime timelocal(0,0,0,$3,$2-1,$1);
+ return undef unless ($finalday[6] == 0);
+ my $beginning="(08:00-09:15|11:00-12:15|14:00-15:15|17:00-18:15|17:30-18:45|20:00-21:15|20:30-21:45)";
+ my $ending ="(06:30-07:45|09:30-10:45|12:30-13:45|15:30-16:45|18:30-19:45|19:00-20:15)";
+ if($_[1] eq "Mon Wed") {
+ if($_[2] =~ /$beginning/) {
+ $_[3] =~ /\d{8}-(\d{8})/;
+ return "!" . ($1-4);
+ } elsif($_[2] =~ /$ending/) {
+ $_[3] =~ /\d{8}-(\d{8})/;
+ return "!" . ($1-6);
+ }
+ } elsif($_[1] eq "Tue Thu") {
+ if($_[2] =~ /$beginning/) {
+ $_[3] =~ /\d{8}-(\d{8})/;
+ return "!" . ($1-3);
+ } elsif($_[2] =~ /$ending/) {
+ $_[3] =~ /\d{8}-(\d{8})/;
+ return "!" . ($1-5);
+ }
+ } else {
+ return "";
+ }
+}
+