Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 81 additions & 70 deletions generated/scheduled_times_dump.example.json
Original file line number Diff line number Diff line change
@@ -1,71 +1,82 @@
{
"LastName, FirstName": [
{
"start": "10:00AM",
"day": "MONDAY",
"end": "12:00PM"
},
{
"start": "10:00AM",
"day": "WEDNESDAY",
"end": "12:00PM"
},
{
"start": "10:00AM",
"day": "FRIDAY",
"end": "12:00PM"
},
{
"start": "4:00PM",
"day": "MONDAY",
"end": "6:00PM"
},
{
"start": "4:00PM",
"day": "WEDNESDAY",
"end": "6:00PM"
},
{
"start": "4:00PM",
"day": "FRIDAY",
"end": "6:00PM"
},
{
"start": "12:00PM",
"day": "MONDAY",
"end": "2:00PM"
},
{
"start": "12:00PM",
"day": "WEDNESDAY",
"end": "2:00PM"
},
{
"start": "12:00PM",
"day": "FRIDAY",
"end": "2:00PM"
}
],
"LastName2, FirstName2": [
{
"start": "9:00AM",
"day": "MONDAY",
"end": "10:30AM"
},
{
"start": "9:00AM",
"day": "WEDNESDAY",
"end": "10:30AM"
},
{
"start": "11:00AM",
"day": "MONDAY",
"end": "1:00PM"
},
{
"start": "11:00AM",
"day": "WEDNESDAY",
"end": "1:00PM"
}
]
}
"teachers": {
"LastName, FirstName": [
{
"start": "10:00AM",
"day": "MONDAY",
"end": "12:00PM"
},
{
"start": "10:00AM",
"day": "WEDNESDAY",
"end": "12:00PM"
},
{
"start": "10:00AM",
"day": "FRIDAY",
"end": "12:00PM"
},
{
"start": "4:00PM",
"day": "MONDAY",
"end": "6:00PM"
},
{
"start": "4:00PM",
"day": "WEDNESDAY",
"end": "6:00PM"
},
{
"start": "4:00PM",
"day": "FRIDAY",
"end": "6:00PM"
},
{
"start": "12:00PM",
"day": "MONDAY",
"end": "2:00PM"
},
{
"start": "12:00PM",
"day": "WEDNESDAY",
"end": "2:00PM"
},
{
"start": "12:00PM",
"day": "FRIDAY",
"end": "2:00PM"
}
],
"LastName2, FirstName2": [
{
"start": "9:00AM",
"day": "MONDAY",
"end": "10:30AM"
},
{
"start": "9:00AM",
"day": "WEDNESDAY",
"end": "10:30AM"
},
{
"start": "11:00AM",
"day": "MONDAY",
"end": "1:00PM"
},
{
"start": "11:00AM",
"day": "WEDNESDAY",
"end": "1:00PM"
}
]
},
"rooms": {
"Room 101": [
{
"start": "8:00AM",
"day": "TUESDAY",
"end": "9:30AM"
}
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.acme.schooltimetabling.defaultTimes;

import java.util.BitSet;

/**
* All classes that inherit this class will be a part of a prototype pattern;
* Each class should be implemented as a singleton
* When implementing this class, the classes should make sure that the preference, acceptable, and conflict
* {@link BitSet}s cover the whole time span of
* 7AM-10PM for MTWRF
*/
public interface DefaultTime {
BitSet getPreference();
BitSet getAcceptable();
BitSet getConflict();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package org.acme.schooltimetabling.defaultTimes;

import org.acme.schooltimetabling.constants.Constants;
import org.acme.schooltimetabling.constants.Days;
import org.acme.schooltimetabling.helperClasses.BitSetHelper;

import java.util.BitSet;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.EnumSet;
import java.util.List;

public class DefaultTimeAll implements DefaultTime{
private static final DefaultTimeAll INSTANCE;
private BitSet conflict;
private BitSet acceptable;
private BitSet preference;

static {
INSTANCE = new DefaultTimeAll();
INSTANCE.conflict = new BitSet();
INSTANCE.acceptable = new BitSet();
INSTANCE.preference = new BitSet();

final int NUM_BLOCKS_FULL_HOUR = 2;
final DateTimeFormatter FORMATTER = Constants.TIME_FORMATTER;
EnumSet<Days> defaultDays = EnumSet.allOf(Days.class);

//I'm trying to set preferred times outside of prime time to help solver push more lectures into this time.
List<LocalTime> preferredTimes = List.of(
LocalTime.parse("7:00AM", FORMATTER),
LocalTime.parse("8:00AM", FORMATTER),
LocalTime.parse("3:00PM", FORMATTER),
LocalTime.parse("4:00PM", FORMATTER),
LocalTime.parse("5:00PM", FORMATTER)

);

for(LocalTime localTime : preferredTimes){
INSTANCE.preference.or(BitSetHelper.timeSlotBitSet(localTime, NUM_BLOCKS_FULL_HOUR, defaultDays));
}


List<LocalTime> acceptableTimes = List.of(
LocalTime.parse("9:00AM", FORMATTER),
LocalTime.parse("10:00AM", FORMATTER),
LocalTime.parse("11:00AM", FORMATTER),
LocalTime.parse("12:00PM", FORMATTER),
LocalTime.parse("1:00PM", FORMATTER),
LocalTime.parse("2:00PM", FORMATTER)
);
for(LocalTime localTime : acceptableTimes) {
INSTANCE.acceptable.or(BitSetHelper.timeSlotBitSet(localTime, NUM_BLOCKS_FULL_HOUR, defaultDays));
}

List<LocalTime> conflictTimes = List.of(
LocalTime.parse("6:00PM", FORMATTER),
LocalTime.parse("7:00PM", FORMATTER),
LocalTime.parse("8:00PM", FORMATTER),
LocalTime.parse("9:00PM", FORMATTER)
);
for(LocalTime localTime : conflictTimes) {
INSTANCE.conflict.or(BitSetHelper.timeSlotBitSet(localTime, NUM_BLOCKS_FULL_HOUR, defaultDays));
}
}

private DefaultTimeAll(){}

public static DefaultTimeAll getInstance(){
return INSTANCE;
}

@Override
public BitSet getPreference(){
return (BitSet) preference.clone();
}

@Override
public BitSet getAcceptable() {
return (BitSet) acceptable.clone();
}

@Override
public BitSet getConflict() {
return (BitSet) conflict.clone();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package org.acme.schooltimetabling.defaultTimes;

import org.acme.schooltimetabling.constants.Constants;
import org.acme.schooltimetabling.constants.Days;
import org.acme.schooltimetabling.helperClasses.BitSetHelper;

import java.util.BitSet;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.EnumSet;
import java.util.List;

public class DefaultTimeEvening implements DefaultTime{
private static final DefaultTimeEvening INSTANCE;
private BitSet conflict;
private BitSet acceptable;
private BitSet preference;

static {
INSTANCE = new DefaultTimeEvening();
INSTANCE.conflict = new BitSet();
INSTANCE.acceptable = new BitSet();
INSTANCE.preference = new BitSet();

final int NUM_BLOCKS_FULL_HOUR = 2;
DateTimeFormatter FORMATTER = Constants.TIME_FORMATTER;
EnumSet<Days> defaultDays = EnumSet.allOf(Days.class);

List<LocalTime> acceptableTimes = List.of(
LocalTime.parse("1:00PM", FORMATTER),
LocalTime.parse("2:00PM", FORMATTER),
LocalTime.parse("3:00PM", FORMATTER),
LocalTime.parse("4:00PM", FORMATTER),
LocalTime.parse("5:00PM", FORMATTER)
);
for (LocalTime localTime : acceptableTimes) {
INSTANCE.acceptable.or(BitSetHelper.timeSlotBitSet(localTime, NUM_BLOCKS_FULL_HOUR, defaultDays));
}

List<LocalTime> conflictTimes = List.of(
LocalTime.parse("7:00AM", FORMATTER),
LocalTime.parse("8:00AM", FORMATTER),
LocalTime.parse("9:00AM", FORMATTER),
LocalTime.parse("10:00AM", FORMATTER),
LocalTime.parse("11:00AM", FORMATTER),
LocalTime.parse("12:00PM", FORMATTER),
LocalTime.parse("6:00PM", FORMATTER),
LocalTime.parse("7:00PM", FORMATTER),
LocalTime.parse("8:00PM", FORMATTER),
LocalTime.parse("9:00PM", FORMATTER)
);
for (LocalTime localTime : conflictTimes) {
INSTANCE.conflict.or(BitSetHelper.timeSlotBitSet(localTime, NUM_BLOCKS_FULL_HOUR, defaultDays));
}
}

private DefaultTimeEvening() {}

public static DefaultTimeEvening getInstance() {
return INSTANCE;
}

@Override
public BitSet getPreference() {
return (BitSet) preference.clone();
}

@Override
public BitSet getAcceptable() {
return (BitSet) acceptable.clone();
}

@Override
public BitSet getConflict() {
return null;
}
}
Loading
Loading