files
files
other
TurnChangeRequest request;
request.mtype = 1;
request.droppedPassengersCount = droppedPassengersCount;
request.pickedUpPassengersCount = pickedUpPassengersCount;
return request;
if (sharedMem->elevatorMovementInstructions[i] == 'u') {
elevators[i].currentFloor++;
}
else if (sharedMem->elevatorMovementInstructions[i] == 'd') {
elevators[i].currentFloor--;
}
}
}
if (overloadedElevators == numElevators) {
return elevatorMaxCapacity / 2;
}
other
return elevatorMaxCapacity;
}
int N, K, M, T;
key_t shmKey, mainQueueKey, solverQueueKeys[MAX_SOLVERS];
int shmId, mainQueueId, solverQueueIds[MAX_SOLVERS];
MainSharedMemory *sharedMem;
ElevatorState elevators[MAX_ELEVATORS];
PassengerState passengers[MAX_PASSENGERS];
int totalPassengers = 0;
void readInputFile();
void initializeIPC();
void cleanup();
void elevatorLoop();
void obtainAuthString(int elevatorNumber, int passengerCount, char *authString);
int generateAuthString(int length, char *authString, int solverId);
int result = 1;
for (int i = 0; i < exponent; ++i) {
result *= base;
}
return result;
}
void readInputFile() {
FILE *file = fopen("input.txt", "r");
if (!file) {
perror("Failed to open input.txt");
exit(1);
}
int temp;
fclose(file);
//printf("Floors: %d\nSolvers: %d\nElevatros: %d\nTurn no of last req: %d\n",
K,M,N,T);
}
void initializeIPC() {
if (shmId < 0) {
perror("Failed to get shared memory");
exit(1);
}
if (mainQueueId < 0) {
perror("Failed to get main message queue");
exit(1);
}
if (solverQueueIds[i] < 0) {
perror("Failed to get solver message queue");
exit(1);
}
}
}
void cleanup() {
if (shmdt(sharedMem) == -1) {
perror("Failed to detach shared memory");
}
other
SolverRequest setTarget;
setTarget.mtype = 2;
setTarget.elevatorNumber = elevatorNumber;
setTarget.authStringGuess[0] = '\0';
else {
fprintf(stderr, "Failed to obtain auth string for elevator %d\n",
elevatorNumber);
exit(1);
}
other
int temp = i;
currentString[length] = '\0';
SolverRequest guess;
guess.mtype = 3;
guess.elevatorNumber = 0;
strcpy(guess.authStringGuess, currentString);
SolverResponse response;
if (response.guessIsCorrect) {
strcpy(authString, currentString);
return 1;
}
}
return 0;
}
void generateAndUpdateAuthStrings(MainSharedMemory *sharedMem, ElevatorState
elevators[], int numElevators) {
other
}
}
void elevatorLoop() {
initializeSimulation(&finished, &turnNumber);
while (!finished) {
TurnChangeResponse response;
if (msgrcv(mainQueueId, &response, sizeof(TurnChangeResponse) -
sizeof(long), 2, 0) == -1) {
perror("Failed to receive from helper");
exit(1);
}
if (response.finished) {
finished = 1;
break;
}
turnNumber = response.turnNumber;
initializePassengerCounters(&pickedUpPassengersCount,
&droppedPassengersCount);
PassengerRequest pr = sharedMem->newPassengerRequests[i];
passengers[totalPassengers].requestId = pr.requestId;
passengers[totalPassengers].startFloor = pr.startFloor;
passengers[totalPassengers].requestedFloor = pr.requestedFloor;
passengers[totalPassengers].inElevator = -1;
passengers[totalPassengers].isServed = 0;
totalPassengers++;
}
resetElevatorState(sharedMem, N);
memset(sharedMem->pickedUpPassengers, 0, sizeof(sharedMem-
>pickedUpPassengers));
memset(sharedMem->droppedPassengers, 0, sizeof(sharedMem-
>droppedPassengers));
int waitingPassengers[MAX_PASSENGERS];
int waitingCount = 0;
int minDistance = K + 1;
int passengerIndex = -1;
minDistance = distance;
passengerIndex = pIndex;
}
}
if (passengerIndex != -1) {
sharedMem->elevatorMovementInstructions[i] = 'u';
elevator->direction = 'u';
}
else if (elevator->currentFloor > passenger->startFloor) {
sharedMem->elevatorMovementInstructions[i] = 'd';
elevator->direction = 'd';
}
else {
sharedMem->elevatorMovementInstructions[i] = 's';
}
}
}
int minDistance = K + 1;
int targetFloor = elevator->currentFloor;
sharedMem->elevatorMovementInstructions[i] = 'u';
elevator->direction = 'u';
sharedMem->elevatorMovementInstructions[i] = 'd';
elevator->direction = 'd';
}
else {
sharedMem->elevatorMovementInstructions[i] = 's';
if (elevator->passengerDestinations[j] == elevator-
>currentFloor) {
if (passengers[p].requestId == requestId) {
passengers[p].isServed = 1;
passengers[p].inElevator = -1;
break;
}
int x = 5, y = 10;
Movements(&x, &y, sizeof(int));
for (int k = j; k < elevator->passengerCount - 1; ++k)
{
elevator->passengersInElevator[k] = elevator-
>passengersInElevator[k + 1];
elevator->passengerDestinations[k] = elevator-
>passengerDestinations[k + 1];
}
elevator->passengerCount--;
}
else {
j++;
}
}
}
}
}
TurnChangeRequest request;
request = createTurnChangeRequest(droppedPassengersCount,
pickedUpPassengersCount);
int main() {
readInputFile();
initializeIPC();
elevatorLoop();
cleanup();
return 0;
}