Pass tests without introducing new function

This commit is contained in:
Isaac Shoebottom 2023-12-02 23:12:22 -04:00
parent 64f9b63215
commit 42cb09f3bd
2 changed files with 21 additions and 13 deletions

View File

@ -81,26 +81,34 @@ void destroyDiskQueue(DiskQueue *queue) {
DiskRequest* findClosest(DiskQueue *queue, int position, double time) {
DiskRequest *current = queue->head;
DiskRequest *closest = NULL;
DiskRequest *next = NULL;
DiskRequest *first = NULL;
while (current != NULL) {
if (current->time <= time) { // Filter out requests that haven't come in yet
if (closest == NULL) { // If there is no closest yet, set it to the current
closest = current;
if (first == NULL) {
first = current;
} else {
int closestDistance = closest->position - position; // Distance from the closest to the current position, negative means down (bad)
int currentDistance = current->position - position; // Distance from the current to the current position, negative means down (bad)
if (currentDistance > 0) { // If the current is up
if (currentDistance < closestDistance) { // If the current is closer than the closest
closest = current;
if (current->position < first->position) {
first = current;
}
}
int currentDistance = current->position - position; // Distance from the current to the current position, negative means down (bad)
if (currentDistance > 0) { // If the current is up
if (next == NULL) { // If there is no next yet, set it to the current
next = current;
} else {
int nextDistance = next->position - position; // Distance from the next to the current position, negative means down (bad)
if (currentDistance < nextDistance) { // If the current is closer than the next
next = current;
}
}
}
}
current = current->next;
}
// Bad
if (closest == NULL) {
return NULL;
// If we didn't find a request that is above the current position, return the first as a fallback
if (next == NULL) {
return first;
}
return closest;
return next;
}

View File

@ -93,4 +93,4 @@ int main(int argc, char **argv) {
destroyDiskQueue(queue);
return 0;
}
}