Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Can you help me with this place? Read through the code, and tell me what the out

ID: 3885274 • Letter: C

Question

Can you help me with this place?

Read through the code, and tell me what the output of each stage or explain how each method works?

I tried to understand it but still got confused.

This code is about to defuse the bomb by interning each password for each stage.

The code:

V

V

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void explode(const int code);

void readInput(char buffer[], const int bufferSize){
int i;
int c;
for(i=0; i<=bufferSize; ++i){
c = getchar();

/* this checks that you are at the end of the line */
/* Windows encodes an end-of-line as two characters: */
/* Linux just uses */
/* This will accept either version */
if(c == ' '){
c = getchar();
}

if(c == ' '){
break;
}
else if(i<bufferSize){
buffer[i] = (char)c;
}
}

}

void part1(){
const int bufferSize = 12;
char buffer[bufferSize];
char target[] = "Optimus";
int i;
const int n = strlen(target);

readInput(buffer, bufferSize);

for(i=0; i<n; i++){
if(buffer[i] != target[i]){
explode(1);
}
}
}

int part2(){
int i,z;

const int bufferSize = 12;
char buffer[bufferSize];

readInput(buffer, bufferSize);

/* atoi takes a string representation of a number (e.g. "1234") */
/* and converts it to an int representation of the number (e.g. 1234) */
z = atoi(buffer);
if(!z)
explode(20);

z += 22;

if(z != 53)
explode(21);

return z / 2;
}

void part3(){
int i,z;

const int bufferSize = 12;
char buffer[bufferSize];


readInput(buffer, bufferSize);

i=0;
while(i < bufferSize && (buffer[i] == 'H' || buffer[i] == 'w')){
i++;
}

if(i != 4)
explode(70);
}

void part4(const int x){
int i,y,z;
const int bufferSize = 12;
char buffer[bufferSize];

readInput(buffer, bufferSize);

/* atoi takes a string representation of a number (e.g. "1234") */
/* and converts it to an int representation of the number (e.g. 1234) */
z = atoi(buffer);
if(!z)
explode(20);

y = z;
for(i=0; i<50; i++){
y += z * i * y;
}

if(z + 12 != x){
explode(21);
}
}


void part5(char buffer[], const int bufferSize){
const char allowed[] = "a3hUD6Cc8bTzv";
int i, j, x;

for(i=0; i<bufferSize; ++i){
char c;

x = getchar();
if(x == EOF)
explode(10);
else if(x == ' ')
explode(11);

c = (char)x;
for(j=2; j<10; ++j){
if(c == allowed[j]){
buffer[i] = c + 1;
break;
}
}
if(j == 10){
explode(12);
}

}

j = 0;
for(i=1; i<bufferSize; ++i){
if(buffer[i] != buffer[i-1]){
j = 1;
break;
}
}
if(j == 0)
explode(13);


/* Windows encodes an end-of-line as two characters: */
/* Linux just uses */
/* This will accept either version */
x = getchar();
if(x == ' ')
x = getchar();
if(x != ' ')
explode(14);
}


void part6(const char buf1[], const int bufSize){
char buf2[bufSize];
int i, c;

readInput(buf2, bufSize);

for(i=0; i<bufSize; ++i){
if(buf1[i] != buf2[bufSize - 1 - i])
explode(-44);
}

}

void part7(int *x){
int y = 19;
int *z = &y;
int k;

const int bufSize = 12;
char buffer[bufSize];

*z -= 3;

readInput(buffer, bufSize);

/* atoi takes a string representation of a number (e.g. "1234") */
/* and converts it to an int representation of the number (e.g. 1234) */
k = atoi(buffer);

if(k + *x != y)
explode(70);

}

void theBomb(){
const int bufSize = 10;
char buffer[bufSize];
int result;

printf("Enter the stage 1 password: ");
part1();
printf("Stage 1 defused. ");

printf("Enter the stage 2 password: ");
result = part2();
printf("Stage 2 defused. ");

printf("Enter the stage 3 password: ");
part3();
printf("Stage 3 defused. ");

printf("Enter the stage 4 password: ");
part4(result);
printf("Stage 4 defused. ");

printf("Enter the stage 5 password: ");
part5(buffer, bufSize);
printf("Stage 5 defused. ");

printf("Enter the stage 6 password: ");
part6(buffer, bufSize);
printf("Stage 6 defused. ");


printf("Enter the stage 7 password: ");
part7(&result);
printf("Stage 7 defused. ");

printf("The entire bomb has been defused. ");
}

Explanation / Answer

Hi,
There are 7 stages of defusions in this program for a bomb, at each stage something needs to be performed, so that the bomd doesn't explode, and each of these parts uses 2 helper functions,
readInput- which reads input given the destination and its size,
explode- used to explode the bomb
Part1- To enter the string 'Optimus' , then stage 1 is diffused, if anything else entered, it explodes
Part2- User needs to enter 31, as its added with 22 and compared with 53, if he does, its past stage 2(26 is returned), if not bomb explodes
Part3- User should enter characters with H or W appearing exactly 4 number of times, if not it explodes
Part4- This takes input from o/p of Part2, but its not used and explodes if 14 is not entered, if entered goes to next stage
Part5- User has to enter exactly 12 chars of which only allowed are 'a3hUD6Cc8bTzv' and also, any adjacent pair among the chars should be same, otherwise bomb explodes.
Part6-User has to enter an anagram, it should read same even after reversal, else bomb explodes
Part7- it uses part2 o/p as input which is 26 and checks if input in int format+ 26 ==19, if not stages 7 is diffused, hence the full bomb.
Thumbs up if this was helpful, otherwise let me know in comments.