commit ba355c20a8984bdd84422c032fcca3d52020f47a
parent 82695eb6fcd7f4ab9e697d6b4627f7934c0b543c
Author: mpizzzle <michael.770211@gmail.com>
Date: Sun, 5 Mar 2017 14:26:49 +0000
Euler 89 + 92 complete
Diffstat:
4 files changed, 2072 insertions(+), 0 deletions(-)
diff --git a/Euler_89.py b/Euler_89.py
@@ -0,0 +1,43 @@
+import sys
+
+with open('files/p089_roman.txt') as f:
+ numerals = f.read().splitlines()
+
+characters = {'I': 1, 'V': 5, 'X': 10, 'L' : 50, 'C' : 100, 'D': 500, 'M': 1000}
+
+digits = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']
+tens = ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC']
+hundreds = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM']
+
+columns = [digits, tens, hundreds]
+
+chars_saved = 0
+
+def numeral_to_int(n):
+ vals = [characters[c] for c in reversed(n)]
+ total = vals[0]
+
+ for x in range (1, len(vals)):
+ if vals[x] >= vals[x - 1]:
+ total += vals[x]
+ else:
+ total -= vals[x]
+
+ return total
+
+def int_to_numeral(i):
+ numeral = ''
+ j = 0
+ while i:
+ if j < 3:
+ numeral += columns[j][i % 10]
+ else:
+ numeral += 'M' * (i % 10)
+ i //= 10
+ j += 1
+ return numeral
+
+for n in numerals:
+ chars_saved += len(n) - len(int_to_numeral(numeral_to_int(n)))
+
+print chars_saved
diff --git a/Euler_92.py b/Euler_92.py
@@ -0,0 +1,27 @@
+import sys
+
+squares = [i * i for i in range(10)]
+cache = [0] * 10000000
+count = 0
+
+def sum_digit_squares(n):
+ s = 0
+ while n:
+ s += squares[n % 10]
+ n //= 10
+ return s
+
+for n in range (1, 10000000):
+ m = n
+
+ while True:
+ m = sum_digit_squares(m)
+
+ if m == 1 or cache[m] == 1:
+ cache[n] = 1
+ break
+ if m == 89 or cache[m] == 89:
+ cache[n] = 89
+ count += 1
+ break
+print count
diff --git a/files/p089_roman.txt b/files/p089_roman.txt
@@ -0,0 +1,1000 @@
+MMMMDCLXXII
+MMDCCCLXXXIII
+MMMDLXVIIII
+MMMMDXCV
+DCCCLXXII
+MMCCCVI
+MMMCDLXXXVII
+MMMMCCXXI
+MMMCCXX
+MMMMDCCCLXXIII
+MMMCCXXXVII
+MMCCCLXXXXIX
+MDCCCXXIIII
+MMCXCVI
+CCXCVIII
+MMMCCCXXXII
+MDCCXXX
+MMMDCCCL
+MMMMCCLXXXVI
+MMDCCCXCVI
+MMMDCII
+MMMCCXII
+MMMMDCCCCI
+MMDCCCXCII
+MDCXX
+CMLXXXVII
+MMMXXI
+MMMMCCCXIV
+MLXXII
+MCCLXXVIIII
+MMMMCCXXXXI
+MMDCCCLXXII
+MMMMXXXI
+MMMDCCLXXX
+MMDCCCLXXIX
+MMMMLXXXV
+MCXXI
+MDCCCXXXVII
+MMCCCLXVII
+MCDXXXV
+CCXXXIII
+CMXX
+MMMCLXIV
+MCCCLXXXVI
+DCCCXCVIII
+MMMDCCCCXXXIV
+CDXVIIII
+MMCCXXXV
+MDCCCXXXII
+MMMMD
+MMDCCLXIX
+MMMMCCCLXXXXVI
+MMDCCXLII
+MMMDCCCVIIII
+DCCLXXXIIII
+MDCCCCXXXII
+MMCXXVII
+DCCCXXX
+CCLXIX
+MMMXI
+MMMMCMLXXXXVIII
+MMMMDLXXXVII
+MMMMDCCCLX
+MMCCLIV
+CMIX
+MMDCCCLXXXIIII
+CLXXXII
+MMCCCCXXXXV
+MMMMDLXXXVIIII
+MMMDCCCXXI
+MMDCCCCLXXVI
+MCCCCLXX
+MMCDLVIIII
+MMMDCCCLIX
+MMMMCCCCXIX
+MMMDCCCLXXV
+XXXI
+CDLXXXIII
+MMMCXV
+MMDCCLXIII
+MMDXXX
+MMMMCCCLVII
+MMMDCI
+MMMMCDLXXXIIII
+MMMMCCCXVI
+CCCLXXXVIII
+MMMMCML
+MMMMXXIV
+MMMCCCCXXX
+DCCX
+MMMCCLX
+MMDXXXIII
+CCCLXIII
+MMDCCXIII
+MMMCCCXLIV
+CLXXXXI
+CXVI
+MMMMCXXXIII
+CLXX
+DCCCXVIII
+MLXVII
+DLXXXX
+MMDXXI
+MMMMDLXXXXVIII
+MXXII
+LXI
+DCCCCXLIII
+MMMMDV
+MMMMXXXIV
+MDCCCLVIII
+MMMCCLXXII
+MMMMDCCXXXVI
+MMMMLXXXIX
+MDCCCLXXXI
+MMMMDCCCXV
+MMMMCCCCXI
+MMMMCCCLIII
+MDCCCLXXI
+MMCCCCXI
+MLXV
+MMCDLXII
+MMMMDXXXXII
+MMMMDCCCXL
+MMMMCMLVI
+CCLXXXIV
+MMMDCCLXXXVI
+MMCLII
+MMMCCCCXV
+MMLXXXIII
+MMMV
+MMMV
+DCCLXII
+MMDCCCCXVI
+MMDCXLVIII
+CCLIIII
+CCCXXV
+MMDCCLXXXVIIII
+MMMMDCLXXVIII
+MMMMDCCCXCI
+MMMMCCCXX
+MMCCXLV
+MMMDCCCLXIX
+MMCCLXIIII
+MMMDCCCXLIX
+MMMMCCCLXIX
+CMLXXXXI
+MCMLXXXIX
+MMCDLXI
+MMDCLXXVIII
+MMMMDCCLXI
+MCDXXV
+DL
+CCCLXXII
+MXVIIII
+MCCCCLXVIII
+CIII
+MMMDCCLXXIIII
+MMMDVIII
+MMMMCCCLXXXXVII
+MMDXXVII
+MMDCCLXXXXV
+MMMMCXLVI
+MMMDCCLXXXII
+MMMDXXXVI
+MCXXII
+CLI
+DCLXXXIX
+MMMCLI
+MDCLXIII
+MMMMDCCXCVII
+MMCCCLXXXV
+MMMDCXXVIII
+MMMCDLX
+MMMCMLII
+MMMIV
+MMMMDCCCLVIII
+MMMDLXXXVIII
+MCXXIV
+MMMMLXXVI
+CLXXIX
+MMMCCCCXXVIIII
+DCCLXXXV
+MMMDCCCVI
+LI
+CLXXXVI
+MMMMCCCLXXVI
+MCCCLXVI
+CCXXXIX
+MMDXXXXI
+MMDCCCXLI
+DCCCLXXXVIII
+MMMMDCCCIV
+MDCCCCXV
+MMCMVI
+MMMMCMLXXXXV
+MMDCCLVI
+MMMMCCXLVIII
+DCCCCIIII
+MMCCCCIII
+MMMDCCLXXXVIIII
+MDCCCLXXXXV
+DVII
+MMMV
+DCXXV
+MMDCCCXCV
+DCVIII
+MMCDLXVI
+MCXXVIII
+MDCCXCVIII
+MMDCLX
+MMMDCCLXIV
+MMCDLXXVII
+MMDLXXXIIII
+MMMMCCCXXII
+MMMDCCCXLIIII
+DCCCCLXVII
+MMMCLXXXXIII
+MCCXV
+MMMMDCXI
+MMMMDCLXXXXV
+MMMCCCLII
+MMCMIX
+MMDCCXXV
+MMDLXXXVI
+MMMMDCXXVIIII
+DCCCCXXXVIIII
+MMCCXXXIIII
+MMDCCLXXVIII
+MDCCLXVIIII
+MMCCLXXXV
+MMMMDCCCLXXXVIII
+MMCMXCI
+MDXLII
+MMMMDCCXIV
+MMMMLI
+DXXXXIII
+MMDCCXI
+MMMMCCLXXXIII
+MMMDCCCLXXIII
+MDCLVII
+MMCD
+MCCCXXVII
+MMMMDCCIIII
+MMMDCCXLVI
+MMMCLXXXVII
+MMMCCVIIII
+MCCCCLXXIX
+DL
+DCCCLXXVI
+MMDXCI
+MMMMDCCCCXXXVI
+MMCII
+MMMDCCCXXXXV
+MMMCDXLV
+MMDCXXXXIV
+MMD
+MDCCCLXXXX
+MMDCXLIII
+MMCCXXXII
+MMDCXXXXVIIII
+DCCCLXXI
+MDXCVIIII
+MMMMCCLXXVIII
+MDCLVIIII
+MMMCCCLXXXIX
+MDCLXXXV
+MDLVIII
+MMMMCCVII
+MMMMDCXIV
+MMMCCCLXIIII
+MMIIII
+MMMMCCCLXXIII
+CCIII
+MMMCCLV
+MMMDXIII
+MMMCCCXC
+MMMDCCCXXI
+MMMMCCCCXXXII
+CCCLVI
+MMMCCCLXXXVI
+MXVIIII
+MMMCCCCXIIII
+CLXVII
+MMMCCLXX
+CCCCLXIV
+MMXXXXII
+MMMMCCLXXXX
+MXL
+CCXVI
+CCCCLVIIII
+MMCCCII
+MCCCLVIII
+MMMMCCCX
+MCDLXXXXIV
+MDCCCXIII
+MMDCCCXL
+MMMMCCCXXIII
+DXXXIV
+CVI
+MMMMDCLXXX
+DCCCVII
+MMCMLXIIII
+MMMDCCCXXXIII
+DCCC
+MDIII
+MMCCCLXVI
+MMMCCCCLXXI
+MMDCCCCXVIII
+CCXXXVII
+CCCXXV
+MDCCCXII
+MMMCMV
+MMMMCMXV
+MMMMDCXCI
+DXXI
+MMCCXLVIIII
+MMMMCMLII
+MDLXXX
+MMDCLXVI
+CXXI
+MMMDCCCLIIII
+MMMCXXI
+MCCIII
+MMDCXXXXI
+CCXCII
+MMMMDXXXV
+MMMCCCLXV
+MMMMDLXV
+MMMCCCCXXXII
+MMMCCCVIII
+DCCCCLXXXXII
+MMCLXIV
+MMMMCXI
+MLXXXXVII
+MMMCDXXXVIII
+MDXXII
+MLV
+MMMMDLXVI
+MMMCXII
+XXXIII
+MMMMDCCCXXVI
+MMMLXVIIII
+MMMLX
+MMMCDLXVII
+MDCCCLVII
+MMCXXXVII
+MDCCCCXXX
+MMDCCCLXIII
+MMMMDCXLIX
+MMMMCMXLVIII
+DCCCLXXVIIII
+MDCCCLIII
+MMMCMLXI
+MMMMCCLXI
+MMDCCCLIII
+MMMDCCCVI
+MMDXXXXIX
+MMCLXXXXV
+MMDXXX
+MMMXIII
+DCLXXIX
+DCCLXII
+MMMMDCCLXVIII
+MDCCXXXXIII
+CCXXXII
+MMMMDCXXV
+MMMCCCXXVIII
+MDCVIII
+MMMCLXXXXIIII
+CLXXXI
+MDCCCCXXXIII
+MMMMDCXXX
+MMMDCXXIV
+MMMCCXXXVII
+MCCCXXXXIIII
+CXVIII
+MMDCCCCIV
+MMMMCDLXXV
+MMMDLXIV
+MDXCIII
+MCCLXXXI
+MMMDCCCXXIV
+MCXLIII
+MMMDCCCI
+MCCLXXX
+CCXV
+MMDCCLXXI
+MMDLXXXIII
+MMMMDCXVII
+MMMCMLXV
+MCLXVIII
+MMMMCCLXXVI
+MMMDCCLXVIIII
+MMMMDCCCIX
+DLXXXXIX
+DCCCXXII
+MMMMIII
+MMMMCCCLXXVI
+DCCCXCIII
+DXXXI
+MXXXIIII
+CCXII
+MMMDCCLXXXIIII
+MMMCXX
+MMMCMXXVII
+DCCCXXXX
+MMCDXXXVIIII
+MMMMDCCXVIII
+LV
+MMMDCCCCVI
+MCCCII
+MMCMLXVIIII
+MDCCXI
+MMMMDLXVII
+MMCCCCLXI
+MMDCCV
+MMMCCCXXXIIII
+MMMMDI
+MMMDCCCXCV
+MMDCCLXXXXI
+MMMDXXVI
+MMMDCCCLVI
+MMDCXXX
+MCCCVII
+MMMMCCCLXII
+MMMMXXV
+MMCMXXV
+MMLVI
+MMDXXX
+MMMMCVII
+MDC
+MCCIII
+MMMMDCC
+MMCCLXXV
+MMDCCCXXXXVI
+MMMMCCCLXV
+CDXIIII
+MLXIIII
+CCV
+MMMCMXXXI
+CCCCLXVI
+MDXXXII
+MMMMCCCLVIII
+MMV
+MMMCLII
+MCMLI
+MMDCCXX
+MMMMCCCCXXXVI
+MCCLXXXI
+MMMCMVI
+DCCXXX
+MMMMCCCLXV
+DCCCXI
+MMMMDCCCXIV
+CCCXXI
+MMDLXXV
+CCCCLXXXX
+MCCCLXXXXII
+MMDCIX
+DCCXLIIII
+DXIV
+MMMMCLII
+CDLXI
+MMMCXXVII
+MMMMDCCCCLXIII
+MMMDCLIIII
+MCCCCXXXXII
+MMCCCLX
+CCCCLIII
+MDCCLXXVI
+MCMXXIII
+MMMMDLXXVIII
+MMDCCCCLX
+MMMCCCLXXXX
+MMMCDXXVI
+MMMDLVIII
+CCCLXI
+MMMMDCXXII
+MMDCCCXXI
+MMDCCXIII
+MMMMCLXXXVI
+MDCCCCXXVI
+MDV
+MMDCCCCLXXVI
+MMMMCCXXXVII
+MMMDCCLXXVIIII
+MMMCCCCLXVII
+DCCXLI
+MMCLXXXVIII
+MCCXXXVI
+MMDCXLVIII
+MMMMCXXXII
+MMMMDCCLXVI
+MMMMCMLI
+MMMMCLXV
+MMMMDCCCXCIV
+MCCLXXVII
+LXXVIIII
+DCCLII
+MMMCCCXCVI
+MMMCLV
+MMDCCCXXXXVIII
+DCCCXV
+MXC
+MMDCCLXXXXVII
+MMMMCML
+MMDCCCLXXVIII
+DXXI
+MCCCXLI
+DCLXXXXI
+MMCCCLXXXXVIII
+MDCCCCLXXVIII
+MMMMDXXV
+MMMDCXXXVI
+MMMCMXCVII
+MMXVIIII
+MMMDCCLXXIV
+MMMCXXV
+DXXXVIII
+MMMMCLXVI
+MDXII
+MMCCCLXX
+CCLXXI
+DXIV
+MMMCLIII
+DLII
+MMMCCCXLIX
+MMCCCCXXVI
+MMDCXLIII
+MXXXXII
+CCCLXXXV
+MDCLXXVI
+MDCXII
+MMMCCCLXXXIII
+MMDCCCCLXXXII
+MMMMCCCLXXXV
+MMDCXXI
+DCCCXXX
+MMMDCCCCLII
+MMMDCCXXII
+MMMMCDXCVIII
+MMMCCLXVIIII
+MMXXV
+MMMMCDXIX
+MMMMCCCX
+MMMCCCCLXVI
+MMMMDCLXXVIIII
+MMMMDCXXXXIV
+MMMCMXII
+MMMMXXXIII
+MMMMDLXXXII
+DCCCLIV
+MDXVIIII
+MMMCLXXXXV
+CCCCXX
+MMDIX
+MMCMLXXXVIII
+DCCXLIII
+DCCLX
+D
+MCCCVII
+MMMMCCCLXXXIII
+MDCCCLXXIIII
+MMMDCCCCLXXXVII
+MMMMCCCVII
+MMMDCCLXXXXVI
+CDXXXIV
+MCCLXVIII
+MMMMDLX
+MMMMDXII
+MMMMCCCCLIIII
+MCMLXXXXIII
+MMMMDCCCIII
+MMDCLXXXIII
+MDCCCXXXXIV
+XXXXVII
+MMMDCCCXXXII
+MMMDCCCXLII
+MCXXXV
+MDCXXVIIII
+MMMCXXXXIIII
+MMMMCDXVII
+MMMDXXIII
+MMMMCCCCLXI
+DCLXXXXVIIII
+LXXXXI
+CXXXIII
+MCDX
+MCCLVII
+MDCXXXXII
+MMMCXXIV
+MMMMLXXXX
+MMDCCCCXLV
+MLXXX
+MMDCCCCLX
+MCDLIII
+MMMCCCLXVII
+MMMMCCCLXXIV
+MMMDCVIII
+DCCCCXXIII
+MMXCI
+MMDCCIV
+MMMMDCCCXXXIV
+CCCLXXI
+MCCLXXXII
+MCMIII
+CCXXXI
+DCCXXXVIII
+MMMMDCCXLVIIII
+MMMMCMXXXV
+DCCCLXXV
+DCCXCI
+MMMMDVII
+MMMMDCCCLXVIIII
+CCCXCV
+MMMMDCCXX
+MCCCCII
+MMMCCCXC
+MMMCCCII
+MMDCCLXXVII
+MMDCLIIII
+CCXLIII
+MMMDCXVIII
+MMMCCCIX
+MCXV
+MMCCXXV
+MLXXIIII
+MDCCXXVI
+MMMCCCXX
+MMDLXX
+MMCCCCVI
+MMDCCXX
+MMMMDCCCCXCV
+MDCCCXXXII
+MMMMDCCCCXXXX
+XCIV
+MMCCCCLX
+MMXVII
+MLXXI
+MMMDXXVIII
+MDCCCCII
+MMMCMLVII
+MMCLXXXXVIII
+MDCCCCLV
+MCCCCLXXIIII
+MCCCLII
+MCDXLVI
+MMMMDXVIII
+DCCLXXXIX
+MMMDCCLXIV
+MDCCCCXLIII
+CLXXXXV
+MMMMCCXXXVI
+MMMDCCCXXI
+MMMMCDLXXVII
+MCDLIII
+MMCCXLVI
+DCCCLV
+MCDLXX
+DCLXXVIII
+MMDCXXXIX
+MMMMDCLX
+MMDCCLI
+MMCXXXV
+MMMCCXII
+MMMMCMLXII
+MMMMCCV
+MCCCCLXIX
+MMMMCCIII
+CLXVII
+MCCCLXXXXIIII
+MMMMDCVIII
+MMDCCCLXI
+MMLXXIX
+CMLXIX
+MMDCCCXLVIIII
+DCLXII
+MMMCCCXLVII
+MDCCCXXXV
+MMMMDCCXCVI
+DCXXX
+XXVI
+MMLXIX
+MMCXI
+DCXXXVII
+MMMMCCCXXXXVIII
+MMMMDCLXI
+MMMMDCLXXIIII
+MMMMVIII
+MMMMDCCCLXII
+MDCXCI
+MMCCCXXIIII
+CCCCXXXXV
+MMDCCCXXI
+MCVI
+MMDCCLXVIII
+MMMMCXL
+MLXVIII
+CMXXVII
+CCCLV
+MDCCLXXXIX
+MMMCCCCLXV
+MMDCCLXII
+MDLXVI
+MMMCCCXVIII
+MMMMCCLXXXI
+MMCXXVII
+MMDCCCLXVIII
+MMMCXCII
+MMMMDCLVIII
+MMMMDCCCXXXXII
+MMDCCCCLXXXXVI
+MDCCXL
+MDCCLVII
+MMMMDCCCLXXXVI
+DCCXXXIII
+MMMMDCCCCLXXXV
+MMCCXXXXVIII
+MMMCCLXXVIII
+MMMDCLXXVIII
+DCCCI
+MMMMLXXXXVIIII
+MMMCCCCLXXII
+MMCLXXXVII
+CCLXVI
+MCDXLIII
+MMCXXVIII
+MDXIV
+CCCXCVIII
+CLXXVIII
+MMCXXXXVIIII
+MMMDCLXXXIV
+CMLVIII
+MCDLIX
+MMMMDCCCXXXII
+MMMMDCXXXIIII
+MDCXXI
+MMMDCXLV
+MCLXXVIII
+MCDXXII
+IV
+MCDLXXXXIII
+MMMMDCCLXV
+CCLI
+MMMMDCCCXXXVIII
+DCLXII
+MCCCLXVII
+MMMMDCCCXXXVI
+MMDCCXLI
+MLXI
+MMMCDLXVIII
+MCCCCXCIII
+XXXIII
+MMMDCLXIII
+MMMMDCL
+DCCCXXXXIIII
+MMDLVII
+DXXXVII
+MCCCCXXIIII
+MCVII
+MMMMDCCXL
+MMMMCXXXXIIII
+MCCCCXXIV
+MMCLXVIII
+MMXCIII
+MDCCLXXX
+MCCCLIIII
+MMDCLXXI
+MXI
+MCMLIV
+MMMCCIIII
+DCCLXXXVIIII
+MDCLIV
+MMMDCXIX
+CMLXXXI
+DCCLXXXVII
+XXV
+MMMXXXVI
+MDVIIII
+CLXIII
+MMMCDLVIIII
+MMCCCCVII
+MMMLXX
+MXXXXII
+MMMMCCCLXVIII
+MMDCCCXXVIII
+MMMMDCXXXXI
+MMMMDCCCXXXXV
+MMMXV
+MMMMCCXVIIII
+MMDCCXIIII
+MMMXXVII
+MDCCLVIIII
+MMCXXIIII
+MCCCLXXIV
+DCLVIII
+MMMLVII
+MMMCXLV
+MMXCVII
+MMMCCCLXXXVII
+MMMMCCXXII
+DXII
+MMMDLV
+MCCCLXXVIII
+MMMCLIIII
+MMMMCLXXXX
+MMMCLXXXIIII
+MDCXXIII
+MMMMCCXVI
+MMMMDLXXXIII
+MMMDXXXXIII
+MMMMCCCCLV
+MMMDLXXXI
+MMMCCLXXVI
+MMMMXX
+MMMMDLVI
+MCCCCLXXX
+MMMXXII
+MMXXII
+MMDCCCCXXXI
+MMMDXXV
+MMMDCLXXXVIIII
+MMMDLXXXXVII
+MDLXIIII
+CMXC
+MMMXXXVIII
+MDLXXXVIII
+MCCCLXXVI
+MMCDLIX
+MMDCCCXVIII
+MDCCCXXXXVI
+MMMMCMIV
+MMMMDCIIII
+MMCCXXXV
+XXXXVI
+MMMMCCXVII
+MMCCXXIV
+MCMLVIIII
+MLXXXIX
+MMMMLXXXIX
+CLXXXXIX
+MMMDCCCCLVIII
+MMMMCCLXXIII
+MCCCC
+DCCCLIX
+MMMCCCLXXXII
+MMMCCLXVIIII
+MCLXXXV
+CDLXXXVII
+DCVI
+MMX
+MMCCXIII
+MMMMDCXX
+MMMMXXVIII
+DCCCLXII
+MMMMCCCXLIII
+MMMMCLXV
+DXCI
+MMMMCLXXX
+MMMDCCXXXXI
+MMMMXXXXVI
+DCLX
+MMMCCCXI
+MCCLXXX
+MMCDLXXII
+DCCLXXI
+MMMCCCXXXVI
+MCCCCLXXXVIIII
+CDLVIII
+DCCLVI
+MMMMDCXXXVIII
+MMCCCLXXXIII
+MMMMDCCLXXV
+MMMXXXVI
+CCCLXXXXIX
+CV
+CCCCXIII
+CCCCXVI
+MDCCCLXXXIIII
+MMDCCLXXXII
+MMMMCCCCLXXXI
+MXXV
+MMCCCLXXVIIII
+MMMCCXII
+MMMMCCXXXIII
+MMCCCLXXXVI
+MMMDCCCLVIIII
+MCCXXXVII
+MDCLXXV
+XXXV
+MMDLI
+MMMCCXXX
+MMMMCXXXXV
+CCCCLIX
+MMMMDCCCLXXIII
+MMCCCXVII
+DCCCXVI
+MMMCCCXXXXV
+MDCCCCXCV
+CLXXXI
+MMMMDCCLXX
+MMMDCCCIII
+MMCLXXVII
+MMMDCCXXIX
+MMDCCCXCIIII
+MMMCDXXIIII
+MMMMXXVIII
+MMMMDCCCCLXVIII
+MDCCCXX
+MMMMCDXXI
+MMMMDLXXXIX
+CCXVI
+MDVIII
+MMCCLXXI
+MMMDCCCLXXI
+MMMCCCLXXVI
+MMCCLXI
+MMMMDCCCXXXIV
+DLXXXVI
+MMMMDXXXII
+MMMXXIIII
+MMMMCDIV
+MMMMCCCXLVIII
+MMMMCXXXVIII
+MMMCCCLXVI
+MDCCXVIII
+MMCXX
+CCCLIX
+MMMMDCCLXXII
+MDCCCLXXV
+MMMMDCCCXXIV
+DCCCXXXXVIII
+MMMDCCCCXXXVIIII
+MMMMCCXXXV
+MDCLXXXIII
+MMCCLXXXIV
+MCLXXXXIIII
+DXXXXIII
+MCCCXXXXVIII
+MMCLXXIX
+MMMMCCLXIV
+MXXII
+MMMCXIX
+MDCXXXVII
+MMDCCVI
+MCLXXXXVIII
+MMMCXVI
+MCCCLX
+MMMCDX
+CCLXVIIII
+MMMCCLX
+MCXXVIII
+LXXXII
+MCCCCLXXXI
+MMMI
+MMMCCCLXIV
+MMMCCCXXVIIII
+CXXXVIII
+MMCCCXX
+MMMCCXXVIIII
+MCCLXVI
+MMMCCCCXXXXVI
+MMDCCXCIX
+MCMLXXI
+MMCCLXVIII
+CDLXXXXIII
+MMMMDCCXXII
+MMMMDCCLXXXVII
+MMMDCCLIV
+MMCCLXIII
+MDXXXVII
+DCCXXXIIII
+MCII
+MMMDCCCLXXI
+MMMLXXIII
+MDCCCLIII
+MMXXXVIII
+MDCCXVIIII
+MDCCCCXXXVII
+MMCCCXVI
+MCMXXII
+MMMCCCLVIII
+MMMMDCCCXX
+MCXXIII
+MMMDLXI
+MMMMDXXII
+MDCCCX
+MMDXCVIIII
+MMMDCCCCVIII
+MMMMDCCCCXXXXVI
+MMDCCCXXXV
+MMCXCIV
+MCMLXXXXIII
+MMMCCCLXXVI
+MMMMDCLXXXV
+CMLXIX
+DCXCII
+MMXXVIII
+MMMMCCCXXX
+XXXXVIIII+
\ No newline at end of file
diff --git a/files/p099_base_exp.txt b/files/p099_base_exp.txt
@@ -0,0 +1,1000 @@
+519432,525806
+632382,518061
+78864,613712
+466580,530130
+780495,510032
+525895,525320
+15991,714883
+960290,502358
+760018,511029
+166800,575487
+210884,564478
+555151,523163
+681146,515199
+563395,522587
+738250,512126
+923525,503780
+595148,520429
+177108,572629
+750923,511482
+440902,532446
+881418,505504
+422489,534197
+979858,501616
+685893,514935
+747477,511661
+167214,575367
+234140,559696
+940238,503122
+728969,512609
+232083,560102
+900971,504694
+688801,514772
+189664,569402
+891022,505104
+445689,531996
+119570,591871
+821453,508118
+371084,539600
+911745,504251
+623655,518600
+144361,582486
+352442,541775
+420726,534367
+295298,549387
+6530,787777
+468397,529976
+672336,515696
+431861,533289
+84228,610150
+805376,508857
+444409,532117
+33833,663511
+381850,538396
+402931,536157
+92901,604930
+304825,548004
+731917,512452
+753734,511344
+51894,637373
+151578,580103
+295075,549421
+303590,548183
+333594,544123
+683952,515042
+60090,628880
+951420,502692
+28335,674991
+714940,513349
+343858,542826
+549279,523586
+804571,508887
+260653,554881
+291399,549966
+402342,536213
+408889,535550
+40328,652524
+375856,539061
+768907,510590
+165993,575715
+976327,501755
+898500,504795
+360404,540830
+478714,529095
+694144,514472
+488726,528258
+841380,507226
+328012,544839
+22389,690868
+604053,519852
+329514,544641
+772965,510390
+492798,527927
+30125,670983
+895603,504906
+450785,531539
+840237,507276
+380711,538522
+63577,625673
+76801,615157
+502694,527123
+597706,520257
+310484,547206
+944468,502959
+121283,591152
+451131,531507
+566499,522367
+425373,533918
+40240,652665
+39130,654392
+714926,513355
+469219,529903
+806929,508783
+287970,550487
+92189,605332
+103841,599094
+671839,515725
+452048,531421
+987837,501323
+935192,503321
+88585,607450
+613883,519216
+144551,582413
+647359,517155
+213902,563816
+184120,570789
+258126,555322
+502546,527130
+407655,535678
+401528,536306
+477490,529193
+841085,507237
+732831,512408
+833000,507595
+904694,504542
+581435,521348
+455545,531110
+873558,505829
+94916,603796
+720176,513068
+545034,523891
+246348,557409
+556452,523079
+832015,507634
+173663,573564
+502634,527125
+250732,556611
+569786,522139
+216919,563178
+521815,525623
+92304,605270
+164446,576167
+753413,511364
+11410,740712
+448845,531712
+925072,503725
+564888,522477
+7062,780812
+641155,517535
+738878,512100
+636204,517828
+372540,539436
+443162,532237
+571192,522042
+655350,516680
+299741,548735
+581914,521307
+965471,502156
+513441,526277
+808682,508700
+237589,559034
+543300,524025
+804712,508889
+247511,557192
+543486,524008
+504383,526992
+326529,545039
+792493,509458
+86033,609017
+126554,589005
+579379,521481
+948026,502823
+404777,535969
+265767,554022
+266876,553840
+46631,643714
+492397,527958
+856106,506581
+795757,509305
+748946,511584
+294694,549480
+409781,535463
+775887,510253
+543747,523991
+210592,564536
+517119,525990
+520253,525751
+247926,557124
+592141,520626
+346580,542492
+544969,523902
+506501,526817
+244520,557738
+144745,582349
+69274,620858
+292620,549784
+926027,503687
+736320,512225
+515528,526113
+407549,535688
+848089,506927
+24141,685711
+9224,757964
+980684,501586
+175259,573121
+489160,528216
+878970,505604
+969546,502002
+525207,525365
+690461,514675
+156510,578551
+659778,516426
+468739,529945
+765252,510770
+76703,615230
+165151,575959
+29779,671736
+928865,503569
+577538,521605
+927555,503618
+185377,570477
+974756,501809
+800130,509093
+217016,563153
+365709,540216
+774508,510320
+588716,520851
+631673,518104
+954076,502590
+777828,510161
+990659,501222
+597799,520254
+786905,509727
+512547,526348
+756449,511212
+869787,505988
+653747,516779
+84623,609900
+839698,507295
+30159,670909
+797275,509234
+678136,515373
+897144,504851
+989554,501263
+413292,535106
+55297,633667
+788650,509637
+486748,528417
+150724,580377
+56434,632490
+77207,614869
+588631,520859
+611619,519367
+100006,601055
+528924,525093
+190225,569257
+851155,506789
+682593,515114
+613043,519275
+514673,526183
+877634,505655
+878905,505602
+1926,914951
+613245,519259
+152481,579816
+841774,507203
+71060,619442
+865335,506175
+90244,606469
+302156,548388
+399059,536557
+478465,529113
+558601,522925
+69132,620966
+267663,553700
+988276,501310
+378354,538787
+529909,525014
+161733,576968
+758541,511109
+823425,508024
+149821,580667
+269258,553438
+481152,528891
+120871,591322
+972322,501901
+981350,501567
+676129,515483
+950860,502717
+119000,592114
+392252,537272
+191618,568919
+946699,502874
+289555,550247
+799322,509139
+703886,513942
+194812,568143
+261823,554685
+203052,566221
+217330,563093
+734748,512313
+391759,537328
+807052,508777
+564467,522510
+59186,629748
+113447,594545
+518063,525916
+905944,504492
+613922,519213
+439093,532607
+445946,531981
+230530,560399
+297887,549007
+459029,530797
+403692,536075
+855118,506616
+963127,502245
+841711,507208
+407411,535699
+924729,503735
+914823,504132
+333725,544101
+176345,572832
+912507,504225
+411273,535308
+259774,555036
+632853,518038
+119723,591801
+163902,576321
+22691,689944
+402427,536212
+175769,572988
+837260,507402
+603432,519893
+313679,546767
+538165,524394
+549026,523608
+61083,627945
+898345,504798
+992556,501153
+369999,539727
+32847,665404
+891292,505088
+152715,579732
+824104,507997
+234057,559711
+730507,512532
+960529,502340
+388395,537687
+958170,502437
+57105,631806
+186025,570311
+993043,501133
+576770,521664
+215319,563513
+927342,503628
+521353,525666
+39563,653705
+752516,511408
+110755,595770
+309749,547305
+374379,539224
+919184,503952
+990652,501226
+647780,517135
+187177,570017
+168938,574877
+649558,517023
+278126,552016
+162039,576868
+658512,516499
+498115,527486
+896583,504868
+561170,522740
+747772,511647
+775093,510294
+652081,516882
+724905,512824
+499707,527365
+47388,642755
+646668,517204
+571700,522007
+180430,571747
+710015,513617
+435522,532941
+98137,602041
+759176,511070
+486124,528467
+526942,525236
+878921,505604
+408313,535602
+926980,503640
+882353,505459
+566887,522345
+3326,853312
+911981,504248
+416309,534800
+392991,537199
+622829,518651
+148647,581055
+496483,527624
+666314,516044
+48562,641293
+672618,515684
+443676,532187
+274065,552661
+265386,554079
+347668,542358
+31816,667448
+181575,571446
+961289,502320
+365689,540214
+987950,501317
+932299,503440
+27388,677243
+746701,511701
+492258,527969
+147823,581323
+57918,630985
+838849,507333
+678038,515375
+27852,676130
+850241,506828
+818403,508253
+131717,587014
+850216,506834
+904848,504529
+189758,569380
+392845,537217
+470876,529761
+925353,503711
+285431,550877
+454098,531234
+823910,508003
+318493,546112
+766067,510730
+261277,554775
+421530,534289
+694130,514478
+120439,591498
+213308,563949
+854063,506662
+365255,540263
+165437,575872
+662240,516281
+289970,550181
+847977,506933
+546083,523816
+413252,535113
+975829,501767
+361540,540701
+235522,559435
+224643,561577
+736350,512229
+328303,544808
+35022,661330
+307838,547578
+474366,529458
+873755,505819
+73978,617220
+827387,507845
+670830,515791
+326511,545034
+309909,547285
+400970,536363
+884827,505352
+718307,513175
+28462,674699
+599384,520150
+253565,556111
+284009,551093
+343403,542876
+446557,531921
+992372,501160
+961601,502308
+696629,514342
+919537,503945
+894709,504944
+892201,505051
+358160,541097
+448503,531745
+832156,507636
+920045,503924
+926137,503675
+416754,534757
+254422,555966
+92498,605151
+826833,507873
+660716,516371
+689335,514746
+160045,577467
+814642,508425
+969939,501993
+242856,558047
+76302,615517
+472083,529653
+587101,520964
+99066,601543
+498005,527503
+709800,513624
+708000,513716
+20171,698134
+285020,550936
+266564,553891
+981563,501557
+846502,506991
+334,1190800
+209268,564829
+9844,752610
+996519,501007
+410059,535426
+432931,533188
+848012,506929
+966803,502110
+983434,501486
+160700,577267
+504374,526989
+832061,507640
+392825,537214
+443842,532165
+440352,532492
+745125,511776
+13718,726392
+661753,516312
+70500,619875
+436952,532814
+424724,533973
+21954,692224
+262490,554567
+716622,513264
+907584,504425
+60086,628882
+837123,507412
+971345,501940
+947162,502855
+139920,584021
+68330,621624
+666452,516038
+731446,512481
+953350,502619
+183157,571042
+845400,507045
+651548,516910
+20399,697344
+861779,506331
+629771,518229
+801706,509026
+189207,569512
+737501,512168
+719272,513115
+479285,529045
+136046,585401
+896746,504860
+891735,505067
+684771,514999
+865309,506184
+379066,538702
+503117,527090
+621780,518717
+209518,564775
+677135,515423
+987500,501340
+197049,567613
+329315,544673
+236756,559196
+357092,541226
+520440,525733
+213471,563911
+956852,502490
+702223,514032
+404943,535955
+178880,572152
+689477,514734
+691351,514630
+866669,506128
+370561,539656
+739805,512051
+71060,619441
+624861,518534
+261660,554714
+366137,540160
+166054,575698
+601878,519990
+153445,579501
+279899,551729
+379166,538691
+423209,534125
+675310,515526
+145641,582050
+691353,514627
+917468,504026
+284778,550976
+81040,612235
+161699,576978
+616394,519057
+767490,510661
+156896,578431
+427408,533714
+254849,555884
+737217,512182
+897133,504851
+203815,566051
+270822,553189
+135854,585475
+778805,510111
+784373,509847
+305426,547921
+733418,512375
+732087,512448
+540668,524215
+702898,513996
+628057,518328
+640280,517587
+422405,534204
+10604,746569
+746038,511733
+839808,507293
+457417,530938
+479030,529064
+341758,543090
+620223,518824
+251661,556451
+561790,522696
+497733,527521
+724201,512863
+489217,528217
+415623,534867
+624610,518548
+847541,506953
+432295,533249
+400391,536421
+961158,502319
+139173,584284
+421225,534315
+579083,521501
+74274,617000
+701142,514087
+374465,539219
+217814,562985
+358972,540995
+88629,607424
+288597,550389
+285819,550812
+538400,524385
+809930,508645
+738326,512126
+955461,502535
+163829,576343
+826475,507891
+376488,538987
+102234,599905
+114650,594002
+52815,636341
+434037,533082
+804744,508880
+98385,601905
+856620,506559
+220057,562517
+844734,507078
+150677,580387
+558697,522917
+621751,518719
+207067,565321
+135297,585677
+932968,503404
+604456,519822
+579728,521462
+244138,557813
+706487,513800
+711627,513523
+853833,506674
+497220,527562
+59428,629511
+564845,522486
+623621,518603
+242689,558077
+125091,589591
+363819,540432
+686453,514901
+656813,516594
+489901,528155
+386380,537905
+542819,524052
+243987,557841
+693412,514514
+488484,528271
+896331,504881
+336730,543721
+728298,512647
+604215,519840
+153729,579413
+595687,520398
+540360,524240
+245779,557511
+924873,503730
+509628,526577
+528523,525122
+3509,847707
+522756,525555
+895447,504922
+44840,646067
+45860,644715
+463487,530404
+398164,536654
+894483,504959
+619415,518874
+966306,502129
+990922,501212
+835756,507474
+548881,523618
+453578,531282
+474993,529410
+80085,612879
+737091,512193
+50789,638638
+979768,501620
+792018,509483
+665001,516122
+86552,608694
+462772,530469
+589233,520821
+891694,505072
+592605,520594
+209645,564741
+42531,649269
+554376,523226
+803814,508929
+334157,544042
+175836,572970
+868379,506051
+658166,516520
+278203,551995
+966198,502126
+627162,518387
+296774,549165
+311803,547027
+843797,507118
+702304,514032
+563875,522553
+33103,664910
+191932,568841
+543514,524006
+506835,526794
+868368,506052
+847025,506971
+678623,515342
+876139,505726
+571997,521984
+598632,520198
+213590,563892
+625404,518497
+726508,512738
+689426,514738
+332495,544264
+411366,535302
+242546,558110
+315209,546555
+797544,509219
+93889,604371
+858879,506454
+124906,589666
+449072,531693
+235960,559345
+642403,517454
+720567,513047
+705534,513858
+603692,519870
+488137,528302
+157370,578285
+63515,625730
+666326,516041
+619226,518883
+443613,532186
+597717,520257
+96225,603069
+86940,608450
+40725,651929
+460976,530625
+268875,553508
+270671,553214
+363254,540500
+384248,538137
+762889,510892
+377941,538833
+278878,551890
+176615,572755
+860008,506412
+944392,502967
+608395,519571
+225283,561450
+45095,645728
+333798,544090
+625733,518476
+995584,501037
+506135,526853
+238050,558952
+557943,522972
+530978,524938
+634244,517949
+177168,572616
+85200,609541
+953043,502630
+523661,525484
+999295,500902
+840803,507246
+961490,502312
+471747,529685
+380705,538523
+911180,504275
+334149,544046
+478992,529065
+325789,545133
+335884,543826
+426976,533760
+749007,511582
+667067,516000
+607586,519623
+674054,515599
+188534,569675
+565185,522464
+172090,573988
+87592,608052
+907432,504424
+8912,760841
+928318,503590
+757917,511138
+718693,513153
+315141,546566
+728326,512645
+353492,541647
+638429,517695
+628892,518280
+877286,505672
+620895,518778
+385878,537959
+423311,534113
+633501,517997
+884833,505360
+883402,505416
+999665,500894
+708395,513697
+548142,523667
+756491,511205
+987352,501340
+766520,510705
+591775,520647
+833758,507563
+843890,507108
+925551,503698
+74816,616598
+646942,517187
+354923,541481
+256291,555638
+634470,517942
+930904,503494
+134221,586071
+282663,551304
+986070,501394
+123636,590176
+123678,590164
+481717,528841
+423076,534137
+866246,506145
+93313,604697
+783632,509880
+317066,546304
+502977,527103
+141272,583545
+71708,618938
+617748,518975
+581190,521362
+193824,568382
+682368,515131
+352956,541712
+351375,541905
+505362,526909
+905165,504518
+128645,588188
+267143,553787
+158409,577965
+482776,528754
+628896,518282
+485233,528547
+563606,522574
+111001,595655
+115920,593445
+365510,540237
+959724,502374
+938763,503184
+930044,503520
+970959,501956
+913658,504176
+68117,621790
+989729,501253
+567697,522288
+820427,508163
+54236,634794
+291557,549938
+124961,589646
+403177,536130
+405421,535899
+410233,535417
+815111,508403
+213176,563974
+83099,610879
+998588,500934
+513640,526263
+129817,587733
+1820,921851
+287584,550539
+299160,548820
+860621,506386
+529258,525059
+586297,521017
+953406,502616
+441234,532410
+986217,501386
+781938,509957
+461247,530595
+735424,512277
+146623,581722
+839838,507288
+510667,526494
+935085,503327
+737523,512167
+303455,548204
+992779,501145
+60240,628739
+939095,503174
+794368,509370
+501825,527189
+459028,530798
+884641,505363
+512287,526364
+835165,507499
+307723,547590
+160587,577304
+735043,512300
+493289,527887
+110717,595785
+306480,547772
+318593,546089
+179810,571911
+200531,566799
+314999,546580
+197020,567622
+301465,548487
+237808,559000
+131944,586923
+882527,505449
+468117,530003
+711319,513541
+156240,578628
+965452,502162
+992756,501148
+437959,532715
+739938,512046
+614249,519196
+391496,537356
+62746,626418
+688215,514806
+75501,616091
+883573,505412
+558824,522910
+759371,511061
+173913,573489
+891351,505089
+727464,512693
+164833,576051
+812317,508529
+540320,524243
+698061,514257
+69149,620952
+471673,529694
+159092,577753
+428134,533653
+89997,606608
+711061,513557
+779403,510081
+203327,566155
+798176,509187
+667688,515963
+636120,517833
+137410,584913
+217615,563034
+556887,523038
+667229,515991
+672276,515708
+325361,545187
+172115,573985
+13846,725685+
\ No newline at end of file