myceliatrix revised this gist 6 hours ago. Go to revision
1 file changed, 46 insertions
is_even_generator.py(file created)
| @@ -0,0 +1,46 @@ | |||
| 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) | |
Newer
Older