#include #include enum passage_status { OPEN, CLOSED }; struct tank { int volume; enum passage_status left_passage; enum passage_status right_passage; struct tank *next; }; void print_tanks(struct tank *tanks); struct tank *init_tanks(int n_tanks, char *tank_volumes[]); void toggle_passage(struct tank *tanks, int position); // DO NOT CHANGE THIS MAIN FUNCTION int main(int argc, char *argv[]) { struct tank *tanks = init_tanks(argc - 1, &argv[1]); print_tanks(tanks); int position; printf("Enter passage: "); while (scanf("%d", &position) == 1) { toggle_passage(tanks, position); print_tanks(tanks); printf("Enter passage: "); } return 0; } void toggle_passage(struct tank *tanks, int position) { // TODO: Implement this. } // DO NOT CHANGE THIS FUNCTION // prints a linked list of tanks in a formatted fashion. void print_tanks(struct tank *tanks) { printf("Tanks:\n"); // Top level of tanks (roof) struct tank *curr = tanks; while (curr != NULL) { printf("/----\\"); curr = curr->next; } printf("\n"); // Middle level of tanks (volumes & passages) curr = tanks; while (curr != NULL) { printf( "%c %02d %c", curr->left_passage == CLOSED ? '|' : ' ', curr->volume, curr->right_passage == CLOSED ? '|' : ' ' ); curr = curr->next; } printf("\n"); // Bottom level of tanks (floor) curr = tanks; while (curr != NULL) { printf("\\----/"); curr = curr->next; } curr = tanks; printf("\n"); } // DO NOT CHANGE THIS FUNCTION // Given an array of strings, creates a linked list of tanks containing // volumes specified in these strings. struct tank *init_tanks(int n_tanks, char *tank_volumes[]) { struct tank *head = NULL; struct tank *tail = NULL; for (int i = 0; i < n_tanks; ++i) { struct tank *new_tank = malloc(sizeof(struct tank)); new_tank->volume = atoi(tank_volumes[i]); new_tank->left_passage = CLOSED; new_tank->right_passage = CLOSED; new_tank->next = NULL; if (head == NULL) { head = new_tank; tail = new_tank; } else { tail->next = new_tank; tail = tail->next; } } return head; }