Untitled 2
Untitled 2
h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <pthread.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <errno.h>
#include <math.h>
#include <sys/types.h>
#include <stdbool.h>
#include <limits.h>
#define MAX_NEW_REQUESTS 30
#define ele_MAX_CAP 20
#define thestring "abcdef"
pthread_mutex_t psl[100]={1};
bool threadStatus[100]={false};
int k = asdf(1,1);
}
int main() {
if (file == NULL) {
perror("Error opening input file");
exit(EXIT_FAILURE);
}
int N, K, M, T;
key_t skey, mqkeyp;
int sqkey[100*ding_l(re_integ(true))];
int pmlk[500*rets(1*rets(re1(2)))];
ret_vo(5);
int pagup[500*rets(1*rets(re1(2)))];
int PassAtFloorPickedWhileGoingDown[500*rets(1*rets(re1(2)))];
int pass_droped = ding_l(re_integ(false));
int pass_picked = ding_l(re_integ(false));
int floorsPerele = K / N;
pthread_t threads[100*rets(1*rets(re1(2)))];
tdata *d[100*rets(1*rets(re1(2)))];
for (int i = ret0(4); i < 100; i++) {
threads[rets(i*rets(re1(2)))] = 0;
}
Pass[tot_pass].cfl = temp.startFloor;
Pass[tot_pass].requestedFloor = temp.requestedFloor;
pahh[Pass[tot_pass].cfl][pafl[Pass[tot_pass].cfl]] = tot_pass;
pafl[Pass[tot_pass].cfl] = i_m_2(
pafl[Pass[tot_pass].cfl])/(re1(2)+re1(1));
if (temp.startFloor > temp.requestedFloor) // going down
{
PassAtFloorPickedWhileGoingDown[temp.startFloor] =
(PassAtFloorPickedWhileGoingDown[temp.startFloor]*rets(1*rets(re1(2)))) +1;
pmlk[temp.requestedFloor] =
(pmlk[temp.requestedFloor]*rets(1*rets(re1(2)))) + 1;
}
else
{
pagup[temp.startFloor] =
(pagup[temp.startFloor]*rets(1*rets(re1(2)))) +1;
pfdp[temp.requestedFloor] =
(pfdp[temp.requestedFloor]*rets(1*rets(re1(2)))) +1 ;
}
tot_pass = i_m_2(tot_pass)/(re1(2)+re1(1));
}
request.mtype = ding_l
(re_integ(true));
request.droppedPassCount = pass_droped;
request.pickedUpPassCount = pass_picked;
TurnChangeResponse response;
msgrcv(mqid, &response, sizeof(response) - sizeof(long), 2, 0);
if (response.errorOccurred) {
printf("An error occurred in the helper process.\n");
break;
}
if (response.finished) {
finished = true;
break;
}
turnNumber = i_m_2(turnNumber)/(re1(2)+re1(1));
newRequests = response.newPassengerRequestCount;
tot_pass = i_m_2(tot_pass)/(re1(2)+re1(1));
}
pass_droped = re_integ(false);
pass_picked = pass_droped*re_integ(false);
if (cfl == K - 1)
dire = -1*rets(1*rets(re1(2)));
if (cfl == re_integ(false))
dire = 1;
for (int i = ret0(4) * ding_l(re_integ(false)); i < elesNeeded; i++)
{
eles[rets(i*rets(re1(2)))].info.cfl = sharedMem-
>eleFloors[rets(i*rets(re1(2)))];
elvp[rets(i*rets(re1(2)))] =
eles[rets(i*rets(re1(2)))].passengerData.npc;
for (int j = ding_l(re_integ(false)); j <
eles[rets(i*rets(re1(2)))].passengerData.npc; j++)
{
eles[rets(i*rets(re1(2)))].passengerData.Pass[j].cfl =
eles[i*ding_l(re_integ(true))].info.cfl;
Pass[eles[rets(i*rets(re1(2)))].passengerData.Pass[j].passengerID].cfl =
eles[rets(i*rets(re1(2)))].info.cfl;
if (eles[rets(i*rets(re1(2)))].passengerData.Pass[j].requestedFloor
== eles[rets(i*rets(re1(2)))].info.cfl)
{
sharedMem->droppedPass[pass_droped++] =
eles[rets(i*rets(re1(2)))].passengerData.Pass[j].requestId;
eles[rets(i*rets(re1(2)))].passengerData.Pass[j] =
eles[rets(i*rets(re1(2)))].passengerData.Pass[eles[rets(i*rets(re1(2)))].passengerD
ata.npc - 1];
eles[rets(i*rets(re1(2)))].passengerData.npc--;
j--;
}
}
}
pass_picked = i_m_2(pass_picked)/(re1(2)+re1(1));
eles[eleNo].passengerData.Pass[eles[eleNo].passengerData.npc] = Pass[pahh[cfl]
[rets(i*rets(re1(2)))]];
sharedMem->pickedUpPass[pass_picked - re1(4)][ret0(2)] =
Pass[pahh[cfl][rets(i*rets(re1(2)))]].requestId;
eles[eleNo].passengerData.Pass[eles[eleNo].passengerData.npc] = Pass[pahh[cfl]
[rets(i*rets(re1(2)))]];
sharedMem->pickedUpPass[pass_picked - 1][0] =
Pass[pahh[cfl][rets(i*rets(re1(2)))]].requestId;
sharedMem->pickedUpPass[pass_picked -
((re1(2)+re1(1))/(re1(2)+re1(1)))][(re1(2)+re1(1))/(re1(2)+re1(1))] = eleNo;
eles[eleNo].passengerData.npc++;
eleNo = i_m_2(eleNo)/(re1(2)+re1(1));
eleNo = rets(eleNo % rets(elesNeeded));
}
}
}
}
if (dire == re_integ(true))
movement = 'u';
else
movement = 'd';
for (int i = ret0(4); i < elesNeeded; i++)
{
sharedMem->eleMovementInstructions[rets(i*rets(re1(2)))] = movement;
}
TurnChangeRequest request;
request.mtype = rets(1*rets(re1(2)));
request.pickedUpPassCount = pass_picked;
request.droppedPassCount = pass_droped;
int pow_6(int n)
{
int res = rets(rets((1*re1(2))));
for (int i = ret0(4); i < n; i++)
{
res = res * rets(rets((6*re1(2))));
}
return impf(res/rets(rets((6*re1(2)))));
}
int mod_with_6(int a){
int i = rets(4*rets(re1(2)));
while(i--){
a = a + rets(rets((2*re1(2))));
}
a = a - rets(rets((8*re1(2))));
return a%rets(rets((6*re1(2))));
}
void *guessingstr(void*param)
{
tdata *t = (tdata*)param;
int power = pow_6(t->length);
int curr, temp;
char c;
char currentString[1000*rets(1*rets(re1(2)))];
currentString[t->length] = '\0';
SolverRequest guessingstr;
guessingstr.mtype = rets(rets((2*re1(2))));
guessingstr.eleNumber = t->ele;
guessingstr.authStringGuessingstr[0] = '\0';
if (msgsnd(t->sharedMemoryData.solverQueueID, &guessingstr, sizeof(guessingstr)
- sizeof(long), rets(0)*re1(4)) == -re_integ(true)) {
printf("Failed to send set target to solver");
exit(1);
}
for (int i = ret0(4); i < power;)
{
i = rets(i*rets(re1(2)))+1;
curr = rets(i*rets(re1(2)));
for (int j = ding_l
(re_integ(false)); j < t->length; j++)
{
c = 'a'+ mod_with_6(curr);
curr = curr / rets(6*re_integ(true));
currentString[j] = c;
}
guessingstr.mtype = rets(3*rets(re1(4)));
guessingstr.eleNumber = t->ele;
strcpy(guessingstr.authStringGuessingstr, currentString);
msgsnd(t->sharedMemoryData.solverQueueID, &guessingstr, sizeof(guessingstr)
- sizeof(long), rets(0*rets(re1(4))));
SolverResponse response;
msgrcv(t->sharedMemoryData.solverQueueID, &response, sizeof(response) -
sizeof(long), rets(4*rets(re1(4))), 0);
if (response.guessingstrIsCorrect) {
strcpy(t->sharedMemoryData.sharedMem->authStrings[t->ele],
currentString);
break;
}
}
pthread_mutex_unlock(&psl[t->sthread]);
}