From b2c9ea2fa4b39131cac163643b083f5b128e4dee Mon Sep 17 00:00:00 2001 From: JustAnotherArchivist Date: Tue, 2 Nov 2021 20:57:21 +0000 Subject: [PATCH] Refactor --- alphabetseq | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/alphabetseq b/alphabetseq index f87026e..f7375a6 100755 --- a/alphabetseq +++ b/alphabetseq @@ -28,16 +28,24 @@ def test(): assert decimal_to_alphabet(0, '0123456789') == '0' +def convert_start_stop(s, alphabet): + if ':' in s: + valalphabet, value = s.split(':') + if not valalphabet: + valalphabet = alphabet + else: + valalphabet, value = '0123456789', s + return alphabet_to_decimal(value, valalphabet) + + if __name__ == '__main__': if len(sys.argv) == 2 and sys.argv[1] == '--test': test() - elif len(sys.argv) == 4 or (len(sys.argv) == 5 and sys.argv[2] == '--decimal'): - if len(sys.argv) == 4: - alphabet = sys.argv[1] - start, stop = map(lambda x: alphabet_to_decimal(x, alphabet), sys.argv[2:]) - else: - alphabet = sys.argv[1] - start, stop = map(int, sys.argv[3:]) + elif len(sys.argv) in (3, 4): + if len(sys.argv) == 3: + sys.argv.append(sys.argv[-1]) + alphabet = sys.argv[1] + start, stop = map(lambda x: convert_start_stop(x, alphabet), sys.argv[2:]) for i in range(start, stop + 1): try: sys.stdout.write(decimal_to_alphabet(i, alphabet) + '\n') @@ -48,7 +56,10 @@ if __name__ == '__main__': pass break else: - print('Usage: alphabetseq ALPHABET [--decimal] START STOP', file = sys.stderr) + print('Usage: alphabetseq ALPHABET START [STOP]', file = sys.stderr) print('Generates the sequence from START to STOP (inclusive) using ALPHABET', file = sys.stderr) - print('By default, START and STOP are expressed in ALPHABET. With --decimal, they are treated as decimal values instead.', file = sys.stderr) - print('`alphabetseq 0123456789 $N $M` is equivalent to `seq $N $M`.', file = sys.stderr) + print('If STOP is omitted, it defaults to START, effectively making this a simple base transformation', file = sys.stderr) + print('START and STOP have values of the form [[VALALPHABET]:]VALUE.', file = sys.stderr) + print(' In the [VALALPHABET]:VALUE form, VALUE is expressed in terms of VALALPHABET, which defaults to ALPHABET if omitted.', file = sys.stderr) + print(' In the VALUE form, it is treated as a decimal number.', file = sys.stderr) + sys.exit(1)