Skip to content

Instantly share code, notes, and snippets.

@avakar
Created April 1, 2020 17:21
Show Gist options
  • Save avakar/c377441008e0942a9215f9a6444a3c5a to your computer and use it in GitHub Desktop.
Save avakar/c377441008e0942a9215f9a6444a3c5a to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import argparse
import sys
def _main():
ap = argparse.ArgumentParser()
ap.add_argument('--min-range-length', '-n', type=int, default=3)
ap.add_argument('input')
args = ap.parse_args()
ranges = []
chars = []
def add_range(first, last):
if last - first + 1 >= args.min_range_length:
ranges.append(f'{chr(first)}{chr(last)}')
else:
for i in range(first, last + 1):
chars.append(chr(i))
it = iter(sorted(args.input.encode('ascii')))
try:
start = next(it)
except StopIteration:
pass
else:
prev = start
for c in it:
if c != prev + 1:
add_range(start, prev)
start = c
prev = c
else:
add_range(start, prev)
print(repr(''.join(chars)))
print(repr(''.join(ranges)))
return 0
if __name__ == '__main__':
sys.exit(_main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment