Skip to content

Commit e73b6d0

Browse files
committed
Add minifier by Claude Sonnet 4.5
1 parent e67222a commit e73b6d0

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

cp-algo/util/minify.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#!/usr/bin/env python3
2+
"""
3+
Simple C++ code minifier for competitive programming.
4+
Removes comments, extra whitespace, and compresses the code.
5+
"""
6+
7+
import re
8+
import sys
9+
10+
def minify_cpp(code):
11+
# Remove single-line comments
12+
code = re.sub(r'//.*?$', '', code, flags=re.MULTILINE)
13+
14+
# Remove multi-line comments (but preserve #line directives content)
15+
code = re.sub(r'/\*.*?\*/', '', code, flags=re.DOTALL)
16+
17+
# Remove empty lines
18+
code = re.sub(r'\n\s*\n', '\n', code)
19+
20+
# Remove leading/trailing whitespace on each line
21+
lines = [line.strip() for line in code.split('\n')]
22+
23+
# Keep preprocessor directives on their own lines
24+
result = []
25+
for line in lines:
26+
if line.startswith('#'):
27+
result.append(line)
28+
elif line:
29+
result.append(line)
30+
31+
code = '\n'.join(result)
32+
33+
# Compress spaces (but not in preprocessor directives or strings)
34+
def compress_line(line):
35+
if line.startswith('#'):
36+
return line
37+
# Keep strings intact
38+
parts = re.split(r'("(?:[^"\\]|\\.)*")', line)
39+
for i in range(0, len(parts), 2):
40+
# Compress multiple spaces to one
41+
parts[i] = re.sub(r'\s+', ' ', parts[i])
42+
# Remove spaces around operators (carefully)
43+
parts[i] = re.sub(r'\s*([+\-*/%=<>!&|^~,;:?(){}[\]])\s*', r'\1', parts[i])
44+
return ''.join(parts)
45+
46+
lines = [compress_line(line) for line in code.split('\n')]
47+
code = '\n'.join(lines)
48+
49+
return code
50+
51+
if __name__ == '__main__':
52+
if len(sys.argv) > 1:
53+
with open(sys.argv[1], 'r') as f:
54+
code = f.read()
55+
else:
56+
code = sys.stdin.read()
57+
58+
minified = minify_cpp(code)
59+
print(minified)
60+
61+
# Print stats to stderr
62+
original_size = len(code)
63+
minified_size = len(minified)
64+
print(f"Original: {original_size} bytes", file=sys.stderr)
65+
print(f"Minified: {minified_size} bytes", file=sys.stderr)
66+
print(f"Reduction: {original_size - minified_size} bytes ({100*(1-minified_size/original_size):.1f}%)", file=sys.stderr)

0 commit comments

Comments
 (0)