{ "info": { "author": "Encrylize", "author_email": "encrylize@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: Microsoft :: Windows", "Operating System :: Unix", "Programming Language :: Python :: 3.5", "Topic :: Utilities" ], "description": "EasyEuler\n=========\n\nEasyEuler is a configurable command line tool for working with Project\nEuler. It provides support for many languages out of the box and adding\nmore is easy.\n\nThis project was inspired by\n`EulerPy `__ and intends to provide\nthe same functionality for a larger variety of languages.\n\nInstallation\n============\n\nEasyEuler can be installed from PyPI using\n`pip `__:\n\n.. code:: bash\n\n $ pip install easyeuler\n\nUsage\n=====\n\nUse ``create`` to create a new problem file:\n\n.. code:: bash\n\n $ easyeuler create 1 python\n Written to euler_001.py\n\n $ cat euler_001.py\n \"\"\"\n Problem 1: Multiples of 3 and 5\n\n If we list all the natural numbers below 10 that are multiples of 3 or 5,\n we get 3, 5, 6 and 9. The sum of these multiples is 23.\n\n Find the sum of all the multiples of 3 or 5 below 1000.\n\n \"\"\"\n\nOnce you've come up with a solution, output the result and check if it's\ncorrect with ``verify``:\n\n.. code:: bash\n\n $ easyeuler verify euler_001.py\n Checking output of euler_001.py: [no output] # output in red\n\n $ echo print(12345) > euler_001.py\n $ easyeuler verify euler_001.py\n Checking output of euler_001.py: 12345 # incorrect solution, output in red\n\n $ echo print(42) > euler_001.py\n $ easyeuler verify euler_001.py\n Checking output of euler_001.py: 42 # correct solution, output in green\n\nYou can even time the execution of your solutions with the ``time``\nflag:\n\n.. code:: bash\n\n $ easyeuler verify --time euler_001.py\n Checking output of euler_001.py: 42\n CPU times - user: 16.7ms, system: 3.33ms, total: 20ms\n Wall time: 1.02s\n\n...and execute multiple at once:\n\n.. code:: bash\n\n $ easyeuler verify *\n Checking output of euler_001.py: 42\n Checking output of euler_002.c: 12345\n Checking output of euler_003.py: [error] # [error] is displayed if an error occurs during execution\n\nSome problems come with additional files, use ``generate-resources`` to\ngenerate those:\n\n.. code:: bash\n\n $ easyeuler create 22 python\n Written to euler_022.py\n $ cat euler_022.py\n \"\"\"\n Problem 22: Names scores\n\n [....]\n\n This problem references the following resources:\n\n names.txt\n\n \"\"\"\n\n $ easyeuler generate-resources 22 # specify the problem ID to generate problem-specific resources\n Created names.txt at path .\n\n $ easyeuler generate-resources # or leave it empty to generate all resources\n [....]\n Created 326_formula2.gif at path .\n Created 326_formula1.gif at path .\n Created 327_rooms_of_doom.gif at path .\n Created 330_formula.gif at path .\n\nUse ``list`` and ``show`` to browse problems:\n\n.. code:: bash\n\n $ easyeuler list\n \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n \u2502 ID \u2502 Name \u2502 Difficulty \u2502\n \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n \u2502 1 \u2502 Multiples of 3 and 5 \u2502 5% \u2502\n \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 2 \u2502 Even Fibonacci numbers \u2502 5% \u2502\n \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 3 \u2502 Largest prime factor \u2502 5% \u2502\n \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n [....]\n\n $ easyeuler show 2\n Problem 2: Even Fibonacci numbers\n\n Each new term in the Fibonacci sequence is generated by adding the\n previous two terms. By starting with 1 and 2, the first 10 terms will be:\n\n 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...\n\n Find the sum of all the even-valued terms in the sequence which do not\n exceed four million.\n\nConfiguration\n=============\n\nEasyEuler is designed to be configurable and adaptable to any language\nyou may want to use it with. It follows the `XDG Base Directory Specification\n`__\nfor locating configuration files. The default location is\n``$HOME/.config/EasyEuler``.\nTo see examples of configuration, look at ``config.json`` and the ``templates``\ndirectory inside the package.\n\nLanguages\n~~~~~~~~~\nAdding a new language is as easy as adding a few lines to the ``config.json``\nfile.\n\nA language has the following general attributes:\n\n- ``name`` - name of the language. (required)\n- ``extension`` - file extension for the language. (required)\n- ``template`` - name of the template file. (default: ``name``)\n\nThese commands are executed in order when using the ``verify`` command:\n\n- ``build`` - build the file if required.\n- ``execute`` - time this command and compare the output to the solution. (default: ``./{path}``)\n- ``cleanup`` - remove binary files after execution, etc.\n\nTemplates\n~~~~~~~~~\nTemplates use the `Jinja2 `__ templating engine.\nNew templates should go in the ``templates`` directory inside the configuration\ndirectory.\n\nRequirements\n============\n\nEasyEuler requires `Python\n3.5+ `__, along\nwith the `Click `__,\n`Jinja2 `__ and\n`tabulate `__ modules.\nIt has been tested on Windows and Linux and it should work on any other\nUnix-based platforms, including macOS.\n\nContributing\n============\nPlease see `CONTRIBUTING.rst\n`__\nfor information on how to contribute to this project.\n\nAcknowledgements\n================\n\nThe problem descriptions are courtesy of the\n`EulerPy `__ project, which\nformatted the descriptions from Kyle Keen's `Local\nEuler `__ project into a human-readable\nform.\n\nLicense\n=======\n\nEasyEuler is licensed under the `MIT\nlicense `__.\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Encrylize/EasyEuler", "keywords": "EasyEuler", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "EasyEuler", "package_url": "https://pypi.org/project/EasyEuler/", "platform": "", "project_url": "https://pypi.org/project/EasyEuler/", "project_urls": { "Homepage": "https://github.com/Encrylize/EasyEuler" }, "release_url": "https://pypi.org/project/EasyEuler/1.2.1/", "requires_dist": null, "requires_python": "", "summary": "A command line tool for Project Euler", "version": "1.2.1" }, "last_serial": 2599924, "releases": { "0.9": [ { "comment_text": "", "digests": { "md5": "8d5e6e3f15a7094d6d9f52849ee883af", "sha256": "694498abf759cb577afaafd00ef48083dcd2b30948252591c3f2e0b622e19772" }, "downloads": -1, "filename": "EasyEuler-0.9.tar.gz", "has_sig": false, "md5_digest": "8d5e6e3f15a7094d6d9f52849ee883af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 630621, "upload_time": "2016-07-17T11:19:40", "url": "https://files.pythonhosted.org/packages/d0/9f/937158b41404eb3ea96fe07c74ba0d41adec1cfd40ebb6479a842ed888db/EasyEuler-0.9.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "9ce8d6868cb6543b18794bcd43af98c9", "sha256": "68534745262e310b91e041d8d73c664b592867c32acb9231c40694a350ecadf4" }, "downloads": -1, "filename": "EasyEuler-0.9.1.tar.gz", "has_sig": false, "md5_digest": "9ce8d6868cb6543b18794bcd43af98c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 632984, "upload_time": "2016-07-17T11:40:59", "url": "https://files.pythonhosted.org/packages/40/7c/90b1b6ce2203a400e3d525ff8c2215150c37a2da2f866117adc937bc1609/EasyEuler-0.9.1.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "ae9074763fab13fc50b72d088026abec", "sha256": "a2897cb544d37cb4ca592409787950a9134633dd6d1509fbfee5a651a10bfe7c" }, "downloads": -1, "filename": "EasyEuler-0.9.2.tar.gz", "has_sig": false, "md5_digest": "ae9074763fab13fc50b72d088026abec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 632949, "upload_time": "2016-07-20T18:34:43", "url": "https://files.pythonhosted.org/packages/f8/04/c70b2e5477ca5b4b5e0eabe990249af380162f62d36d65d379b436d55aff/EasyEuler-0.9.2.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "e2444fd625044e1317a66a92fc1a0fa1", "sha256": "e98b5f866d1fda89555d61ac49cafb952f7ad79a535f386e09361663b0ca8ca8" }, "downloads": -1, "filename": "EasyEuler-1.0.0.tar.gz", "has_sig": false, "md5_digest": "e2444fd625044e1317a66a92fc1a0fa1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 633486, "upload_time": "2016-07-22T16:38:26", "url": "https://files.pythonhosted.org/packages/cd/68/1007650ecbe1bd968d571f0f2b9a8854922fdeb90d8ec0dbf47023a0dcc5/EasyEuler-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2926cf784d646b5dd7a39d3204e5b733", "sha256": "989f49f33a3f6eef98d1fa0c9fab6eba5a3743930c6685e5e2ddb88f33c3c7e6" }, "downloads": -1, "filename": "EasyEuler-1.0.1.tar.gz", "has_sig": false, "md5_digest": "2926cf784d646b5dd7a39d3204e5b733", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 633396, "upload_time": "2016-07-22T20:58:29", "url": "https://files.pythonhosted.org/packages/a9/df/f8ca988bf91fd2ae516442841a552a9b47b9293f8eac1f63c6707b3e77f7/EasyEuler-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "ce5463d88b75eab0bc52575ef425e173", "sha256": "f1e9c3c376b4a0d0bb7a3e1d8fea293dc2a5627906c37a55b3acaebe9fb5b7ab" }, "downloads": -1, "filename": "EasyEuler-1.1.0.tar.gz", "has_sig": false, "md5_digest": "ce5463d88b75eab0bc52575ef425e173", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 634348, "upload_time": "2016-07-29T15:59:46", "url": "https://files.pythonhosted.org/packages/4f/07/2386f2092d8286a540c52d12c5d4799727f6e0d279ad9c75a9409c089350/EasyEuler-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "11bf12240e3f88e866185414f8fbcea9", "sha256": "4da5ac1c988f3f60a4799f2704cd52d6145890f73c3b570d733785a37915434c" }, "downloads": -1, "filename": "EasyEuler-1.2.0.tar.gz", "has_sig": false, "md5_digest": "11bf12240e3f88e866185414f8fbcea9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 635147, "upload_time": "2016-12-12T18:07:14", "url": "https://files.pythonhosted.org/packages/e9/cd/fd769bff2c38f50ffa6b8409c6ceb52e85bbc39aeb9accefac246826f2f2/EasyEuler-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "dbb7afaed624bcb68badce38050034b9", "sha256": "b456c9938858ac14273d2770a345f4b0d3416531fbdf77f676d89f20181323d7" }, "downloads": -1, "filename": "EasyEuler-1.2.1.tar.gz", "has_sig": false, "md5_digest": "dbb7afaed624bcb68badce38050034b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 635156, "upload_time": "2017-01-26T15:46:52", "url": "https://files.pythonhosted.org/packages/b2/f8/d516b6154edecd452e2cc457036e054ec08ca8e7e61caaf1fed27721bd21/EasyEuler-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "dbb7afaed624bcb68badce38050034b9", "sha256": "b456c9938858ac14273d2770a345f4b0d3416531fbdf77f676d89f20181323d7" }, "downloads": -1, "filename": "EasyEuler-1.2.1.tar.gz", "has_sig": false, "md5_digest": "dbb7afaed624bcb68badce38050034b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 635156, "upload_time": "2017-01-26T15:46:52", "url": "https://files.pythonhosted.org/packages/b2/f8/d516b6154edecd452e2cc457036e054ec08ca8e7e61caaf1fed27721bd21/EasyEuler-1.2.1.tar.gz" } ] }