Pass tests

This commit is contained in:
Isaac Shoebottom 2023-12-02 22:41:41 -04:00
parent 64f9b63215
commit 025b2640fc
2 changed files with 15 additions and 11 deletions

View File

@ -79,6 +79,14 @@ void destroyDiskQueue(DiskQueue *queue) {
free(queue); free(queue);
} }
int calcDistance(int position, int destination) {
if (position > destination) {
return destination + (10000 - position);
} else {
return destination - position;
}
}
DiskRequest* findClosest(DiskQueue *queue, int position, double time) { DiskRequest* findClosest(DiskQueue *queue, int position, double time) {
DiskRequest *current = queue->head; DiskRequest *current = queue->head;
DiskRequest *closest = NULL; DiskRequest *closest = NULL;
@ -87,20 +95,14 @@ DiskRequest* findClosest(DiskQueue *queue, int position, double time) {
if (closest == NULL) { // If there is no closest yet, set it to the current if (closest == NULL) { // If there is no closest yet, set it to the current
closest = current; closest = current;
} else { } else {
int closestDistance = closest->position - position; // Distance from the closest to the current position, negative means down (bad) int closestDistance = calcDistance(position, closest->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) int currentDistance = calcDistance(position, current->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 if (currentDistance < closestDistance) { // If the current is closer than the closest
closest = current; closest = current;
} }
} }
} }
}
current = current->next; current = current->next;
} }
// Bad
if (closest == NULL) {
return NULL;
}
return closest; return closest;
} }

View File

@ -28,3 +28,5 @@ DiskRequest *dequeue(DiskQueue *queue);
DiskRequest *findClosest(DiskQueue *queue, int position, double time); DiskRequest *findClosest(DiskQueue *queue, int position, double time);
void destroyDiskQueue(DiskQueue *queue); void destroyDiskQueue(DiskQueue *queue);
int calcDistance(int position, int destination);