├── .gitignore ├── .travis.yml ├── CHANGES.rst ├── CONTRIBUTING.rst ├── EulerPy ├── __init__.py ├── __main__.py ├── data │ ├── problems.txt │ ├── resources.json │ ├── resources │ │ ├── 202_laserbeam.gif │ │ ├── 208_robotwalk.gif │ │ ├── 215_crackfree.gif │ │ ├── 220.gif │ │ ├── 226_formula.gif │ │ ├── 226_scoop2.gif │ │ ├── 228.png │ │ ├── 237.gif │ │ ├── 244_example.gif │ │ ├── 244_start.gif │ │ ├── 244_target.gif │ │ ├── 246_anim.gif │ │ ├── 246_ellipse.gif │ │ ├── 247_hypersquares.gif │ │ ├── 251_cardano.gif │ │ ├── 252_convexhole.gif │ │ ├── 255_Example.gif │ │ ├── 255_Heron.gif │ │ ├── 256_tatami3.gif │ │ ├── 257_bisector.gif │ │ ├── 262_formula1.gif │ │ ├── 264_TriangleCentres.gif │ │ ├── 265_BinaryCircles.gif │ │ ├── 270_CutSquare.gif │ │ ├── 275_sculptures2.gif │ │ ├── 281_pizza.gif │ │ ├── 282_formula.gif │ │ ├── 287_quadtree.gif │ │ ├── 289_euler.gif │ │ ├── 291_formula.gif │ │ ├── 295_lenticular.gif │ │ ├── 299_ThreeSimTri.gif │ │ ├── 300_protein.gif │ │ ├── 306_pstrip.gif │ │ ├── 309_ladders.gif │ │ ├── 311_biclinic.gif │ │ ├── 312_sierpinsky8t.gif │ │ ├── 312_sierpinskyAt.gif │ │ ├── 313_sliding_game_1.gif │ │ ├── 313_sliding_game_2.gif │ │ ├── 314_landgrab.gif │ │ ├── 315_clocks.gif │ │ ├── 321_swapping_counters_1.gif │ │ ├── 321_swapping_counters_2.gif │ │ ├── 326_formula1.gif │ │ ├── 326_formula2.gif │ │ ├── 327_rooms_of_doom.gif │ │ ├── 330_formula.gif │ │ ├── base_exp.txt │ │ ├── cipher1.txt │ │ ├── keylog.txt │ │ ├── matrix.txt │ │ ├── names.txt │ │ ├── network.txt │ │ ├── poker.txt │ │ ├── roman.txt │ │ ├── sets.txt │ │ ├── sudoku.txt │ │ ├── triangle.txt │ │ ├── triangles.txt │ │ └── words.txt │ └── solutions.txt ├── euler.py ├── problem.py └── utils.py ├── LICENSE ├── MANIFEST.in ├── README.rst ├── requirements.txt ├── setup.cfg ├── setup.py └── tests ├── test_euler.py └── test_utils.py /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | dist 3 | *.pyc 4 | *.egg-info 5 | .DS_Store 6 | .coverage 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | python: 3 | - "2.7" 4 | - "3.5" 5 | - "3.6" 6 | - "3.7" 7 | - "3.8" 8 | cache: pip 9 | script: nosetests 10 | -------------------------------------------------------------------------------- /CHANGES.rst: -------------------------------------------------------------------------------- 1 | ========= 2 | Changelog 3 | ========= 4 | 5 | v1.4.0 (2019-12-13) 6 | ------------------ 7 | 8 | - Added Python 3.8 support 9 | - Updated problem 59 to newer variant 10 | 11 | 12 | v1.3.0 (2016-05-09) 13 | ------------------- 14 | 15 | - Added problems 301-330 16 | - Added --version flag to CLI 17 | - Added support for prefixed problem files 18 | - Updated to Click 4.0 19 | 20 | 21 | v1.2.3 (2014-09-02) 22 | ------------------- 23 | 24 | - Added problems 267-300 25 | - Fixed bug with regenerating skipped files 26 | - Pruned files included in source distribution 27 | - Changed --generate to check for existence of problem before displaying 28 | file generation prompt 29 | 30 | 31 | v1.2.2 (2014-08-11) 32 | ------------------- 33 | 34 | - Fixed bug with filename of resource for problem 59 35 | 36 | 37 | v1.2.1 (2014-08-10) 38 | ------------------- 39 | 40 | - Changed --generate to allow skipped problem files to be regenerated 41 | 42 | 43 | v1.2.0 (2014-08-06) 44 | ------------------- 45 | 46 | - Dropped official support for Python 2.6 and added Python 3.4 47 | - Added problems 257-266 48 | - Changed file generation to automatically copy relevant resources 49 | 50 | 51 | v1.1.0 (2014-07-20) 52 | ------------------- 53 | 54 | - Added --verify-all option 55 | - Changed --preview to preview the problem after the current one 56 | - Changed problem file search to be more flexible by using the glob module 57 | - Skipping a problem appends a "skipped" suffix to the filename of the problem 58 | 59 | 60 | v1.0.8 (2014-07-07) 61 | ------------------- 62 | 63 | - Made solution verification exit with appropriate exit code based on success 64 | - Changed solution verification to not execute script using shell 65 | - Fixed width of divider line in generated problem docstring 66 | 67 | 68 | v1.0.7 (2014-07-03) 69 | ------------------- 70 | 71 | - Added CPU timings 72 | 73 | 74 | v1.0.6 (2014-06-30) 75 | ------------------- 76 | 77 | - Moved timing information to separate line from problem output 78 | 79 | 80 | v1.0.5 (2014-06-30) 81 | ------------------- 82 | 83 | - Changed multi-line outputs to print first line of output on a new line 84 | - Fixed solution checking on Windows 85 | 86 | 87 | v1.0.4 (2014-06-29) 88 | ------------------- 89 | 90 | - Added problems 203-256 91 | 92 | 93 | v1.0.3 (2014-06-28) 94 | ------------------- 95 | 96 | - Added timing information 97 | - Added more solutions 98 | 99 | 100 | v1.0.2 (2014-06-27) 101 | ------------------- 102 | 103 | - Added Python 2.6 - 3 compatibility 104 | 105 | 106 | v1.0.1 (2014-06-27) 107 | ------------------- 108 | 109 | - Fixed bug with dependencies during installation 110 | 111 | 112 | v1.0.0 (2014-06-27) 113 | ------------------- 114 | 115 | - Initial release. 116 | -------------------------------------------------------------------------------- /CONTRIBUTING.rst: -------------------------------------------------------------------------------- 1 | ============ 2 | Contributing 3 | ============ 4 | 5 | The `problems.txt`_ file consists of text versions of the problems found on 6 | the Project Euler website. Since some of the problems contain content that 7 | is difficult to represent in a plain text format (images, LaTeX-formatted 8 | mathematical equations, etc.), it's probably better to make sure each problem 9 | has been seen at least one time by a biological set of eyes. Here are the 10 | guidelines for the format of the file: 11 | 12 | * Each problem begins with a line in the format ``Problem n``, where ``n`` is 13 | the number of the problem, followed directly by a divider line composed of 14 | ``=`` characters of equal width to the preceeding line. 15 | * Leave **one** empty line after the divider line. 16 | * Keep the width of each line to **74 characters** maximum. 17 | * Align centered text with the 74 character width in mind. 18 | * If the problem links to a resource, ensure that the file exists in the 19 | `data/resources`_ directory and update `resources.json`_ appropriately. 20 | * If the problem contains an image, use the format ``[Image: image name]``. 21 | * Leave **two** empty lines after the final line of the problem text. 22 | * In addition, the problem text itself should never contain two consecutive 23 | empty lines, as this indicates to the script that the the problem has 24 | finished being read. 25 | 26 | I've probably made countless coding *faux pas* given my level of experience, so 27 | any improvements to the codebase are graciously welcomed as well. 28 | 29 | .. _data/resources: https://github.com/iKevinY/EulerPy/blob/master/EulerPy/data/resources/ 30 | .. _resources.json: https://github.com/iKevinY/EulerPy/blog/master/EulerPy/data/resources.json 31 | .. _problems.txt: https://github.com/iKevinY/EulerPy/blob/master/EulerPy/data/problems.txt 32 | -------------------------------------------------------------------------------- /EulerPy/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Python-based Project Euler command line tool. 3 | """ 4 | 5 | __author__ = 'Kevin Yap' 6 | __version__ = '1.4.0' 7 | __license__ = 'MIT' 8 | -------------------------------------------------------------------------------- /EulerPy/__main__.py: -------------------------------------------------------------------------------- 1 | from .euler import main 2 | 3 | if __name__ == '__main__': 4 | main() 5 | -------------------------------------------------------------------------------- /EulerPy/data/resources.json: -------------------------------------------------------------------------------- 1 | { 2 | "22": "names.txt", 3 | "42": "words.txt", 4 | "54": "poker.txt", 5 | "59": "cipher1.txt", 6 | "67": "triangle.txt", 7 | "79": "keylog.txt", 8 | "81": "matrix.txt", 9 | "82": "matrix.txt", 10 | "83": "matrix.txt", 11 | "89": "roman.txt", 12 | "96": "sudoku.txt", 13 | "98": "words.txt", 14 | "99": "base_exp.txt", 15 | "102": "triangles.txt", 16 | "105": "sets.txt", 17 | "107": "network.txt", 18 | "202": "202_laserbeam.gif", 19 | "208": "208_robotwalk.gif", 20 | "215": "215_crackfree.gif", 21 | "220": "220.gif", 22 | "226": [ 23 | "226_formula.gif", 24 | "226_scoop2.gif" 25 | ], 26 | "228": "228.png", 27 | "237": "237.gif", 28 | "244": [ 29 | "244_start.gif", 30 | "244_example.gif", 31 | "244_target.gif" 32 | ], 33 | "246": [ 34 | "246_anim.gif", 35 | "246_ellipse.gif" 36 | ], 37 | "247": "247_hypersquares.gif", 38 | "251": "251_cardano.gif", 39 | "252": "252_convexhole.gif", 40 | "255": [ 41 | "255_Heron.gif", 42 | "255_Example.gif" 43 | ], 44 | "256": "256_tatami3.gif", 45 | "257": "257_bisector.gif", 46 | "262": "262_formula1.gif", 47 | "264": "264_TriangleCentres.gif", 48 | "265": "265_BinaryCircles.gif", 49 | "270": "270_CutSquare.gif", 50 | "275": "275_sculptures2.gif", 51 | "281": "281_pizza.gif", 52 | "282": "282_formula.gif", 53 | "287": "287_quadtree.gif", 54 | "289": "289_euler.gif", 55 | "291": "291_formula.gif", 56 | "295": "295_lenticular.gif", 57 | "299": "299_ThreeSimTri.gif", 58 | "300": "300_protein.gif", 59 | "306": "306_pstrip.gif", 60 | "309": "309_ladders.gif", 61 | "311": "311_biclinic.gif", 62 | "312": [ 63 | "312_sierpinskyAt.gif", 64 | "312_sierpinsky8t.gif" 65 | ], 66 | "313": [ 67 | "313_sliding_game_1.gif", 68 | "313_sliding_game_2.gif" 69 | ], 70 | "314": "314_landgrab.gif", 71 | "315": "315_clocks.gif", 72 | "321": [ 73 | "321_swapping_counters_1.gif", 74 | "321_swapping_counters_2.gif" 75 | ], 76 | "326": [ 77 | "326_formula2.gif", 78 | "326_formula1.gif" 79 | ], 80 | "327": "327_rooms_of_doom.gif", 81 | "330": "330_formula.gif" 82 | } 83 | -------------------------------------------------------------------------------- /EulerPy/data/resources/202_laserbeam.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/202_laserbeam.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/208_robotwalk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/208_robotwalk.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/215_crackfree.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/215_crackfree.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/220.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/220.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/226_formula.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/226_formula.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/226_scoop2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/226_scoop2.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/228.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/228.png -------------------------------------------------------------------------------- /EulerPy/data/resources/237.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/237.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/244_example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/244_example.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/244_start.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/244_start.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/244_target.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/244_target.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/246_anim.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/246_anim.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/246_ellipse.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/246_ellipse.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/247_hypersquares.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/247_hypersquares.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/251_cardano.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/251_cardano.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/252_convexhole.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/252_convexhole.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/255_Example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/255_Example.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/255_Heron.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/255_Heron.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/256_tatami3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/256_tatami3.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/257_bisector.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/257_bisector.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/262_formula1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/262_formula1.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/264_TriangleCentres.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/264_TriangleCentres.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/265_BinaryCircles.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/265_BinaryCircles.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/270_CutSquare.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/270_CutSquare.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/275_sculptures2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/275_sculptures2.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/281_pizza.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/281_pizza.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/282_formula.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/282_formula.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/287_quadtree.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/287_quadtree.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/289_euler.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/289_euler.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/291_formula.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/291_formula.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/295_lenticular.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/295_lenticular.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/299_ThreeSimTri.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/299_ThreeSimTri.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/300_protein.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/300_protein.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/306_pstrip.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/306_pstrip.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/309_ladders.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/309_ladders.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/311_biclinic.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/311_biclinic.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/312_sierpinsky8t.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/312_sierpinsky8t.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/312_sierpinskyAt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/312_sierpinskyAt.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/313_sliding_game_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/313_sliding_game_1.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/313_sliding_game_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/313_sliding_game_2.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/314_landgrab.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/314_landgrab.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/315_clocks.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/315_clocks.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/321_swapping_counters_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/321_swapping_counters_1.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/321_swapping_counters_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/321_swapping_counters_2.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/326_formula1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/326_formula1.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/326_formula2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/326_formula2.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/327_rooms_of_doom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/327_rooms_of_doom.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/330_formula.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iKevinY/EulerPy/9923d2ee026608e33026909bb95c444724b08ba2/EulerPy/data/resources/330_formula.gif -------------------------------------------------------------------------------- /EulerPy/data/resources/base_exp.txt: -------------------------------------------------------------------------------- 1 | 519432,525806 2 | 632382,518061 3 | 78864,613712 4 | 466580,530130 5 | 780495,510032 6 | 525895,525320 7 | 15991,714883 8 | 960290,502358 9 | 760018,511029 10 | 166800,575487 11 | 210884,564478 12 | 555151,523163 13 | 681146,515199 14 | 563395,522587 15 | 738250,512126 16 | 923525,503780 17 | 595148,520429 18 | 177108,572629 19 | 750923,511482 20 | 440902,532446 21 | 881418,505504 22 | 422489,534197 23 | 979858,501616 24 | 685893,514935 25 | 747477,511661 26 | 167214,575367 27 | 234140,559696 28 | 940238,503122 29 | 728969,512609 30 | 232083,560102 31 | 900971,504694 32 | 688801,514772 33 | 189664,569402 34 | 891022,505104 35 | 445689,531996 36 | 119570,591871 37 | 821453,508118 38 | 371084,539600 39 | 911745,504251 40 | 623655,518600 41 | 144361,582486 42 | 352442,541775 43 | 420726,534367 44 | 295298,549387 45 | 6530,787777 46 | 468397,529976 47 | 672336,515696 48 | 431861,533289 49 | 84228,610150 50 | 805376,508857 51 | 444409,532117 52 | 33833,663511 53 | 381850,538396 54 | 402931,536157 55 | 92901,604930 56 | 304825,548004 57 | 731917,512452 58 | 753734,511344 59 | 51894,637373 60 | 151578,580103 61 | 295075,549421 62 | 303590,548183 63 | 333594,544123 64 | 683952,515042 65 | 60090,628880 66 | 951420,502692 67 | 28335,674991 68 | 714940,513349 69 | 343858,542826 70 | 549279,523586 71 | 804571,508887 72 | 260653,554881 73 | 291399,549966 74 | 402342,536213 75 | 408889,535550 76 | 40328,652524 77 | 375856,539061 78 | 768907,510590 79 | 165993,575715 80 | 976327,501755 81 | 898500,504795 82 | 360404,540830 83 | 478714,529095 84 | 694144,514472 85 | 488726,528258 86 | 841380,507226 87 | 328012,544839 88 | 22389,690868 89 | 604053,519852 90 | 329514,544641 91 | 772965,510390 92 | 492798,527927 93 | 30125,670983 94 | 895603,504906 95 | 450785,531539 96 | 840237,507276 97 | 380711,538522 98 | 63577,625673 99 | 76801,615157 100 | 502694,527123 101 | 597706,520257 102 | 310484,547206 103 | 944468,502959 104 | 121283,591152 105 | 451131,531507 106 | 566499,522367 107 | 425373,533918 108 | 40240,652665 109 | 39130,654392 110 | 714926,513355 111 | 469219,529903 112 | 806929,508783 113 | 287970,550487 114 | 92189,605332 115 | 103841,599094 116 | 671839,515725 117 | 452048,531421 118 | 987837,501323 119 | 935192,503321 120 | 88585,607450 121 | 613883,519216 122 | 144551,582413 123 | 647359,517155 124 | 213902,563816 125 | 184120,570789 126 | 258126,555322 127 | 502546,527130 128 | 407655,535678 129 | 401528,536306 130 | 477490,529193 131 | 841085,507237 132 | 732831,512408 133 | 833000,507595 134 | 904694,504542 135 | 581435,521348 136 | 455545,531110 137 | 873558,505829 138 | 94916,603796 139 | 720176,513068 140 | 545034,523891 141 | 246348,557409 142 | 556452,523079 143 | 832015,507634 144 | 173663,573564 145 | 502634,527125 146 | 250732,556611 147 | 569786,522139 148 | 216919,563178 149 | 521815,525623 150 | 92304,605270 151 | 164446,576167 152 | 753413,511364 153 | 11410,740712 154 | 448845,531712 155 | 925072,503725 156 | 564888,522477 157 | 7062,780812 158 | 641155,517535 159 | 738878,512100 160 | 636204,517828 161 | 372540,539436 162 | 443162,532237 163 | 571192,522042 164 | 655350,516680 165 | 299741,548735 166 | 581914,521307 167 | 965471,502156 168 | 513441,526277 169 | 808682,508700 170 | 237589,559034 171 | 543300,524025 172 | 804712,508889 173 | 247511,557192 174 | 543486,524008 175 | 504383,526992 176 | 326529,545039 177 | 792493,509458 178 | 86033,609017 179 | 126554,589005 180 | 579379,521481 181 | 948026,502823 182 | 404777,535969 183 | 265767,554022 184 | 266876,553840 185 | 46631,643714 186 | 492397,527958 187 | 856106,506581 188 | 795757,509305 189 | 748946,511584 190 | 294694,549480 191 | 409781,535463 192 | 775887,510253 193 | 543747,523991 194 | 210592,564536 195 | 517119,525990 196 | 520253,525751 197 | 247926,557124 198 | 592141,520626 199 | 346580,542492 200 | 544969,523902 201 | 506501,526817 202 | 244520,557738 203 | 144745,582349 204 | 69274,620858 205 | 292620,549784 206 | 926027,503687 207 | 736320,512225 208 | 515528,526113 209 | 407549,535688 210 | 848089,506927 211 | 24141,685711 212 | 9224,757964 213 | 980684,501586 214 | 175259,573121 215 | 489160,528216 216 | 878970,505604 217 | 969546,502002 218 | 525207,525365 219 | 690461,514675 220 | 156510,578551 221 | 659778,516426 222 | 468739,529945 223 | 765252,510770 224 | 76703,615230 225 | 165151,575959 226 | 29779,671736 227 | 928865,503569 228 | 577538,521605 229 | 927555,503618 230 | 185377,570477 231 | 974756,501809 232 | 800130,509093 233 | 217016,563153 234 | 365709,540216 235 | 774508,510320 236 | 588716,520851 237 | 631673,518104 238 | 954076,502590 239 | 777828,510161 240 | 990659,501222 241 | 597799,520254 242 | 786905,509727 243 | 512547,526348 244 | 756449,511212 245 | 869787,505988 246 | 653747,516779 247 | 84623,609900 248 | 839698,507295 249 | 30159,670909 250 | 797275,509234 251 | 678136,515373 252 | 897144,504851 253 | 989554,501263 254 | 413292,535106 255 | 55297,633667 256 | 788650,509637 257 | 486748,528417 258 | 150724,580377 259 | 56434,632490 260 | 77207,614869 261 | 588631,520859 262 | 611619,519367 263 | 100006,601055 264 | 528924,525093 265 | 190225,569257 266 | 851155,506789 267 | 682593,515114 268 | 613043,519275 269 | 514673,526183 270 | 877634,505655 271 | 878905,505602 272 | 1926,914951 273 | 613245,519259 274 | 152481,579816 275 | 841774,507203 276 | 71060,619442 277 | 865335,506175 278 | 90244,606469 279 | 302156,548388 280 | 399059,536557 281 | 478465,529113 282 | 558601,522925 283 | 69132,620966 284 | 267663,553700 285 | 988276,501310 286 | 378354,538787 287 | 529909,525014 288 | 161733,576968 289 | 758541,511109 290 | 823425,508024 291 | 149821,580667 292 | 269258,553438 293 | 481152,528891 294 | 120871,591322 295 | 972322,501901 296 | 981350,501567 297 | 676129,515483 298 | 950860,502717 299 | 119000,592114 300 | 392252,537272 301 | 191618,568919 302 | 946699,502874 303 | 289555,550247 304 | 799322,509139 305 | 703886,513942 306 | 194812,568143 307 | 261823,554685 308 | 203052,566221 309 | 217330,563093 310 | 734748,512313 311 | 391759,537328 312 | 807052,508777 313 | 564467,522510 314 | 59186,629748 315 | 113447,594545 316 | 518063,525916 317 | 905944,504492 318 | 613922,519213 319 | 439093,532607 320 | 445946,531981 321 | 230530,560399 322 | 297887,549007 323 | 459029,530797 324 | 403692,536075 325 | 855118,506616 326 | 963127,502245 327 | 841711,507208 328 | 407411,535699 329 | 924729,503735 330 | 914823,504132 331 | 333725,544101 332 | 176345,572832 333 | 912507,504225 334 | 411273,535308 335 | 259774,555036 336 | 632853,518038 337 | 119723,591801 338 | 163902,576321 339 | 22691,689944 340 | 402427,536212 341 | 175769,572988 342 | 837260,507402 343 | 603432,519893 344 | 313679,546767 345 | 538165,524394 346 | 549026,523608 347 | 61083,627945 348 | 898345,504798 349 | 992556,501153 350 | 369999,539727 351 | 32847,665404 352 | 891292,505088 353 | 152715,579732 354 | 824104,507997 355 | 234057,559711 356 | 730507,512532 357 | 960529,502340 358 | 388395,537687 359 | 958170,502437 360 | 57105,631806 361 | 186025,570311 362 | 993043,501133 363 | 576770,521664 364 | 215319,563513 365 | 927342,503628 366 | 521353,525666 367 | 39563,653705 368 | 752516,511408 369 | 110755,595770 370 | 309749,547305 371 | 374379,539224 372 | 919184,503952 373 | 990652,501226 374 | 647780,517135 375 | 187177,570017 376 | 168938,574877 377 | 649558,517023 378 | 278126,552016 379 | 162039,576868 380 | 658512,516499 381 | 498115,527486 382 | 896583,504868 383 | 561170,522740 384 | 747772,511647 385 | 775093,510294 386 | 652081,516882 387 | 724905,512824 388 | 499707,527365 389 | 47388,642755 390 | 646668,517204 391 | 571700,522007 392 | 180430,571747 393 | 710015,513617 394 | 435522,532941 395 | 98137,602041 396 | 759176,511070 397 | 486124,528467 398 | 526942,525236 399 | 878921,505604 400 | 408313,535602 401 | 926980,503640 402 | 882353,505459 403 | 566887,522345 404 | 3326,853312 405 | 911981,504248 406 | 416309,534800 407 | 392991,537199 408 | 622829,518651 409 | 148647,581055 410 | 496483,527624 411 | 666314,516044 412 | 48562,641293 413 | 672618,515684 414 | 443676,532187 415 | 274065,552661 416 | 265386,554079 417 | 347668,542358 418 | 31816,667448 419 | 181575,571446 420 | 961289,502320 421 | 365689,540214 422 | 987950,501317 423 | 932299,503440 424 | 27388,677243 425 | 746701,511701 426 | 492258,527969 427 | 147823,581323 428 | 57918,630985 429 | 838849,507333 430 | 678038,515375 431 | 27852,676130 432 | 850241,506828 433 | 818403,508253 434 | 131717,587014 435 | 850216,506834 436 | 904848,504529 437 | 189758,569380 438 | 392845,537217 439 | 470876,529761 440 | 925353,503711 441 | 285431,550877 442 | 454098,531234 443 | 823910,508003 444 | 318493,546112 445 | 766067,510730 446 | 261277,554775 447 | 421530,534289 448 | 694130,514478 449 | 120439,591498 450 | 213308,563949 451 | 854063,506662 452 | 365255,540263 453 | 165437,575872 454 | 662240,516281 455 | 289970,550181 456 | 847977,506933 457 | 546083,523816 458 | 413252,535113 459 | 975829,501767 460 | 361540,540701 461 | 235522,559435 462 | 224643,561577 463 | 736350,512229 464 | 328303,544808 465 | 35022,661330 466 | 307838,547578 467 | 474366,529458 468 | 873755,505819 469 | 73978,617220 470 | 827387,507845 471 | 670830,515791 472 | 326511,545034 473 | 309909,547285 474 | 400970,536363 475 | 884827,505352 476 | 718307,513175 477 | 28462,674699 478 | 599384,520150 479 | 253565,556111 480 | 284009,551093 481 | 343403,542876 482 | 446557,531921 483 | 992372,501160 484 | 961601,502308 485 | 696629,514342 486 | 919537,503945 487 | 894709,504944 488 | 892201,505051 489 | 358160,541097 490 | 448503,531745 491 | 832156,507636 492 | 920045,503924 493 | 926137,503675 494 | 416754,534757 495 | 254422,555966 496 | 92498,605151 497 | 826833,507873 498 | 660716,516371 499 | 689335,514746 500 | 160045,577467 501 | 814642,508425 502 | 969939,501993 503 | 242856,558047 504 | 76302,615517 505 | 472083,529653 506 | 587101,520964 507 | 99066,601543 508 | 498005,527503 509 | 709800,513624 510 | 708000,513716 511 | 20171,698134 512 | 285020,550936 513 | 266564,553891 514 | 981563,501557 515 | 846502,506991 516 | 334,1190800 517 | 209268,564829 518 | 9844,752610 519 | 996519,501007 520 | 410059,535426 521 | 432931,533188 522 | 848012,506929 523 | 966803,502110 524 | 983434,501486 525 | 160700,577267 526 | 504374,526989 527 | 832061,507640 528 | 392825,537214 529 | 443842,532165 530 | 440352,532492 531 | 745125,511776 532 | 13718,726392 533 | 661753,516312 534 | 70500,619875 535 | 436952,532814 536 | 424724,533973 537 | 21954,692224 538 | 262490,554567 539 | 716622,513264 540 | 907584,504425 541 | 60086,628882 542 | 837123,507412 543 | 971345,501940 544 | 947162,502855 545 | 139920,584021 546 | 68330,621624 547 | 666452,516038 548 | 731446,512481 549 | 953350,502619 550 | 183157,571042 551 | 845400,507045 552 | 651548,516910 553 | 20399,697344 554 | 861779,506331 555 | 629771,518229 556 | 801706,509026 557 | 189207,569512 558 | 737501,512168 559 | 719272,513115 560 | 479285,529045 561 | 136046,585401 562 | 896746,504860 563 | 891735,505067 564 | 684771,514999 565 | 865309,506184 566 | 379066,538702 567 | 503117,527090 568 | 621780,518717 569 | 209518,564775 570 | 677135,515423 571 | 987500,501340 572 | 197049,567613 573 | 329315,544673 574 | 236756,559196 575 | 357092,541226 576 | 520440,525733 577 | 213471,563911 578 | 956852,502490 579 | 702223,514032 580 | 404943,535955 581 | 178880,572152 582 | 689477,514734 583 | 691351,514630 584 | 866669,506128 585 | 370561,539656 586 | 739805,512051 587 | 71060,619441 588 | 624861,518534 589 | 261660,554714 590 | 366137,540160 591 | 166054,575698 592 | 601878,519990 593 | 153445,579501 594 | 279899,551729 595 | 379166,538691 596 | 423209,534125 597 | 675310,515526 598 | 145641,582050 599 | 691353,514627 600 | 917468,504026 601 | 284778,550976 602 | 81040,612235 603 | 161699,576978 604 | 616394,519057 605 | 767490,510661 606 | 156896,578431 607 | 427408,533714 608 | 254849,555884 609 | 737217,512182 610 | 897133,504851 611 | 203815,566051 612 | 270822,553189 613 | 135854,585475 614 | 778805,510111 615 | 784373,509847 616 | 305426,547921 617 | 733418,512375 618 | 732087,512448 619 | 540668,524215 620 | 702898,513996 621 | 628057,518328 622 | 640280,517587 623 | 422405,534204 624 | 10604,746569 625 | 746038,511733 626 | 839808,507293 627 | 457417,530938 628 | 479030,529064 629 | 341758,543090 630 | 620223,518824 631 | 251661,556451 632 | 561790,522696 633 | 497733,527521 634 | 724201,512863 635 | 489217,528217 636 | 415623,534867 637 | 624610,518548 638 | 847541,506953 639 | 432295,533249 640 | 400391,536421 641 | 961158,502319 642 | 139173,584284 643 | 421225,534315 644 | 579083,521501 645 | 74274,617000 646 | 701142,514087 647 | 374465,539219 648 | 217814,562985 649 | 358972,540995 650 | 88629,607424 651 | 288597,550389 652 | 285819,550812 653 | 538400,524385 654 | 809930,508645 655 | 738326,512126 656 | 955461,502535 657 | 163829,576343 658 | 826475,507891 659 | 376488,538987 660 | 102234,599905 661 | 114650,594002 662 | 52815,636341 663 | 434037,533082 664 | 804744,508880 665 | 98385,601905 666 | 856620,506559 667 | 220057,562517 668 | 844734,507078 669 | 150677,580387 670 | 558697,522917 671 | 621751,518719 672 | 207067,565321 673 | 135297,585677 674 | 932968,503404 675 | 604456,519822 676 | 579728,521462 677 | 244138,557813 678 | 706487,513800 679 | 711627,513523 680 | 853833,506674 681 | 497220,527562 682 | 59428,629511 683 | 564845,522486 684 | 623621,518603 685 | 242689,558077 686 | 125091,589591 687 | 363819,540432 688 | 686453,514901 689 | 656813,516594 690 | 489901,528155 691 | 386380,537905 692 | 542819,524052 693 | 243987,557841 694 | 693412,514514 695 | 488484,528271 696 | 896331,504881 697 | 336730,543721 698 | 728298,512647 699 | 604215,519840 700 | 153729,579413 701 | 595687,520398 702 | 540360,524240 703 | 245779,557511 704 | 924873,503730 705 | 509628,526577 706 | 528523,525122 707 | 3509,847707 708 | 522756,525555 709 | 895447,504922 710 | 44840,646067 711 | 45860,644715 712 | 463487,530404 713 | 398164,536654 714 | 894483,504959 715 | 619415,518874 716 | 966306,502129 717 | 990922,501212 718 | 835756,507474 719 | 548881,523618 720 | 453578,531282 721 | 474993,529410 722 | 80085,612879 723 | 737091,512193 724 | 50789,638638 725 | 979768,501620 726 | 792018,509483 727 | 665001,516122 728 | 86552,608694 729 | 462772,530469 730 | 589233,520821 731 | 891694,505072 732 | 592605,520594 733 | 209645,564741 734 | 42531,649269 735 | 554376,523226 736 | 803814,508929 737 | 334157,544042 738 | 175836,572970 739 | 868379,506051 740 | 658166,516520 741 | 278203,551995 742 | 966198,502126 743 | 627162,518387 744 | 296774,549165 745 | 311803,547027 746 | 843797,507118 747 | 702304,514032 748 | 563875,522553 749 | 33103,664910 750 | 191932,568841 751 | 543514,524006 752 | 506835,526794 753 | 868368,506052 754 | 847025,506971 755 | 678623,515342 756 | 876139,505726 757 | 571997,521984 758 | 598632,520198 759 | 213590,563892 760 | 625404,518497 761 | 726508,512738 762 | 689426,514738 763 | 332495,544264 764 | 411366,535302 765 | 242546,558110 766 | 315209,546555 767 | 797544,509219 768 | 93889,604371 769 | 858879,506454 770 | 124906,589666 771 | 449072,531693 772 | 235960,559345 773 | 642403,517454 774 | 720567,513047 775 | 705534,513858 776 | 603692,519870 777 | 488137,528302 778 | 157370,578285 779 | 63515,625730 780 | 666326,516041 781 | 619226,518883 782 | 443613,532186 783 | 597717,520257 784 | 96225,603069 785 | 86940,608450 786 | 40725,651929 787 | 460976,530625 788 | 268875,553508 789 | 270671,553214 790 | 363254,540500 791 | 384248,538137 792 | 762889,510892 793 | 377941,538833 794 | 278878,551890 795 | 176615,572755 796 | 860008,506412 797 | 944392,502967 798 | 608395,519571 799 | 225283,561450 800 | 45095,645728 801 | 333798,544090 802 | 625733,518476 803 | 995584,501037 804 | 506135,526853 805 | 238050,558952 806 | 557943,522972 807 | 530978,524938 808 | 634244,517949 809 | 177168,572616 810 | 85200,609541 811 | 953043,502630 812 | 523661,525484 813 | 999295,500902 814 | 840803,507246 815 | 961490,502312 816 | 471747,529685 817 | 380705,538523 818 | 911180,504275 819 | 334149,544046 820 | 478992,529065 821 | 325789,545133 822 | 335884,543826 823 | 426976,533760 824 | 749007,511582 825 | 667067,516000 826 | 607586,519623 827 | 674054,515599 828 | 188534,569675 829 | 565185,522464 830 | 172090,573988 831 | 87592,608052 832 | 907432,504424 833 | 8912,760841 834 | 928318,503590 835 | 757917,511138 836 | 718693,513153 837 | 315141,546566 838 | 728326,512645 839 | 353492,541647 840 | 638429,517695 841 | 628892,518280 842 | 877286,505672 843 | 620895,518778 844 | 385878,537959 845 | 423311,534113 846 | 633501,517997 847 | 884833,505360 848 | 883402,505416 849 | 999665,500894 850 | 708395,513697 851 | 548142,523667 852 | 756491,511205 853 | 987352,501340 854 | 766520,510705 855 | 591775,520647 856 | 833758,507563 857 | 843890,507108 858 | 925551,503698 859 | 74816,616598 860 | 646942,517187 861 | 354923,541481 862 | 256291,555638 863 | 634470,517942 864 | 930904,503494 865 | 134221,586071 866 | 282663,551304 867 | 986070,501394 868 | 123636,590176 869 | 123678,590164 870 | 481717,528841 871 | 423076,534137 872 | 866246,506145 873 | 93313,604697 874 | 783632,509880 875 | 317066,546304 876 | 502977,527103 877 | 141272,583545 878 | 71708,618938 879 | 617748,518975 880 | 581190,521362 881 | 193824,568382 882 | 682368,515131 883 | 352956,541712 884 | 351375,541905 885 | 505362,526909 886 | 905165,504518 887 | 128645,588188 888 | 267143,553787 889 | 158409,577965 890 | 482776,528754 891 | 628896,518282 892 | 485233,528547 893 | 563606,522574 894 | 111001,595655 895 | 115920,593445 896 | 365510,540237 897 | 959724,502374 898 | 938763,503184 899 | 930044,503520 900 | 970959,501956 901 | 913658,504176 902 | 68117,621790 903 | 989729,501253 904 | 567697,522288 905 | 820427,508163 906 | 54236,634794 907 | 291557,549938 908 | 124961,589646 909 | 403177,536130 910 | 405421,535899 911 | 410233,535417 912 | 815111,508403 913 | 213176,563974 914 | 83099,610879 915 | 998588,500934 916 | 513640,526263 917 | 129817,587733 918 | 1820,921851 919 | 287584,550539 920 | 299160,548820 921 | 860621,506386 922 | 529258,525059 923 | 586297,521017 924 | 953406,502616 925 | 441234,532410 926 | 986217,501386 927 | 781938,509957 928 | 461247,530595 929 | 735424,512277 930 | 146623,581722 931 | 839838,507288 932 | 510667,526494 933 | 935085,503327 934 | 737523,512167 935 | 303455,548204 936 | 992779,501145 937 | 60240,628739 938 | 939095,503174 939 | 794368,509370 940 | 501825,527189 941 | 459028,530798 942 | 884641,505363 943 | 512287,526364 944 | 835165,507499 945 | 307723,547590 946 | 160587,577304 947 | 735043,512300 948 | 493289,527887 949 | 110717,595785 950 | 306480,547772 951 | 318593,546089 952 | 179810,571911 953 | 200531,566799 954 | 314999,546580 955 | 197020,567622 956 | 301465,548487 957 | 237808,559000 958 | 131944,586923 959 | 882527,505449 960 | 468117,530003 961 | 711319,513541 962 | 156240,578628 963 | 965452,502162 964 | 992756,501148 965 | 437959,532715 966 | 739938,512046 967 | 614249,519196 968 | 391496,537356 969 | 62746,626418 970 | 688215,514806 971 | 75501,616091 972 | 883573,505412 973 | 558824,522910 974 | 759371,511061 975 | 173913,573489 976 | 891351,505089 977 | 727464,512693 978 | 164833,576051 979 | 812317,508529 980 | 540320,524243 981 | 698061,514257 982 | 69149,620952 983 | 471673,529694 984 | 159092,577753 985 | 428134,533653 986 | 89997,606608 987 | 711061,513557 988 | 779403,510081 989 | 203327,566155 990 | 798176,509187 991 | 667688,515963 992 | 636120,517833 993 | 137410,584913 994 | 217615,563034 995 | 556887,523038 996 | 667229,515991 997 | 672276,515708 998 | 325361,545187 999 | 172115,573985 1000 | 13846,725685 -------------------------------------------------------------------------------- /EulerPy/data/resources/cipher1.txt: -------------------------------------------------------------------------------- 1 | 36,22,80,0,0,4,23,25,19,17,88,4,4,19,21,11,88,22,23,23,29,69,12,24,0,88,25,11,12,2,10,28,5,6,12,25,10,22,80,10,30,80,10,22,21,69,23,22,69,61,5,9,29,2,66,11,80,8,23,3,17,88,19,0,20,21,7,10,17,17,29,20,69,8,17,21,29,2,22,84,80,71,60,21,69,11,5,8,21,25,22,88,3,0,10,25,0,10,5,8,88,2,0,27,25,21,10,31,6,25,2,16,21,82,69,35,63,11,88,4,13,29,80,22,13,29,22,88,31,3,88,3,0,10,25,0,11,80,10,30,80,23,29,19,12,8,2,10,27,17,9,11,45,95,88,57,69,16,17,19,29,80,23,29,19,0,22,4,9,1,80,3,23,5,11,28,92,69,9,5,12,12,21,69,13,30,0,0,0,0,27,4,0,28,28,28,84,80,4,22,80,0,20,21,2,25,30,17,88,21,29,8,2,0,11,3,12,23,30,69,30,31,23,88,4,13,29,80,0,22,4,12,10,21,69,11,5,8,88,31,3,88,4,13,17,3,69,11,21,23,17,21,22,88,65,69,83,80,84,87,68,69,83,80,84,87,73,69,83,80,84,87,65,83,88,91,69,29,4,6,86,92,69,15,24,12,27,24,69,28,21,21,29,30,1,11,80,10,22,80,17,16,21,69,9,5,4,28,2,4,12,5,23,29,80,10,30,80,17,16,21,69,27,25,23,27,28,0,84,80,22,23,80,17,16,17,17,88,25,3,88,4,13,29,80,17,10,5,0,88,3,16,21,80,10,30,80,17,16,25,22,88,3,0,10,25,0,11,80,12,11,80,10,26,4,4,17,30,0,28,92,69,30,2,10,21,80,12,12,80,4,12,80,10,22,19,0,88,4,13,29,80,20,13,17,1,10,17,17,13,2,0,88,31,3,88,4,13,29,80,6,17,2,6,20,21,69,30,31,9,20,31,18,11,94,69,54,17,8,29,28,28,84,80,44,88,24,4,14,21,69,30,31,16,22,20,69,12,24,4,12,80,17,16,21,69,11,5,8,88,31,3,88,4,13,17,3,69,11,21,23,17,21,22,88,25,22,88,17,69,11,25,29,12,24,69,8,17,23,12,80,10,30,80,17,16,21,69,11,1,16,25,2,0,88,31,3,88,4,13,29,80,21,29,2,12,21,21,17,29,2,69,23,22,69,12,24,0,88,19,12,10,19,9,29,80,18,16,31,22,29,80,1,17,17,8,29,4,0,10,80,12,11,80,84,67,80,10,10,80,7,1,80,21,13,4,17,17,30,2,88,4,13,29,80,22,13,29,69,23,22,69,12,24,12,11,80,22,29,2,12,29,3,69,29,1,16,25,28,69,12,31,69,11,92,69,17,4,69,16,17,22,88,4,13,29,80,23,25,4,12,23,80,22,9,2,17,80,70,76,88,29,16,20,4,12,8,28,12,29,20,69,26,9,69,11,80,17,23,80,84,88,31,3,88,4,13,29,80,21,29,2,12,21,21,17,29,2,69,12,31,69,12,24,0,88,20,12,25,29,0,12,21,23,86,80,44,88,7,12,20,28,69,11,31,10,22,80,22,16,31,18,88,4,13,25,4,69,12,24,0,88,3,16,21,80,10,30,80,17,16,25,22,88,3,0,10,25,0,11,80,17,23,80,7,29,80,4,8,0,23,23,8,12,21,17,17,29,28,28,88,65,75,78,68,81,65,67,81,72,70,83,64,68,87,74,70,81,75,70,81,67,80,4,22,20,69,30,2,10,21,80,8,13,28,17,17,0,9,1,25,11,31,80,17,16,25,22,88,30,16,21,18,0,10,80,7,1,80,22,17,8,73,88,17,11,28,80,17,16,21,11,88,4,4,19,25,11,31,80,17,16,21,69,11,1,16,25,2,0,88,2,10,23,4,73,88,4,13,29,80,11,13,29,7,29,2,69,75,94,84,76,65,80,65,66,83,77,67,80,64,73,82,65,67,87,75,72,69,17,3,69,17,30,1,29,21,1,88,0,23,23,20,16,27,21,1,84,80,18,16,25,6,16,80,0,0,0,23,29,3,22,29,3,69,12,24,0,88,0,0,10,25,8,29,4,0,10,80,10,30,80,4,88,19,12,10,19,9,29,80,18,16,31,22,29,80,1,17,17,8,29,4,0,10,80,12,11,80,84,86,80,35,23,28,9,23,7,12,22,23,69,25,23,4,17,30,69,12,24,0,88,3,4,21,21,69,11,4,0,8,3,69,26,9,69,15,24,12,27,24,69,49,80,13,25,20,69,25,2,23,17,6,0,28,80,4,12,80,17,16,25,22,88,3,16,21,92,69,49,80,13,25,6,0,88,20,12,11,19,10,14,21,23,29,20,69,12,24,4,12,80,17,16,21,69,11,5,8,88,31,3,88,4,13,29,80,22,29,2,12,29,3,69,73,80,78,88,65,74,73,70,69,83,80,84,87,72,84,88,91,69,73,95,87,77,70,69,83,80,84,87,70,87,77,80,78,88,21,17,27,94,69,25,28,22,23,80,1,29,0,0,22,20,22,88,31,11,88,4,13,29,80,20,13,17,1,10,17,17,13,2,0,88,31,3,88,4,13,29,80,6,17,2,6,20,21,75,88,62,4,21,21,9,1,92,69,12,24,0,88,3,16,21,80,10,30,80,17,16,25,22,88,29,16,20,4,12,8,28,12,29,20,69,26,9,69,65,64,69,31,25,19,29,3,69,12,24,0,88,18,12,9,5,4,28,2,4,12,21,69,80,22,10,13,2,17,16,80,21,23,7,0,10,89,69,23,22,69,12,24,0,88,19,12,10,19,16,21,22,0,10,21,11,27,21,69,23,22,69,12,24,0,88,0,0,10,25,8,29,4,0,10,80,10,30,80,4,88,19,12,10,19,9,29,80,18,16,31,22,29,80,1,17,17,8,29,4,0,10,80,12,11,80,84,86,80,36,22,20,69,26,9,69,11,25,8,17,28,4,10,80,23,29,17,22,23,30,12,22,23,69,49,80,13,25,6,0,88,28,12,19,21,18,17,3,0,88,18,0,29,30,69,25,18,9,29,80,17,23,80,1,29,4,0,10,29,12,22,21,69,12,24,0,88,3,16,21,3,69,23,22,69,12,24,0,88,3,16,26,3,0,9,5,0,22,4,69,11,21,23,17,21,22,88,25,11,88,7,13,17,19,13,88,4,13,29,80,0,0,0,10,22,21,11,12,3,69,25,2,0,88,21,19,29,30,69,22,5,8,26,21,23,11,94 -------------------------------------------------------------------------------- /EulerPy/data/resources/keylog.txt: -------------------------------------------------------------------------------- 1 | 319 2 | 680 3 | 180 4 | 690 5 | 129 6 | 620 7 | 762 8 | 689 9 | 762 10 | 318 11 | 368 12 | 710 13 | 720 14 | 710 15 | 629 16 | 168 17 | 160 18 | 689 19 | 716 20 | 731 21 | 736 22 | 729 23 | 316 24 | 729 25 | 729 26 | 710 27 | 769 28 | 290 29 | 719 30 | 680 31 | 318 32 | 389 33 | 162 34 | 289 35 | 162 36 | 718 37 | 729 38 | 319 39 | 790 40 | 680 41 | 890 42 | 362 43 | 319 44 | 760 45 | 316 46 | 729 47 | 380 48 | 319 49 | 728 50 | 716 51 | -------------------------------------------------------------------------------- /EulerPy/data/resources/matrix.txt: -------------------------------------------------------------------------------- 1 | 4445,2697,5115,718,2209,2212,654,4348,3079,6821,7668,3276,8874,4190,3785,2752,9473,7817,9137,496,7338,3434,7152,4355,4552,7917,7827,2460,2350,691,3514,5880,3145,7633,7199,3783,5066,7487,3285,1084,8985,760,872,8609,8051,1134,9536,5750,9716,9371,7619,5617,275,9721,2997,2698,1887,8825,6372,3014,2113,7122,7050,6775,5948,2758,1219,3539,348,7989,2735,9862,1263,8089,6401,9462,3168,2758,3748,5870 2 | 1096,20,1318,7586,5167,2642,1443,5741,7621,7030,5526,4244,2348,4641,9827,2448,6918,5883,3737,300,7116,6531,567,5997,3971,6623,820,6148,3287,1874,7981,8424,7672,7575,6797,6717,1078,5008,4051,8795,5820,346,1851,6463,2117,6058,3407,8211,117,4822,1317,4377,4434,5925,8341,4800,1175,4173,690,8978,7470,1295,3799,8724,3509,9849,618,3320,7068,9633,2384,7175,544,6583,1908,9983,481,4187,9353,9377 3 | 9607,7385,521,6084,1364,8983,7623,1585,6935,8551,2574,8267,4781,3834,2764,2084,2669,4656,9343,7709,2203,9328,8004,6192,5856,3555,2260,5118,6504,1839,9227,1259,9451,1388,7909,5733,6968,8519,9973,1663,5315,7571,3035,4325,4283,2304,6438,3815,9213,9806,9536,196,5542,6907,2475,1159,5820,9075,9470,2179,9248,1828,4592,9167,3713,4640,47,3637,309,7344,6955,346,378,9044,8635,7466,5036,9515,6385,9230 4 | 7206,3114,7760,1094,6150,5182,7358,7387,4497,955,101,1478,7777,6966,7010,8417,6453,4955,3496,107,449,8271,131,2948,6185,784,5937,8001,6104,8282,4165,3642,710,2390,575,715,3089,6964,4217,192,5949,7006,715,3328,1152,66,8044,4319,1735,146,4818,5456,6451,4113,1063,4781,6799,602,1504,6245,6550,1417,1343,2363,3785,5448,4545,9371,5420,5068,4613,4882,4241,5043,7873,8042,8434,3939,9256,2187 5 | 3620,8024,577,9997,7377,7682,1314,1158,6282,6310,1896,2509,5436,1732,9480,706,496,101,6232,7375,2207,2306,110,6772,3433,2878,8140,5933,8688,1399,2210,7332,6172,6403,7333,4044,2291,1790,2446,7390,8698,5723,3678,7104,1825,2040,140,3982,4905,4160,2200,5041,2512,1488,2268,1175,7588,8321,8078,7312,977,5257,8465,5068,3453,3096,1651,7906,253,9250,6021,8791,8109,6651,3412,345,4778,5152,4883,7505 6 | 1074,5438,9008,2679,5397,5429,2652,3403,770,9188,4248,2493,4361,8327,9587,707,9525,5913,93,1899,328,2876,3604,673,8576,6908,7659,2544,3359,3883,5273,6587,3065,1749,3223,604,9925,6941,2823,8767,7039,3290,3214,1787,7904,3421,7137,9560,8451,2669,9219,6332,1576,5477,6755,8348,4164,4307,2984,4012,6629,1044,2874,6541,4942,903,1404,9125,5160,8836,4345,2581,460,8438,1538,5507,668,3352,2678,6942 7 | 4295,1176,5596,1521,3061,9868,7037,7129,8933,6659,5947,5063,3653,9447,9245,2679,767,714,116,8558,163,3927,8779,158,5093,2447,5782,3967,1716,931,7772,8164,1117,9244,5783,7776,3846,8862,6014,2330,6947,1777,3112,6008,3491,1906,5952,314,4602,8994,5919,9214,3995,5026,7688,6809,5003,3128,2509,7477,110,8971,3982,8539,2980,4689,6343,5411,2992,5270,5247,9260,2269,7474,1042,7162,5206,1232,4556,4757 8 | 510,3556,5377,1406,5721,4946,2635,7847,4251,8293,8281,6351,4912,287,2870,3380,3948,5322,3840,4738,9563,1906,6298,3234,8959,1562,6297,8835,7861,239,6618,1322,2553,2213,5053,5446,4402,6500,5182,8585,6900,5756,9661,903,5186,7687,5998,7997,8081,8955,4835,6069,2621,1581,732,9564,1082,1853,5442,1342,520,1737,3703,5321,4793,2776,1508,1647,9101,2499,6891,4336,7012,3329,3212,1442,9993,3988,4930,7706 9 | 9444,3401,5891,9716,1228,7107,109,3563,2700,6161,5039,4992,2242,8541,7372,2067,1294,3058,1306,320,8881,5756,9326,411,8650,8824,5495,8282,8397,2000,1228,7817,2099,6473,3571,5994,4447,1299,5991,543,7874,2297,1651,101,2093,3463,9189,6872,6118,872,1008,1779,2805,9084,4048,2123,5877,55,3075,1737,9459,4535,6453,3644,108,5982,4437,5213,1340,6967,9943,5815,669,8074,1838,6979,9132,9315,715,5048 10 | 3327,4030,7177,6336,9933,5296,2621,4785,2755,4832,2512,2118,2244,4407,2170,499,7532,9742,5051,7687,970,6924,3527,4694,5145,1306,2165,5940,2425,8910,3513,1909,6983,346,6377,4304,9330,7203,6605,3709,3346,970,369,9737,5811,4427,9939,3693,8436,5566,1977,3728,2399,3985,8303,2492,5366,9802,9193,7296,1033,5060,9144,2766,1151,7629,5169,5995,58,7619,7565,4208,1713,6279,3209,4908,9224,7409,1325,8540 11 | 6882,1265,1775,3648,4690,959,5837,4520,5394,1378,9485,1360,4018,578,9174,2932,9890,3696,116,1723,1178,9355,7063,1594,1918,8574,7594,7942,1547,6166,7888,354,6932,4651,1010,7759,6905,661,7689,6092,9292,3845,9605,8443,443,8275,5163,7720,7265,6356,7779,1798,1754,5225,6661,1180,8024,5666,88,9153,1840,3508,1193,4445,2648,3538,6243,6375,8107,5902,5423,2520,1122,5015,6113,8859,9370,966,8673,2442 12 | 7338,3423,4723,6533,848,8041,7921,8277,4094,5368,7252,8852,9166,2250,2801,6125,8093,5738,4038,9808,7359,9494,601,9116,4946,2702,5573,2921,9862,1462,1269,2410,4171,2709,7508,6241,7522,615,2407,8200,4189,5492,5649,7353,2590,5203,4274,710,7329,9063,956,8371,3722,4253,4785,1194,4828,4717,4548,940,983,2575,4511,2938,1827,2027,2700,1236,841,5760,1680,6260,2373,3851,1841,4968,1172,5179,7175,3509 13 | 4420,1327,3560,2376,6260,2988,9537,4064,4829,8872,9598,3228,1792,7118,9962,9336,4368,9189,6857,1829,9863,6287,7303,7769,2707,8257,2391,2009,3975,4993,3068,9835,3427,341,8412,2134,4034,8511,6421,3041,9012,2983,7289,100,1355,7904,9186,6920,5856,2008,6545,8331,3655,5011,839,8041,9255,6524,3862,8788,62,7455,3513,5003,8413,3918,2076,7960,6108,3638,6999,3436,1441,4858,4181,1866,8731,7745,3744,1000 14 | 356,8296,8325,1058,1277,4743,3850,2388,6079,6462,2815,5620,8495,5378,75,4324,3441,9870,1113,165,1544,1179,2834,562,6176,2313,6836,8839,2986,9454,5199,6888,1927,5866,8760,320,1792,8296,7898,6121,7241,5886,5814,2815,8336,1576,4314,3109,2572,6011,2086,9061,9403,3947,5487,9731,7281,3159,1819,1334,3181,5844,5114,9898,4634,2531,4412,6430,4262,8482,4546,4555,6804,2607,9421,686,8649,8860,7794,6672 15 | 9870,152,1558,4963,8750,4754,6521,6256,8818,5208,5691,9659,8377,9725,5050,5343,2539,6101,1844,9700,7750,8114,5357,3001,8830,4438,199,9545,8496,43,2078,327,9397,106,6090,8181,8646,6414,7499,5450,4850,6273,5014,4131,7639,3913,6571,8534,9703,4391,7618,445,1320,5,1894,6771,7383,9191,4708,9706,6939,7937,8726,9382,5216,3685,2247,9029,8154,1738,9984,2626,9438,4167,6351,5060,29,1218,1239,4785 16 | 192,5213,8297,8974,4032,6966,5717,1179,6523,4679,9513,1481,3041,5355,9303,9154,1389,8702,6589,7818,6336,3539,5538,3094,6646,6702,6266,2759,4608,4452,617,9406,8064,6379,444,5602,4950,1810,8391,1536,316,8714,1178,5182,5863,5110,5372,4954,1978,2971,5680,4863,2255,4630,5723,2168,538,1692,1319,7540,440,6430,6266,7712,7385,5702,620,641,3136,7350,1478,3155,2820,9109,6261,1122,4470,14,8493,2095 17 | 1046,4301,6082,474,4974,7822,2102,5161,5172,6946,8074,9716,6586,9962,9749,5015,2217,995,5388,4402,7652,6399,6539,1349,8101,3677,1328,9612,7922,2879,231,5887,2655,508,4357,4964,3554,5930,6236,7384,4614,280,3093,9600,2110,7863,2631,6626,6620,68,1311,7198,7561,1768,5139,1431,221,230,2940,968,5283,6517,2146,1646,869,9402,7068,8645,7058,1765,9690,4152,2926,9504,2939,7504,6074,2944,6470,7859 18 | 4659,736,4951,9344,1927,6271,8837,8711,3241,6579,7660,5499,5616,3743,5801,4682,9748,8796,779,1833,4549,8138,4026,775,4170,2432,4174,3741,7540,8017,2833,4027,396,811,2871,1150,9809,2719,9199,8504,1224,540,2051,3519,7982,7367,2761,308,3358,6505,2050,4836,5090,7864,805,2566,2409,6876,3361,8622,5572,5895,3280,441,7893,8105,1634,2929,274,3926,7786,6123,8233,9921,2674,5340,1445,203,4585,3837 19 | 5759,338,7444,7968,7742,3755,1591,4839,1705,650,7061,2461,9230,9391,9373,2413,1213,431,7801,4994,2380,2703,6161,6878,8331,2538,6093,1275,5065,5062,2839,582,1014,8109,3525,1544,1569,8622,7944,2905,6120,1564,1839,5570,7579,1318,2677,5257,4418,5601,7935,7656,5192,1864,5886,6083,5580,6202,8869,1636,7907,4759,9082,5854,3185,7631,6854,5872,5632,5280,1431,2077,9717,7431,4256,8261,9680,4487,4752,4286 20 | 1571,1428,8599,1230,7772,4221,8523,9049,4042,8726,7567,6736,9033,2104,4879,4967,6334,6716,3994,1269,8995,6539,3610,7667,6560,6065,874,848,4597,1711,7161,4811,6734,5723,6356,6026,9183,2586,5636,1092,7779,7923,8747,6887,7505,9909,1792,3233,4526,3176,1508,8043,720,5212,6046,4988,709,5277,8256,3642,1391,5803,1468,2145,3970,6301,7767,2359,8487,9771,8785,7520,856,1605,8972,2402,2386,991,1383,5963 21 | 1822,4824,5957,6511,9868,4113,301,9353,6228,2881,2966,6956,9124,9574,9233,1601,7340,973,9396,540,4747,8590,9535,3650,7333,7583,4806,3593,2738,8157,5215,8472,2284,9473,3906,6982,5505,6053,7936,6074,7179,6688,1564,1103,6860,5839,2022,8490,910,7551,7805,881,7024,1855,9448,4790,1274,3672,2810,774,7623,4223,4850,6071,9975,4935,1915,9771,6690,3846,517,463,7624,4511,614,6394,3661,7409,1395,8127 22 | 8738,3850,9555,3695,4383,2378,87,6256,6740,7682,9546,4255,6105,2000,1851,4073,8957,9022,6547,5189,2487,303,9602,7833,1628,4163,6678,3144,8589,7096,8913,5823,4890,7679,1212,9294,5884,2972,3012,3359,7794,7428,1579,4350,7246,4301,7779,7790,3294,9547,4367,3549,1958,8237,6758,3497,3250,3456,6318,1663,708,7714,6143,6890,3428,6853,9334,7992,591,6449,9786,1412,8500,722,5468,1371,108,3939,4199,2535 23 | 7047,4323,1934,5163,4166,461,3544,2767,6554,203,6098,2265,9078,2075,4644,6641,8412,9183,487,101,7566,5622,1975,5726,2920,5374,7779,5631,3753,3725,2672,3621,4280,1162,5812,345,8173,9785,1525,955,5603,2215,2580,5261,2765,2990,5979,389,3907,2484,1232,5933,5871,3304,1138,1616,5114,9199,5072,7442,7245,6472,4760,6359,9053,7876,2564,9404,3043,9026,2261,3374,4460,7306,2326,966,828,3274,1712,3446 24 | 3975,4565,8131,5800,4570,2306,8838,4392,9147,11,3911,7118,9645,4994,2028,6062,5431,2279,8752,2658,7836,994,7316,5336,7185,3289,1898,9689,2331,5737,3403,1124,2679,3241,7748,16,2724,5441,6640,9368,9081,5618,858,4969,17,2103,6035,8043,7475,2181,939,415,1617,8500,8253,2155,7843,7974,7859,1746,6336,3193,2617,8736,4079,6324,6645,8891,9396,5522,6103,1857,8979,3835,2475,1310,7422,610,8345,7615 25 | 9248,5397,5686,2988,3446,4359,6634,9141,497,9176,6773,7448,1907,8454,916,1596,2241,1626,1384,2741,3649,5362,8791,7170,2903,2475,5325,6451,924,3328,522,90,4813,9737,9557,691,2388,1383,4021,1609,9206,4707,5200,7107,8104,4333,9860,5013,1224,6959,8527,1877,4545,7772,6268,621,4915,9349,5970,706,9583,3071,4127,780,8231,3017,9114,3836,7503,2383,1977,4870,8035,2379,9704,1037,3992,3642,1016,4303 26 | 5093,138,4639,6609,1146,5565,95,7521,9077,2272,974,4388,2465,2650,722,4998,3567,3047,921,2736,7855,173,2065,4238,1048,5,6847,9548,8632,9194,5942,4777,7910,8971,6279,7253,2516,1555,1833,3184,9453,9053,6897,7808,8629,4877,1871,8055,4881,7639,1537,7701,2508,7564,5845,5023,2304,5396,3193,2955,1088,3801,6203,1748,3737,1276,13,4120,7715,8552,3047,2921,106,7508,304,1280,7140,2567,9135,5266 27 | 6237,4607,7527,9047,522,7371,4883,2540,5867,6366,5301,1570,421,276,3361,527,6637,4861,2401,7522,5808,9371,5298,2045,5096,5447,7755,5115,7060,8529,4078,1943,1697,1764,5453,7085,960,2405,739,2100,5800,728,9737,5704,5693,1431,8979,6428,673,7540,6,7773,5857,6823,150,5869,8486,684,5816,9626,7451,5579,8260,3397,5322,6920,1879,2127,2884,5478,4977,9016,6165,6292,3062,5671,5968,78,4619,4763 28 | 9905,7127,9390,5185,6923,3721,9164,9705,4341,1031,1046,5127,7376,6528,3248,4941,1178,7889,3364,4486,5358,9402,9158,8600,1025,874,1839,1783,309,9030,1843,845,8398,1433,7118,70,8071,2877,3904,8866,6722,4299,10,1929,5897,4188,600,1889,3325,2485,6473,4474,7444,6992,4846,6166,4441,2283,2629,4352,7775,1101,2214,9985,215,8270,9750,2740,8361,7103,5930,8664,9690,8302,9267,344,2077,1372,1880,9550 29 | 5825,8517,7769,2405,8204,1060,3603,7025,478,8334,1997,3692,7433,9101,7294,7498,9415,5452,3850,3508,6857,9213,6807,4412,7310,854,5384,686,4978,892,8651,3241,2743,3801,3813,8588,6701,4416,6990,6490,3197,6838,6503,114,8343,5844,8646,8694,65,791,5979,2687,2621,2019,8097,1423,3644,9764,4921,3266,3662,5561,2476,8271,8138,6147,1168,3340,1998,9874,6572,9873,6659,5609,2711,3931,9567,4143,7833,8887 30 | 6223,2099,2700,589,4716,8333,1362,5007,2753,2848,4441,8397,7192,8191,4916,9955,6076,3370,6396,6971,3156,248,3911,2488,4930,2458,7183,5455,170,6809,6417,3390,1956,7188,577,7526,2203,968,8164,479,8699,7915,507,6393,4632,1597,7534,3604,618,3280,6061,9793,9238,8347,568,9645,2070,5198,6482,5000,9212,6655,5961,7513,1323,3872,6170,3812,4146,2736,67,3151,5548,2781,9679,7564,5043,8587,1893,4531 31 | 5826,3690,6724,2121,9308,6986,8106,6659,2142,1642,7170,2877,5757,6494,8026,6571,8387,9961,6043,9758,9607,6450,8631,8334,7359,5256,8523,2225,7487,1977,9555,8048,5763,2414,4948,4265,2427,8978,8088,8841,9208,9601,5810,9398,8866,9138,4176,5875,7212,3272,6759,5678,7649,4922,5422,1343,8197,3154,3600,687,1028,4579,2084,9467,4492,7262,7296,6538,7657,7134,2077,1505,7332,6890,8964,4879,7603,7400,5973,739 32 | 1861,1613,4879,1884,7334,966,2000,7489,2123,4287,1472,3263,4726,9203,1040,4103,6075,6049,330,9253,4062,4268,1635,9960,577,1320,3195,9628,1030,4092,4979,6474,6393,2799,6967,8687,7724,7392,9927,2085,3200,6466,8702,265,7646,8665,7986,7266,4574,6587,612,2724,704,3191,8323,9523,3002,704,5064,3960,8209,2027,2758,8393,4875,4641,9584,6401,7883,7014,768,443,5490,7506,1852,2005,8850,5776,4487,4269 33 | 4052,6687,4705,7260,6645,6715,3706,5504,8672,2853,1136,8187,8203,4016,871,1809,1366,4952,9294,5339,6872,2645,6083,7874,3056,5218,7485,8796,7401,3348,2103,426,8572,4163,9171,3176,948,7654,9344,3217,1650,5580,7971,2622,76,2874,880,2034,9929,1546,2659,5811,3754,7096,7436,9694,9960,7415,2164,953,2360,4194,2397,1047,2196,6827,575,784,2675,8821,6802,7972,5996,6699,2134,7577,2887,1412,4349,4380 34 | 4629,2234,6240,8132,7592,3181,6389,1214,266,1910,2451,8784,2790,1127,6932,1447,8986,2492,5476,397,889,3027,7641,5083,5776,4022,185,3364,5701,2442,2840,4160,9525,4828,6602,2614,7447,3711,4505,7745,8034,6514,4907,2605,7753,6958,7270,6936,3006,8968,439,2326,4652,3085,3425,9863,5049,5361,8688,297,7580,8777,7916,6687,8683,7141,306,9569,2384,1500,3346,4601,7329,9040,6097,2727,6314,4501,4974,2829 35 | 8316,4072,2025,6884,3027,1808,5714,7624,7880,8528,4205,8686,7587,3230,1139,7273,6163,6986,3914,9309,1464,9359,4474,7095,2212,7302,2583,9462,7532,6567,1606,4436,8981,5612,6796,4385,5076,2007,6072,3678,8331,1338,3299,8845,4783,8613,4071,1232,6028,2176,3990,2148,3748,103,9453,538,6745,9110,926,3125,473,5970,8728,7072,9062,1404,1317,5139,9862,6496,6062,3338,464,1600,2532,1088,8232,7739,8274,3873 36 | 2341,523,7096,8397,8301,6541,9844,244,4993,2280,7689,4025,4196,5522,7904,6048,2623,9258,2149,9461,6448,8087,7245,1917,8340,7127,8466,5725,6996,3421,5313,512,9164,9837,9794,8369,4185,1488,7210,1524,1016,4620,9435,2478,7765,8035,697,6677,3724,6988,5853,7662,3895,9593,1185,4727,6025,5734,7665,3070,138,8469,6748,6459,561,7935,8646,2378,462,7755,3115,9690,8877,3946,2728,8793,244,6323,8666,4271 37 | 6430,2406,8994,56,1267,3826,9443,7079,7579,5232,6691,3435,6718,5698,4144,7028,592,2627,217,734,6194,8156,9118,58,2640,8069,4127,3285,694,3197,3377,4143,4802,3324,8134,6953,7625,3598,3584,4289,7065,3434,2106,7132,5802,7920,9060,7531,3321,1725,1067,3751,444,5503,6785,7937,6365,4803,198,6266,8177,1470,6390,1606,2904,7555,9834,8667,2033,1723,5167,1666,8546,8152,473,4475,6451,7947,3062,3281 38 | 2810,3042,7759,1741,2275,2609,7676,8640,4117,1958,7500,8048,1757,3954,9270,1971,4796,2912,660,5511,3553,1012,5757,4525,6084,7198,8352,5775,7726,8591,7710,9589,3122,4392,6856,5016,749,2285,3356,7482,9956,7348,2599,8944,495,3462,3578,551,4543,7207,7169,7796,1247,4278,6916,8176,3742,8385,2310,1345,8692,2667,4568,1770,8319,3585,4920,3890,4928,7343,5385,9772,7947,8786,2056,9266,3454,2807,877,2660 39 | 6206,8252,5928,5837,4177,4333,207,7934,5581,9526,8906,1498,8411,2984,5198,5134,2464,8435,8514,8674,3876,599,5327,826,2152,4084,2433,9327,9697,4800,2728,3608,3849,3861,3498,9943,1407,3991,7191,9110,5666,8434,4704,6545,5944,2357,1163,4995,9619,6754,4200,9682,6654,4862,4744,5953,6632,1054,293,9439,8286,2255,696,8709,1533,1844,6441,430,1999,6063,9431,7018,8057,2920,6266,6799,356,3597,4024,6665 40 | 3847,6356,8541,7225,2325,2946,5199,469,5450,7508,2197,9915,8284,7983,6341,3276,3321,16,1321,7608,5015,3362,8491,6968,6818,797,156,2575,706,9516,5344,5457,9210,5051,8099,1617,9951,7663,8253,9683,2670,1261,4710,1068,8753,4799,1228,2621,3275,6188,4699,1791,9518,8701,5932,4275,6011,9877,2933,4182,6059,2930,6687,6682,9771,654,9437,3169,8596,1827,5471,8909,2352,123,4394,3208,8756,5513,6917,2056 41 | 5458,8173,3138,3290,4570,4892,3317,4251,9699,7973,1163,1935,5477,6648,9614,5655,9592,975,9118,2194,7322,8248,8413,3462,8560,1907,7810,6650,7355,2939,4973,6894,3933,3784,3200,2419,9234,4747,2208,2207,1945,2899,1407,6145,8023,3484,5688,7686,2737,3828,3704,9004,5190,9740,8643,8650,5358,4426,1522,1707,3613,9887,6956,2447,2762,833,1449,9489,2573,1080,4167,3456,6809,2466,227,7125,2759,6250,6472,8089 42 | 3266,7025,9756,3914,1265,9116,7723,9788,6805,5493,2092,8688,6592,9173,4431,4028,6007,7131,4446,4815,3648,6701,759,3312,8355,4485,4187,5188,8746,7759,3528,2177,5243,8379,3838,7233,4607,9187,7216,2190,6967,2920,6082,7910,5354,3609,8958,6949,7731,494,8753,8707,1523,4426,3543,7085,647,6771,9847,646,5049,824,8417,5260,2730,5702,2513,9275,4279,2767,8684,1165,9903,4518,55,9682,8963,6005,2102,6523 43 | 1998,8731,936,1479,5259,7064,4085,91,7745,7136,3773,3810,730,8255,2705,2653,9790,6807,2342,355,9344,2668,3690,2028,9679,8102,574,4318,6481,9175,5423,8062,2867,9657,7553,3442,3920,7430,3945,7639,3714,3392,2525,4995,4850,2867,7951,9667,486,9506,9888,781,8866,1702,3795,90,356,1483,4200,2131,6969,5931,486,6880,4404,1084,5169,4910,6567,8335,4686,5043,2614,3352,2667,4513,6472,7471,5720,1616 44 | 8878,1613,1716,868,1906,2681,564,665,5995,2474,7496,3432,9491,9087,8850,8287,669,823,347,6194,2264,2592,7871,7616,8508,4827,760,2676,4660,4881,7572,3811,9032,939,4384,929,7525,8419,5556,9063,662,8887,7026,8534,3111,1454,2082,7598,5726,6687,9647,7608,73,3014,5063,670,5461,5631,3367,9796,8475,7908,5073,1565,5008,5295,4457,1274,4788,1728,338,600,8415,8535,9351,7750,6887,5845,1741,125 45 | 3637,6489,9634,9464,9055,2413,7824,9517,7532,3577,7050,6186,6980,9365,9782,191,870,2497,8498,2218,2757,5420,6468,586,3320,9230,1034,1393,9886,5072,9391,1178,8464,8042,6869,2075,8275,3601,7715,9470,8786,6475,8373,2159,9237,2066,3264,5000,679,355,3069,4073,494,2308,5512,4334,9438,8786,8637,9774,1169,1949,6594,6072,4270,9158,7916,5752,6794,9391,6301,5842,3285,2141,3898,8027,4310,8821,7079,1307 46 | 8497,6681,4732,7151,7060,5204,9030,7157,833,5014,8723,3207,9796,9286,4913,119,5118,7650,9335,809,3675,2597,5144,3945,5090,8384,187,4102,1260,2445,2792,4422,8389,9290,50,1765,1521,6921,8586,4368,1565,5727,7855,2003,4834,9897,5911,8630,5070,1330,7692,7557,7980,6028,5805,9090,8265,3019,3802,698,9149,5748,1965,9658,4417,5994,5584,8226,2937,272,5743,1278,5698,8736,2595,6475,5342,6596,1149,6920 47 | 8188,8009,9546,6310,8772,2500,9846,6592,6872,3857,1307,8125,7042,1544,6159,2330,643,4604,7899,6848,371,8067,2062,3200,7295,1857,9505,6936,384,2193,2190,301,8535,5503,1462,7380,5114,4824,8833,1763,4974,8711,9262,6698,3999,2645,6937,7747,1128,2933,3556,7943,2885,3122,9105,5447,418,2899,5148,3699,9021,9501,597,4084,175,1621,1,1079,6067,5812,4326,9914,6633,5394,4233,6728,9084,1864,5863,1225 48 | 9935,8793,9117,1825,9542,8246,8437,3331,9128,9675,6086,7075,319,1334,7932,3583,7167,4178,1726,7720,695,8277,7887,6359,5912,1719,2780,8529,1359,2013,4498,8072,1129,9998,1147,8804,9405,6255,1619,2165,7491,1,8882,7378,3337,503,5758,4109,3577,985,3200,7615,8058,5032,1080,6410,6873,5496,1466,2412,9885,5904,4406,3605,8770,4361,6205,9193,1537,9959,214,7260,9566,1685,100,4920,7138,9819,5637,976 49 | 3466,9854,985,1078,7222,8888,5466,5379,3578,4540,6853,8690,3728,6351,7147,3134,6921,9692,857,3307,4998,2172,5783,3931,9417,2541,6299,13,787,2099,9131,9494,896,8600,1643,8419,7248,2660,2609,8579,91,6663,5506,7675,1947,6165,4286,1972,9645,3805,1663,1456,8853,5705,9889,7489,1107,383,4044,2969,3343,152,7805,4980,9929,5033,1737,9953,7197,9158,4071,1324,473,9676,3984,9680,3606,8160,7384,5432 50 | 1005,4512,5186,3953,2164,3372,4097,3247,8697,3022,9896,4101,3871,6791,3219,2742,4630,6967,7829,5991,6134,1197,1414,8923,8787,1394,8852,5019,7768,5147,8004,8825,5062,9625,7988,1110,3992,7984,9966,6516,6251,8270,421,3723,1432,4830,6935,8095,9059,2214,6483,6846,3120,1587,6201,6691,9096,9627,6671,4002,3495,9939,7708,7465,5879,6959,6634,3241,3401,2355,9061,2611,7830,3941,2177,2146,5089,7079,519,6351 51 | 7280,8586,4261,2831,7217,3141,9994,9940,5462,2189,4005,6942,9848,5350,8060,6665,7519,4324,7684,657,9453,9296,2944,6843,7499,7847,1728,9681,3906,6353,5529,2822,3355,3897,7724,4257,7489,8672,4356,3983,1948,6892,7415,4153,5893,4190,621,1736,4045,9532,7701,3671,1211,1622,3176,4524,9317,7800,5638,6644,6943,5463,3531,2821,1347,5958,3436,1438,2999,994,850,4131,2616,1549,3465,5946,690,9273,6954,7991 52 | 9517,399,3249,2596,7736,2142,1322,968,7350,1614,468,3346,3265,7222,6086,1661,5317,2582,7959,4685,2807,2917,1037,5698,1529,3972,8716,2634,3301,3412,8621,743,8001,4734,888,7744,8092,3671,8941,1487,5658,7099,2781,99,1932,4443,4756,4652,9328,1581,7855,4312,5976,7255,6480,3996,2748,1973,9731,4530,2790,9417,7186,5303,3557,351,7182,9428,1342,9020,7599,1392,8304,2070,9138,7215,2008,9937,1106,7110 53 | 7444,769,9688,632,1571,6820,8743,4338,337,3366,3073,1946,8219,104,4210,6986,249,5061,8693,7960,6546,1004,8857,5997,9352,4338,6105,5008,2556,6518,6694,4345,3727,7956,20,3954,8652,4424,9387,2035,8358,5962,5304,5194,8650,8282,1256,1103,2138,6679,1985,3653,2770,2433,4278,615,2863,1715,242,3790,2636,6998,3088,1671,2239,957,5411,4595,6282,2881,9974,2401,875,7574,2987,4587,3147,6766,9885,2965 54 | 3287,3016,3619,6818,9073,6120,5423,557,2900,2015,8111,3873,1314,4189,1846,4399,7041,7583,2427,2864,3525,5002,2069,748,1948,6015,2684,438,770,8367,1663,7887,7759,1885,157,7770,4520,4878,3857,1137,3525,3050,6276,5569,7649,904,4533,7843,2199,5648,7628,9075,9441,3600,7231,2388,5640,9096,958,3058,584,5899,8150,1181,9616,1098,8162,6819,8171,1519,1140,7665,8801,2632,1299,9192,707,9955,2710,7314 55 | 1772,2963,7578,3541,3095,1488,7026,2634,6015,4633,4370,2762,1650,2174,909,8158,2922,8467,4198,4280,9092,8856,8835,5457,2790,8574,9742,5054,9547,4156,7940,8126,9824,7340,8840,6574,3547,1477,3014,6798,7134,435,9484,9859,3031,4,1502,4133,1738,1807,4825,463,6343,9701,8506,9822,9555,8688,8168,3467,3234,6318,1787,5591,419,6593,7974,8486,9861,6381,6758,194,3061,4315,2863,4665,3789,2201,1492,4416 56 | 126,8927,6608,5682,8986,6867,1715,6076,3159,788,3140,4744,830,9253,5812,5021,7616,8534,1546,9590,1101,9012,9821,8132,7857,4086,1069,7491,2988,1579,2442,4321,2149,7642,6108,250,6086,3167,24,9528,7663,2685,1220,9196,1397,5776,1577,1730,5481,977,6115,199,6326,2183,3767,5928,5586,7561,663,8649,9688,949,5913,9160,1870,5764,9887,4477,6703,1413,4995,5494,7131,2192,8969,7138,3997,8697,646,1028 57 | 8074,1731,8245,624,4601,8706,155,8891,309,2552,8208,8452,2954,3124,3469,4246,3352,1105,4509,8677,9901,4416,8191,9283,5625,7120,2952,8881,7693,830,4580,8228,9459,8611,4499,1179,4988,1394,550,2336,6089,6872,269,7213,1848,917,6672,4890,656,1478,6536,3165,4743,4990,1176,6211,7207,5284,9730,4738,1549,4986,4942,8645,3698,9429,1439,2175,6549,3058,6513,1574,6988,8333,3406,5245,5431,7140,7085,6407 58 | 7845,4694,2530,8249,290,5948,5509,1588,5940,4495,5866,5021,4626,3979,3296,7589,4854,1998,5627,3926,8346,6512,9608,1918,7070,4747,4182,2858,2766,4606,6269,4107,8982,8568,9053,4244,5604,102,2756,727,5887,2566,7922,44,5986,621,1202,374,6988,4130,3627,6744,9443,4568,1398,8679,397,3928,9159,367,2917,6127,5788,3304,8129,911,2669,1463,9749,264,4478,8940,1109,7309,2462,117,4692,7724,225,2312 59 | 4164,3637,2000,941,8903,39,3443,7172,1031,3687,4901,8082,4945,4515,7204,9310,9349,9535,9940,218,1788,9245,2237,1541,5670,6538,6047,5553,9807,8101,1925,8714,445,8332,7309,6830,5786,5736,7306,2710,3034,1838,7969,6318,7912,2584,2080,7437,6705,2254,7428,820,782,9861,7596,3842,3631,8063,5240,6666,394,4565,7865,4895,9890,6028,6117,4724,9156,4473,4552,602,470,6191,4927,5387,884,3146,1978,3000 60 | 4258,6880,1696,3582,5793,4923,2119,1155,9056,9698,6603,3768,5514,9927,9609,6166,6566,4536,4985,4934,8076,9062,6741,6163,7399,4562,2337,5600,2919,9012,8459,1308,6072,1225,9306,8818,5886,7243,7365,8792,6007,9256,6699,7171,4230,7002,8720,7839,4533,1671,478,7774,1607,2317,5437,4705,7886,4760,6760,7271,3081,2997,3088,7675,6208,3101,6821,6840,122,9633,4900,2067,8546,4549,2091,7188,5605,8599,6758,5229 61 | 7854,5243,9155,3556,8812,7047,2202,1541,5993,4600,4760,713,434,7911,7426,7414,8729,322,803,7960,7563,4908,6285,6291,736,3389,9339,4132,8701,7534,5287,3646,592,3065,7582,2592,8755,6068,8597,1982,5782,1894,2900,6236,4039,6569,3037,5837,7698,700,7815,2491,7272,5878,3083,6778,6639,3589,5010,8313,2581,6617,5869,8402,6808,2951,2321,5195,497,2190,6187,1342,1316,4453,7740,4154,2959,1781,1482,8256 62 | 7178,2046,4419,744,8312,5356,6855,8839,319,2962,5662,47,6307,8662,68,4813,567,2712,9931,1678,3101,8227,6533,4933,6656,92,5846,4780,6256,6361,4323,9985,1231,2175,7178,3034,9744,6155,9165,7787,5836,9318,7860,9644,8941,6480,9443,8188,5928,161,6979,2352,5628,6991,1198,8067,5867,6620,3778,8426,2994,3122,3124,6335,3918,8897,2655,9670,634,1088,1576,8935,7255,474,8166,7417,9547,2886,5560,3842 63 | 6957,3111,26,7530,7143,1295,1744,6057,3009,1854,8098,5405,2234,4874,9447,2620,9303,27,7410,969,40,2966,5648,7596,8637,4238,3143,3679,7187,690,9980,7085,7714,9373,5632,7526,6707,3951,9734,4216,2146,3602,5371,6029,3039,4433,4855,4151,1449,3376,8009,7240,7027,4602,2947,9081,4045,8424,9352,8742,923,2705,4266,3232,2264,6761,363,2651,3383,7770,6730,7856,7340,9679,2158,610,4471,4608,910,6241 64 | 4417,6756,1013,8797,658,8809,5032,8703,7541,846,3357,2920,9817,1745,9980,7593,4667,3087,779,3218,6233,5568,4296,2289,2654,7898,5021,9461,5593,8214,9173,4203,2271,7980,2983,5952,9992,8399,3468,1776,3188,9314,1720,6523,2933,621,8685,5483,8986,6163,3444,9539,4320,155,3992,2828,2150,6071,524,2895,5468,8063,1210,3348,9071,4862,483,9017,4097,6186,9815,3610,5048,1644,1003,9865,9332,2145,1944,2213 65 | 9284,3803,4920,1927,6706,4344,7383,4786,9890,2010,5228,1224,3158,6967,8580,8990,8883,5213,76,8306,2031,4980,5639,9519,7184,5645,7769,3259,8077,9130,1317,3096,9624,3818,1770,695,2454,947,6029,3474,9938,3527,5696,4760,7724,7738,2848,6442,5767,6845,8323,4131,2859,7595,2500,4815,3660,9130,8580,7016,8231,4391,8369,3444,4069,4021,556,6154,627,2778,1496,4206,6356,8434,8491,3816,8231,3190,5575,1015 66 | 3787,7572,1788,6803,5641,6844,1961,4811,8535,9914,9999,1450,8857,738,4662,8569,6679,2225,7839,8618,286,2648,5342,2294,3205,4546,176,8705,3741,6134,8324,8021,7004,5205,7032,6637,9442,5539,5584,4819,5874,5807,8589,6871,9016,983,1758,3786,1519,6241,185,8398,495,3370,9133,3051,4549,9674,7311,9738,3316,9383,2658,2776,9481,7558,619,3943,3324,6491,4933,153,9738,4623,912,3595,7771,7939,1219,4405 67 | 2650,3883,4154,5809,315,7756,4430,1788,4451,1631,6461,7230,6017,5751,138,588,5282,2442,9110,9035,6349,2515,1570,6122,4192,4174,3530,1933,4186,4420,4609,5739,4135,2963,6308,1161,8809,8619,2796,3819,6971,8228,4188,1492,909,8048,2328,6772,8467,7671,9068,2226,7579,6422,7056,8042,3296,2272,3006,2196,7320,3238,3490,3102,37,1293,3212,4767,5041,8773,5794,4456,6174,7279,7054,2835,7053,9088,790,6640 68 | 3101,1057,7057,3826,6077,1025,2955,1224,1114,6729,5902,4698,6239,7203,9423,1804,4417,6686,1426,6941,8071,1029,4985,9010,6122,6597,1622,1574,3513,1684,7086,5505,3244,411,9638,4150,907,9135,829,981,1707,5359,8781,9751,5,9131,3973,7159,1340,6955,7514,7993,6964,8198,1933,2797,877,3993,4453,8020,9349,8646,2779,8679,2961,3547,3374,3510,1129,3568,2241,2625,9138,5974,8206,7669,7678,1833,8700,4480 69 | 4865,9912,8038,8238,782,3095,8199,1127,4501,7280,2112,2487,3626,2790,9432,1475,6312,8277,4827,2218,5806,7132,8752,1468,7471,6386,739,8762,8323,8120,5169,9078,9058,3370,9560,7987,8585,8531,5347,9312,1058,4271,1159,5286,5404,6925,8606,9204,7361,2415,560,586,4002,2644,1927,2824,768,4409,2942,3345,1002,808,4941,6267,7979,5140,8643,7553,9438,7320,4938,2666,4609,2778,8158,6730,3748,3867,1866,7181 70 | 171,3771,7134,8927,4778,2913,3326,2004,3089,7853,1378,1729,4777,2706,9578,1360,5693,3036,1851,7248,2403,2273,8536,6501,9216,613,9671,7131,7719,6425,773,717,8803,160,1114,7554,7197,753,4513,4322,8499,4533,2609,4226,8710,6627,644,9666,6260,4870,5744,7385,6542,6203,7703,6130,8944,5589,2262,6803,6381,7414,6888,5123,7320,9392,9061,6780,322,8975,7050,5089,1061,2260,3199,1150,1865,5386,9699,6501 71 | 3744,8454,6885,8277,919,1923,4001,6864,7854,5519,2491,6057,8794,9645,1776,5714,9786,9281,7538,6916,3215,395,2501,9618,4835,8846,9708,2813,3303,1794,8309,7176,2206,1602,1838,236,4593,2245,8993,4017,10,8215,6921,5206,4023,5932,6997,7801,262,7640,3107,8275,4938,7822,2425,3223,3886,2105,8700,9526,2088,8662,8034,7004,5710,2124,7164,3574,6630,9980,4242,2901,9471,1491,2117,4562,1130,9086,4117,6698 72 | 2810,2280,2331,1170,4554,4071,8387,1215,2274,9848,6738,1604,7281,8805,439,1298,8318,7834,9426,8603,6092,7944,1309,8828,303,3157,4638,4439,9175,1921,4695,7716,1494,1015,1772,5913,1127,1952,1950,8905,4064,9890,385,9357,7945,5035,7082,5369,4093,6546,5187,5637,2041,8946,1758,7111,6566,1027,1049,5148,7224,7248,296,6169,375,1656,7993,2816,3717,4279,4675,1609,3317,42,6201,3100,3144,163,9530,4531 73 | 7096,6070,1009,4988,3538,5801,7149,3063,2324,2912,7911,7002,4338,7880,2481,7368,3516,2016,7556,2193,1388,3865,8125,4637,4096,8114,750,3144,1938,7002,9343,4095,1392,4220,3455,6969,9647,1321,9048,1996,1640,6626,1788,314,9578,6630,2813,6626,4981,9908,7024,4355,3201,3521,3864,3303,464,1923,595,9801,3391,8366,8084,9374,1041,8807,9085,1892,9431,8317,9016,9221,8574,9981,9240,5395,2009,6310,2854,9255 74 | 8830,3145,2960,9615,8220,6061,3452,2918,6481,9278,2297,3385,6565,7066,7316,5682,107,7646,4466,68,1952,9603,8615,54,7191,791,6833,2560,693,9733,4168,570,9127,9537,1925,8287,5508,4297,8452,8795,6213,7994,2420,4208,524,5915,8602,8330,2651,8547,6156,1812,6271,7991,9407,9804,1553,6866,1128,2119,4691,9711,8315,5879,9935,6900,482,682,4126,1041,428,6247,3720,5882,7526,2582,4327,7725,3503,2631 75 | 2738,9323,721,7434,1453,6294,2957,3786,5722,6019,8685,4386,3066,9057,6860,499,5315,3045,5194,7111,3137,9104,941,586,3066,755,4177,8819,7040,5309,3583,3897,4428,7788,4721,7249,6559,7324,825,7311,3760,6064,6070,9672,4882,584,1365,9739,9331,5783,2624,7889,1604,1303,1555,7125,8312,425,8936,3233,7724,1480,403,7440,1784,1754,4721,1569,652,3893,4574,5692,9730,4813,9844,8291,9199,7101,3391,8914 76 | 6044,2928,9332,3328,8588,447,3830,1176,3523,2705,8365,6136,5442,9049,5526,8575,8869,9031,7280,706,2794,8814,5767,4241,7696,78,6570,556,5083,1426,4502,3336,9518,2292,1885,3740,3153,9348,9331,8051,2759,5407,9028,7840,9255,831,515,2612,9747,7435,8964,4971,2048,4900,5967,8271,1719,9670,2810,6777,1594,6367,6259,8316,3815,1689,6840,9437,4361,822,9619,3065,83,6344,7486,8657,8228,9635,6932,4864 77 | 8478,4777,6334,4678,7476,4963,6735,3096,5860,1405,5127,7269,7793,4738,227,9168,2996,8928,765,733,1276,7677,6258,1528,9558,3329,302,8901,1422,8277,6340,645,9125,8869,5952,141,8141,1816,9635,4025,4184,3093,83,2344,2747,9352,7966,1206,1126,1826,218,7939,2957,2729,810,8752,5247,4174,4038,8884,7899,9567,301,5265,5752,7524,4381,1669,3106,8270,6228,6373,754,2547,4240,2313,5514,3022,1040,9738 78 | 2265,8192,1763,1369,8469,8789,4836,52,1212,6690,5257,8918,6723,6319,378,4039,2421,8555,8184,9577,1432,7139,8078,5452,9628,7579,4161,7490,5159,8559,1011,81,478,5840,1964,1334,6875,8670,9900,739,1514,8692,522,9316,6955,1345,8132,2277,3193,9773,3923,4177,2183,1236,6747,6575,4874,6003,6409,8187,745,8776,9440,7543,9825,2582,7381,8147,7236,5185,7564,6125,218,7991,6394,391,7659,7456,5128,5294 79 | 2132,8992,8160,5782,4420,3371,3798,5054,552,5631,7546,4716,1332,6486,7892,7441,4370,6231,4579,2121,8615,1145,9391,1524,1385,2400,9437,2454,7896,7467,2928,8400,3299,4025,7458,4703,7206,6358,792,6200,725,4275,4136,7390,5984,4502,7929,5085,8176,4600,119,3568,76,9363,6943,2248,9077,9731,6213,5817,6729,4190,3092,6910,759,2682,8380,1254,9604,3011,9291,5329,9453,9746,2739,6522,3765,5634,1113,5789 80 | 5304,5499,564,2801,679,2653,1783,3608,7359,7797,3284,796,3222,437,7185,6135,8571,2778,7488,5746,678,6140,861,7750,803,9859,9918,2425,3734,2698,9005,4864,9818,6743,2475,132,9486,3825,5472,919,292,4411,7213,7699,6435,9019,6769,1388,802,2124,1345,8493,9487,8558,7061,8777,8833,2427,2238,5409,4957,8503,3171,7622,5779,6145,2417,5873,5563,5693,9574,9491,1937,7384,4563,6842,5432,2751,3406,7981 81 | -------------------------------------------------------------------------------- /EulerPy/data/resources/network.txt: -------------------------------------------------------------------------------- 1 | -,-,-,427,668,495,377,678,-,177,-,-,870,-,869,624,300,609,131,-,251,-,-,-,856,221,514,-,591,762,182,56,-,884,412,273,636,-,-,774 2 | -,-,262,-,-,508,472,799,-,956,578,363,940,143,-,162,122,910,-,729,802,941,922,573,531,539,667,607,-,920,-,-,315,649,937,-,185,102,636,289 3 | -,262,-,-,926,-,958,158,647,47,621,264,81,-,402,813,649,386,252,391,264,637,349,-,-,-,108,-,727,225,578,699,-,898,294,-,575,168,432,833 4 | 427,-,-,-,366,-,-,635,-,32,962,468,893,854,718,427,448,916,258,-,760,909,529,311,404,-,-,588,680,875,-,615,-,409,758,221,-,-,76,257 5 | 668,-,926,366,-,-,-,250,268,-,503,944,-,677,-,727,793,457,981,191,-,-,-,351,969,925,987,328,282,589,-,873,477,-,-,19,450,-,-,- 6 | 495,508,-,-,-,-,-,765,711,819,305,302,926,-,-,582,-,861,-,683,293,-,-,66,-,27,-,-,290,-,786,-,554,817,33,-,54,506,386,381 7 | 377,472,958,-,-,-,-,-,-,120,42,-,134,219,457,639,538,374,-,-,-,966,-,-,-,-,-,449,120,797,358,232,550,-,305,997,662,744,686,239 8 | 678,799,158,635,250,765,-,-,-,35,-,106,385,652,160,-,890,812,605,953,-,-,-,79,-,712,613,312,452,-,978,900,-,901,-,-,225,533,770,722 9 | -,-,647,-,268,711,-,-,-,283,-,172,-,663,236,36,403,286,986,-,-,810,761,574,53,793,-,-,777,330,936,883,286,-,174,-,-,-,828,711 10 | 177,956,47,32,-,819,120,35,283,-,50,-,565,36,767,684,344,489,565,-,-,103,810,463,733,665,494,644,863,25,385,-,342,470,-,-,-,730,582,468 11 | -,578,621,962,503,305,42,-,-,50,-,155,519,-,-,256,990,801,154,53,474,650,402,-,-,-,966,-,-,406,989,772,932,7,-,823,391,-,-,933 12 | -,363,264,468,944,302,-,106,172,-,155,-,-,-,380,438,-,41,266,-,-,104,867,609,-,270,861,-,-,165,-,675,250,686,995,366,191,-,433,- 13 | 870,940,81,893,-,926,134,385,-,565,519,-,-,313,851,-,-,-,248,220,-,826,359,829,-,234,198,145,409,68,359,-,814,218,186,-,-,929,203,- 14 | -,143,-,854,677,-,219,652,663,36,-,-,313,-,132,-,433,598,-,-,168,870,-,-,-,128,437,-,383,364,966,227,-,-,807,993,-,-,526,17 15 | 869,-,402,718,-,-,457,160,236,767,-,380,851,132,-,-,596,903,613,730,-,261,-,142,379,885,89,-,848,258,112,-,900,-,-,818,639,268,600,- 16 | 624,162,813,427,727,582,639,-,36,684,256,438,-,-,-,-,539,379,664,561,542,-,999,585,-,-,321,398,-,-,950,68,193,-,697,-,390,588,848,- 17 | 300,122,649,448,793,-,538,890,403,344,990,-,-,433,596,539,-,-,73,-,318,-,-,500,-,968,-,291,-,-,765,196,504,757,-,542,-,395,227,148 18 | 609,910,386,916,457,861,374,812,286,489,801,41,-,598,903,379,-,-,-,946,136,399,-,941,707,156,757,258,251,-,807,-,-,-,461,501,-,-,616,- 19 | 131,-,252,258,981,-,-,605,986,565,154,266,248,-,613,664,73,-,-,686,-,-,575,627,817,282,-,698,398,222,-,649,-,-,-,-,-,654,-,- 20 | -,729,391,-,191,683,-,953,-,-,53,-,220,-,730,561,-,946,686,-,-,389,729,553,304,703,455,857,260,-,991,182,351,477,867,-,-,889,217,853 21 | 251,802,264,760,-,293,-,-,-,-,474,-,-,168,-,542,318,136,-,-,-,-,392,-,-,-,267,407,27,651,80,927,-,974,977,-,-,457,117,- 22 | -,941,637,909,-,-,966,-,810,103,650,104,826,870,261,-,-,399,-,389,-,-,-,202,-,-,-,-,867,140,403,962,785,-,511,-,1,-,707,- 23 | -,922,349,529,-,-,-,-,761,810,402,867,359,-,-,999,-,-,575,729,392,-,-,388,939,-,959,-,83,463,361,-,-,512,931,-,224,690,369,- 24 | -,573,-,311,351,66,-,79,574,463,-,609,829,-,142,585,500,941,627,553,-,202,388,-,164,829,-,620,523,639,936,-,-,490,-,695,-,505,109,- 25 | 856,531,-,404,969,-,-,-,53,733,-,-,-,-,379,-,-,707,817,304,-,-,939,164,-,-,616,716,728,-,889,349,-,963,150,447,-,292,586,264 26 | 221,539,-,-,925,27,-,712,793,665,-,270,234,128,885,-,968,156,282,703,-,-,-,829,-,-,-,822,-,-,-,736,576,-,697,946,443,-,205,194 27 | 514,667,108,-,987,-,-,613,-,494,966,861,198,437,89,321,-,757,-,455,267,-,959,-,616,-,-,-,349,156,339,-,102,790,359,-,439,938,809,260 28 | -,607,-,588,328,-,449,312,-,644,-,-,145,-,-,398,291,258,698,857,407,-,-,620,716,822,-,-,293,486,943,-,779,-,6,880,116,775,-,947 29 | 591,-,727,680,282,290,120,452,777,863,-,-,409,383,848,-,-,251,398,260,27,867,83,523,728,-,349,293,-,212,684,505,341,384,9,992,507,48,-,- 30 | 762,920,225,875,589,-,797,-,330,25,406,165,68,364,258,-,-,-,222,-,651,140,463,639,-,-,156,486,212,-,-,349,723,-,-,186,-,36,240,752 31 | 182,-,578,-,-,786,358,978,936,385,989,-,359,966,112,950,765,807,-,991,80,403,361,936,889,-,339,943,684,-,-,965,302,676,725,-,327,134,-,147 32 | 56,-,699,615,873,-,232,900,883,-,772,675,-,227,-,68,196,-,649,182,927,962,-,-,349,736,-,-,505,349,965,-,474,178,833,-,-,555,853,- 33 | -,315,-,-,477,554,550,-,286,342,932,250,814,-,900,193,504,-,-,351,-,785,-,-,-,576,102,779,341,723,302,474,-,689,-,-,-,451,-,- 34 | 884,649,898,409,-,817,-,901,-,470,7,686,218,-,-,-,757,-,-,477,974,-,512,490,963,-,790,-,384,-,676,178,689,-,245,596,445,-,-,343 35 | 412,937,294,758,-,33,305,-,174,-,-,995,186,807,-,697,-,461,-,867,977,511,931,-,150,697,359,6,9,-,725,833,-,245,-,949,-,270,-,112 36 | 273,-,-,221,19,-,997,-,-,-,823,366,-,993,818,-,542,501,-,-,-,-,-,695,447,946,-,880,992,186,-,-,-,596,949,-,91,-,768,273 37 | 636,185,575,-,450,54,662,225,-,-,391,191,-,-,639,390,-,-,-,-,-,1,224,-,-,443,439,116,507,-,327,-,-,445,-,91,-,248,-,344 38 | -,102,168,-,-,506,744,533,-,730,-,-,929,-,268,588,395,-,654,889,457,-,690,505,292,-,938,775,48,36,134,555,451,-,270,-,248,-,371,680 39 | -,636,432,76,-,386,686,770,828,582,-,433,203,526,600,848,227,616,-,217,117,707,369,109,586,205,809,-,-,240,-,853,-,-,-,768,-,371,-,540 40 | 774,289,833,257,-,381,239,722,711,468,933,-,-,17,-,-,148,-,-,853,-,-,-,-,264,194,260,947,-,752,147,-,-,343,112,273,344,680,540,- 41 | -------------------------------------------------------------------------------- /EulerPy/data/resources/roman.txt: -------------------------------------------------------------------------------- 1 | MMMMDCLXXII 2 | MMDCCCLXXXIII 3 | MMMDLXVIIII 4 | MMMMDXCV 5 | DCCCLXXII 6 | MMCCCVI 7 | MMMCDLXXXVII 8 | MMMMCCXXI 9 | MMMCCXX 10 | MMMMDCCCLXXIII 11 | MMMCCXXXVII 12 | MMCCCLXXXXIX 13 | MDCCCXXIIII 14 | MMCXCVI 15 | CCXCVIII 16 | MMMCCCXXXII 17 | MDCCXXX 18 | MMMDCCCL 19 | MMMMCCLXXXVI 20 | MMDCCCXCVI 21 | MMMDCII 22 | MMMCCXII 23 | MMMMDCCCCI 24 | MMDCCCXCII 25 | MDCXX 26 | CMLXXXVII 27 | MMMXXI 28 | MMMMCCCXIV 29 | MLXXII 30 | MCCLXXVIIII 31 | MMMMCCXXXXI 32 | MMDCCCLXXII 33 | MMMMXXXI 34 | MMMDCCLXXX 35 | MMDCCCLXXIX 36 | MMMMLXXXV 37 | MCXXI 38 | MDCCCXXXVII 39 | MMCCCLXVII 40 | MCDXXXV 41 | CCXXXIII 42 | CMXX 43 | MMMCLXIV 44 | MCCCLXXXVI 45 | DCCCXCVIII 46 | MMMDCCCCXXXIV 47 | CDXVIIII 48 | MMCCXXXV 49 | MDCCCXXXII 50 | MMMMD 51 | MMDCCLXIX 52 | MMMMCCCLXXXXVI 53 | MMDCCXLII 54 | MMMDCCCVIIII 55 | DCCLXXXIIII 56 | MDCCCCXXXII 57 | MMCXXVII 58 | DCCCXXX 59 | CCLXIX 60 | MMMXI 61 | MMMMCMLXXXXVIII 62 | MMMMDLXXXVII 63 | MMMMDCCCLX 64 | MMCCLIV 65 | CMIX 66 | MMDCCCLXXXIIII 67 | CLXXXII 68 | MMCCCCXXXXV 69 | MMMMDLXXXVIIII 70 | MMMDCCCXXI 71 | MMDCCCCLXXVI 72 | MCCCCLXX 73 | MMCDLVIIII 74 | MMMDCCCLIX 75 | MMMMCCCCXIX 76 | MMMDCCCLXXV 77 | XXXI 78 | CDLXXXIII 79 | MMMCXV 80 | MMDCCLXIII 81 | MMDXXX 82 | MMMMCCCLVII 83 | MMMDCI 84 | MMMMCDLXXXIIII 85 | MMMMCCCXVI 86 | CCCLXXXVIII 87 | MMMMCML 88 | MMMMXXIV 89 | MMMCCCCXXX 90 | DCCX 91 | MMMCCLX 92 | MMDXXXIII 93 | CCCLXIII 94 | MMDCCXIII 95 | MMMCCCXLIV 96 | CLXXXXI 97 | CXVI 98 | MMMMCXXXIII 99 | CLXX 100 | DCCCXVIII 101 | MLXVII 102 | DLXXXX 103 | MMDXXI 104 | MMMMDLXXXXVIII 105 | MXXII 106 | LXI 107 | DCCCCXLIII 108 | MMMMDV 109 | MMMMXXXIV 110 | MDCCCLVIII 111 | MMMCCLXXII 112 | MMMMDCCXXXVI 113 | MMMMLXXXIX 114 | MDCCCLXXXI 115 | MMMMDCCCXV 116 | MMMMCCCCXI 117 | MMMMCCCLIII 118 | MDCCCLXXI 119 | MMCCCCXI 120 | MLXV 121 | MMCDLXII 122 | MMMMDXXXXII 123 | MMMMDCCCXL 124 | MMMMCMLVI 125 | CCLXXXIV 126 | MMMDCCLXXXVI 127 | MMCLII 128 | MMMCCCCXV 129 | MMLXXXIII 130 | MMMV 131 | MMMV 132 | DCCLXII 133 | MMDCCCCXVI 134 | MMDCXLVIII 135 | CCLIIII 136 | CCCXXV 137 | MMDCCLXXXVIIII 138 | MMMMDCLXXVIII 139 | MMMMDCCCXCI 140 | MMMMCCCXX 141 | MMCCXLV 142 | MMMDCCCLXIX 143 | MMCCLXIIII 144 | MMMDCCCXLIX 145 | MMMMCCCLXIX 146 | CMLXXXXI 147 | MCMLXXXIX 148 | MMCDLXI 149 | MMDCLXXVIII 150 | MMMMDCCLXI 151 | MCDXXV 152 | DL 153 | CCCLXXII 154 | MXVIIII 155 | MCCCCLXVIII 156 | CIII 157 | MMMDCCLXXIIII 158 | MMMDVIII 159 | MMMMCCCLXXXXVII 160 | MMDXXVII 161 | MMDCCLXXXXV 162 | MMMMCXLVI 163 | MMMDCCLXXXII 164 | MMMDXXXVI 165 | MCXXII 166 | CLI 167 | DCLXXXIX 168 | MMMCLI 169 | MDCLXIII 170 | MMMMDCCXCVII 171 | MMCCCLXXXV 172 | MMMDCXXVIII 173 | MMMCDLX 174 | MMMCMLII 175 | MMMIV 176 | MMMMDCCCLVIII 177 | MMMDLXXXVIII 178 | MCXXIV 179 | MMMMLXXVI 180 | CLXXIX 181 | MMMCCCCXXVIIII 182 | DCCLXXXV 183 | MMMDCCCVI 184 | LI 185 | CLXXXVI 186 | MMMMCCCLXXVI 187 | MCCCLXVI 188 | CCXXXIX 189 | MMDXXXXI 190 | MMDCCCXLI 191 | DCCCLXXXVIII 192 | MMMMDCCCIV 193 | MDCCCCXV 194 | MMCMVI 195 | MMMMCMLXXXXV 196 | MMDCCLVI 197 | MMMMCCXLVIII 198 | DCCCCIIII 199 | MMCCCCIII 200 | MMMDCCLXXXVIIII 201 | MDCCCLXXXXV 202 | DVII 203 | MMMV 204 | DCXXV 205 | MMDCCCXCV 206 | DCVIII 207 | MMCDLXVI 208 | MCXXVIII 209 | MDCCXCVIII 210 | MMDCLX 211 | MMMDCCLXIV 212 | MMCDLXXVII 213 | MMDLXXXIIII 214 | MMMMCCCXXII 215 | MMMDCCCXLIIII 216 | DCCCCLXVII 217 | MMMCLXXXXIII 218 | MCCXV 219 | MMMMDCXI 220 | MMMMDCLXXXXV 221 | MMMCCCLII 222 | MMCMIX 223 | MMDCCXXV 224 | MMDLXXXVI 225 | MMMMDCXXVIIII 226 | DCCCCXXXVIIII 227 | MMCCXXXIIII 228 | MMDCCLXXVIII 229 | MDCCLXVIIII 230 | MMCCLXXXV 231 | MMMMDCCCLXXXVIII 232 | MMCMXCI 233 | MDXLII 234 | MMMMDCCXIV 235 | MMMMLI 236 | DXXXXIII 237 | MMDCCXI 238 | MMMMCCLXXXIII 239 | MMMDCCCLXXIII 240 | MDCLVII 241 | MMCD 242 | MCCCXXVII 243 | MMMMDCCIIII 244 | MMMDCCXLVI 245 | MMMCLXXXVII 246 | MMMCCVIIII 247 | MCCCCLXXIX 248 | DL 249 | DCCCLXXVI 250 | MMDXCI 251 | MMMMDCCCCXXXVI 252 | MMCII 253 | MMMDCCCXXXXV 254 | MMMCDXLV 255 | MMDCXXXXIV 256 | MMD 257 | MDCCCLXXXX 258 | MMDCXLIII 259 | MMCCXXXII 260 | MMDCXXXXVIIII 261 | DCCCLXXI 262 | MDXCVIIII 263 | MMMMCCLXXVIII 264 | MDCLVIIII 265 | MMMCCCLXXXIX 266 | MDCLXXXV 267 | MDLVIII 268 | MMMMCCVII 269 | MMMMDCXIV 270 | MMMCCCLXIIII 271 | MMIIII 272 | MMMMCCCLXXIII 273 | CCIII 274 | MMMCCLV 275 | MMMDXIII 276 | MMMCCCXC 277 | MMMDCCCXXI 278 | MMMMCCCCXXXII 279 | CCCLVI 280 | MMMCCCLXXXVI 281 | MXVIIII 282 | MMMCCCCXIIII 283 | CLXVII 284 | MMMCCLXX 285 | CCCCLXIV 286 | MMXXXXII 287 | MMMMCCLXXXX 288 | MXL 289 | CCXVI 290 | CCCCLVIIII 291 | MMCCCII 292 | MCCCLVIII 293 | MMMMCCCX 294 | MCDLXXXXIV 295 | MDCCCXIII 296 | MMDCCCXL 297 | MMMMCCCXXIII 298 | DXXXIV 299 | CVI 300 | MMMMDCLXXX 301 | DCCCVII 302 | MMCMLXIIII 303 | MMMDCCCXXXIII 304 | DCCC 305 | MDIII 306 | MMCCCLXVI 307 | MMMCCCCLXXI 308 | MMDCCCCXVIII 309 | CCXXXVII 310 | CCCXXV 311 | MDCCCXII 312 | MMMCMV 313 | MMMMCMXV 314 | MMMMDCXCI 315 | DXXI 316 | MMCCXLVIIII 317 | MMMMCMLII 318 | MDLXXX 319 | MMDCLXVI 320 | CXXI 321 | MMMDCCCLIIII 322 | MMMCXXI 323 | MCCIII 324 | MMDCXXXXI 325 | CCXCII 326 | MMMMDXXXV 327 | MMMCCCLXV 328 | MMMMDLXV 329 | MMMCCCCXXXII 330 | MMMCCCVIII 331 | DCCCCLXXXXII 332 | MMCLXIV 333 | MMMMCXI 334 | MLXXXXVII 335 | MMMCDXXXVIII 336 | MDXXII 337 | MLV 338 | MMMMDLXVI 339 | MMMCXII 340 | XXXIII 341 | MMMMDCCCXXVI 342 | MMMLXVIIII 343 | MMMLX 344 | MMMCDLXVII 345 | MDCCCLVII 346 | MMCXXXVII 347 | MDCCCCXXX 348 | MMDCCCLXIII 349 | MMMMDCXLIX 350 | MMMMCMXLVIII 351 | DCCCLXXVIIII 352 | MDCCCLIII 353 | MMMCMLXI 354 | MMMMCCLXI 355 | MMDCCCLIII 356 | MMMDCCCVI 357 | MMDXXXXIX 358 | MMCLXXXXV 359 | MMDXXX 360 | MMMXIII 361 | DCLXXIX 362 | DCCLXII 363 | MMMMDCCLXVIII 364 | MDCCXXXXIII 365 | CCXXXII 366 | MMMMDCXXV 367 | MMMCCCXXVIII 368 | MDCVIII 369 | MMMCLXXXXIIII 370 | CLXXXI 371 | MDCCCCXXXIII 372 | MMMMDCXXX 373 | MMMDCXXIV 374 | MMMCCXXXVII 375 | MCCCXXXXIIII 376 | CXVIII 377 | MMDCCCCIV 378 | MMMMCDLXXV 379 | MMMDLXIV 380 | MDXCIII 381 | MCCLXXXI 382 | MMMDCCCXXIV 383 | MCXLIII 384 | MMMDCCCI 385 | MCCLXXX 386 | CCXV 387 | MMDCCLXXI 388 | MMDLXXXIII 389 | MMMMDCXVII 390 | MMMCMLXV 391 | MCLXVIII 392 | MMMMCCLXXVI 393 | MMMDCCLXVIIII 394 | MMMMDCCCIX 395 | DLXXXXIX 396 | DCCCXXII 397 | MMMMIII 398 | MMMMCCCLXXVI 399 | DCCCXCIII 400 | DXXXI 401 | MXXXIIII 402 | CCXII 403 | MMMDCCLXXXIIII 404 | MMMCXX 405 | MMMCMXXVII 406 | DCCCXXXX 407 | MMCDXXXVIIII 408 | MMMMDCCXVIII 409 | LV 410 | MMMDCCCCVI 411 | MCCCII 412 | MMCMLXVIIII 413 | MDCCXI 414 | MMMMDLXVII 415 | MMCCCCLXI 416 | MMDCCV 417 | MMMCCCXXXIIII 418 | MMMMDI 419 | MMMDCCCXCV 420 | MMDCCLXXXXI 421 | MMMDXXVI 422 | MMMDCCCLVI 423 | MMDCXXX 424 | MCCCVII 425 | MMMMCCCLXII 426 | MMMMXXV 427 | MMCMXXV 428 | MMLVI 429 | MMDXXX 430 | MMMMCVII 431 | MDC 432 | MCCIII 433 | MMMMDCC 434 | MMCCLXXV 435 | MMDCCCXXXXVI 436 | MMMMCCCLXV 437 | CDXIIII 438 | MLXIIII 439 | CCV 440 | MMMCMXXXI 441 | CCCCLXVI 442 | MDXXXII 443 | MMMMCCCLVIII 444 | MMV 445 | MMMCLII 446 | MCMLI 447 | MMDCCXX 448 | MMMMCCCCXXXVI 449 | MCCLXXXI 450 | MMMCMVI 451 | DCCXXX 452 | MMMMCCCLXV 453 | DCCCXI 454 | MMMMDCCCXIV 455 | CCCXXI 456 | MMDLXXV 457 | CCCCLXXXX 458 | MCCCLXXXXII 459 | MMDCIX 460 | DCCXLIIII 461 | DXIV 462 | MMMMCLII 463 | CDLXI 464 | MMMCXXVII 465 | MMMMDCCCCLXIII 466 | MMMDCLIIII 467 | MCCCCXXXXII 468 | MMCCCLX 469 | CCCCLIII 470 | MDCCLXXVI 471 | MCMXXIII 472 | MMMMDLXXVIII 473 | MMDCCCCLX 474 | MMMCCCLXXXX 475 | MMMCDXXVI 476 | MMMDLVIII 477 | CCCLXI 478 | MMMMDCXXII 479 | MMDCCCXXI 480 | MMDCCXIII 481 | MMMMCLXXXVI 482 | MDCCCCXXVI 483 | MDV 484 | MMDCCCCLXXVI 485 | MMMMCCXXXVII 486 | MMMDCCLXXVIIII 487 | MMMCCCCLXVII 488 | DCCXLI 489 | MMCLXXXVIII 490 | MCCXXXVI 491 | MMDCXLVIII 492 | MMMMCXXXII 493 | MMMMDCCLXVI 494 | MMMMCMLI 495 | MMMMCLXV 496 | MMMMDCCCXCIV 497 | MCCLXXVII 498 | LXXVIIII 499 | DCCLII 500 | MMMCCCXCVI 501 | MMMCLV 502 | MMDCCCXXXXVIII 503 | DCCCXV 504 | MXC 505 | MMDCCLXXXXVII 506 | MMMMCML 507 | MMDCCCLXXVIII 508 | DXXI 509 | MCCCXLI 510 | DCLXXXXI 511 | MMCCCLXXXXVIII 512 | MDCCCCLXXVIII 513 | MMMMDXXV 514 | MMMDCXXXVI 515 | MMMCMXCVII 516 | MMXVIIII 517 | MMMDCCLXXIV 518 | MMMCXXV 519 | DXXXVIII 520 | MMMMCLXVI 521 | MDXII 522 | MMCCCLXX 523 | CCLXXI 524 | DXIV 525 | MMMCLIII 526 | DLII 527 | MMMCCCXLIX 528 | MMCCCCXXVI 529 | MMDCXLIII 530 | MXXXXII 531 | CCCLXXXV 532 | MDCLXXVI 533 | MDCXII 534 | MMMCCCLXXXIII 535 | MMDCCCCLXXXII 536 | MMMMCCCLXXXV 537 | MMDCXXI 538 | DCCCXXX 539 | MMMDCCCCLII 540 | MMMDCCXXII 541 | MMMMCDXCVIII 542 | MMMCCLXVIIII 543 | MMXXV 544 | MMMMCDXIX 545 | MMMMCCCX 546 | MMMCCCCLXVI 547 | MMMMDCLXXVIIII 548 | MMMMDCXXXXIV 549 | MMMCMXII 550 | MMMMXXXIII 551 | MMMMDLXXXII 552 | DCCCLIV 553 | MDXVIIII 554 | MMMCLXXXXV 555 | CCCCXX 556 | MMDIX 557 | MMCMLXXXVIII 558 | DCCXLIII 559 | DCCLX 560 | D 561 | MCCCVII 562 | MMMMCCCLXXXIII 563 | MDCCCLXXIIII 564 | MMMDCCCCLXXXVII 565 | MMMMCCCVII 566 | MMMDCCLXXXXVI 567 | CDXXXIV 568 | MCCLXVIII 569 | MMMMDLX 570 | MMMMDXII 571 | MMMMCCCCLIIII 572 | MCMLXXXXIII 573 | MMMMDCCCIII 574 | MMDCLXXXIII 575 | MDCCCXXXXIV 576 | XXXXVII 577 | MMMDCCCXXXII 578 | MMMDCCCXLII 579 | MCXXXV 580 | MDCXXVIIII 581 | MMMCXXXXIIII 582 | MMMMCDXVII 583 | MMMDXXIII 584 | MMMMCCCCLXI 585 | DCLXXXXVIIII 586 | LXXXXI 587 | CXXXIII 588 | MCDX 589 | MCCLVII 590 | MDCXXXXII 591 | MMMCXXIV 592 | MMMMLXXXX 593 | MMDCCCCXLV 594 | MLXXX 595 | MMDCCCCLX 596 | MCDLIII 597 | MMMCCCLXVII 598 | MMMMCCCLXXIV 599 | MMMDCVIII 600 | DCCCCXXIII 601 | MMXCI 602 | MMDCCIV 603 | MMMMDCCCXXXIV 604 | CCCLXXI 605 | MCCLXXXII 606 | MCMIII 607 | CCXXXI 608 | DCCXXXVIII 609 | MMMMDCCXLVIIII 610 | MMMMCMXXXV 611 | DCCCLXXV 612 | DCCXCI 613 | MMMMDVII 614 | MMMMDCCCLXVIIII 615 | CCCXCV 616 | MMMMDCCXX 617 | MCCCCII 618 | MMMCCCXC 619 | MMMCCCII 620 | MMDCCLXXVII 621 | MMDCLIIII 622 | CCXLIII 623 | MMMDCXVIII 624 | MMMCCCIX 625 | MCXV 626 | MMCCXXV 627 | MLXXIIII 628 | MDCCXXVI 629 | MMMCCCXX 630 | MMDLXX 631 | MMCCCCVI 632 | MMDCCXX 633 | MMMMDCCCCXCV 634 | MDCCCXXXII 635 | MMMMDCCCCXXXX 636 | XCIV 637 | MMCCCCLX 638 | MMXVII 639 | MLXXI 640 | MMMDXXVIII 641 | MDCCCCII 642 | MMMCMLVII 643 | MMCLXXXXVIII 644 | MDCCCCLV 645 | MCCCCLXXIIII 646 | MCCCLII 647 | MCDXLVI 648 | MMMMDXVIII 649 | DCCLXXXIX 650 | MMMDCCLXIV 651 | MDCCCCXLIII 652 | CLXXXXV 653 | MMMMCCXXXVI 654 | MMMDCCCXXI 655 | MMMMCDLXXVII 656 | MCDLIII 657 | MMCCXLVI 658 | DCCCLV 659 | MCDLXX 660 | DCLXXVIII 661 | MMDCXXXIX 662 | MMMMDCLX 663 | MMDCCLI 664 | MMCXXXV 665 | MMMCCXII 666 | MMMMCMLXII 667 | MMMMCCV 668 | MCCCCLXIX 669 | MMMMCCIII 670 | CLXVII 671 | MCCCLXXXXIIII 672 | MMMMDCVIII 673 | MMDCCCLXI 674 | MMLXXIX 675 | CMLXIX 676 | MMDCCCXLVIIII 677 | DCLXII 678 | MMMCCCXLVII 679 | MDCCCXXXV 680 | MMMMDCCXCVI 681 | DCXXX 682 | XXVI 683 | MMLXIX 684 | MMCXI 685 | DCXXXVII 686 | MMMMCCCXXXXVIII 687 | MMMMDCLXI 688 | MMMMDCLXXIIII 689 | MMMMVIII 690 | MMMMDCCCLXII 691 | MDCXCI 692 | MMCCCXXIIII 693 | CCCCXXXXV 694 | MMDCCCXXI 695 | MCVI 696 | MMDCCLXVIII 697 | MMMMCXL 698 | MLXVIII 699 | CMXXVII 700 | CCCLV 701 | MDCCLXXXIX 702 | MMMCCCCLXV 703 | MMDCCLXII 704 | MDLXVI 705 | MMMCCCXVIII 706 | MMMMCCLXXXI 707 | MMCXXVII 708 | MMDCCCLXVIII 709 | MMMCXCII 710 | MMMMDCLVIII 711 | MMMMDCCCXXXXII 712 | MMDCCCCLXXXXVI 713 | MDCCXL 714 | MDCCLVII 715 | MMMMDCCCLXXXVI 716 | DCCXXXIII 717 | MMMMDCCCCLXXXV 718 | MMCCXXXXVIII 719 | MMMCCLXXVIII 720 | MMMDCLXXVIII 721 | DCCCI 722 | MMMMLXXXXVIIII 723 | MMMCCCCLXXII 724 | MMCLXXXVII 725 | CCLXVI 726 | MCDXLIII 727 | MMCXXVIII 728 | MDXIV 729 | CCCXCVIII 730 | CLXXVIII 731 | MMCXXXXVIIII 732 | MMMDCLXXXIV 733 | CMLVIII 734 | MCDLIX 735 | MMMMDCCCXXXII 736 | MMMMDCXXXIIII 737 | MDCXXI 738 | MMMDCXLV 739 | MCLXXVIII 740 | MCDXXII 741 | IV 742 | MCDLXXXXIII 743 | MMMMDCCLXV 744 | CCLI 745 | MMMMDCCCXXXVIII 746 | DCLXII 747 | MCCCLXVII 748 | MMMMDCCCXXXVI 749 | MMDCCXLI 750 | MLXI 751 | MMMCDLXVIII 752 | MCCCCXCIII 753 | XXXIII 754 | MMMDCLXIII 755 | MMMMDCL 756 | DCCCXXXXIIII 757 | MMDLVII 758 | DXXXVII 759 | MCCCCXXIIII 760 | MCVII 761 | MMMMDCCXL 762 | MMMMCXXXXIIII 763 | MCCCCXXIV 764 | MMCLXVIII 765 | MMXCIII 766 | MDCCLXXX 767 | MCCCLIIII 768 | MMDCLXXI 769 | MXI 770 | MCMLIV 771 | MMMCCIIII 772 | DCCLXXXVIIII 773 | MDCLIV 774 | MMMDCXIX 775 | CMLXXXI 776 | DCCLXXXVII 777 | XXV 778 | MMMXXXVI 779 | MDVIIII 780 | CLXIII 781 | MMMCDLVIIII 782 | MMCCCCVII 783 | MMMLXX 784 | MXXXXII 785 | MMMMCCCLXVIII 786 | MMDCCCXXVIII 787 | MMMMDCXXXXI 788 | MMMMDCCCXXXXV 789 | MMMXV 790 | MMMMCCXVIIII 791 | MMDCCXIIII 792 | MMMXXVII 793 | MDCCLVIIII 794 | MMCXXIIII 795 | MCCCLXXIV 796 | DCLVIII 797 | MMMLVII 798 | MMMCXLV 799 | MMXCVII 800 | MMMCCCLXXXVII 801 | MMMMCCXXII 802 | DXII 803 | MMMDLV 804 | MCCCLXXVIII 805 | MMMCLIIII 806 | MMMMCLXXXX 807 | MMMCLXXXIIII 808 | MDCXXIII 809 | MMMMCCXVI 810 | MMMMDLXXXIII 811 | MMMDXXXXIII 812 | MMMMCCCCLV 813 | MMMDLXXXI 814 | MMMCCLXXVI 815 | MMMMXX 816 | MMMMDLVI 817 | MCCCCLXXX 818 | MMMXXII 819 | MMXXII 820 | MMDCCCCXXXI 821 | MMMDXXV 822 | MMMDCLXXXVIIII 823 | MMMDLXXXXVII 824 | MDLXIIII 825 | CMXC 826 | MMMXXXVIII 827 | MDLXXXVIII 828 | MCCCLXXVI 829 | MMCDLIX 830 | MMDCCCXVIII 831 | MDCCCXXXXVI 832 | MMMMCMIV 833 | MMMMDCIIII 834 | MMCCXXXV 835 | XXXXVI 836 | MMMMCCXVII 837 | MMCCXXIV 838 | MCMLVIIII 839 | MLXXXIX 840 | MMMMLXXXIX 841 | CLXXXXIX 842 | MMMDCCCCLVIII 843 | MMMMCCLXXIII 844 | MCCCC 845 | DCCCLIX 846 | MMMCCCLXXXII 847 | MMMCCLXVIIII 848 | MCLXXXV 849 | CDLXXXVII 850 | DCVI 851 | MMX 852 | MMCCXIII 853 | MMMMDCXX 854 | MMMMXXVIII 855 | DCCCLXII 856 | MMMMCCCXLIII 857 | MMMMCLXV 858 | DXCI 859 | MMMMCLXXX 860 | MMMDCCXXXXI 861 | MMMMXXXXVI 862 | DCLX 863 | MMMCCCXI 864 | MCCLXXX 865 | MMCDLXXII 866 | DCCLXXI 867 | MMMCCCXXXVI 868 | MCCCCLXXXVIIII 869 | CDLVIII 870 | DCCLVI 871 | MMMMDCXXXVIII 872 | MMCCCLXXXIII 873 | MMMMDCCLXXV 874 | MMMXXXVI 875 | CCCLXXXXIX 876 | CV 877 | CCCCXIII 878 | CCCCXVI 879 | MDCCCLXXXIIII 880 | MMDCCLXXXII 881 | MMMMCCCCLXXXI 882 | MXXV 883 | MMCCCLXXVIIII 884 | MMMCCXII 885 | MMMMCCXXXIII 886 | MMCCCLXXXVI 887 | MMMDCCCLVIIII 888 | MCCXXXVII 889 | MDCLXXV 890 | XXXV 891 | MMDLI 892 | MMMCCXXX 893 | MMMMCXXXXV 894 | CCCCLIX 895 | MMMMDCCCLXXIII 896 | MMCCCXVII 897 | DCCCXVI 898 | MMMCCCXXXXV 899 | MDCCCCXCV 900 | CLXXXI 901 | MMMMDCCLXX 902 | MMMDCCCIII 903 | MMCLXXVII 904 | MMMDCCXXIX 905 | MMDCCCXCIIII 906 | MMMCDXXIIII 907 | MMMMXXVIII 908 | MMMMDCCCCLXVIII 909 | MDCCCXX 910 | MMMMCDXXI 911 | MMMMDLXXXIX 912 | CCXVI 913 | MDVIII 914 | MMCCLXXI 915 | MMMDCCCLXXI 916 | MMMCCCLXXVI 917 | MMCCLXI 918 | MMMMDCCCXXXIV 919 | DLXXXVI 920 | MMMMDXXXII 921 | MMMXXIIII 922 | MMMMCDIV 923 | MMMMCCCXLVIII 924 | MMMMCXXXVIII 925 | MMMCCCLXVI 926 | MDCCXVIII 927 | MMCXX 928 | CCCLIX 929 | MMMMDCCLXXII 930 | MDCCCLXXV 931 | MMMMDCCCXXIV 932 | DCCCXXXXVIII 933 | MMMDCCCCXXXVIIII 934 | MMMMCCXXXV 935 | MDCLXXXIII 936 | MMCCLXXXIV 937 | MCLXXXXIIII 938 | DXXXXIII 939 | MCCCXXXXVIII 940 | MMCLXXIX 941 | MMMMCCLXIV 942 | MXXII 943 | MMMCXIX 944 | MDCXXXVII 945 | MMDCCVI 946 | MCLXXXXVIII 947 | MMMCXVI 948 | MCCCLX 949 | MMMCDX 950 | CCLXVIIII 951 | MMMCCLX 952 | MCXXVIII 953 | LXXXII 954 | MCCCCLXXXI 955 | MMMI 956 | MMMCCCLXIV 957 | MMMCCCXXVIIII 958 | CXXXVIII 959 | MMCCCXX 960 | MMMCCXXVIIII 961 | MCCLXVI 962 | MMMCCCCXXXXVI 963 | MMDCCXCIX 964 | MCMLXXI 965 | MMCCLXVIII 966 | CDLXXXXIII 967 | MMMMDCCXXII 968 | MMMMDCCLXXXVII 969 | MMMDCCLIV 970 | MMCCLXIII 971 | MDXXXVII 972 | DCCXXXIIII 973 | MCII 974 | MMMDCCCLXXI 975 | MMMLXXIII 976 | MDCCCLIII 977 | MMXXXVIII 978 | MDCCXVIIII 979 | MDCCCCXXXVII 980 | MMCCCXVI 981 | MCMXXII 982 | MMMCCCLVIII 983 | MMMMDCCCXX 984 | MCXXIII 985 | MMMDLXI 986 | MMMMDXXII 987 | MDCCCX 988 | MMDXCVIIII 989 | MMMDCCCCVIII 990 | MMMMDCCCCXXXXVI 991 | MMDCCCXXXV 992 | MMCXCIV 993 | MCMLXXXXIII 994 | MMMCCCLXXVI 995 | MMMMDCLXXXV 996 | CMLXIX 997 | DCXCII 998 | MMXXVIII 999 | MMMMCCCXXX 1000 | XXXXVIIII -------------------------------------------------------------------------------- /EulerPy/data/resources/sets.txt: -------------------------------------------------------------------------------- 1 | 81,88,75,42,87,84,86,65 2 | 157,150,164,119,79,159,161,139,158 3 | 673,465,569,603,629,592,584,300,601,599,600 4 | 90,85,83,84,65,87,76,46 5 | 165,168,169,190,162,85,176,167,127 6 | 224,275,278,249,277,279,289,295,139 7 | 354,370,362,384,359,324,360,180,350,270 8 | 599,595,557,298,448,596,577,667,597,588,602 9 | 175,199,137,88,187,173,168,171,174 10 | 93,187,196,144,185,178,186,202,182 11 | 157,155,81,158,119,176,152,167,159 12 | 184,165,159,166,163,167,174,124,83 13 | 1211,1212,1287,605,1208,1189,1060,1216,1243,1200,908,1210 14 | 339,299,153,305,282,304,313,306,302,228 15 | 94,104,63,112,80,84,93,96 16 | 41,88,82,85,61,74,83,81 17 | 90,67,84,83,82,97,86,41 18 | 299,303,151,301,291,302,307,377,333,280 19 | 55,40,48,44,25,42,41 20 | 1038,1188,1255,1184,594,890,1173,1151,1186,1203,1187,1195 21 | 76,132,133,144,135,99,128,154 22 | 77,46,108,81,85,84,93,83 23 | 624,596,391,605,529,610,607,568,604,603,453 24 | 83,167,166,189,163,174,160,165,133 25 | 308,281,389,292,346,303,302,304,300,173 26 | 593,1151,1187,1184,890,1040,1173,1186,1195,1255,1188,1203 27 | 68,46,64,33,60,58,65 28 | 65,43,88,87,86,99,93,90 29 | 83,78,107,48,84,87,96,85 30 | 1188,1173,1256,1038,1187,1151,890,1186,1184,1203,594,1195 31 | 302,324,280,296,294,160,367,298,264,299 32 | 521,760,682,687,646,664,342,698,692,686,672 33 | 56,95,86,97,96,89,108,120 34 | 344,356,262,343,340,382,337,175,361,330 35 | 47,44,42,27,41,40,37 36 | 139,155,161,158,118,166,154,156,78 37 | 118,157,164,158,161,79,139,150,159 38 | 299,292,371,150,300,301,281,303,306,262 39 | 85,77,86,84,44,88,91,67 40 | 88,85,84,44,65,91,76,86 41 | 138,141,127,96,136,154,135,76 42 | 292,308,302,346,300,324,304,305,238,166 43 | 354,342,341,257,348,343,345,321,170,301 44 | 84,178,168,167,131,170,193,166,162 45 | 686,701,706,673,694,687,652,343,683,606,518 46 | 295,293,301,367,296,279,297,263,323,159 47 | 1038,1184,593,890,1188,1173,1187,1186,1195,1150,1203,1255 48 | 343,364,388,402,191,383,382,385,288,374 49 | 1187,1036,1183,591,1184,1175,888,1197,1182,1219,1115,1167 50 | 151,291,307,303,345,238,299,323,301,302 51 | 140,151,143,138,99,69,131,137 52 | 29,44,42,59,41,36,40 53 | 348,329,343,344,338,315,169,359,375,271 54 | 48,39,34,37,50,40,41 55 | 593,445,595,558,662,602,591,297,610,580,594 56 | 686,651,681,342,541,687,691,707,604,675,699 57 | 180,99,189,166,194,188,144,187,199 58 | 321,349,335,343,377,176,265,356,344,332 59 | 1151,1255,1195,1173,1184,1186,1188,1187,1203,593,1038,891 60 | 90,88,100,83,62,113,80,89 61 | 308,303,238,300,151,304,324,293,346,302 62 | 59,38,50,41,42,35,40 63 | 352,366,174,355,344,265,343,310,338,331 64 | 91,89,93,90,117,85,60,106 65 | 146,186,166,175,202,92,184,183,189 66 | 82,67,96,44,80,79,88,76 67 | 54,50,58,66,31,61,64 68 | 343,266,344,172,308,336,364,350,359,333 69 | 88,49,87,82,90,98,86,115 70 | 20,47,49,51,54,48,40 71 | 159,79,177,158,157,152,155,167,118 72 | 1219,1183,1182,1115,1035,1186,591,1197,1167,887,1184,1175 73 | 611,518,693,343,704,667,686,682,677,687,725 74 | 607,599,634,305,677,604,603,580,452,605,591 75 | 682,686,635,675,692,730,687,342,517,658,695 76 | 662,296,573,598,592,584,553,593,595,443,591 77 | 180,185,186,199,187,210,93,177,149 78 | 197,136,179,185,156,182,180,178,99 79 | 271,298,218,279,285,282,280,238,140 80 | 1187,1151,890,593,1194,1188,1184,1173,1038,1186,1255,1203 81 | 169,161,177,192,130,165,84,167,168 82 | 50,42,43,41,66,39,36 83 | 590,669,604,579,448,599,560,299,601,597,598 84 | 174,191,206,179,184,142,177,180,90 85 | 298,299,297,306,164,285,374,269,329,295 86 | 181,172,162,138,170,195,86,169,168 87 | 1184,1197,591,1182,1186,889,1167,1219,1183,1033,1115,1175 88 | 644,695,691,679,667,687,340,681,770,686,517 89 | 606,524,592,576,628,593,591,584,296,444,595 90 | 94,127,154,138,135,74,136,141 91 | 179,168,172,178,177,89,198,186,137 92 | 302,299,291,300,298,149,260,305,280,370 93 | 678,517,670,686,682,768,687,648,342,692,702 94 | 302,290,304,376,333,303,306,298,279,153 95 | 95,102,109,54,96,75,85,97 96 | 150,154,146,78,152,151,162,173,119 97 | 150,143,157,152,184,112,154,151,132 98 | 36,41,54,40,25,44,42 99 | 37,48,34,59,39,41,40 100 | 681,603,638,611,584,303,454,607,606,605,596 -------------------------------------------------------------------------------- /EulerPy/data/resources/sudoku.txt: -------------------------------------------------------------------------------- 1 | Grid 01 2 | 003020600 3 | 900305001 4 | 001806400 5 | 008102900 6 | 700000008 7 | 006708200 8 | 002609500 9 | 800203009 10 | 005010300 11 | Grid 02 12 | 200080300 13 | 060070084 14 | 030500209 15 | 000105408 16 | 000000000 17 | 402706000 18 | 301007040 19 | 720040060 20 | 004010003 21 | Grid 03 22 | 000000907 23 | 000420180 24 | 000705026 25 | 100904000 26 | 050000040 27 | 000507009 28 | 920108000 29 | 034059000 30 | 507000000 31 | Grid 04 32 | 030050040 33 | 008010500 34 | 460000012 35 | 070502080 36 | 000603000 37 | 040109030 38 | 250000098 39 | 001020600 40 | 080060020 41 | Grid 05 42 | 020810740 43 | 700003100 44 | 090002805 45 | 009040087 46 | 400208003 47 | 160030200 48 | 302700060 49 | 005600008 50 | 076051090 51 | Grid 06 52 | 100920000 53 | 524010000 54 | 000000070 55 | 050008102 56 | 000000000 57 | 402700090 58 | 060000000 59 | 000030945 60 | 000071006 61 | Grid 07 62 | 043080250 63 | 600000000 64 | 000001094 65 | 900004070 66 | 000608000 67 | 010200003 68 | 820500000 69 | 000000005 70 | 034090710 71 | Grid 08 72 | 480006902 73 | 002008001 74 | 900370060 75 | 840010200 76 | 003704100 77 | 001060049 78 | 020085007 79 | 700900600 80 | 609200018 81 | Grid 09 82 | 000900002 83 | 050123400 84 | 030000160 85 | 908000000 86 | 070000090 87 | 000000205 88 | 091000050 89 | 007439020 90 | 400007000 91 | Grid 10 92 | 001900003 93 | 900700160 94 | 030005007 95 | 050000009 96 | 004302600 97 | 200000070 98 | 600100030 99 | 042007006 100 | 500006800 101 | Grid 11 102 | 000125400 103 | 008400000 104 | 420800000 105 | 030000095 106 | 060902010 107 | 510000060 108 | 000003049 109 | 000007200 110 | 001298000 111 | Grid 12 112 | 062340750 113 | 100005600 114 | 570000040 115 | 000094800 116 | 400000006 117 | 005830000 118 | 030000091 119 | 006400007 120 | 059083260 121 | Grid 13 122 | 300000000 123 | 005009000 124 | 200504000 125 | 020000700 126 | 160000058 127 | 704310600 128 | 000890100 129 | 000067080 130 | 000005437 131 | Grid 14 132 | 630000000 133 | 000500008 134 | 005674000 135 | 000020000 136 | 003401020 137 | 000000345 138 | 000007004 139 | 080300902 140 | 947100080 141 | Grid 15 142 | 000020040 143 | 008035000 144 | 000070602 145 | 031046970 146 | 200000000 147 | 000501203 148 | 049000730 149 | 000000010 150 | 800004000 151 | Grid 16 152 | 361025900 153 | 080960010 154 | 400000057 155 | 008000471 156 | 000603000 157 | 259000800 158 | 740000005 159 | 020018060 160 | 005470329 161 | Grid 17 162 | 050807020 163 | 600010090 164 | 702540006 165 | 070020301 166 | 504000908 167 | 103080070 168 | 900076205 169 | 060090003 170 | 080103040 171 | Grid 18 172 | 080005000 173 | 000003457 174 | 000070809 175 | 060400903 176 | 007010500 177 | 408007020 178 | 901020000 179 | 842300000 180 | 000100080 181 | Grid 19 182 | 003502900 183 | 000040000 184 | 106000305 185 | 900251008 186 | 070408030 187 | 800763001 188 | 308000104 189 | 000020000 190 | 005104800 191 | Grid 20 192 | 000000000 193 | 009805100 194 | 051907420 195 | 290401065 196 | 000000000 197 | 140508093 198 | 026709580 199 | 005103600 200 | 000000000 201 | Grid 21 202 | 020030090 203 | 000907000 204 | 900208005 205 | 004806500 206 | 607000208 207 | 003102900 208 | 800605007 209 | 000309000 210 | 030020050 211 | Grid 22 212 | 005000006 213 | 070009020 214 | 000500107 215 | 804150000 216 | 000803000 217 | 000092805 218 | 907006000 219 | 030400010 220 | 200000600 221 | Grid 23 222 | 040000050 223 | 001943600 224 | 009000300 225 | 600050002 226 | 103000506 227 | 800020007 228 | 005000200 229 | 002436700 230 | 030000040 231 | Grid 24 232 | 004000000 233 | 000030002 234 | 390700080 235 | 400009001 236 | 209801307 237 | 600200008 238 | 010008053 239 | 900040000 240 | 000000800 241 | Grid 25 242 | 360020089 243 | 000361000 244 | 000000000 245 | 803000602 246 | 400603007 247 | 607000108 248 | 000000000 249 | 000418000 250 | 970030014 251 | Grid 26 252 | 500400060 253 | 009000800 254 | 640020000 255 | 000001008 256 | 208000501 257 | 700500000 258 | 000090084 259 | 003000600 260 | 060003002 261 | Grid 27 262 | 007256400 263 | 400000005 264 | 010030060 265 | 000508000 266 | 008060200 267 | 000107000 268 | 030070090 269 | 200000004 270 | 006312700 271 | Grid 28 272 | 000000000 273 | 079050180 274 | 800000007 275 | 007306800 276 | 450708096 277 | 003502700 278 | 700000005 279 | 016030420 280 | 000000000 281 | Grid 29 282 | 030000080 283 | 009000500 284 | 007509200 285 | 700105008 286 | 020090030 287 | 900402001 288 | 004207100 289 | 002000800 290 | 070000090 291 | Grid 30 292 | 200170603 293 | 050000100 294 | 000006079 295 | 000040700 296 | 000801000 297 | 009050000 298 | 310400000 299 | 005000060 300 | 906037002 301 | Grid 31 302 | 000000080 303 | 800701040 304 | 040020030 305 | 374000900 306 | 000030000 307 | 005000321 308 | 010060050 309 | 050802006 310 | 080000000 311 | Grid 32 312 | 000000085 313 | 000210009 314 | 960080100 315 | 500800016 316 | 000000000 317 | 890006007 318 | 009070052 319 | 300054000 320 | 480000000 321 | Grid 33 322 | 608070502 323 | 050608070 324 | 002000300 325 | 500090006 326 | 040302050 327 | 800050003 328 | 005000200 329 | 010704090 330 | 409060701 331 | Grid 34 332 | 050010040 333 | 107000602 334 | 000905000 335 | 208030501 336 | 040070020 337 | 901080406 338 | 000401000 339 | 304000709 340 | 020060010 341 | Grid 35 342 | 053000790 343 | 009753400 344 | 100000002 345 | 090080010 346 | 000907000 347 | 080030070 348 | 500000003 349 | 007641200 350 | 061000940 351 | Grid 36 352 | 006080300 353 | 049070250 354 | 000405000 355 | 600317004 356 | 007000800 357 | 100826009 358 | 000702000 359 | 075040190 360 | 003090600 361 | Grid 37 362 | 005080700 363 | 700204005 364 | 320000084 365 | 060105040 366 | 008000500 367 | 070803010 368 | 450000091 369 | 600508007 370 | 003010600 371 | Grid 38 372 | 000900800 373 | 128006400 374 | 070800060 375 | 800430007 376 | 500000009 377 | 600079008 378 | 090004010 379 | 003600284 380 | 001007000 381 | Grid 39 382 | 000080000 383 | 270000054 384 | 095000810 385 | 009806400 386 | 020403060 387 | 006905100 388 | 017000620 389 | 460000038 390 | 000090000 391 | Grid 40 392 | 000602000 393 | 400050001 394 | 085010620 395 | 038206710 396 | 000000000 397 | 019407350 398 | 026040530 399 | 900020007 400 | 000809000 401 | Grid 41 402 | 000900002 403 | 050123400 404 | 030000160 405 | 908000000 406 | 070000090 407 | 000000205 408 | 091000050 409 | 007439020 410 | 400007000 411 | Grid 42 412 | 380000000 413 | 000400785 414 | 009020300 415 | 060090000 416 | 800302009 417 | 000040070 418 | 001070500 419 | 495006000 420 | 000000092 421 | Grid 43 422 | 000158000 423 | 002060800 424 | 030000040 425 | 027030510 426 | 000000000 427 | 046080790 428 | 050000080 429 | 004070100 430 | 000325000 431 | Grid 44 432 | 010500200 433 | 900001000 434 | 002008030 435 | 500030007 436 | 008000500 437 | 600080004 438 | 040100700 439 | 000700006 440 | 003004050 441 | Grid 45 442 | 080000040 443 | 000469000 444 | 400000007 445 | 005904600 446 | 070608030 447 | 008502100 448 | 900000005 449 | 000781000 450 | 060000010 451 | Grid 46 452 | 904200007 453 | 010000000 454 | 000706500 455 | 000800090 456 | 020904060 457 | 040002000 458 | 001607000 459 | 000000030 460 | 300005702 461 | Grid 47 462 | 000700800 463 | 006000031 464 | 040002000 465 | 024070000 466 | 010030080 467 | 000060290 468 | 000800070 469 | 860000500 470 | 002006000 471 | Grid 48 472 | 001007090 473 | 590080001 474 | 030000080 475 | 000005800 476 | 050060020 477 | 004100000 478 | 080000030 479 | 100020079 480 | 020700400 481 | Grid 49 482 | 000003017 483 | 015009008 484 | 060000000 485 | 100007000 486 | 009000200 487 | 000500004 488 | 000000020 489 | 500600340 490 | 340200000 491 | Grid 50 492 | 300200000 493 | 000107000 494 | 706030500 495 | 070009080 496 | 900020004 497 | 010800050 498 | 009040301 499 | 000702000 500 | 000008006 -------------------------------------------------------------------------------- /EulerPy/data/resources/triangle.txt: -------------------------------------------------------------------------------- 1 | 59 2 | 73 41 3 | 52 40 09 4 | 26 53 06 34 5 | 10 51 87 86 81 6 | 61 95 66 57 25 68 7 | 90 81 80 38 92 67 73 8 | 30 28 51 76 81 18 75 44 9 | 84 14 95 87 62 81 17 78 58 10 | 21 46 71 58 02 79 62 39 31 09 11 | 56 34 35 53 78 31 81 18 90 93 15 12 | 78 53 04 21 84 93 32 13 97 11 37 51 13 | 45 03 81 79 05 18 78 86 13 30 63 99 95 14 | 39 87 96 28 03 38 42 17 82 87 58 07 22 57 15 | 06 17 51 17 07 93 09 07 75 97 95 78 87 08 53 16 | 67 66 59 60 88 99 94 65 55 77 55 34 27 53 78 28 17 | 76 40 41 04 87 16 09 42 75 69 23 97 30 60 10 79 87 18 | 12 10 44 26 21 36 32 84 98 60 13 12 36 16 63 31 91 35 19 | 70 39 06 05 55 27 38 48 28 22 34 35 62 62 15 14 94 89 86 20 | 66 56 68 84 96 21 34 34 34 81 62 40 65 54 62 05 98 03 02 60 21 | 38 89 46 37 99 54 34 53 36 14 70 26 02 90 45 13 31 61 83 73 47 22 | 36 10 63 96 60 49 41 05 37 42 14 58 84 93 96 17 09 43 05 43 06 59 23 | 66 57 87 57 61 28 37 51 84 73 79 15 39 95 88 87 43 39 11 86 77 74 18 24 | 54 42 05 79 30 49 99 73 46 37 50 02 45 09 54 52 27 95 27 65 19 45 26 45 25 | 71 39 17 78 76 29 52 90 18 99 78 19 35 62 71 19 23 65 93 85 49 33 75 09 02 26 | 33 24 47 61 60 55 32 88 57 55 91 54 46 57 07 77 98 52 80 99 24 25 46 78 79 05 27 | 92 09 13 55 10 67 26 78 76 82 63 49 51 31 24 68 05 57 07 54 69 21 67 43 17 63 12 28 | 24 59 06 08 98 74 66 26 61 60 13 03 09 09 24 30 71 08 88 70 72 70 29 90 11 82 41 34 29 | 66 82 67 04 36 60 92 77 91 85 62 49 59 61 30 90 29 94 26 41 89 04 53 22 83 41 09 74 90 30 | 48 28 26 37 28 52 77 26 51 32 18 98 79 36 62 13 17 08 19 54 89 29 73 68 42 14 08 16 70 37 31 | 37 60 69 70 72 71 09 59 13 60 38 13 57 36 09 30 43 89 30 39 15 02 44 73 05 73 26 63 56 86 12 32 | 55 55 85 50 62 99 84 77 28 85 03 21 27 22 19 26 82 69 54 04 13 07 85 14 01 15 70 59 89 95 10 19 33 | 04 09 31 92 91 38 92 86 98 75 21 05 64 42 62 84 36 20 73 42 21 23 22 51 51 79 25 45 85 53 03 43 22 34 | 75 63 02 49 14 12 89 14 60 78 92 16 44 82 38 30 72 11 46 52 90 27 08 65 78 03 85 41 57 79 39 52 33 48 35 | 78 27 56 56 39 13 19 43 86 72 58 95 39 07 04 34 21 98 39 15 39 84 89 69 84 46 37 57 59 35 59 50 26 15 93 36 | 42 89 36 27 78 91 24 11 17 41 05 94 07 69 51 96 03 96 47 90 90 45 91 20 50 56 10 32 36 49 04 53 85 92 25 65 37 | 52 09 61 30 61 97 66 21 96 92 98 90 06 34 96 60 32 69 68 33 75 84 18 31 71 50 84 63 03 03 19 11 28 42 75 45 45 38 | 61 31 61 68 96 34 49 39 05 71 76 59 62 67 06 47 96 99 34 21 32 47 52 07 71 60 42 72 94 56 82 83 84 40 94 87 82 46 39 | 01 20 60 14 17 38 26 78 66 81 45 95 18 51 98 81 48 16 53 88 37 52 69 95 72 93 22 34 98 20 54 27 73 61 56 63 60 34 63 40 | 93 42 94 83 47 61 27 51 79 79 45 01 44 73 31 70 83 42 88 25 53 51 30 15 65 94 80 44 61 84 12 77 02 62 02 65 94 42 14 94 41 | 32 73 09 67 68 29 74 98 10 19 85 48 38 31 85 67 53 93 93 77 47 67 39 72 94 53 18 43 77 40 78 32 29 59 24 06 02 83 50 60 66 42 | 32 01 44 30 16 51 15 81 98 15 10 62 86 79 50 62 45 60 70 38 31 85 65 61 64 06 69 84 14 22 56 43 09 48 66 69 83 91 60 40 36 61 43 | 92 48 22 99 15 95 64 43 01 16 94 02 99 19 17 69 11 58 97 56 89 31 77 45 67 96 12 73 08 20 36 47 81 44 50 64 68 85 40 81 85 52 09 44 | 91 35 92 45 32 84 62 15 19 64 21 66 06 01 52 80 62 59 12 25 88 28 91 50 40 16 22 99 92 79 87 51 21 77 74 77 07 42 38 42 74 83 02 05 45 | 46 19 77 66 24 18 05 32 02 84 31 99 92 58 96 72 91 36 62 99 55 29 53 42 12 37 26 58 89 50 66 19 82 75 12 48 24 87 91 85 02 07 03 76 86 46 | 99 98 84 93 07 17 33 61 92 20 66 60 24 66 40 30 67 05 37 29 24 96 03 27 70 62 13 04 45 47 59 88 43 20 66 15 46 92 30 04 71 66 78 70 53 99 47 | 67 60 38 06 88 04 17 72 10 99 71 07 42 25 54 05 26 64 91 50 45 71 06 30 67 48 69 82 08 56 80 67 18 46 66 63 01 20 08 80 47 07 91 16 03 79 87 48 | 18 54 78 49 80 48 77 40 68 23 60 88 58 80 33 57 11 69 55 53 64 02 94 49 60 92 16 35 81 21 82 96 25 24 96 18 02 05 49 03 50 77 06 32 84 27 18 38 49 | 68 01 50 04 03 21 42 94 53 24 89 05 92 26 52 36 68 11 85 01 04 42 02 45 15 06 50 04 53 73 25 74 81 88 98 21 67 84 79 97 99 20 95 04 40 46 02 58 87 50 | 94 10 02 78 88 52 21 03 88 60 06 53 49 71 20 91 12 65 07 49 21 22 11 41 58 99 36 16 09 48 17 24 52 36 23 15 72 16 84 56 02 99 43 76 81 71 29 39 49 17 51 | 64 39 59 84 86 16 17 66 03 09 43 06 64 18 63 29 68 06 23 07 87 14 26 35 17 12 98 41 53 64 78 18 98 27 28 84 80 67 75 62 10 11 76 90 54 10 05 54 41 39 66 52 | 43 83 18 37 32 31 52 29 95 47 08 76 35 11 04 53 35 43 34 10 52 57 12 36 20 39 40 55 78 44 07 31 38 26 08 15 56 88 86 01 52 62 10 24 32 05 60 65 53 28 57 99 53 | 03 50 03 52 07 73 49 92 66 80 01 46 08 67 25 36 73 93 07 42 25 53 13 96 76 83 87 90 54 89 78 22 78 91 73 51 69 09 79 94 83 53 09 40 69 62 10 79 49 47 03 81 30 54 | 71 54 73 33 51 76 59 54 79 37 56 45 84 17 62 21 98 69 41 95 65 24 39 37 62 03 24 48 54 64 46 82 71 78 33 67 09 16 96 68 52 74 79 68 32 21 13 78 96 60 09 69 20 36 55 | 73 26 21 44 46 38 17 83 65 98 07 23 52 46 61 97 33 13 60 31 70 15 36 77 31 58 56 93 75 68 21 36 69 53 90 75 25 82 39 50 65 94 29 30 11 33 11 13 96 02 56 47 07 49 02 56 | 76 46 73 30 10 20 60 70 14 56 34 26 37 39 48 24 55 76 84 91 39 86 95 61 50 14 53 93 64 67 37 31 10 84 42 70 48 20 10 72 60 61 84 79 69 65 99 73 89 25 85 48 92 56 97 16 57 | 03 14 80 27 22 30 44 27 67 75 79 32 51 54 81 29 65 14 19 04 13 82 04 91 43 40 12 52 29 99 07 76 60 25 01 07 61 71 37 92 40 47 99 66 57 01 43 44 22 40 53 53 09 69 26 81 07 58 | 49 80 56 90 93 87 47 13 75 28 87 23 72 79 32 18 27 20 28 10 37 59 21 18 70 04 79 96 03 31 45 71 81 06 14 18 17 05 31 50 92 79 23 47 09 39 47 91 43 54 69 47 42 95 62 46 32 85 59 | 37 18 62 85 87 28 64 05 77 51 47 26 30 65 05 70 65 75 59 80 42 52 25 20 44 10 92 17 71 95 52 14 77 13 24 55 11 65 26 91 01 30 63 15 49 48 41 17 67 47 03 68 20 90 98 32 04 40 68 60 | 90 51 58 60 06 55 23 68 05 19 76 94 82 36 96 43 38 90 87 28 33 83 05 17 70 83 96 93 06 04 78 47 80 06 23 84 75 23 87 72 99 14 50 98 92 38 90 64 61 58 76 94 36 66 87 80 51 35 61 38 61 | 57 95 64 06 53 36 82 51 40 33 47 14 07 98 78 65 39 58 53 06 50 53 04 69 40 68 36 69 75 78 75 60 03 32 39 24 74 47 26 90 13 40 44 71 90 76 51 24 36 50 25 45 70 80 61 80 61 43 90 64 11 62 | 18 29 86 56 68 42 79 10 42 44 30 12 96 18 23 18 52 59 02 99 67 46 60 86 43 38 55 17 44 93 42 21 55 14 47 34 55 16 49 24 23 29 96 51 55 10 46 53 27 92 27 46 63 57 30 65 43 27 21 20 24 83 63 | 81 72 93 19 69 52 48 01 13 83 92 69 20 48 69 59 20 62 05 42 28 89 90 99 32 72 84 17 08 87 36 03 60 31 36 36 81 26 97 36 48 54 56 56 27 16 91 08 23 11 87 99 33 47 02 14 44 73 70 99 43 35 33 64 | 90 56 61 86 56 12 70 59 63 32 01 15 81 47 71 76 95 32 65 80 54 70 34 51 40 45 33 04 64 55 78 68 88 47 31 47 68 87 03 84 23 44 89 72 35 08 31 76 63 26 90 85 96 67 65 91 19 14 17 86 04 71 32 95 65 | 37 13 04 22 64 37 37 28 56 62 86 33 07 37 10 44 52 82 52 06 19 52 57 75 90 26 91 24 06 21 14 67 76 30 46 14 35 89 89 41 03 64 56 97 87 63 22 34 03 79 17 45 11 53 25 56 96 61 23 18 63 31 37 37 47 66 | 77 23 26 70 72 76 77 04 28 64 71 69 14 85 96 54 95 48 06 62 99 83 86 77 97 75 71 66 30 19 57 90 33 01 60 61 14 12 90 99 32 77 56 41 18 14 87 49 10 14 90 64 18 50 21 74 14 16 88 05 45 73 82 47 74 44 67 | 22 97 41 13 34 31 54 61 56 94 03 24 59 27 98 77 04 09 37 40 12 26 87 09 71 70 07 18 64 57 80 21 12 71 83 94 60 39 73 79 73 19 97 32 64 29 41 07 48 84 85 67 12 74 95 20 24 52 41 67 56 61 29 93 35 72 69 68 | 72 23 63 66 01 11 07 30 52 56 95 16 65 26 83 90 50 74 60 18 16 48 43 77 37 11 99 98 30 94 91 26 62 73 45 12 87 73 47 27 01 88 66 99 21 41 95 80 02 53 23 32 61 48 32 43 43 83 14 66 95 91 19 81 80 67 25 88 69 | 08 62 32 18 92 14 83 71 37 96 11 83 39 99 05 16 23 27 10 67 02 25 44 11 55 31 46 64 41 56 44 74 26 81 51 31 45 85 87 09 81 95 22 28 76 69 46 48 64 87 67 76 27 89 31 11 74 16 62 03 60 94 42 47 09 34 94 93 72 70 | 56 18 90 18 42 17 42 32 14 86 06 53 33 95 99 35 29 15 44 20 49 59 25 54 34 59 84 21 23 54 35 90 78 16 93 13 37 88 54 19 86 67 68 55 66 84 65 42 98 37 87 56 33 28 58 38 28 38 66 27 52 21 81 15 08 22 97 32 85 27 71 | 91 53 40 28 13 34 91 25 01 63 50 37 22 49 71 58 32 28 30 18 68 94 23 83 63 62 94 76 80 41 90 22 82 52 29 12 18 56 10 08 35 14 37 57 23 65 67 40 72 39 93 39 70 89 40 34 07 46 94 22 20 05 53 64 56 30 05 56 61 88 27 72 | 23 95 11 12 37 69 68 24 66 10 87 70 43 50 75 07 62 41 83 58 95 93 89 79 45 39 02 22 05 22 95 43 62 11 68 29 17 40 26 44 25 71 87 16 70 85 19 25 59 94 90 41 41 80 61 70 55 60 84 33 95 76 42 63 15 09 03 40 38 12 03 32 73 | 09 84 56 80 61 55 85 97 16 94 82 94 98 57 84 30 84 48 93 90 71 05 95 90 73 17 30 98 40 64 65 89 07 79 09 19 56 36 42 30 23 69 73 72 07 05 27 61 24 31 43 48 71 84 21 28 26 65 65 59 65 74 77 20 10 81 61 84 95 08 52 23 70 74 | 47 81 28 09 98 51 67 64 35 51 59 36 92 82 77 65 80 24 72 53 22 07 27 10 21 28 30 22 48 82 80 48 56 20 14 43 18 25 50 95 90 31 77 08 09 48 44 80 90 22 93 45 82 17 13 96 25 26 08 73 34 99 06 49 24 06 83 51 40 14 15 10 25 01 75 | 54 25 10 81 30 64 24 74 75 80 36 75 82 60 22 69 72 91 45 67 03 62 79 54 89 74 44 83 64 96 66 73 44 30 74 50 37 05 09 97 70 01 60 46 37 91 39 75 75 18 58 52 72 78 51 81 86 52 08 97 01 46 43 66 98 62 81 18 70 93 73 08 32 46 34 76 | 96 80 82 07 59 71 92 53 19 20 88 66 03 26 26 10 24 27 50 82 94 73 63 08 51 33 22 45 19 13 58 33 90 15 22 50 36 13 55 06 35 47 82 52 33 61 36 27 28 46 98 14 73 20 73 32 16 26 80 53 47 66 76 38 94 45 02 01 22 52 47 96 64 58 52 39 77 | 88 46 23 39 74 63 81 64 20 90 33 33 76 55 58 26 10 46 42 26 74 74 12 83 32 43 09 02 73 55 86 54 85 34 28 23 29 79 91 62 47 41 82 87 99 22 48 90 20 05 96 75 95 04 43 28 81 39 81 01 28 42 78 25 39 77 90 57 58 98 17 36 73 22 63 74 51 78 | 29 39 74 94 95 78 64 24 38 86 63 87 93 06 70 92 22 16 80 64 29 52 20 27 23 50 14 13 87 15 72 96 81 22 08 49 72 30 70 24 79 31 16 64 59 21 89 34 96 91 48 76 43 53 88 01 57 80 23 81 90 79 58 01 80 87 17 99 86 90 72 63 32 69 14 28 88 69 79 | 37 17 71 95 56 93 71 35 43 45 04 98 92 94 84 96 11 30 31 27 31 60 92 03 48 05 98 91 86 94 35 90 90 08 48 19 33 28 68 37 59 26 65 96 50 68 22 07 09 49 34 31 77 49 43 06 75 17 81 87 61 79 52 26 27 72 29 50 07 98 86 01 17 10 46 64 24 18 56 80 | 51 30 25 94 88 85 79 91 40 33 63 84 49 67 98 92 15 26 75 19 82 05 18 78 65 93 61 48 91 43 59 41 70 51 22 15 92 81 67 91 46 98 11 11 65 31 66 10 98 65 83 21 05 56 05 98 73 67 46 74 69 34 08 30 05 52 07 98 32 95 30 94 65 50 24 63 28 81 99 57 81 | 19 23 61 36 09 89 71 98 65 17 30 29 89 26 79 74 94 11 44 48 97 54 81 55 39 66 69 45 28 47 13 86 15 76 74 70 84 32 36 33 79 20 78 14 41 47 89 28 81 05 99 66 81 86 38 26 06 25 13 60 54 55 23 53 27 05 89 25 23 11 13 54 59 54 56 34 16 24 53 44 06 82 | 13 40 57 72 21 15 60 08 04 19 11 98 34 45 09 97 86 71 03 15 56 19 15 44 97 31 90 04 87 87 76 08 12 30 24 62 84 28 12 85 82 53 99 52 13 94 06 65 97 86 09 50 94 68 69 74 30 67 87 94 63 07 78 27 80 36 69 41 06 92 32 78 37 82 30 05 18 87 99 72 19 99 83 | 44 20 55 77 69 91 27 31 28 81 80 27 02 07 97 23 95 98 12 25 75 29 47 71 07 47 78 39 41 59 27 76 13 15 66 61 68 35 69 86 16 53 67 63 99 85 41 56 08 28 33 40 94 76 90 85 31 70 24 65 84 65 99 82 19 25 54 37 21 46 33 02 52 99 51 33 26 04 87 02 08 18 96 84 | 54 42 61 45 91 06 64 79 80 82 32 16 83 63 42 49 19 78 65 97 40 42 14 61 49 34 04 18 25 98 59 30 82 72 26 88 54 36 21 75 03 88 99 53 46 51 55 78 22 94 34 40 68 87 84 25 30 76 25 08 92 84 42 61 40 38 09 99 40 23 29 39 46 55 10 90 35 84 56 70 63 23 91 39 85 | 52 92 03 71 89 07 09 37 68 66 58 20 44 92 51 56 13 71 79 99 26 37 02 06 16 67 36 52 58 16 79 73 56 60 59 27 44 77 94 82 20 50 98 33 09 87 94 37 40 83 64 83 58 85 17 76 53 02 83 52 22 27 39 20 48 92 45 21 09 42 24 23 12 37 52 28 50 78 79 20 86 62 73 20 59 86 | 54 96 80 15 91 90 99 70 10 09 58 90 93 50 81 99 54 38 36 10 30 11 35 84 16 45 82 18 11 97 36 43 96 79 97 65 40 48 23 19 17 31 64 52 65 65 37 32 65 76 99 79 34 65 79 27 55 33 03 01 33 27 61 28 66 08 04 70 49 46 48 83 01 45 19 96 13 81 14 21 31 79 93 85 50 05 87 | 92 92 48 84 59 98 31 53 23 27 15 22 79 95 24 76 05 79 16 93 97 89 38 89 42 83 02 88 94 95 82 21 01 97 48 39 31 78 09 65 50 56 97 61 01 07 65 27 21 23 14 15 80 97 44 78 49 35 33 45 81 74 34 05 31 57 09 38 94 07 69 54 69 32 65 68 46 68 78 90 24 28 49 51 45 86 35 88 | 41 63 89 76 87 31 86 09 46 14 87 82 22 29 47 16 13 10 70 72 82 95 48 64 58 43 13 75 42 69 21 12 67 13 64 85 58 23 98 09 37 76 05 22 31 12 66 50 29 99 86 72 45 25 10 28 19 06 90 43 29 31 67 79 46 25 74 14 97 35 76 37 65 46 23 82 06 22 30 76 93 66 94 17 96 13 20 72 89 | 63 40 78 08 52 09 90 41 70 28 36 14 46 44 85 96 24 52 58 15 87 37 05 98 99 39 13 61 76 38 44 99 83 74 90 22 53 80 56 98 30 51 63 39 44 30 91 91 04 22 27 73 17 35 53 18 35 45 54 56 27 78 48 13 69 36 44 38 71 25 30 56 15 22 73 43 32 69 59 25 93 83 45 11 34 94 44 39 92 90 | 12 36 56 88 13 96 16 12 55 54 11 47 19 78 17 17 68 81 77 51 42 55 99 85 66 27 81 79 93 42 65 61 69 74 14 01 18 56 12 01 58 37 91 22 42 66 83 25 19 04 96 41 25 45 18 69 96 88 36 93 10 12 98 32 44 83 83 04 72 91 04 27 73 07 34 37 71 60 59 31 01 54 54 44 96 93 83 36 04 45 91 | 30 18 22 20 42 96 65 79 17 41 55 69 94 81 29 80 91 31 85 25 47 26 43 49 02 99 34 67 99 76 16 14 15 93 08 32 99 44 61 77 67 50 43 55 87 55 53 72 17 46 62 25 50 99 73 05 93 48 17 31 70 80 59 09 44 59 45 13 74 66 58 94 87 73 16 14 85 38 74 99 64 23 79 28 71 42 20 37 82 31 23 92 | 51 96 39 65 46 71 56 13 29 68 53 86 45 33 51 49 12 91 21 21 76 85 02 17 98 15 46 12 60 21 88 30 92 83 44 59 42 50 27 88 46 86 94 73 45 54 23 24 14 10 94 21 20 34 23 51 04 83 99 75 90 63 60 16 22 33 83 70 11 32 10 50 29 30 83 46 11 05 31 17 86 42 49 01 44 63 28 60 07 78 95 40 93 | 44 61 89 59 04 49 51 27 69 71 46 76 44 04 09 34 56 39 15 06 94 91 75 90 65 27 56 23 74 06 23 33 36 69 14 39 05 34 35 57 33 22 76 46 56 10 61 65 98 09 16 69 04 62 65 18 99 76 49 18 72 66 73 83 82 40 76 31 89 91 27 88 17 35 41 35 32 51 32 67 52 68 74 85 80 57 07 11 62 66 47 22 67 94 | 65 37 19 97 26 17 16 24 24 17 50 37 64 82 24 36 32 11 68 34 69 31 32 89 79 93 96 68 49 90 14 23 04 04 67 99 81 74 70 74 36 96 68 09 64 39 88 35 54 89 96 58 66 27 88 97 32 14 06 35 78 20 71 06 85 66 57 02 58 91 72 05 29 56 73 48 86 52 09 93 22 57 79 42 12 01 31 68 17 59 63 76 07 77 95 | 73 81 14 13 17 20 11 09 01 83 08 85 91 70 84 63 62 77 37 07 47 01 59 95 39 69 39 21 99 09 87 02 97 16 92 36 74 71 90 66 33 73 73 75 52 91 11 12 26 53 05 26 26 48 61 50 90 65 01 87 42 47 74 35 22 73 24 26 56 70 52 05 48 41 31 18 83 27 21 39 80 85 26 08 44 02 71 07 63 22 05 52 19 08 20 96 | 17 25 21 11 72 93 33 49 64 23 53 82 03 13 91 65 85 02 40 05 42 31 77 42 05 36 06 54 04 58 07 76 87 83 25 57 66 12 74 33 85 37 74 32 20 69 03 97 91 68 82 44 19 14 89 28 85 85 80 53 34 87 58 98 88 78 48 65 98 40 11 57 10 67 70 81 60 79 74 72 97 59 79 47 30 20 54 80 89 91 14 05 33 36 79 39 97 | 60 85 59 39 60 07 57 76 77 92 06 35 15 72 23 41 45 52 95 18 64 79 86 53 56 31 69 11 91 31 84 50 44 82 22 81 41 40 30 42 30 91 48 94 74 76 64 58 74 25 96 57 14 19 03 99 28 83 15 75 99 01 89 85 79 50 03 95 32 67 44 08 07 41 62 64 29 20 14 76 26 55 48 71 69 66 19 72 44 25 14 01 48 74 12 98 07 98 | 64 66 84 24 18 16 27 48 20 14 47 69 30 86 48 40 23 16 61 21 51 50 26 47 35 33 91 28 78 64 43 68 04 79 51 08 19 60 52 95 06 68 46 86 35 97 27 58 04 65 30 58 99 12 12 75 91 39 50 31 42 64 70 04 46 07 98 73 98 93 37 89 77 91 64 71 64 65 66 21 78 62 81 74 42 20 83 70 73 95 78 45 92 27 34 53 71 15 99 | 30 11 85 31 34 71 13 48 05 14 44 03 19 67 23 73 19 57 06 90 94 72 57 69 81 62 59 68 88 57 55 69 49 13 07 87 97 80 89 05 71 05 05 26 38 40 16 62 45 99 18 38 98 24 21 26 62 74 69 04 85 57 77 35 58 67 91 79 79 57 86 28 66 34 72 51 76 78 36 95 63 90 08 78 47 63 45 31 22 70 52 48 79 94 15 77 61 67 68 100 | 23 33 44 81 80 92 93 75 94 88 23 61 39 76 22 03 28 94 32 06 49 65 41 34 18 23 08 47 62 60 03 63 33 13 80 52 31 54 73 43 70 26 16 69 57 87 83 31 03 93 70 81 47 95 77 44 29 68 39 51 56 59 63 07 25 70 07 77 43 53 64 03 94 42 95 39 18 01 66 21 16 97 20 50 90 16 70 10 95 69 29 06 25 61 41 26 15 59 63 35 101 | -------------------------------------------------------------------------------- /EulerPy/data/resources/words.txt: -------------------------------------------------------------------------------- 1 | "A","ABILITY","ABLE","ABOUT","ABOVE","ABSENCE","ABSOLUTELY","ACADEMIC","ACCEPT","ACCESS","ACCIDENT","ACCOMPANY","ACCORDING","ACCOUNT","ACHIEVE","ACHIEVEMENT","ACID","ACQUIRE","ACROSS","ACT","ACTION","ACTIVE","ACTIVITY","ACTUAL","ACTUALLY","ADD","ADDITION","ADDITIONAL","ADDRESS","ADMINISTRATION","ADMIT","ADOPT","ADULT","ADVANCE","ADVANTAGE","ADVICE","ADVISE","AFFAIR","AFFECT","AFFORD","AFRAID","AFTER","AFTERNOON","AFTERWARDS","AGAIN","AGAINST","AGE","AGENCY","AGENT","AGO","AGREE","AGREEMENT","AHEAD","AID","AIM","AIR","AIRCRAFT","ALL","ALLOW","ALMOST","ALONE","ALONG","ALREADY","ALRIGHT","ALSO","ALTERNATIVE","ALTHOUGH","ALWAYS","AMONG","AMONGST","AMOUNT","AN","ANALYSIS","ANCIENT","AND","ANIMAL","ANNOUNCE","ANNUAL","ANOTHER","ANSWER","ANY","ANYBODY","ANYONE","ANYTHING","ANYWAY","APART","APPARENT","APPARENTLY","APPEAL","APPEAR","APPEARANCE","APPLICATION","APPLY","APPOINT","APPOINTMENT","APPROACH","APPROPRIATE","APPROVE","AREA","ARGUE","ARGUMENT","ARISE","ARM","ARMY","AROUND","ARRANGE","ARRANGEMENT","ARRIVE","ART","ARTICLE","ARTIST","AS","ASK","ASPECT","ASSEMBLY","ASSESS","ASSESSMENT","ASSET","ASSOCIATE","ASSOCIATION","ASSUME","ASSUMPTION","AT","ATMOSPHERE","ATTACH","ATTACK","ATTEMPT","ATTEND","ATTENTION","ATTITUDE","ATTRACT","ATTRACTIVE","AUDIENCE","AUTHOR","AUTHORITY","AVAILABLE","AVERAGE","AVOID","AWARD","AWARE","AWAY","AYE","BABY","BACK","BACKGROUND","BAD","BAG","BALANCE","BALL","BAND","BANK","BAR","BASE","BASIC","BASIS","BATTLE","BE","BEAR","BEAT","BEAUTIFUL","BECAUSE","BECOME","BED","BEDROOM","BEFORE","BEGIN","BEGINNING","BEHAVIOUR","BEHIND","BELIEF","BELIEVE","BELONG","BELOW","BENEATH","BENEFIT","BESIDE","BEST","BETTER","BETWEEN","BEYOND","BIG","BILL","BIND","BIRD","BIRTH","BIT","BLACK","BLOCK","BLOOD","BLOODY","BLOW","BLUE","BOARD","BOAT","BODY","BONE","BOOK","BORDER","BOTH","BOTTLE","BOTTOM","BOX","BOY","BRAIN","BRANCH","BREAK","BREATH","BRIDGE","BRIEF","BRIGHT","BRING","BROAD","BROTHER","BUDGET","BUILD","BUILDING","BURN","BUS","BUSINESS","BUSY","BUT","BUY","BY","CABINET","CALL","CAMPAIGN","CAN","CANDIDATE","CAPABLE","CAPACITY","CAPITAL","CAR","CARD","CARE","CAREER","CAREFUL","CAREFULLY","CARRY","CASE","CASH","CAT","CATCH","CATEGORY","CAUSE","CELL","CENTRAL","CENTRE","CENTURY","CERTAIN","CERTAINLY","CHAIN","CHAIR","CHAIRMAN","CHALLENGE","CHANCE","CHANGE","CHANNEL","CHAPTER","CHARACTER","CHARACTERISTIC","CHARGE","CHEAP","CHECK","CHEMICAL","CHIEF","CHILD","CHOICE","CHOOSE","CHURCH","CIRCLE","CIRCUMSTANCE","CITIZEN","CITY","CIVIL","CLAIM","CLASS","CLEAN","CLEAR","CLEARLY","CLIENT","CLIMB","CLOSE","CLOSELY","CLOTHES","CLUB","COAL","CODE","COFFEE","COLD","COLLEAGUE","COLLECT","COLLECTION","COLLEGE","COLOUR","COMBINATION","COMBINE","COME","COMMENT","COMMERCIAL","COMMISSION","COMMIT","COMMITMENT","COMMITTEE","COMMON","COMMUNICATION","COMMUNITY","COMPANY","COMPARE","COMPARISON","COMPETITION","COMPLETE","COMPLETELY","COMPLEX","COMPONENT","COMPUTER","CONCENTRATE","CONCENTRATION","CONCEPT","CONCERN","CONCERNED","CONCLUDE","CONCLUSION","CONDITION","CONDUCT","CONFERENCE","CONFIDENCE","CONFIRM","CONFLICT","CONGRESS","CONNECT","CONNECTION","CONSEQUENCE","CONSERVATIVE","CONSIDER","CONSIDERABLE","CONSIDERATION","CONSIST","CONSTANT","CONSTRUCTION","CONSUMER","CONTACT","CONTAIN","CONTENT","CONTEXT","CONTINUE","CONTRACT","CONTRAST","CONTRIBUTE","CONTRIBUTION","CONTROL","CONVENTION","CONVERSATION","COPY","CORNER","CORPORATE","CORRECT","COS","COST","COULD","COUNCIL","COUNT","COUNTRY","COUNTY","COUPLE","COURSE","COURT","COVER","CREATE","CREATION","CREDIT","CRIME","CRIMINAL","CRISIS","CRITERION","CRITICAL","CRITICISM","CROSS","CROWD","CRY","CULTURAL","CULTURE","CUP","CURRENT","CURRENTLY","CURRICULUM","CUSTOMER","CUT","DAMAGE","DANGER","DANGEROUS","DARK","DATA","DATE","DAUGHTER","DAY","DEAD","DEAL","DEATH","DEBATE","DEBT","DECADE","DECIDE","DECISION","DECLARE","DEEP","DEFENCE","DEFENDANT","DEFINE","DEFINITION","DEGREE","DELIVER","DEMAND","DEMOCRATIC","DEMONSTRATE","DENY","DEPARTMENT","DEPEND","DEPUTY","DERIVE","DESCRIBE","DESCRIPTION","DESIGN","DESIRE","DESK","DESPITE","DESTROY","DETAIL","DETAILED","DETERMINE","DEVELOP","DEVELOPMENT","DEVICE","DIE","DIFFERENCE","DIFFERENT","DIFFICULT","DIFFICULTY","DINNER","DIRECT","DIRECTION","DIRECTLY","DIRECTOR","DISAPPEAR","DISCIPLINE","DISCOVER","DISCUSS","DISCUSSION","DISEASE","DISPLAY","DISTANCE","DISTINCTION","DISTRIBUTION","DISTRICT","DIVIDE","DIVISION","DO","DOCTOR","DOCUMENT","DOG","DOMESTIC","DOOR","DOUBLE","DOUBT","DOWN","DRAW","DRAWING","DREAM","DRESS","DRINK","DRIVE","DRIVER","DROP","DRUG","DRY","DUE","DURING","DUTY","EACH","EAR","EARLY","EARN","EARTH","EASILY","EAST","EASY","EAT","ECONOMIC","ECONOMY","EDGE","EDITOR","EDUCATION","EDUCATIONAL","EFFECT","EFFECTIVE","EFFECTIVELY","EFFORT","EGG","EITHER","ELDERLY","ELECTION","ELEMENT","ELSE","ELSEWHERE","EMERGE","EMPHASIS","EMPLOY","EMPLOYEE","EMPLOYER","EMPLOYMENT","EMPTY","ENABLE","ENCOURAGE","END","ENEMY","ENERGY","ENGINE","ENGINEERING","ENJOY","ENOUGH","ENSURE","ENTER","ENTERPRISE","ENTIRE","ENTIRELY","ENTITLE","ENTRY","ENVIRONMENT","ENVIRONMENTAL","EQUAL","EQUALLY","EQUIPMENT","ERROR","ESCAPE","ESPECIALLY","ESSENTIAL","ESTABLISH","ESTABLISHMENT","ESTATE","ESTIMATE","EVEN","EVENING","EVENT","EVENTUALLY","EVER","EVERY","EVERYBODY","EVERYONE","EVERYTHING","EVIDENCE","EXACTLY","EXAMINATION","EXAMINE","EXAMPLE","EXCELLENT","EXCEPT","EXCHANGE","EXECUTIVE","EXERCISE","EXHIBITION","EXIST","EXISTENCE","EXISTING","EXPECT","EXPECTATION","EXPENDITURE","EXPENSE","EXPENSIVE","EXPERIENCE","EXPERIMENT","EXPERT","EXPLAIN","EXPLANATION","EXPLORE","EXPRESS","EXPRESSION","EXTEND","EXTENT","EXTERNAL","EXTRA","EXTREMELY","EYE","FACE","FACILITY","FACT","FACTOR","FACTORY","FAIL","FAILURE","FAIR","FAIRLY","FAITH","FALL","FAMILIAR","FAMILY","FAMOUS","FAR","FARM","FARMER","FASHION","FAST","FATHER","FAVOUR","FEAR","FEATURE","FEE","FEEL","FEELING","FEMALE","FEW","FIELD","FIGHT","FIGURE","FILE","FILL","FILM","FINAL","FINALLY","FINANCE","FINANCIAL","FIND","FINDING","FINE","FINGER","FINISH","FIRE","FIRM","FIRST","FISH","FIT","FIX","FLAT","FLIGHT","FLOOR","FLOW","FLOWER","FLY","FOCUS","FOLLOW","FOLLOWING","FOOD","FOOT","FOOTBALL","FOR","FORCE","FOREIGN","FOREST","FORGET","FORM","FORMAL","FORMER","FORWARD","FOUNDATION","FREE","FREEDOM","FREQUENTLY","FRESH","FRIEND","FROM","FRONT","FRUIT","FUEL","FULL","FULLY","FUNCTION","FUND","FUNNY","FURTHER","FUTURE","GAIN","GAME","GARDEN","GAS","GATE","GATHER","GENERAL","GENERALLY","GENERATE","GENERATION","GENTLEMAN","GET","GIRL","GIVE","GLASS","GO","GOAL","GOD","GOLD","GOOD","GOVERNMENT","GRANT","GREAT","GREEN","GREY","GROUND","GROUP","GROW","GROWING","GROWTH","GUEST","GUIDE","GUN","HAIR","HALF","HALL","HAND","HANDLE","HANG","HAPPEN","HAPPY","HARD","HARDLY","HATE","HAVE","HE","HEAD","HEALTH","HEAR","HEART","HEAT","HEAVY","HELL","HELP","HENCE","HER","HERE","HERSELF","HIDE","HIGH","HIGHLY","HILL","HIM","HIMSELF","HIS","HISTORICAL","HISTORY","HIT","HOLD","HOLE","HOLIDAY","HOME","HOPE","HORSE","HOSPITAL","HOT","HOTEL","HOUR","HOUSE","HOUSEHOLD","HOUSING","HOW","HOWEVER","HUGE","HUMAN","HURT","HUSBAND","I","IDEA","IDENTIFY","IF","IGNORE","ILLUSTRATE","IMAGE","IMAGINE","IMMEDIATE","IMMEDIATELY","IMPACT","IMPLICATION","IMPLY","IMPORTANCE","IMPORTANT","IMPOSE","IMPOSSIBLE","IMPRESSION","IMPROVE","IMPROVEMENT","IN","INCIDENT","INCLUDE","INCLUDING","INCOME","INCREASE","INCREASED","INCREASINGLY","INDEED","INDEPENDENT","INDEX","INDICATE","INDIVIDUAL","INDUSTRIAL","INDUSTRY","INFLUENCE","INFORM","INFORMATION","INITIAL","INITIATIVE","INJURY","INSIDE","INSIST","INSTANCE","INSTEAD","INSTITUTE","INSTITUTION","INSTRUCTION","INSTRUMENT","INSURANCE","INTEND","INTENTION","INTEREST","INTERESTED","INTERESTING","INTERNAL","INTERNATIONAL","INTERPRETATION","INTERVIEW","INTO","INTRODUCE","INTRODUCTION","INVESTIGATE","INVESTIGATION","INVESTMENT","INVITE","INVOLVE","IRON","IS","ISLAND","ISSUE","IT","ITEM","ITS","ITSELF","JOB","JOIN","JOINT","JOURNEY","JUDGE","JUMP","JUST","JUSTICE","KEEP","KEY","KID","KILL","KIND","KING","KITCHEN","KNEE","KNOW","KNOWLEDGE","LABOUR","LACK","LADY","LAND","LANGUAGE","LARGE","LARGELY","LAST","LATE","LATER","LATTER","LAUGH","LAUNCH","LAW","LAWYER","LAY","LEAD","LEADER","LEADERSHIP","LEADING","LEAF","LEAGUE","LEAN","LEARN","LEAST","LEAVE","LEFT","LEG","LEGAL","LEGISLATION","LENGTH","LESS","LET","LETTER","LEVEL","LIABILITY","LIBERAL","LIBRARY","LIE","LIFE","LIFT","LIGHT","LIKE","LIKELY","LIMIT","LIMITED","LINE","LINK","LIP","LIST","LISTEN","LITERATURE","LITTLE","LIVE","LIVING","LOAN","LOCAL","LOCATION","LONG","LOOK","LORD","LOSE","LOSS","LOT","LOVE","LOVELY","LOW","LUNCH","MACHINE","MAGAZINE","MAIN","MAINLY","MAINTAIN","MAJOR","MAJORITY","MAKE","MALE","MAN","MANAGE","MANAGEMENT","MANAGER","MANNER","MANY","MAP","MARK","MARKET","MARRIAGE","MARRIED","MARRY","MASS","MASTER","MATCH","MATERIAL","MATTER","MAY","MAYBE","ME","MEAL","MEAN","MEANING","MEANS","MEANWHILE","MEASURE","MECHANISM","MEDIA","MEDICAL","MEET","MEETING","MEMBER","MEMBERSHIP","MEMORY","MENTAL","MENTION","MERELY","MESSAGE","METAL","METHOD","MIDDLE","MIGHT","MILE","MILITARY","MILK","MIND","MINE","MINISTER","MINISTRY","MINUTE","MISS","MISTAKE","MODEL","MODERN","MODULE","MOMENT","MONEY","MONTH","MORE","MORNING","MOST","MOTHER","MOTION","MOTOR","MOUNTAIN","MOUTH","MOVE","MOVEMENT","MUCH","MURDER","MUSEUM","MUSIC","MUST","MY","MYSELF","NAME","NARROW","NATION","NATIONAL","NATURAL","NATURE","NEAR","NEARLY","NECESSARILY","NECESSARY","NECK","NEED","NEGOTIATION","NEIGHBOUR","NEITHER","NETWORK","NEVER","NEVERTHELESS","NEW","NEWS","NEWSPAPER","NEXT","NICE","NIGHT","NO","NOBODY","NOD","NOISE","NONE","NOR","NORMAL","NORMALLY","NORTH","NORTHERN","NOSE","NOT","NOTE","NOTHING","NOTICE","NOTION","NOW","NUCLEAR","NUMBER","NURSE","OBJECT","OBJECTIVE","OBSERVATION","OBSERVE","OBTAIN","OBVIOUS","OBVIOUSLY","OCCASION","OCCUR","ODD","OF","OFF","OFFENCE","OFFER","OFFICE","OFFICER","OFFICIAL","OFTEN","OIL","OKAY","OLD","ON","ONCE","ONE","ONLY","ONTO","OPEN","OPERATE","OPERATION","OPINION","OPPORTUNITY","OPPOSITION","OPTION","OR","ORDER","ORDINARY","ORGANISATION","ORGANISE","ORGANIZATION","ORIGIN","ORIGINAL","OTHER","OTHERWISE","OUGHT","OUR","OURSELVES","OUT","OUTCOME","OUTPUT","OUTSIDE","OVER","OVERALL","OWN","OWNER","PACKAGE","PAGE","PAIN","PAINT","PAINTING","PAIR","PANEL","PAPER","PARENT","PARK","PARLIAMENT","PART","PARTICULAR","PARTICULARLY","PARTLY","PARTNER","PARTY","PASS","PASSAGE","PAST","PATH","PATIENT","PATTERN","PAY","PAYMENT","PEACE","PENSION","PEOPLE","PER","PERCENT","PERFECT","PERFORM","PERFORMANCE","PERHAPS","PERIOD","PERMANENT","PERSON","PERSONAL","PERSUADE","PHASE","PHONE","PHOTOGRAPH","PHYSICAL","PICK","PICTURE","PIECE","PLACE","PLAN","PLANNING","PLANT","PLASTIC","PLATE","PLAY","PLAYER","PLEASE","PLEASURE","PLENTY","PLUS","POCKET","POINT","POLICE","POLICY","POLITICAL","POLITICS","POOL","POOR","POPULAR","POPULATION","POSITION","POSITIVE","POSSIBILITY","POSSIBLE","POSSIBLY","POST","POTENTIAL","POUND","POWER","POWERFUL","PRACTICAL","PRACTICE","PREFER","PREPARE","PRESENCE","PRESENT","PRESIDENT","PRESS","PRESSURE","PRETTY","PREVENT","PREVIOUS","PREVIOUSLY","PRICE","PRIMARY","PRIME","PRINCIPLE","PRIORITY","PRISON","PRISONER","PRIVATE","PROBABLY","PROBLEM","PROCEDURE","PROCESS","PRODUCE","PRODUCT","PRODUCTION","PROFESSIONAL","PROFIT","PROGRAM","PROGRAMME","PROGRESS","PROJECT","PROMISE","PROMOTE","PROPER","PROPERLY","PROPERTY","PROPORTION","PROPOSE","PROPOSAL","PROSPECT","PROTECT","PROTECTION","PROVE","PROVIDE","PROVIDED","PROVISION","PUB","PUBLIC","PUBLICATION","PUBLISH","PULL","PUPIL","PURPOSE","PUSH","PUT","QUALITY","QUARTER","QUESTION","QUICK","QUICKLY","QUIET","QUITE","RACE","RADIO","RAILWAY","RAIN","RAISE","RANGE","RAPIDLY","RARE","RATE","RATHER","REACH","REACTION","READ","READER","READING","READY","REAL","REALISE","REALITY","REALIZE","REALLY","REASON","REASONABLE","RECALL","RECEIVE","RECENT","RECENTLY","RECOGNISE","RECOGNITION","RECOGNIZE","RECOMMEND","RECORD","RECOVER","RED","REDUCE","REDUCTION","REFER","REFERENCE","REFLECT","REFORM","REFUSE","REGARD","REGION","REGIONAL","REGULAR","REGULATION","REJECT","RELATE","RELATION","RELATIONSHIP","RELATIVE","RELATIVELY","RELEASE","RELEVANT","RELIEF","RELIGION","RELIGIOUS","RELY","REMAIN","REMEMBER","REMIND","REMOVE","REPEAT","REPLACE","REPLY","REPORT","REPRESENT","REPRESENTATION","REPRESENTATIVE","REQUEST","REQUIRE","REQUIREMENT","RESEARCH","RESOURCE","RESPECT","RESPOND","RESPONSE","RESPONSIBILITY","RESPONSIBLE","REST","RESTAURANT","RESULT","RETAIN","RETURN","REVEAL","REVENUE","REVIEW","REVOLUTION","RICH","RIDE","RIGHT","RING","RISE","RISK","RIVER","ROAD","ROCK","ROLE","ROLL","ROOF","ROOM","ROUND","ROUTE","ROW","ROYAL","RULE","RUN","RURAL","SAFE","SAFETY","SALE","SAME","SAMPLE","SATISFY","SAVE","SAY","SCALE","SCENE","SCHEME","SCHOOL","SCIENCE","SCIENTIFIC","SCIENTIST","SCORE","SCREEN","SEA","SEARCH","SEASON","SEAT","SECOND","SECONDARY","SECRETARY","SECTION","SECTOR","SECURE","SECURITY","SEE","SEEK","SEEM","SELECT","SELECTION","SELL","SEND","SENIOR","SENSE","SENTENCE","SEPARATE","SEQUENCE","SERIES","SERIOUS","SERIOUSLY","SERVANT","SERVE","SERVICE","SESSION","SET","SETTLE","SETTLEMENT","SEVERAL","SEVERE","SEX","SEXUAL","SHAKE","SHALL","SHAPE","SHARE","SHE","SHEET","SHIP","SHOE","SHOOT","SHOP","SHORT","SHOT","SHOULD","SHOULDER","SHOUT","SHOW","SHUT","SIDE","SIGHT","SIGN","SIGNAL","SIGNIFICANCE","SIGNIFICANT","SILENCE","SIMILAR","SIMPLE","SIMPLY","SINCE","SING","SINGLE","SIR","SISTER","SIT","SITE","SITUATION","SIZE","SKILL","SKIN","SKY","SLEEP","SLIGHTLY","SLIP","SLOW","SLOWLY","SMALL","SMILE","SO","SOCIAL","SOCIETY","SOFT","SOFTWARE","SOIL","SOLDIER","SOLICITOR","SOLUTION","SOME","SOMEBODY","SOMEONE","SOMETHING","SOMETIMES","SOMEWHAT","SOMEWHERE","SON","SONG","SOON","SORRY","SORT","SOUND","SOURCE","SOUTH","SOUTHERN","SPACE","SPEAK","SPEAKER","SPECIAL","SPECIES","SPECIFIC","SPEECH","SPEED","SPEND","SPIRIT","SPORT","SPOT","SPREAD","SPRING","STAFF","STAGE","STAND","STANDARD","STAR","START","STATE","STATEMENT","STATION","STATUS","STAY","STEAL","STEP","STICK","STILL","STOCK","STONE","STOP","STORE","STORY","STRAIGHT","STRANGE","STRATEGY","STREET","STRENGTH","STRIKE","STRONG","STRONGLY","STRUCTURE","STUDENT","STUDIO","STUDY","STUFF","STYLE","SUBJECT","SUBSTANTIAL","SUCCEED","SUCCESS","SUCCESSFUL","SUCH","SUDDENLY","SUFFER","SUFFICIENT","SUGGEST","SUGGESTION","SUITABLE","SUM","SUMMER","SUN","SUPPLY","SUPPORT","SUPPOSE","SURE","SURELY","SURFACE","SURPRISE","SURROUND","SURVEY","SURVIVE","SWITCH","SYSTEM","TABLE","TAKE","TALK","TALL","TAPE","TARGET","TASK","TAX","TEA","TEACH","TEACHER","TEACHING","TEAM","TEAR","TECHNICAL","TECHNIQUE","TECHNOLOGY","TELEPHONE","TELEVISION","TELL","TEMPERATURE","TEND","TERM","TERMS","TERRIBLE","TEST","TEXT","THAN","THANK","THANKS","THAT","THE","THEATRE","THEIR","THEM","THEME","THEMSELVES","THEN","THEORY","THERE","THEREFORE","THESE","THEY","THIN","THING","THINK","THIS","THOSE","THOUGH","THOUGHT","THREAT","THREATEN","THROUGH","THROUGHOUT","THROW","THUS","TICKET","TIME","TINY","TITLE","TO","TODAY","TOGETHER","TOMORROW","TONE","TONIGHT","TOO","TOOL","TOOTH","TOP","TOTAL","TOTALLY","TOUCH","TOUR","TOWARDS","TOWN","TRACK","TRADE","TRADITION","TRADITIONAL","TRAFFIC","TRAIN","TRAINING","TRANSFER","TRANSPORT","TRAVEL","TREAT","TREATMENT","TREATY","TREE","TREND","TRIAL","TRIP","TROOP","TROUBLE","TRUE","TRUST","TRUTH","TRY","TURN","TWICE","TYPE","TYPICAL","UNABLE","UNDER","UNDERSTAND","UNDERSTANDING","UNDERTAKE","UNEMPLOYMENT","UNFORTUNATELY","UNION","UNIT","UNITED","UNIVERSITY","UNLESS","UNLIKELY","UNTIL","UP","UPON","UPPER","URBAN","US","USE","USED","USEFUL","USER","USUAL","USUALLY","VALUE","VARIATION","VARIETY","VARIOUS","VARY","VAST","VEHICLE","VERSION","VERY","VIA","VICTIM","VICTORY","VIDEO","VIEW","VILLAGE","VIOLENCE","VISION","VISIT","VISITOR","VITAL","VOICE","VOLUME","VOTE","WAGE","WAIT","WALK","WALL","WANT","WAR","WARM","WARN","WASH","WATCH","WATER","WAVE","WAY","WE","WEAK","WEAPON","WEAR","WEATHER","WEEK","WEEKEND","WEIGHT","WELCOME","WELFARE","WELL","WEST","WESTERN","WHAT","WHATEVER","WHEN","WHERE","WHEREAS","WHETHER","WHICH","WHILE","WHILST","WHITE","WHO","WHOLE","WHOM","WHOSE","WHY","WIDE","WIDELY","WIFE","WILD","WILL","WIN","WIND","WINDOW","WINE","WING","WINNER","WINTER","WISH","WITH","WITHDRAW","WITHIN","WITHOUT","WOMAN","WONDER","WONDERFUL","WOOD","WORD","WORK","WORKER","WORKING","WORKS","WORLD","WORRY","WORTH","WOULD","WRITE","WRITER","WRITING","WRONG","YARD","YEAH","YEAR","YES","YESTERDAY","YET","YOU","YOUNG","YOUR","YOURSELF","YOUTH" -------------------------------------------------------------------------------- /EulerPy/data/solutions.txt: -------------------------------------------------------------------------------- 1 | 1. 233168 2 | 2. 4613732 3 | 3. 6857 4 | 4. 906609 5 | 5. 232792560 6 | 6. 25164150 7 | 7. 104743 8 | 8. 23514624000 9 | 9. 31875000 10 | 10. 142913828922 11 | 11. 70600674 12 | 12. 76576500 13 | 13. 5537376230 14 | 14. 837799 15 | 15. 137846528820 16 | 16. 1366 17 | 17. 21124 18 | 18. 1074 19 | 19. 171 20 | 20. 648 21 | 21. 31626 22 | 22. 871198282 23 | 23. 4179871 24 | 24. 2783915460 25 | 25. 4782 26 | 26. 983 27 | 27. -59231 28 | 28. 669171001 29 | 29. 9183 30 | 30. 443839 31 | 31. 73682 32 | 32. 45228 33 | 33. 100 34 | 34. 40730 35 | 35. 55 36 | 36. 872187 37 | 37. 748317 38 | 38. 932718654 39 | 39. 840 40 | 40. 210 41 | 41. 7652413 42 | 42. 162 43 | 43. 16695334890 44 | 44. 5482660 45 | 45. 1533776805 46 | 46. 5777 47 | 47. 134043 48 | 48. 9110846700 49 | 49. 296962999629 50 | 50. 997651 51 | 51. 121313 52 | 52. 142857 53 | 53. 4075 54 | 54. 376 55 | 55. 249 56 | 56. 972 57 | 57. 153 58 | 58. 26241 59 | 59. 129448 60 | 60. 26033 61 | 61. 28684 62 | 62. 127035954683 63 | 63. 49 64 | 64. 1322 65 | 65. 272 66 | 66. 661 67 | 67. 7273 68 | 68. 6531031914842725 69 | 69. 510510 70 | 70. 8319823 71 | 71. 428570 72 | 72. 303963552391 73 | 73. 7295372 74 | 74. 402 75 | 75. 161667 76 | 76. 190569291 77 | 77. 71 78 | 78. 55374 79 | 79. 73162890 80 | 80. 40886 81 | 81. 427337 82 | 82. 260324 83 | 83. 425185 84 | 84. 101524 85 | 85. 2772 86 | 86. 1818 87 | 87. 1097343 88 | 88. 7587457 89 | 89. 743 90 | 90. 1217 91 | 91. 14234 92 | 92. 8581146 93 | 93. 1258 94 | 94. 518408346 95 | 95. 14316 96 | 96. 24702 97 | 97. 8739992577 98 | 98. 18769 99 | 99. 709 100 | 100. 756872327473 101 | 101. 37076114526 102 | 102. 228 103 | 103. 20313839404245 104 | 104. 329468 105 | 105. 73702 106 | 106. 21384 107 | 107. 259679 108 | 108. 180180 109 | 109. 38182 110 | 110. 9350130049860600 111 | 111. 612407567715 112 | 112. 1587000 113 | 113. 51161058134250 114 | 114. 16475640049 115 | 115. 168 116 | 116. 20492570929 117 | 117. 100808458960497 118 | 118. 44680 119 | 119. 248155780267521 120 | 120. 333082500 121 | 121. 2269 122 | 122. 1582 123 | 123. 21035 124 | 124. 21417 125 | 125. 2906969179 126 | 126. 18522 127 | 127. 18407904 128 | 128. 14516824220 129 | 129. 1000023 130 | 130. 149253 131 | 131. 173 132 | 132. 843296 133 | 133. 453647705 134 | 134. 18613426663617118 135 | 135. 4989 136 | 136. 2544559 137 | 137. 1120149658760 138 | 138. 1118049290473932 139 | 139. 10057761 140 | 140. 5673835352990 141 | 141. 878454337159 142 | 142. 1006193 143 | 143. 30758397 144 | 144. 354 145 | 145. 608720 146 | 146. 676333270 147 | 147. 846910284 148 | 148. 2129970655314432 149 | 149. 52852124 150 | 150. -271248680 151 | 151. 0.464399 152 | 152. 301 153 | 153. 17971254122360635 154 | 154. 479742450 155 | 155. 3857447 156 | 156. 21295121502550 157 | 157. 53490 158 | 158. 409511334375 159 | 159. 14489159 160 | 160. 16576 161 | 161. 20574308184277971 162 | 162. 3D58725572C62302 163 | 163. 343047 164 | 164. 378158756814587 165 | 165. 2868868 166 | 166. 7130034 167 | 167. 3916160068885 168 | 168. 59206 169 | 169. 178653872807 170 | 170. 9857164023 171 | 171. 142989277 172 | 172. 227485267000992000 173 | 173. 1572729 174 | 174. 209566 175 | 175. 1,13717420,8 176 | 176. 96818198400000 177 | 177. 129325 178 | 178. 126461847755 179 | 179. 986262 180 | 180. 285196020571078987 181 | 181. 83735848679360680 182 | 182. 399788195976 183 | 183. 48861552 184 | 184. 1725323624056 185 | 185. 4640261571849533 186 | 186. 2325629 187 | 187. 17427258 188 | 188. 95962097 189 | 189. 10834893628237824 190 | 190. 371048281 191 | 191. 1918080160 192 | 192. 57060635927998347 193 | 193. 684465067343069 194 | 194. 61190912 195 | 195. 75085391 196 | 196. 322303240771079935 197 | 197. 1.710637717 198 | 198. 52374425 199 | 199. 0.00396087 200 | 200. 229161792008 201 | 201. 115039000 202 | 202. 1209002624 203 | 203. 34029210557338 204 | 204. 2944730 205 | 205. 0.5731441 206 | 206. 1389019170 207 | 207. 44043947822 208 | 208. 331951449665644800 209 | 209. 15964587728784 210 | 210. 1598174770174689458 211 | 211. 1922364685 212 | 212. 328968937309 213 | 213. 330.721154 214 | 214. 1677366278943 215 | 215. 806844323190414 216 | 216. 5437849 217 | 217. 6273134 218 | 218. 0 219 | 219. 64564225042 220 | 220. 139776,963904 221 | 221. 1884161251122450 222 | 222. 1590933 223 | 223. 61614848 224 | 224. 4137330 225 | 225. 2009 226 | 226. 0.11316017 227 | 227. 3780.618622 228 | 228. 86226 229 | 229. 11325263 230 | 230. 850481152593119296 231 | 231. 7526965179680 232 | 232. 0.83648556 233 | 233. 271204031455541309 234 | 234. 1259187438574927161 235 | 235. 1.002322108633 236 | 236. 123/59 237 | 237. 15836928 238 | 238. 9922545104535661 239 | 239. 0.001887854841 240 | 240. 7448717393364181966 241 | 241. 482316491800641154 242 | 242. 997104142249036713 243 | 243. 892371480 244 | 244. 96356848 245 | 245. 288084712410001 246 | 246. 810834388 247 | 247. 782252 248 | 248. 23507044290 249 | 249. 9275262564250418 250 | 250. 1425480602091519 251 | 251. 18946051 252 | 252. 104924.0 253 | 253. 11.492847 254 | 254. 8184523820510 255 | 255. 4.4474011180 256 | 256. 85765680 257 | 257. 139012411 258 | 258. 12747994 259 | 259. 20101196798 260 | 260. 167542057 261 | 261. 238890850232021 262 | 262. 2531.205 263 | 263. 2039506520 264 | 264. 2816417.1055 265 | 265. 209110240768 266 | 266. 1096883702440585 267 | 267. 0.999992836187 268 | 268. 785478606870985 269 | 269. 1311109198529286 270 | 270. 82282080 271 | 271. 4617456485273129588 272 | 272. 8495585919506151122 273 | 273. 2032447591196869022 274 | 274. 1601912348822 275 | 275. 15030564 276 | 276. 5777137137739632912 277 | 277. 1125977393124310 278 | 278. 1228215747273908452 279 | 279. 416577688 280 | 280. 430.088247 281 | 281. 1485776387445623 282 | 282. 1098988351 283 | 283. 28038042525570324 284 | 284. 5a411d7b 285 | 285. 157055.80999 286 | 286. 52.6494571953 287 | 287. 313135496 288 | 288. 605857431263981935 289 | 289. 6567944538 290 | 290. 20444710234716473 291 | 291. 4037526 292 | 292. 3600060866 293 | 293. 2209 294 | 294. 789184709 295 | 295. 4884650818 296 | 296. 1137208419 297 | 297. 2252639041804718029 298 | 298. 1.76882294 299 | 299. 549936643 300 | 300. 8.0540771484375 301 | 301. 2178309 302 | 302. 1170060 303 | 303. 1111981904675169 304 | 304. 283988410192 305 | 305. 18174995535140 306 | 306. 852938 307 | 307. 0.7311720251 308 | 308. 1539669807660924 309 | 309. 210139 310 | 310. 2586528661783 311 | 311. 2466018557 312 | 312. 324681947 313 | 313. 2057774861813004 314 | 314. 132.52756426 315 | 315. 13625242 316 | 316. 542934735751917735 317 | 317. 1856532.8455 318 | 318. 709313889 319 | 319. 268457129 320 | 320. 278157919195482643 321 | 321. 2470433131948040 322 | 322. 999998760323313995 323 | 323. 6.3551758451 324 | 324. 96972774 325 | 325. 54672965 326 | 326. 1966666166408794329 327 | 327. 34315549139516 328 | 328. 260511850222 329 | 329. 199740353/29386561536000 330 | 330. 15955822 331 | 331. 467178235146843549 332 | 332. 2717.751525 333 | 333. 3053105 334 | 334. 150320021261690835 335 | 335. 5032316 336 | 336. CAGBIHEFJDK 337 | 337. 85068035 338 | 338. 15614292 339 | 339. 19823.542204 340 | 340. 291504964 341 | 341. 56098610614277014 342 | 342. 5943040885644 343 | 343. 269533451410884183 344 | 344. 65579304332 345 | 345. 13938 346 | 346. 336108797689259276 347 | 347. 11109800204052 348 | 348. 1004195061 349 | 349. 115384615384614952 350 | 350. 84664213 351 | 351. 11762187201804552 352 | 352. 378563.260589 353 | 353. 1.2759860331 354 | 354. 58065134 355 | 355. 1726545007 356 | 356. 28010159 357 | 357. 1739023853137 358 | 358. 3284144505 359 | 359. 40632119 360 | 360. 878825614395267072 361 | 361. 178476944 362 | 362. 457895958010 363 | 363. 0.0000372091 364 | 364. 44855254 365 | 365. 162619462356610313 366 | 366. 88351299 367 | 367. 48271207 368 | 368. 253.6135092068 369 | 369. 862400558448 370 | 370. 41791929448408 371 | 371. 40.66368097 372 | 372. 301450082318807027 373 | 373. 727227472448913 374 | 374. 334420941 375 | 375. 7435327983715286168 376 | 376. 973059630185670 377 | 377. 732385277 378 | 378. 147534623725724718 379 | 379. 132314136838185 380 | 380. 6.3202e25093 381 | 381. 139602943319822 382 | 382. 697003956 383 | 383. 22173624649806 384 | 384. 3354706415856332783 385 | 385. 3776957309612153700 386 | 386. 528755790 387 | 387. 696067597313468 388 | 388. 831907372805129931 389 | 389. 2406376.3623 390 | 390. 2919133642971 391 | 391. 61029882288 392 | 392. 3.1486734435 393 | 393. 112398351350823112 394 | 394. 3.2370342194 395 | 395. 28.2453753155 396 | 396. 173214653 397 | 397. 141630459461893728 398 | 398. 2010.59096 399 | 399. 1508395636674243,6.5e27330467 400 | 400. 438505383468410633 401 | 401. 281632621 402 | 402. 356019862 403 | 403. 18224771 404 | 404. 1199215615081353 405 | 405. 237696125 406 | 406. 36813.12757207 407 | 407. 39782849136421 408 | 408. 299742733 409 | 409. 253223948 410 | 410. 799999783589946560 411 | 411. 9936352 412 | 412. 38788800 413 | 413. 3079418648040719 414 | 414. 552506775824935461 415 | 415. 55859742 416 | 416. 898082747 417 | 417. 446572970925740 418 | 418. 1177163565297340320 419 | 419. 998567458,1046245404,43363922 420 | 420. 145159332 421 | 421. 2304215802083466198 422 | 422. 92060460 423 | 423. 653972374 424 | 424. 1059760019628 425 | 425. 46479497324 426 | 426. 31591886008 427 | 427. 97138867 428 | 428. 747215561862 429 | 429. 98792821 430 | 430. 5000624921.38 431 | 431. 23.386029052 432 | 432. 754862080 433 | 433. 326624372659664 434 | 434. 863253606 435 | 435. 252541322550 436 | 436. 0.5276662759 437 | 437. 74204709657207 438 | 438. 439 | 439. 440 | 440. 441 | 441. 5000088.8395 442 | 442. 1295552661530920149 443 | 443. 2744233049300770 444 | 444. 1.200856722e263 445 | 445. 446 | 446. 447 | 447. 448 | 448. 106467648 449 | 449. 103.37870096 450 | 450. 451 | 451. 153651073760956 452 | 452. 345558983 453 | 453. 454 | 454. 5435004633092 455 | 455. 450186511399999 456 | 456. 333333208685971546 457 | 457. 2647787126797397063 458 | 458. 459 | 459. 460 | 460. 18.420738199 461 | 461. 159820276 462 | 462. 463 | 463. 808981553 464 | 464. 465 | 465. 466 | 466. 467 | 467. 468 | 468. 469 | 469. 0.56766764161831 470 | 470. 471 | 471. 472 | 472. 473 | 473. 35856681704365 474 | 474. 475 | 475. 75780067 476 | 476. 110242.87794 477 | -------------------------------------------------------------------------------- /EulerPy/euler.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import sys 5 | import subprocess 6 | from collections import OrderedDict 7 | 8 | import click 9 | 10 | from EulerPy import __version__ 11 | from EulerPy.problem import Problem 12 | from EulerPy.utils import clock, format_time, problem_glob 13 | 14 | 15 | # --cheat / -c 16 | def cheat(num): 17 | """View the answer to a problem.""" 18 | # Define solution before echoing in case solution does not exist 19 | solution = click.style(Problem(num).solution, bold=True) 20 | click.confirm("View answer to problem %i?" % num, abort=True) 21 | click.echo("The answer to problem {} is {}.".format(num, solution)) 22 | 23 | 24 | # --generate / -g 25 | def generate(num, prompt_default=True): 26 | """Generates Python file for a problem.""" 27 | p = Problem(num) 28 | 29 | problem_text = p.text 30 | 31 | msg = "Generate file for problem %i?" % num 32 | click.confirm(msg, default=prompt_default, abort=True) 33 | 34 | # Allow skipped problem files to be recreated 35 | if p.glob: 36 | filename = str(p.file) 37 | msg = '"{}" already exists. Overwrite?'.format(filename) 38 | click.confirm(click.style(msg, fg='red'), abort=True) 39 | else: 40 | # Try to keep prefix consistent with existing files 41 | previous_file = Problem(num - 1).file 42 | prefix = previous_file.prefix if previous_file else '' 43 | filename = p.filename(prefix=prefix) 44 | 45 | header = 'Project Euler Problem %i' % num 46 | divider = '=' * len(header) 47 | text = '\n'.join([header, divider, '', problem_text]) 48 | content = '\n'.join(['"""', text, '"""']) 49 | 50 | with open(filename, 'w') as f: 51 | f.write(content + '\n\n\n') 52 | 53 | click.secho('Successfully created "{}".'.format(filename), fg='green') 54 | 55 | # Copy over problem resources if required 56 | if p.resources: 57 | p.copy_resources() 58 | 59 | 60 | # --preview / -p 61 | def preview(num): 62 | """Prints the text of a problem.""" 63 | # Define problem_text before echoing in case problem does not exist 64 | problem_text = Problem(num).text 65 | click.secho("Project Euler Problem %i" % num, bold=True) 66 | click.echo(problem_text) 67 | 68 | 69 | # --skip / -s 70 | def skip(num): 71 | """Generates Python file for the next problem.""" 72 | click.echo("Current problem is problem %i." % num) 73 | generate(num + 1, prompt_default=False) 74 | Problem(num).file.change_suffix('-skipped') 75 | 76 | 77 | # --verify / -v 78 | def verify(num, filename=None, exit=True): 79 | """Verifies the solution to a problem.""" 80 | p = Problem(num) 81 | 82 | filename = filename or p.filename() 83 | 84 | if not os.path.isfile(filename): 85 | # Attempt to verify the first problem file matched by glob 86 | if p.glob: 87 | filename = str(p.file) 88 | else: 89 | click.secho('No file found for problem %i.' % p.num, fg='red') 90 | sys.exit(1) 91 | 92 | solution = p.solution 93 | click.echo('Checking "{}" against solution: '.format(filename), nl=False) 94 | 95 | cmd = (sys.executable or 'python', filename) 96 | start = clock() 97 | proc = subprocess.Popen(cmd, stdout=subprocess.PIPE) 98 | stdout = proc.communicate()[0] 99 | end = clock() 100 | time_info = format_time(start, end) 101 | 102 | # Return value of anything other than 0 indicates an error 103 | if proc.poll() != 0: 104 | click.secho('Error calling "{}".'.format(filename), fg='red') 105 | click.secho(time_info, fg='cyan') 106 | 107 | # Return None if option is not --verify-all, otherwise exit 108 | return sys.exit(1) if exit else None 109 | 110 | # Decode output if returned as bytes (Python 3) 111 | if isinstance(stdout, bytes): 112 | output = stdout.decode('ascii') 113 | 114 | # Split output lines into array; make empty output more readable 115 | output_lines = output.splitlines() if output else ['[no output]'] 116 | 117 | # If output is multi-lined, print the first line of the output on a 118 | # separate line from the "checking against solution" message, and 119 | # skip the solution check (multi-line solution won't be correct) 120 | if len(output_lines) > 1: 121 | is_correct = False 122 | click.echo() # force output to start on next line 123 | click.secho('\n'.join(output_lines), bold=True, fg='red') 124 | else: 125 | is_correct = output_lines[0] == solution 126 | fg_colour = 'green' if is_correct else 'red' 127 | click.secho(output_lines[0], bold=True, fg=fg_colour) 128 | 129 | click.secho(time_info, fg='cyan') 130 | 131 | # Remove any suffix from the filename if its solution is correct 132 | if is_correct: 133 | p.file.change_suffix('') 134 | 135 | # Exit here if answer was incorrect, otherwise return is_correct value 136 | return sys.exit(1) if exit and not is_correct else is_correct 137 | 138 | 139 | # --verify-all 140 | def verify_all(num): 141 | """ 142 | Verifies all problem files in the current directory and 143 | prints an overview of the status of each problem. 144 | """ 145 | 146 | # Define various problem statuses 147 | keys = ('correct', 'incorrect', 'error', 'skipped', 'missing') 148 | symbols = ('C', 'I', 'E', 'S', '.') 149 | colours = ('green', 'red', 'yellow', 'cyan', 'white') 150 | 151 | status = OrderedDict( 152 | (key, click.style(symbol, fg=colour, bold=True)) 153 | for key, symbol, colour in zip(keys, symbols, colours) 154 | ) 155 | 156 | overview = {} 157 | 158 | # Search through problem files using glob module 159 | files = problem_glob() 160 | 161 | # No Project Euler files in the current directory 162 | if not files: 163 | click.echo("No Project Euler files found in the current directory.") 164 | sys.exit(1) 165 | 166 | for file in files: 167 | # Catch KeyboardInterrupt during verification to allow the user to 168 | # skip the verification of a specific problem if it takes too long 169 | try: 170 | is_correct = verify(file.num, filename=str(file), exit=False) 171 | except KeyboardInterrupt: 172 | overview[file.num] = status['skipped'] 173 | else: 174 | if is_correct is None: # error was returned by problem file 175 | overview[file.num] = status['error'] 176 | elif is_correct: 177 | overview[file.num] = status['correct'] 178 | elif not is_correct: 179 | overview[file.num] = status['incorrect'] 180 | 181 | # Attempt to add "skipped" suffix to the filename if the 182 | # problem file is not the current problem. This is useful 183 | # when the --verify-all is used in a directory containing 184 | # files generated pre-v1.1 (before files with suffixes) 185 | if file.num != num: 186 | file.change_suffix('-skipped') 187 | 188 | # Separate each verification with a newline 189 | click.echo() 190 | 191 | # Print overview of the status of each problem 192 | legend = ', '.join('{} = {}'.format(v, k) for k, v in status.items()) 193 | 194 | click.echo('-' * 63) 195 | click.echo(legend + '\n') 196 | 197 | # Rows needed for overview is based on the current problem number 198 | num_of_rows = (num + 19) // 20 199 | 200 | for row in range(1, num_of_rows + 1): 201 | low, high = (row * 20) - 19, (row * 20) 202 | click.echo("Problems {:03d}-{:03d}: ".format(low, high), nl=False) 203 | 204 | for problem in range(low, high + 1): 205 | # Add missing status to problems with no corresponding file 206 | status = overview[problem] if problem in overview else '.' 207 | 208 | # Separate problem indicators into groups of 5 209 | spacer = ' ' if (problem % 5 == 0) else ' ' 210 | 211 | # Start a new line at the end of each row 212 | click.secho(status + spacer, nl=(problem % 20 == 0)) 213 | 214 | click.echo() 215 | 216 | 217 | def euler_options(fn): 218 | """Decorator to link CLI options with their appropriate functions""" 219 | euler_functions = cheat, generate, preview, skip, verify, verify_all 220 | 221 | # Reverse functions to print help page options in alphabetical order 222 | for option in reversed(euler_functions): 223 | name, docstring = option.__name__, option.__doc__ 224 | kwargs = {'flag_value': option, 'help': docstring} 225 | 226 | # Apply flag(s) depending on whether or not name is a single word 227 | flag = '--%s' % name.replace('_', '-') 228 | flags = [flag] if '_' in name else [flag, '-%s' % name[0]] 229 | 230 | fn = click.option('option', *flags, **kwargs)(fn) 231 | 232 | return fn 233 | 234 | 235 | @click.command(name='euler', options_metavar='[OPTION]') 236 | @click.argument('problem', default=0, type=click.IntRange(0, None)) 237 | @euler_options 238 | @click.version_option(version=__version__, message="EulerPy %(version)s") 239 | def main(option, problem): 240 | """Python-based Project Euler command line tool.""" 241 | # No problem given (or given option ignores the problem argument) 242 | if problem == 0 or option in {skip, verify_all}: 243 | # Determine the highest problem number in the current directory 244 | files = problem_glob() 245 | problem = max(file.num for file in files) if files else 0 246 | 247 | # No Project Euler files in current directory (no glob results) 248 | if problem == 0: 249 | # Generate the first problem file if option is appropriate 250 | if option not in {cheat, preview, verify_all}: 251 | msg = "No Project Euler files found in the current directory." 252 | click.echo(msg) 253 | option = generate 254 | 255 | # Set problem number to 1 256 | problem = 1 257 | 258 | # --preview and no problem; preview the next problem 259 | elif option is preview: 260 | problem += 1 261 | 262 | # No option and no problem; generate next file if answer is 263 | # correct (verify() will exit if the solution is incorrect) 264 | if option is None: 265 | verify(problem) 266 | problem += 1 267 | option = generate 268 | 269 | # Problem given but no option; decide between generate and verify 270 | elif option is None: 271 | option = verify if Problem(problem).glob else generate 272 | 273 | # Execute function based on option 274 | option(problem) 275 | sys.exit(0) 276 | -------------------------------------------------------------------------------- /EulerPy/problem.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import re 5 | import sys 6 | import glob 7 | import json 8 | import linecache 9 | import shutil 10 | 11 | import click 12 | 13 | 14 | # Filenames follow the format (prefix, number, suffix, extension) 15 | BASE_NAME = '{}{:03d}{}{}' 16 | FILE_RE = re.compile(r'(.*)(\d{3})(.*)(\.\w+)') 17 | 18 | EULER_DATA = os.path.join(os.path.dirname(__file__), 'data') 19 | 20 | class Problem(object): 21 | """Represents a Project Euler problem of a given problem number""" 22 | def __init__(self, problem_number): 23 | self.num = problem_number 24 | 25 | def filename(self, prefix='', suffix='', extension='.py'): 26 | """Returns filename padded with leading zeros""" 27 | return BASE_NAME.format(prefix, self.num, suffix, extension) 28 | 29 | @property 30 | def glob(self): 31 | """Returns a sorted glob of files belonging to a given problem""" 32 | file_glob = glob.glob(BASE_NAME.format('*', self.num, '*', '.*')) 33 | 34 | # Sort globbed files by tuple (filename, extension) 35 | return sorted(file_glob, key=lambda f: os.path.splitext(f)) 36 | 37 | @property 38 | def file(self): 39 | """Returns a ProblemFile instance of the first matching file""" 40 | return ProblemFile(self.glob[0]) if self.glob else None 41 | 42 | @property 43 | def resources(self): 44 | """Returns a list of resources related to the problem (or None)""" 45 | with open(os.path.join(EULER_DATA, 'resources.json')) as data_file: 46 | data = json.load(data_file) 47 | 48 | problem_num = str(self.num) 49 | 50 | if problem_num in data: 51 | files = data[problem_num] 52 | 53 | # Ensure a list of files is returned 54 | return files if isinstance(files, list) else [files] 55 | else: 56 | return None 57 | 58 | def copy_resources(self): 59 | """Copies the relevant resources to a resources subdirectory""" 60 | if not os.path.isdir('resources'): 61 | os.mkdir('resources') 62 | 63 | resource_dir = os.path.join(os.getcwd(), 'resources', '') 64 | copied_resources = [] 65 | 66 | for resource in self.resources: 67 | src = os.path.join(EULER_DATA, 'resources', resource) 68 | if os.path.isfile(src): 69 | shutil.copy(src, resource_dir) 70 | copied_resources.append(resource) 71 | 72 | if copied_resources: 73 | copied = ', '.join(copied_resources) 74 | path = os.path.relpath(resource_dir, os.pardir) 75 | msg = "Copied {} to {}.".format(copied, path) 76 | 77 | click.secho(msg, fg='green') 78 | 79 | @property 80 | def solution(self): 81 | """Returns the answer to a given problem""" 82 | num = self.num 83 | 84 | solution_file = os.path.join(EULER_DATA, 'solutions.txt') 85 | solution_line = linecache.getline(solution_file, num) 86 | 87 | try: 88 | answer = solution_line.split('. ')[1].strip() 89 | except IndexError: 90 | answer = None 91 | 92 | if answer: 93 | return answer 94 | else: 95 | msg = 'Answer for problem %i not found in solutions.txt.' % num 96 | click.secho(msg, fg='red') 97 | click.echo('If you have an answer, consider submitting a pull ' 98 | 'request to EulerPy on GitHub.') 99 | sys.exit(1) 100 | 101 | @property 102 | def text(self): 103 | """Parses problems.txt and returns problem text""" 104 | def _problem_iter(problem_num): 105 | problem_file = os.path.join(EULER_DATA, 'problems.txt') 106 | 107 | with open(problem_file) as f: 108 | is_problem = False 109 | last_line = '' 110 | 111 | for line in f: 112 | if line.strip() == 'Problem %i' % problem_num: 113 | is_problem = True 114 | 115 | if is_problem: 116 | if line == last_line == '\n': 117 | break 118 | else: 119 | yield line[:-1] 120 | last_line = line 121 | 122 | problem_lines = [line for line in _problem_iter(self.num)] 123 | 124 | if problem_lines: 125 | # First three lines are the problem number, the divider line, 126 | # and a newline, so don't include them in the returned string. 127 | # Also, strip the final newline. 128 | return '\n'.join(problem_lines[3:-1]) 129 | else: 130 | msg = 'Problem %i not found in problems.txt.' % self.num 131 | click.secho(msg, fg='red') 132 | click.echo('If this problem exists on Project Euler, consider ' 133 | 'submitting a pull request to EulerPy on GitHub.') 134 | sys.exit(1) 135 | 136 | 137 | class ProblemFile(object): 138 | """Represents a file that belongs to a given Project Euler problem""" 139 | def __init__(self, filename): 140 | self.filename = filename 141 | 142 | def __str__(self): 143 | return self.filename 144 | 145 | @property 146 | def _filename_parts(self): 147 | """Returns (prefix, number, suffix, extension)""" 148 | return FILE_RE.search(self.filename).groups() 149 | 150 | @property 151 | def prefix(self): 152 | return self._filename_parts[0] 153 | 154 | @property 155 | def str_num(self): 156 | return self._filename_parts[1] 157 | 158 | @property 159 | def suffix(self): 160 | return self._filename_parts[2] 161 | 162 | @property 163 | def extension(self): 164 | return self._filename_parts[3] 165 | 166 | @property 167 | def num(self): 168 | return int(self.str_num) 169 | 170 | def change_suffix(self, suffix): 171 | if suffix == self.suffix: 172 | return False 173 | 174 | new_name = self.prefix + self.str_num + suffix + self.extension 175 | os.rename(self.filename, new_name) 176 | 177 | msg = 'Renamed "{}" to "{}".'.format(self.filename, new_name) 178 | click.secho(msg, fg='yellow') 179 | self.filename = new_name 180 | 181 | return True 182 | -------------------------------------------------------------------------------- /EulerPy/utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from __future__ import unicode_literals 4 | 5 | import sys 6 | import glob 7 | import math 8 | 9 | from EulerPy.problem import ProblemFile 10 | 11 | 12 | def problem_glob(extension='.py'): 13 | """Returns ProblemFile objects for all valid problem files""" 14 | filenames = glob.glob('*[0-9][0-9][0-9]*{}'.format(extension)) 15 | return [ProblemFile(file) for file in filenames] 16 | 17 | # Use the resource module instead of time.clock() if possible (on Unix) 18 | try: 19 | import resource 20 | 21 | except ImportError: 22 | import time 23 | 24 | def clock(): 25 | """ 26 | Under Windows, system CPU time can't be measured. Return 27 | time.process_time() as user time and None as system time. 28 | """ 29 | # Legacy support for Python 3.2 and earlier. 30 | if sys.version_info < (3, 3, 0): 31 | return time.clock(), None 32 | 33 | return time.process_time(), None 34 | 35 | else: 36 | def clock(): 37 | """ 38 | Returns a tuple (t_user, t_system) since the start of the process. 39 | This is done via a call to resource.getrusage, so it avoids the 40 | wraparound problems in time.clock(). 41 | """ 42 | return resource.getrusage(resource.RUSAGE_CHILDREN)[:2] 43 | 44 | 45 | def human_time(timespan, precision=3): 46 | """Formats the timespan in a human readable format""" 47 | 48 | if timespan >= 60.0: 49 | # Format time greater than one minute in a human-readable format 50 | # Idea from http://snipplr.com/view/5713/ 51 | def _format_long_time(time): 52 | suffixes = ('d', 'h', 'm', 's') 53 | lengths = (24*60*60, 60*60, 60, 1) 54 | 55 | for suffix, length in zip(suffixes, lengths): 56 | value = int(time / length) 57 | 58 | if value > 0: 59 | time %= length 60 | yield '%i%s' % (value, suffix) 61 | 62 | if time < 1: 63 | break 64 | 65 | return ' '.join(_format_long_time(timespan)) 66 | 67 | else: 68 | units = ['s', 'ms', 'us', 'ns'] 69 | 70 | # Attempt to replace 'us' with 'µs' if UTF-8 encoding has been set 71 | if hasattr(sys.stdout, 'encoding') and sys.stdout.encoding == 'UTF-8': 72 | try: 73 | units[2] = b'\xc2\xb5s'.decode('utf-8') 74 | except UnicodeEncodeError: 75 | pass 76 | 77 | scale = [1.0, 1e3, 1e6, 1e9] 78 | 79 | if timespan > 0.0: 80 | # Determine scale of timespan (s = 0, ms = 1, µs = 2, ns = 3) 81 | order = min(-int(math.floor(math.log10(timespan)) // 3), 3) 82 | else: 83 | order = 3 84 | 85 | return '%.*g %s' % (precision, timespan * scale[order], units[order]) 86 | 87 | 88 | def format_time(start, end): 89 | """Returns string with relevant time information formatted properly""" 90 | try: 91 | cpu_usr = end[0] - start[0] 92 | cpu_sys = end[1] - start[1] 93 | 94 | except TypeError: 95 | # `clock()[1] == None` so subtraction results in a TypeError 96 | return 'Time elapsed: {}'.format(human_time(cpu_usr)) 97 | 98 | else: 99 | times = (human_time(x) for x in (cpu_usr, cpu_sys, cpu_usr + cpu_sys)) 100 | return 'Time elapsed: user: {}, sys: {}, total: {}'.format(*times) 101 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Kevin Yap 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include CHANGES.rst LICENSE README.rst requirements.txt 2 | graft EulerPy/data 3 | global-exclude .DS_Store 4 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | ********************************** 2 | EulerPy |Travis| |PyPI| |Homebrew| 3 | ********************************** 4 | 5 | EulerPy is a command line tool designed to streamline the process of solving 6 | Project Euler problems using Python. The package focuses on two main tasks: 7 | firstly, to create Python "template" files with a docstring containing the 8 | text of a Project Euler problem for ease-of-reference, and secondly, to check 9 | whether a problem has been solved correctly. 10 | 11 | 12 | ============ 13 | Installation 14 | ============ 15 | 16 | EulerPy can be installed (and updated) from PyPI using `pip`_: 17 | 18 | .. code-block:: bash 19 | 20 | $ pip install --upgrade EulerPy 21 | 22 | 23 | Conversely, it can be uninstalled using `pip`_ as well. 24 | 25 | .. code-block:: bash 26 | 27 | $ pip uninstall EulerPy 28 | 29 | 30 | Alternatively, OS X users can install EulerPy using `Homebrew`_: 31 | 32 | .. code-block:: bash 33 | 34 | $ brew install euler-py 35 | 36 | 37 | ===== 38 | Usage 39 | ===== 40 | 41 | First, you'll want to ``cd`` to the directory where your Project Euler files 42 | are being stored. 43 | 44 | .. code-block:: bash 45 | 46 | $ mkdir ~/project-euler 47 | $ cd ~/project-euler 48 | 49 | 50 | At this point, you'll probably want to run the ``euler`` command, which will 51 | prompt to create ``001.py``, a file containing the text to Project Euler problem 52 | #1 as its docstring. 53 | 54 | .. code-block:: bash 55 | 56 | $ euler 57 | No Project Euler files found in the current directory. 58 | Generate file for problem 1? [Y/n]: Y 59 | Successfully created "001.py". 60 | 61 | $ cat 001.py 62 | """ 63 | Project Euler Problem 1 64 | ======================= 65 | 66 | If we list all the natural numbers below 10 that are multiples of 3 or 5, 67 | we get 3, 5, 6 and 9. The sum of these multiples is 23. 68 | 69 | Find the sum of all the multiples of 3 or 5 below 1000. 70 | """ 71 | 72 | At this point, you can open up your editor of choice and code up a solution 73 | to the problem, making sure to ``print()`` the output. Once you feel that 74 | you've solved the problem, run the ``euler`` command again to verify your 75 | solution is correct. If the answer is correct, the solution will be printed 76 | in green and the script will ask to generate the next problem file. If 77 | incorrect, the solution will be printed in red instead. Additionally, the 78 | time elapsed during the solution-checking process will also be printed. 79 | 80 | .. code-block:: bash 81 | 82 | $ euler 83 | Checking "001.py" against solution: [no output] # (output in red) 84 | 85 | $ echo print 42 >> 001.py 86 | $ euler 87 | Checking "001.py" against solution: 42 # (output in green) 88 | Generate file for problem 2? [Y/n]: Y 89 | Successfully created "002.py". 90 | 91 | 92 | EulerPy also has a few command line options that act as different commands 93 | (use ``euler --help`` to see a summary of all the options). 94 | 95 | 96 | ``--cheat / -c`` 97 | ---------------- 98 | 99 | The ``--cheat`` option will print the answer to a problem after prompting 100 | the user to ensure that they want to see it. If no problem argument is given, 101 | it will print the answer to the problem that they are currently working on. 102 | 103 | .. code-block:: bash 104 | 105 | $ euler --cheat 106 | View answer to problem 2? [y/N]: Y 107 | The answer to problem 2 is . 108 | 109 | $ euler --cheat 100 110 | View answer to problem 100? [y/N]: Y 111 | The answer to problem 100 is . 112 | 113 | 114 | ``--generate / -g`` 115 | ------------------- 116 | 117 | The ``--generate`` option will create a Python file for the given problem 118 | number. If no problem number is given, it will overwrite the most recent 119 | problem with a file containing only the problem docstring (after prompting 120 | the user). 121 | 122 | .. code-block:: bash 123 | 124 | $ euler --generate 125 | Generate file for problem 2? [Y/n]: Y 126 | "002.py" already exists. Overwrite? [y/N]: 127 | Successfully created "002.py". 128 | 129 | $ euler --generate 5 130 | Generate file for problem 5? [Y/n]: n 131 | Aborted! 132 | 133 | ``euler `` is equivalent to ``euler --generate `` if the file 134 | **does not** exist. 135 | 136 | .. code-block:: bash 137 | 138 | $ cat 005.py 139 | cat: 005.py: No such file or directory 140 | 141 | $ euler 5 142 | Generate file for problem 5? [Y/n]: n 143 | Aborted! 144 | 145 | The file generation process will also automatically copy any relevant 146 | resource files to a ``resources`` subdirectory. 147 | 148 | .. code-block:: bash 149 | 150 | $ euler 22 151 | Generate file for problem 22? [Y/n]: Y 152 | Successfully created "022.py". 153 | Copied "names.txt" to project-euler/resources. 154 | 155 | 156 | ``--preview / -p`` 157 | ------------------ 158 | 159 | The ``--preview`` option will print the text of a given problem to the terminal; 160 | if no problem number is given, it will print the next problem instead. 161 | 162 | .. code-block:: bash 163 | 164 | $ euler --preview 165 | Project Euler Problem 3 166 | The prime factors of 13195 are 5, 7, 13 and 29. 167 | 168 | What is the largest prime factor of the number 600851475143? 169 | 170 | $ euler --preview 5 171 | Project Euler Problem 5 172 | 2520 is the smallest number that can be divided by each of the numbers 173 | from 1 to 10 without any remainder. 174 | 175 | What is the smallest number that is evenly divisible by all of the numbers 176 | from 1 to 20? 177 | 178 | 179 | ``--skip / -s`` 180 | --------------- 181 | 182 | The ``--skip`` option will prompt the user to "skip" to the next problem. As 183 | of EulerPy v1.1, it will also append a "skipped" suffix to the skipped problem 184 | file. 185 | 186 | .. code-block:: bash 187 | 188 | $ euler --skip 189 | Current problem is problem 2. 190 | Generate file for problem 3? [y/N]: Y 191 | Successfully created "003.py". 192 | Renamed "002.py" to "002-skipped.py". 193 | 194 | 195 | ``--verify / -v`` 196 | ----------------- 197 | 198 | The ``--verify`` option will check whether a given problem file outputs the 199 | correct solution to the problem. If no problem number is given, it will 200 | check the current problem. 201 | 202 | .. code-block:: bash 203 | 204 | $ euler --verify 205 | Checking "003.py" against solution: [no output] # (output in red) 206 | 207 | $ euler --verify 1 208 | Checking "001.py" against solution: # (output in green) 209 | 210 | As of EulerPy v1.1, verifying a skipped problem file will remove the "skipped" 211 | suffix from its filename. 212 | 213 | .. code-block:: bash 214 | 215 | $ euler --verify 2 216 | Checking "002-skipped.py" against solution: 217 | Renamed "002-skipped.py" to "002.py". 218 | 219 | ``euler `` is equivalent to ``euler --verify `` if the file 220 | **does** exist. 221 | 222 | .. code-block:: bash 223 | 224 | $ cat 001.py 225 | """ 226 | Project Euler Problem 1 227 | ======================= 228 | 229 | If we list all the natural numbers below 10 that are multiples of 3 or 5, 230 | we get 3, 5, 6 and 9. The sum of these multiples is 23. 231 | 232 | Find the sum of all the multiples of 3 or 5 below 1000. 233 | """ 234 | 235 | 236 | $ euler 1 237 | Checking "001.py" against solution: 238 | 239 | 240 | ``--verify-all`` 241 | ---------------- 242 | 243 | The ``--verify-all`` option was added in EulerPy v1.1. It essentially runs 244 | ``--verify`` on all the problem files it can find in the current directory, 245 | but also prints an overview of all of the problems in the directory. Note 246 | that if the verification encounters a ``KeyboardInterrupt`` exception, it will 247 | skip the verification of that specific file. This allows for the ability to 248 | skip verifying some files but not others, in the case that some solutions are 249 | taking too long to compute. 250 | 251 | .. code-block:: bash 252 | 253 | $ euler --verify-all 254 | Checking "001.py" against solution: 255 | 256 | Checking "002.py" against solution: ^C 257 | 258 | Checking "003.py" against solution: [no output] 259 | 260 | --------------------------------------------------------------- 261 | C = correct, I = incorrect, E = error, S = skipped, . = missing 262 | 263 | Problems 001-020: C S I . . . . . . . . . . . . . . . . . 264 | 265 | This option should be run after upgrading to v1.1 from EulerPy v1.0, as it will 266 | automatically rename any problems that have been skipped using ``--skip``, 267 | making them easy to distinguish from those that have been correctly solved. 268 | 269 | 270 | File Prefixes 271 | ------------- 272 | 273 | As of v1.3.0, EulerPy will attempt to keep the prefix of problem files 274 | consistent. The motivation behind this is that ``import 001`` results in a 275 | syntax error whereas ``import euler001`` is valid. By using the latter 276 | naming scheme, it is possible to reuse code written in previous files. 277 | 278 | .. code-block:: bash 279 | 280 | $ mv 003.py euler003.py 281 | 282 | $ euler --skip 283 | Current problem is problem 3. 284 | Generate file for problem 4? [y/N]: Y 285 | Successfully created "euler004.py". 286 | Renamed "euler003.py" to "euler003-skipped.py". 287 | 288 | 289 | ============ 290 | Contributing 291 | ============ 292 | 293 | See `CONTRIBUTING.rst`_. 294 | 295 | 296 | ============= 297 | Miscellaneous 298 | ============= 299 | 300 | The text for the problems in `problems.txt`_ were derived from Kyle Keen's 301 | `Local Euler`_ project, and the solutions in `solutions.txt`_ were derived 302 | from Bai Li's `projecteuler-solutions`_ repository. 303 | 304 | See `this blog post`_ for insight into the development process. 305 | 306 | EulerPy uses `Click`_ as a dependency for its CLI functionality. 307 | 308 | 309 | ======= 310 | License 311 | ======= 312 | 313 | EulerPy is licensed under the `MIT License`_. 314 | 315 | 316 | .. |Travis| image:: https://img.shields.io/travis/iKevinY/EulerPy/master.svg 317 | :alt: Build Status 318 | :target: http://travis-ci.org/iKevinY/EulerPy 319 | 320 | .. |PyPI| image:: https://img.shields.io/pypi/v/EulerPy.svg 321 | :alt: PyPI Version 322 | :target: https://pypi.python.org/pypi/EulerPy/ 323 | 324 | .. |Homebrew| image:: https://img.shields.io/homebrew/v/euler-py.svg 325 | :alt: Homebrew Version 326 | :target: https://github.com/Homebrew/homebrew-core/blob/master/Formula/euler-py.rb 327 | 328 | .. _pip: http://www.pip-installer.org/en/latest/index.html 329 | .. _Homebrew: http://brew.sh 330 | .. _CONTRIBUTING.rst: https://github.com/iKevinY/EulerPy/blob/master/CONTRIBUTING.rst 331 | .. _Local Euler: http://kmkeen.com/local-euler/ 332 | .. _problems.txt: https://github.com/iKevinY/EulerPy/blob/master/EulerPy/data/problems.txt 333 | .. _solutions.txt: https://github.com/iKevinY/EulerPy/blob/master/EulerPy/data/solutions.txt 334 | .. _projecteuler-solutions: https://github.com/luckytoilet/projecteuler-solutions 335 | .. _this blog post: http://kevinyap.ca/2014/06/eulerpy-streamlining-project-euler/ 336 | .. _click: https://github.com/mitsuhiko/click 337 | .. _MIT License: https://github.com/iKevinY/EulerPy/blob/master/LICENSE 338 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | click==7.1.2 2 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [bdist_wheel] 2 | universal = 1 3 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import EulerPy 3 | 4 | try: 5 | from setuptools import setup 6 | except ImportError: 7 | from distutils.core import setup 8 | 9 | 10 | def readme(): 11 | with open('README.rst') as f: 12 | return f.read() 13 | 14 | 15 | def requirements(): 16 | with open('requirements.txt') as f: 17 | install_requires = [line.strip() for line in f] 18 | 19 | # Terminal colors for Windows 20 | if 'win32' in sys.platform.lower(): 21 | install_requires.append('colorama') 22 | 23 | return install_requires 24 | 25 | setup( 26 | name='EulerPy', 27 | version=EulerPy.__version__, 28 | description=EulerPy.__doc__.strip(), 29 | long_description=readme(), 30 | url='https://github.com/iKevinY/EulerPy', 31 | author=EulerPy.__author__, 32 | author_email='me@kevinyap.ca', 33 | license=EulerPy.__license__, 34 | packages=['EulerPy'], 35 | entry_points={'console_scripts': ['euler = EulerPy.__main__:main']}, 36 | install_requires=requirements(), 37 | classifiers=[ 38 | "License :: OSI Approved :: MIT License", 39 | "Topic :: Utilities", 40 | "Programming Language :: Python", 41 | "Programming Language :: Python :: 2", 42 | "Programming Language :: Python :: 2.7", 43 | "Programming Language :: Python :: 3", 44 | "Programming Language :: Python :: 3.5", 45 | "Programming Language :: Python :: 3.6", 46 | "Programming Language :: Python :: 3.7", 47 | "Programming Language :: Python :: 3.8", 48 | ], 49 | keywords=['EulerPy', 'euler', 'project-euler', 'projecteuler'], 50 | include_package_data=True, 51 | zip_safe=False, 52 | ) 53 | -------------------------------------------------------------------------------- /tests/test_euler.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import shutil 5 | import tempfile 6 | import unittest 7 | 8 | from click.testing import CliRunner 9 | 10 | from EulerPy import euler 11 | from EulerPy.problem import Problem 12 | 13 | 14 | def EulerRun(*commands, **kwargs): 15 | """Simplifies running tests using CliRunner()""" 16 | return CliRunner().invoke(euler.main, commands, **kwargs) 17 | 18 | 19 | def generateFile(problem, filename=None, content=None, correct=False): 20 | """ 21 | Uses Problem.solution to generate a problem file. The correct 22 | argument controls whether the generated file is correct or not. 23 | """ 24 | p = Problem(problem) 25 | filename = filename or p.filename() 26 | 27 | with open(filename, 'w') as f: 28 | if correct: 29 | f.write('print({})'.format(p.solution)) 30 | elif content: 31 | f.write(content) 32 | 33 | 34 | class EulerPyTest(unittest.TestCase): 35 | def setUp(self): 36 | # Copy problem and solution files to temporary directory 37 | self.temp_dir = tempfile.mkdtemp() 38 | os.chdir(self.temp_dir) 39 | eulerDir = os.path.dirname(os.path.dirname(__file__)) 40 | dataDir = os.path.join(eulerDir, 'EulerPy', 'data') 41 | tempData = os.path.join(os.getcwd(), 'EulerPy', 'data') 42 | shutil.copytree(dataDir, tempData) 43 | 44 | def tearDown(self): 45 | # Delete the temporary directory 46 | shutil.rmtree(self.temp_dir) 47 | 48 | 49 | class EulerPyNoOption(EulerPyTest): 50 | # Empty directory with no option 51 | def test_empty_directory_install_neutral(self): 52 | result = EulerRun(input='\n') 53 | self.assertEqual(result.exit_code, 0) 54 | self.assertTrue(os.path.isfile('001.py')) 55 | 56 | def test_empty_directory_negative(self): 57 | result = EulerRun(input='N\n') 58 | self.assertEqual(result.exit_code, 1) 59 | self.assertFalse(os.path.isfile('001.py')) 60 | 61 | # No option or problem number 62 | def test_no_arguments_first_correct(self): 63 | generateFile(1, correct=True) 64 | 65 | result = EulerRun(input='\n') 66 | self.assertEqual(result.exit_code, 0) 67 | self.assertTrue(os.path.isfile('002.py')) 68 | 69 | def test_no_arguments_first_incorrect(self): 70 | generateFile(1) 71 | 72 | result = EulerRun(input='\n') 73 | self.assertEqual(result.exit_code, 1) 74 | self.assertFalse(os.path.isfile('002.py')) 75 | 76 | def test_no_arguments_keep_prefix(self): 77 | generateFile(1, 'euler001.py', correct=True) 78 | 79 | EulerRun(input='\n') 80 | self.assertTrue(os.path.isfile('euler001.py')) 81 | self.assertTrue(os.path.isfile('euler002.py')) 82 | self.assertFalse(os.path.isfile('002.py')) 83 | 84 | # Ambiguous case; infer option from file existence check 85 | def test_ambiguous_option_generate(self): 86 | result = EulerRun('1') 87 | self.assertEqual(result.exit_code, 0) 88 | self.assertTrue(os.path.isfile('001.py')) 89 | 90 | def test_ambiguous_option_verify(self): 91 | generateFile(1, correct=True) 92 | 93 | result = EulerRun('1') 94 | self.assertEqual(result.exit_code, 0) 95 | self.assertFalse(os.path.isfile('002.py')) 96 | 97 | 98 | class EulerPyCheat(EulerPyTest): 99 | def test_cheat_neutral(self): 100 | result = EulerRun('-c', input='\n') 101 | self.assertEqual(result.exit_code, 1) 102 | 103 | def test_cheat_long_flag(self): 104 | result = EulerRun('--cheat', input='\n') 105 | self.assertEqual(result.exit_code, 1) 106 | 107 | def test_cheat_positive(self): 108 | result = EulerRun('-c', input='Y\n') 109 | self.assertEqual(result.exit_code, 0) 110 | self.assertIn('The answer to problem 1', result.output) 111 | 112 | def test_chest_specific(self): 113 | result = EulerRun('-c', '2', input='Y\n') 114 | self.assertIn('The answer to problem 2', result.output) 115 | 116 | def test_cheat_not_in_solutions(self): 117 | result = EulerRun('-c', '1000', input='Y\n') 118 | self.assertEqual(result.exit_code, 1) 119 | 120 | 121 | class EulerPyGenerate(EulerPyTest): 122 | def test_generate_neutral(self): 123 | result = EulerRun('-g', input='\n') 124 | self.assertEqual(result.exit_code, 0) 125 | self.assertTrue(os.path.isfile('001.py')) 126 | 127 | def test_generate_negative(self): 128 | result = EulerRun('-g', input='N\n') 129 | self.assertEqual(result.exit_code, 1) 130 | self.assertFalse(os.path.isfile('001.py')) 131 | 132 | def test_generate_specific(self): 133 | result = EulerRun('-g', '5', input='\n') 134 | self.assertEqual(result.exit_code, 0) 135 | self.assertTrue(os.path.isfile('005.py')) 136 | 137 | def test_generate_overwrite_positive(self): 138 | generateFile(1) 139 | 140 | result = EulerRun('-g', '1', input='\nY\n') 141 | self.assertEqual(result.exit_code, 0) 142 | 143 | with open('001.py') as f: 144 | self.assertNotEqual(f.read(), '') 145 | 146 | def test_generate_overwrite_neutral(self): 147 | generateFile(1) 148 | 149 | result = EulerRun('-g', '1', input='\n\n') 150 | self.assertEqual(result.exit_code, 1) 151 | 152 | with open('001.py') as f: 153 | self.assertEqual(f.read(), '') 154 | 155 | def test_generate_overwrite_skipped(self): 156 | generateFile(1, '001-skipped.py') 157 | 158 | result = EulerRun('-g', '1', input='\nY\n') 159 | self.assertEqual(result.exit_code, 0) 160 | self.assertTrue(os.path.isfile('001-skipped.py')) 161 | self.assertFalse(os.path.isfile('001.py')) 162 | 163 | def test_generate_copy_resources(self): 164 | result = EulerRun('-g', '22', input='\n') 165 | self.assertEqual(result.exit_code, 0) 166 | self.assertTrue(os.path.isfile('022.py')) 167 | 168 | resource = os.path.join('resources', 'names.txt') 169 | self.assertIn('Copied names.txt', result.output) 170 | self.assertTrue(os.path.isfile(resource)) 171 | 172 | 173 | class EulerPyPreview(EulerPyTest): 174 | def test_preview(self): 175 | result = EulerRun('-p') 176 | self.assertEqual(result.exit_code, 0) 177 | self.assertIn('Project Euler Problem 1', result.output) 178 | 179 | def test_preview_specific(self): 180 | result = EulerRun('-p', '5') 181 | self.assertEqual(result.exit_code, 0) 182 | self.assertIn('Project Euler Problem 5', result.output) 183 | 184 | def test_preview_next_behaviour(self): 185 | generateFile(1) 186 | 187 | result = EulerRun('-p') 188 | self.assertEqual(result.exit_code, 0) 189 | self.assertIn('Project Euler Problem 2', result.output) 190 | 191 | def test_preview_nonexistent(self): 192 | result = EulerRun('-p', '1000') 193 | self.assertEqual(result.exit_code, 1) 194 | 195 | 196 | class EulerPySkip(EulerPyTest): 197 | def test_skip_neutral(self): 198 | generateFile(1) 199 | 200 | result = EulerRun('-s', input='\n') 201 | self.assertEqual(result.exit_code, 1) 202 | self.assertTrue(os.path.isfile('001.py')) 203 | 204 | def test_skip_positive(self): 205 | generateFile(1) 206 | 207 | result = EulerRun('-s', input='Y\n') 208 | self.assertEqual(result.exit_code, 0) 209 | self.assertFalse(os.path.isfile('001.py')) 210 | self.assertTrue(os.path.isfile('001-skipped.py')) 211 | 212 | def test_skip_prefixed_file(self): 213 | generateFile(1, 'euler001.py') 214 | 215 | result = EulerRun('-s', input='Y\n') 216 | self.assertEqual(result.exit_code, 0) 217 | self.assertFalse(os.path.isfile('euler001.py')) 218 | self.assertTrue(os.path.isfile('euler001-skipped.py')) 219 | self.assertTrue(os.path.isfile('euler002.py')) 220 | 221 | 222 | class EulerPyVerify(EulerPyTest): 223 | def test_verify(self): 224 | generateFile(1) 225 | 226 | result = EulerRun('-v') 227 | self.assertEqual(result.exit_code, 1) 228 | self.assertIn('Checking "001.py"', result.output) 229 | 230 | def test_verify_specific(self): 231 | generateFile(5) 232 | 233 | result = EulerRun('-v', '5') 234 | self.assertEqual(result.exit_code, 1) 235 | self.assertIn('Checking "005.py"', result.output) 236 | 237 | def test_verify_glob(self): 238 | generateFile(1, '001-skipped.py') 239 | 240 | result = EulerRun('-v', '1') 241 | self.assertEqual(result.exit_code, 1) 242 | self.assertIn('Checking "001-skipped.py"', result.output) 243 | 244 | def test_verify_sorted_glob(self): 245 | generateFile(1, '001.py') 246 | generateFile(1, '001-skipped.py') 247 | 248 | result = EulerRun('-v', '1') 249 | self.assertEqual(result.exit_code, 1) 250 | self.assertIn('Checking "001.py"', result.output) 251 | self.assertNotIn('Checking "001-skipped.py"', result.output) 252 | 253 | def test_verify_correct(self): 254 | generateFile(1, correct=True) 255 | 256 | result = EulerRun('-v') 257 | self.assertEqual(result.exit_code, 0) 258 | 259 | def test_verify_non_existent_problem_file(self): 260 | result = EulerRun('-v', '5') 261 | self.assertEqual(result.exit_code, 1) 262 | 263 | def test_verify_file_with_multiline_output(self): 264 | generateFile(1, content='print(1); print(2)') 265 | 266 | result = EulerRun('-v', '1') 267 | self.assertEqual(result.exit_code, 1) 268 | 269 | def test_verify_error_file(self): 270 | generateFile(1, content='import sys; sys.exit(1)') 271 | 272 | result = EulerRun('-v', '1') 273 | self.assertIn('Error calling "001.py"', result.output) 274 | self.assertEqual(result.exit_code, 1) 275 | 276 | def test_verify_prefixed_file(self): 277 | generateFile(1, 'euler001.py', correct=True) 278 | 279 | result = EulerRun('-v', '1') 280 | self.assertEqual(result.exit_code, 0) 281 | 282 | def test_verify_prefixed_unskip(self): 283 | generateFile(1, 'euler001-skipped.py', correct=True) 284 | 285 | result = EulerRun('-v', '1') 286 | self.assertEqual(result.exit_code, 0) 287 | self.assertTrue(os.path.isfile('euler001.py')) 288 | self.assertFalse(os.path.isfile('euler001-skipped.py')) 289 | 290 | 291 | class EulerPyVerifyAll(EulerPyTest): 292 | def test_verify_all(self): 293 | generateFile(1, correct=True) 294 | generateFile(2, '002-skipped.py', correct=True) 295 | generateFile(4) 296 | generateFile(5, content='import sys; sys.exit(1)') 297 | 298 | result = EulerRun('--verify-all') 299 | self.assertIn('Problems 001-020: C C . I E', result.output) 300 | 301 | # "002-skipped.py" should have been renamed to "002.py" 302 | self.assertTrue(os.path.isfile('002.py')) 303 | self.assertFalse(os.path.isfile('002-skipped.py')) 304 | 305 | # "004.py" should have been renamed to "004-skipped.py" 306 | self.assertFalse(os.path.isfile('004.py')) 307 | self.assertTrue(os.path.isfile('004-skipped.py')) 308 | 309 | def test_verify_all_no_files(self): 310 | result = EulerRun('--verify-all') 311 | self.assertEqual(result.exit_code, 1) 312 | 313 | 314 | class EulerPyMisc(EulerPyTest): 315 | def test_help_option(self): 316 | result = EulerRun('--help') 317 | self.assertEqual(result.exit_code, 0) 318 | self.assertIn('--cheat', result.output) 319 | self.assertIn('--generate', result.output) 320 | self.assertIn('--preview', result.output) 321 | self.assertIn('--skip', result.output) 322 | self.assertIn('--verify', result.output) 323 | self.assertIn('--verify-all', result.output) 324 | 325 | def test_version_option(self): 326 | result = EulerRun('--version') 327 | self.assertEqual(result.exit_code, 0) 328 | 329 | -------------------------------------------------------------------------------- /tests/test_utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import json 5 | import textwrap 6 | import unittest 7 | 8 | from EulerPy.problem import Problem 9 | from EulerPy.utils import human_time 10 | 11 | 12 | EULER_DIR = os.path.dirname(os.path.dirname(__file__)) 13 | EULER_DATA = os.path.join(EULER_DIR, 'EulerPy', 'data') 14 | 15 | class EulerPyUtils(unittest.TestCase): 16 | def test_problem_format(self): 17 | """ 18 | Ensure each parsed problem only contains one problem (that one problem 19 | does not "bleed" into the next one due to an issue with line breaks) 20 | """ 21 | 22 | # Determine largest problem in problems.txt 23 | problems_file = os.path.join(EULER_DATA, 'problems.txt') 24 | with open(problems_file) as f: 25 | for line in f: 26 | if line.startswith('Problem '): 27 | largest_problem = line.split(' ')[1] 28 | 29 | for problem in range(1, int(largest_problem) + 1): 30 | problemText = Problem(problem).text 31 | 32 | msg = "Error encountered when parsing problem {}.".format(problem) 33 | 34 | self.assertFalse('========='in problemText, msg=msg) 35 | self.assertFalse('\n\n\n' in problemText, msg=msg) 36 | 37 | def test_expected_problem(self): 38 | """Check that problem #1 returns the correct problem text""" 39 | problem_one = textwrap.dedent( 40 | """ 41 | If we list all the natural numbers below 10 that are multiples of 3 or 5, 42 | we get 3, 5, 6 and 9. The sum of these multiples is 23. 43 | 44 | Find the sum of all the multiples of 3 or 5 below 1000. 45 | """ 46 | ) 47 | 48 | self.assertEqual(problem_one.strip(), Problem(1).text) 49 | 50 | def test_filename_format(self): 51 | """Check that filenames are being formatted correctly""" 52 | self.assertEqual(Problem(1).filename(), "001.py") 53 | self.assertEqual(Problem(10).filename(), "010.py") 54 | self.assertEqual(Problem(100).filename(), "100.py") 55 | 56 | def test_time_format(self): 57 | self.assertEqual(human_time(100000), '1d 3h 46m 40s') 58 | 59 | def test_problem_resources(self): 60 | """Ensure resources in `/data` match `resources.json`""" 61 | resources_path = os.path.join(EULER_DATA, 'resources') 62 | 63 | def _resource_check(filename, seen_files): 64 | path = os.path.join(resources_path, filename) 65 | 66 | # Check that resource exists in `/data` 67 | self.assertTrue(os.path.isfile(path), 68 | '%s does not exist.' % filename) 69 | 70 | # Add resource to set `seen_files` 71 | seen_files.add(filename) 72 | 73 | with open(os.path.join(EULER_DATA, 'resources.json')) as f: 74 | resource_dict = json.load(f) 75 | 76 | seen_files = set() 77 | 78 | for item in (v for k, v in resource_dict.items()): 79 | if isinstance(item, list): 80 | for subitem in item: 81 | _resource_check(subitem, seen_files) 82 | else: 83 | _resource_check(item, seen_files) 84 | 85 | self.assertEqual(seen_files, set(os.listdir(resources_path))) 86 | --------------------------------------------------------------------------------