#include #include #include /* * This file was generated by OpenAI and was not modified apart from this comment. The prompt was: * consider a text file like this: * 22-65,22-66 * 91-94,63-91 * 6-88,5-31 * 85-86,64-86 * 40-65,40-65 * 25-82,24-94 * * write c program that: * - reads a text file like this line by line and count how often one of the two ranges contains the other. * - accepts the filename via command line arg * - outputs the result using printf with a suitable string * A range r1 contains the other r2 when the r1.lower <= r2.lower and r1.upper >= r2.upper * the program needs to output how often that is the case in the entire file */ // Structure to represent a range in the file struct range { int lower; int upper; }; // Function to parse a line from the file and return the two ranges in the line void parse_line(const char *line, struct range *range1, struct range *range2) { // Parse the two ranges in the line sscanf(line, "%d-%d,%d-%d", &range1->lower, &range1->upper, &range2->lower, &range2->upper); } int main(int argc, char *argv[]) { // Check if a filename was provided if (argc < 2) { fprintf(stderr, "Error: No filename provided\n"); return 1; } // Open the file for reading FILE *fp = fopen(argv[1], "r"); if (fp == NULL) { fprintf(stderr, "Error: Unable to open file for reading\n"); return 1; } // Read the file line by line char line[256]; int count = 0; while (fgets(line, sizeof(line), fp) != NULL) { // Parse the two ranges in the line struct range range1, range2; parse_line(line, &range1, &range2); // Check if one range contains the other if ((range1.lower <= range2.lower && range1.upper >= range2.upper) || (range2.lower <= range1.lower && range2.upper >= range1.upper)) { count++; } } // Close the file fclose(fp); // Print the result printf("The file contains %d lines where one of the two ranges contains the other\n", count); return 0; }