From c34438a74799a9ccc98fcbbad5d60023c7f592d0 Mon Sep 17 00:00:00 2001 From: Yusef Napora Date: Wed, 13 Aug 2025 09:17:57 -0400 Subject: [PATCH 1/9] implement --- roman.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 roman.py diff --git a/roman.py b/roman.py new file mode 100644 index 0000000..b1ffb29 --- /dev/null +++ b/roman.py @@ -0,0 +1,22 @@ +import sys + +A=list('MDCLXVI') +V=[1000,500,100,50,10,5,1] + +with open(sys.argv[1]) as f: + for l in f: + n=int(l) + s='' + t=[0] * 7 + i=0 + while n > 0: + t[i], n = divmod(n, V[i]) + i+=1 + + for i in range(7): + if t[i] < 4: + s += A[i] * t[i] + else: + y = t[i-1] + s = s[:len(s)-y] + A[i] + A[i-1-y] + print(s) From 2330ebda5a88307798a26d13a967dcd64ef23c53 Mon Sep 17 00:00:00 2001 From: Yusef Napora Date: Wed, 13 Aug 2025 10:46:40 -0400 Subject: [PATCH 2/9] -5 chars (working this time) --- roman.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/roman.py b/roman.py index b1ffb29..002fb52 100644 --- a/roman.py +++ b/roman.py @@ -1,7 +1,7 @@ import sys A=list('MDCLXVI') -V=[1000,500,100,50,10,5,1] +D=(2,5) with open(sys.argv[1]) as f: for l in f: @@ -9,8 +9,10 @@ s='' t=[0] * 7 i=0 + v=1000 while n > 0: - t[i], n = divmod(n, V[i]) + t[i], n = divmod(n, v) + v=v//D[i%2] i+=1 for i in range(7): From bebd67320bd8cc198981de22fa1dfb4c66bed2d4 Mon Sep 17 00:00:00 2001 From: Yusef Napora Date: Wed, 13 Aug 2025 11:16:02 -0400 Subject: [PATCH 3/9] ditch with / as to save 14 chars :) --- roman.py | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/roman.py b/roman.py index 002fb52..7d0b825 100644 --- a/roman.py +++ b/roman.py @@ -3,22 +3,21 @@ A=list('MDCLXVI') D=(2,5) -with open(sys.argv[1]) as f: - for l in f: - n=int(l) - s='' - t=[0] * 7 - i=0 - v=1000 - while n > 0: - t[i], n = divmod(n, v) - v=v//D[i%2] - i+=1 +for l in open(sys.argv[1]): + n=int(l) + s='' + t=[0] * 7 + i=0 + v=1000 + while n > 0: + t[i], n = divmod(n, v) + v=v//D[i%2] + i+=1 - for i in range(7): - if t[i] < 4: - s += A[i] * t[i] - else: - y = t[i-1] - s = s[:len(s)-y] + A[i] + A[i-1-y] - print(s) + for i in range(7): + if t[i] < 4: + s += A[i] * t[i] + else: + y = t[i-1] + s = s[:len(s)-y] + A[i] + A[i-1-y] + print(s) From cf0be610d264e1e6e125154854231c40f28e9174 Mon Sep 17 00:00:00 2001 From: Yusef Napora Date: Wed, 13 Aug 2025 11:20:52 -0400 Subject: [PATCH 4/9] only iterate once: -18 chars --- roman.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/roman.py b/roman.py index 7d0b825..41d0cf4 100644 --- a/roman.py +++ b/roman.py @@ -11,13 +11,13 @@ v=1000 while n > 0: t[i], n = divmod(n, v) - v=v//D[i%2] - i+=1 + v//=D[i%2] - for i in range(7): if t[i] < 4: s += A[i] * t[i] else: y = t[i-1] s = s[:len(s)-y] + A[i] + A[i-1-y] + + i+=1 print(s) From aae7082cafa1b3a7feb0135208d8e2acc9d89cdd Mon Sep 17 00:00:00 2001 From: Yusef Napora Date: Wed, 13 Aug 2025 11:54:15 -0400 Subject: [PATCH 5/9] move things for "readability" (lol) - no char savings --- roman.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roman.py b/roman.py index 41d0cf4..c91db36 100644 --- a/roman.py +++ b/roman.py @@ -11,7 +11,6 @@ v=1000 while n > 0: t[i], n = divmod(n, v) - v//=D[i%2] if t[i] < 4: s += A[i] * t[i] @@ -19,5 +18,6 @@ y = t[i-1] s = s[:len(s)-y] + A[i] + A[i-1-y] + v //= D[i%2] i+=1 print(s) From 1a6db682684d0c58fbcda95d8344a3d9726677c4 Mon Sep 17 00:00:00 2001 From: Yusef Napora Date: Wed, 13 Aug 2025 12:10:14 -0400 Subject: [PATCH 6/9] divmod is one char longer than divving and modding manually :) --- roman.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roman.py b/roman.py index c91db36..ff5e6bb 100644 --- a/roman.py +++ b/roman.py @@ -10,7 +10,7 @@ i=0 v=1000 while n > 0: - t[i], n = divmod(n, v) + t[i], n = (n//v, n%v) if t[i] < 4: s += A[i] * t[i] From cc08e1c625d1bc506b71fbcbbf0a941ec57caa9c Mon Sep 17 00:00:00 2001 From: Yusef Napora Date: Thu, 14 Aug 2025 07:33:47 -0400 Subject: [PATCH 7/9] remove all remaining readability for -2 chars --- roman.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/roman.py b/roman.py index ff5e6bb..150d0b6 100644 --- a/roman.py +++ b/roman.py @@ -12,11 +12,10 @@ while n > 0: t[i], n = (n//v, n%v) - if t[i] < 4: - s += A[i] * t[i] - else: - y = t[i-1] - s = s[:len(s)-y] + A[i] + A[i-1-y] + s += A[i] * t[i] + q = t[i] // 4 + x = t[i-1] + s = s[:len(s)-(3-x)*q] + A[i-1-x]*q v //= D[i%2] i+=1 From f18f4d57a3a153ca6e822091f02ebfcb9efde0eb Mon Sep 17 00:00:00 2001 From: Yusef Napora Date: Thu, 14 Aug 2025 09:35:32 -0400 Subject: [PATCH 8/9] Revert "remove all remaining readability for -2 chars" cc08e1c625d1bc506b71fbcbbf0a941ec57caa9c --- roman.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/roman.py b/roman.py index 150d0b6..ff5e6bb 100644 --- a/roman.py +++ b/roman.py @@ -12,10 +12,11 @@ while n > 0: t[i], n = (n//v, n%v) - s += A[i] * t[i] - q = t[i] // 4 - x = t[i-1] - s = s[:len(s)-(3-x)*q] + A[i-1-x]*q + if t[i] < 4: + s += A[i] * t[i] + else: + y = t[i-1] + s = s[:len(s)-y] + A[i] + A[i-1-y] v //= D[i%2] i+=1 From 92e313a5faa94c6ceb3c5228704b133841d255cf Mon Sep 17 00:00:00 2001 From: Yusef Napora Date: Thu, 14 Aug 2025 10:00:31 -0400 Subject: [PATCH 9/9] -6 chars by removing some []s --- roman.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/roman.py b/roman.py index ff5e6bb..a7ddd6f 100644 --- a/roman.py +++ b/roman.py @@ -6,18 +6,19 @@ for l in open(sys.argv[1]): n=int(l) s='' - t=[0] * 7 + t=[] i=0 v=1000 while n > 0: - t[i], n = (n//v, n%v) + f, n = (n//v, n%v) - if t[i] < 4: - s += A[i] * t[i] + if f < 4: + s += A[i] * f else: y = t[i-1] s = s[:len(s)-y] + A[i] + A[i-1-y] v //= D[i%2] + t += [f] i+=1 print(s)