Skip to content

Commit 092caa8

Browse files
committed
Rewrite generate.py
1 parent 980596e commit 092caa8

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

chapter-06/recipe-03/cxx-example/generate.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
Generates C++ vector of prime numbers up to max_number
33
using sieve of Eratosthenes.
44
"""
5+
import pathlib
56
import sys
67

78
# for simplicity we do not verify argument list
89
max_number = int(sys.argv[-2])
9-
output_file_name = sys.argv[-1]
10+
output_file_name = pathlib.Path(sys.argv[-1])
1011

1112
numbers = range(2, max_number + 1)
1213
is_prime = {number: True for number in numbers}
@@ -19,12 +20,20 @@
1920
is_prime[current_position] = False
2021

2122
primes = (number for number in numbers if is_prime[number])
22-
with open(output_file_name, 'w') as f:
23-
f.write('#pragma once\n')
24-
f.write('#include <vector>\n\n')
25-
f.write('const std::size_t max_number = {0};\n'.format(max_number))
26-
f.write('std::vector<int> & primes() {\n')
27-
f.write(' static std::vector<int> primes;\n')
28-
for number in primes:
29-
f.write(' primes.push_back({0});\n'.format(number))
30-
f.write(' return primes;\n}')
23+
code = """#pragma once
24+
25+
#include <vector>
26+
27+
const std::size_t max_number = {max_number};
28+
29+
std::vector<int> & primes() {{
30+
static std::vector<int> primes;
31+
32+
{push_back}
33+
34+
return primes;
35+
}}
36+
"""
37+
push_back = '\n'.join([' primes.push_back({:d});'.format(x) for x in primes])
38+
output_file_name.write_text(
39+
code.format(max_number=max_number, push_back=push_back))

0 commit comments

Comments
 (0)