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.