| 1 | import sys |
| 2 | |
| 3 | def generate_subfunction(file, start, end): |
| 4 | file.write(f"int is_even_{start}_{end}(int num) {{\n") |
| 5 | conditions = "" |
| 6 | for i in range(start, end + 1): |
| 7 | even_check = "1" if i % 2 == 0 else "0" |
| 8 | conditions += f"(num == {i}) ? {even_check} : " |
| 9 | conditions += "0" |
| 10 | file.write(f" return {conditions};\n") |
| 11 | file.write("}\n\n") |
| 12 | |
| 13 | def generate_c_file(max_number): |
| 14 | with open("is_even.c", "w") as file: |
| 15 | # Write the headers |
| 16 | file.write("#include <stdio.h>\n\n") |
| 17 | |
| 18 | # Generate subfunctions in chunks of 10,000 |
| 19 | for i in range(1, max_number + 1, 10000): |
| 20 | start = i |
| 21 | end = min(i + 9999, max_number) |
| 22 | generate_subfunction(file, start, end) |
| 23 | |
| 24 | # Generate the main is_even function |
| 25 | file.write("int is_even(int num) {\n") |
| 26 | for i in range(1, max_number + 1, 10000): |
| 27 | start = i |
| 28 | end = min(i + 9999, max_number) |
| 29 | file.write(f" if (num >= {start} && num <= {end}) return is_even_{start}_{end}(num);\n") |
| 30 | file.write(" return 0;\n") |
| 31 | file.write("}\n\n") |
| 32 | |
| 33 | # Write the main function |
| 34 | file.write("int main() {\n") |
| 35 | file.write(" for (int i = 1; i <= {0}; i++) {{\n".format(max_number)) |
| 36 | file.write(" printf(\"%d is %s\\n\", i, is_even(i) ? \"even\" : \"odd\");\n") |
| 37 | file.write(" }\n") |
| 38 | file.write(" return 0;\n") |
| 39 | file.write("}\n") |
| 40 | |
| 41 | if __name__ == "__main__": |
| 42 | if len(sys.argv) != 2: |
| 43 | print("Usage: python generate_c.py <max_number>") |
| 44 | else: |
| 45 | max_number = int(sys.argv[1]) |
| 46 | generate_c_file(max_number) |
| 47 |
myceliatrix / Is even
Last active 2 months ago
A generator that spits out a massive amount of C for a useless task