Files
binary_quiz/README.md
2020-06-13 11:36:12 +02:00

63 lines
26 KiB
Markdown

# Binary Math Exercises
## Description
A command line application and Python library for generating binary numbers for a human to decode, as well as generating the integers they represent, to check the human's work.
## Compatibility
Currently only supported on MacOS and Linux
## Installation on MacOS or Linux
1) `git clone https://github.com/Averbach-Transcription/email_quote`
2) `ln -s <repo_fullpath>/app/get_quote /usr/local/bin/`
3) brew install ghostscript ([install homebrew](https://brew.sh) if needed)
4) brew install enscript
## Usage
```
binary [OPTIONS] BITS NUM_PROBLEMS
Options:
--pdf
--silent
--include-answers
--output-filepath TEXT
--help Show this message and exit.
```
## Examples of Output
### PDF
```binary 8 100 --pdf```
👆👆 this command produces two PDFs like this 👇👇
[example of problems.pdf output](data:image/png;base64,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rwUIvPP642PwCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAokAgXciwSMCCCCAAAIIIIAAAggggAACCCCAAAIIIIBAXgsQeOf1x8fgEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBIBAu9EgkcEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBvBYg8M7rj4/BI4AAAggggAACCCCAAAIIIIAAAggggAACCCQCBN6JBI8IIIAAAggggAACCCCAAAIIIIAAAggggAACeS1A4L0UH98///xjf/31l1WpUsUqVKhQ6iOFEEz7/v3330u0r/bTVqlSpTKfV/uVZax6/8rcZLUk49V+S+q0Mq+XcyOAAAIIIIAAAqURWNoaSfVVxYoVy1RnrawaVh5Lc70rupbUWLUtyXl9R/6DAAIIIIAAAgggsFQCBN5l5FOI+vvvv9ujjz5qzzzzjH366afWvHlzO/jgg+3AAw+0WrVqeRCd67B//vmn/fTTTzZo0CAbM2aMff/997bFFlvYqaeeau3atbPVVlst125e4P/xxx/27rvv2pAhQ2zChAm2xhpr2A477GCnnXaa1a1b14PzXDsrkNd4dd5XXnnFnn32Wbv88sutVatWPsnJtU/yO4XyOu8vv/xiU6ZMseeff95WX311O/3006127drJ23I+yum3336zxYsX22uvvWYvvfSSnXjiiX69CuqL2jRB0Jh//fVXmz17tp9T+8ts/fXXL2q3zO91re+//77df//99tZbb1nNmjVtxx13dONGjRox8chI8QQBBBBAAAEE8kkgaZZQjfTVV195jfTBBx/YwIEDbb311ivxUlSXvf322/bggw/axIkTvZbcaaedrFu3brbuuusWWyMlNewtt9xio0ePtoULF3pN1717d9t4441LrGEnTZpk9913n40fP95ryaSGrVevXqlqWNXNTz/9tF188cXWtm3bEmtY1a+63m+++cZGjhzp57399tu9Zi4uhFYdujJq7hI/PN6AAAIIIIAAAgggUCYBAu8ycKkIVkh90003efC81lpredGuUHfRokV23HHH2TnnnOOhtzpm0psmKVOnTrXzzz/fPvroI59YVKtWzb777jurXLmy9e/f3/bee29/ni7EkwD4xRdf9KBa4XP9+vVNEw8V8ZtuuqkNGDDAWrduXShonzdvnr3++useNo8dO9bmzp1r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EEAAAQQQQAABBBBAAAEEyoUAgXe5+BgYBAIIIPDvEFCAqrB64sSJ9sILL9i0adOsXr16tvXWW9sBBxxgNWvWzBkIK7xN/v3yyy/2+uuv22uvvWbnnnuuNWzYsMggOAmNk/B31qxZ9sorr9hPP/1k3bt3txo1ahS5rz6RZLwTJkzw8X788cdWv35922abbaxz586lGu/PP/9sY8eO9X//+c9/rEGDBkWeM3u83377rY/3t99+s5NPPtmqV69e5L7JeBVU63p//fVXGzdunL355pvWrVs3a9q0qd5S5KZ9kn11XhnPmTPHTjnlFKtTp06R+/ECAggggAACCCCAAAIIIIAAAuVJgMC7PH0ajAUBBBBYxQXUXf3ss8/aJZdcYj/++KOtvvrqpjBXIfahhx5ql19+uQfg6U5mhcDff/+9h+TDhw+3kSNH+r7qeH7jjTesVatWRXYgqzN79uzZ9vLLL9tjjz1m48eP9/Ntv/329tBDD3mQmz5XNv/vv/9uTz/9tF122WW2ePFiq127tu+vMPmII46wSy+91NZee+0CIXQyXoXkI0aMsOeeey4zXoXPGm9RXd7y0XhfeuklH+8777zj59tll13s/vvvtzXXXLPAudLjVWCtMeoaH3/8cXvmmWfshx9+sFq1avnzTp06pd9e4LmCbv0xQE7aV8fQWDp06GDDhg2zxo0bF3g/PyCAAAIIIIAAAggggAACCCBQXgUIvMvrJ8O4EEAAgVVMQJ3dM2bMsP3228+7nHv16mXt2rWzefPm2X//+1976qmnrH///nbcccfZaqutlrl6BcgKuc877zwPnFu2bOmhsEJZ/WvTpk2RgbcC4D59+nhovd5663nYrEB344039jBanctFBd4a76effuqd3Ouuu65pvBtttJGP95577vHg/pprrrGjjjqqwHgVPCtsvuCCC3y8Cri/+eYbD+wVghcX0OuPAAr9FZI3atTIdK0KzRVWP/zww8UG3gqtR48ebT169PD3NWvWzIP2Dz74wJ588knbaqutMqbZTxTs9+3b1/8IsP7663s3uLrSZfbAAw9YkyZNsnfhZwQQQAABBBBAAAEEEEAAAQTKpQCBd7n8WBgUAgggsOoJqItbnd0KUK+77jo7+uijfX1oBcRffvmlHXLIIR4+K9zWsh/JpsBb3ccKn+vWrWsKnxWQK8h+6623ig28FeROnTrVu6S1FImOq+BXjwqSiwu8tRSJQutHH33UBg0aZIcddlhmvAru1ZGuLnONV8dONl2PxvvZZ59lxnvXXXfZVVdd5QF9cYG3ut01Xo1bx9S/jh07WvPmzT2MLq7DW4H3ggULbNKkSW6k96qb/uqrr/ZrKC7wVriv5Vrmz5/vIbf+4HDsscf6ki5Dhw4l8E4+XB4RQAABBBBAAAEEEEAAAQTKvQCBd7n/iBggAgggsGoIzJw509fp1rIg9957r3c6J93V6sRWCH733XfbzTffbF26dClw0QpzFXxr03Igeo+WGSkp8NY+2lebzqV/m266qS+bUlLg/fnnn3s3utYY17hatGiR6QbXGuADBgywIUOG2K233moHHXSQnyP5TzJenU/jvfbaa72DWh3pxQXe2ePV8dq2bWvq1tYSLMUF3to32V/nVGiu5UjUNa/QvrjAW/spqNc/7avrO/jgg/1nAu/kU+URAQQQQAABBBBAAAEEEEAgHwQIvPPhU2KMCCCAwCogoLBXXcO6QeUtt9zi63cnl6VwVt3I559/vp166qmmmzsWt6njWutnlxR4Zx9Dwe4mm2xSqsBb621rvDvvvLPdcMMNhcarZUIuvPBCO/PMM+2cc87JPlWBnxV4X3nllSV2eBfYKf6gAFrLqJQm8M7eV93iWvdbneUlBd7Z+2rtb4X4Oj+Bd7YOPyOAAAIIIIAAAggggAACCJRnAQLv8vzpMDYEEEBgFRLQ0h+nn366HX/88R5s16hRI3N1urmk1rfu1q2bB8y33XZb5rVcT1ZE4K01xRVmn3LKKR5oZ49XYbvGu/fee9tNN92Ua5iZ3xF4Zyh4ggACCCCAAAIIIIAAAggggMByFSDwXq68HBwBBBBAIBF44oknrGfPnt4VfeKJJxa40aPWkJ4+fbqv692hQwdfKiTZL9fjigi8hw8f7kG3lk7p2rVrofFOmTLFb1i5zTbb+JInucaZ/I7AO5HgEQEEEEAAAQQQQAABBBBAAIHlK0DgvXx9OToCCCCAwP8JJIH3RRddZCeccEKhALm8Bt69e/f2pU10I8dkU0Cvm0seeeSRRuCdqPCIAAIIIIAAAggggAACCCCAwMoXIPBe+Z8BI0AAAQT+FQJa8/rss8+2M844w/9Vr149c90KkCdNmuTLnejmivfcc0/mtVxPVkSH92OPPWa9evXyfz169LDs8b777rs+3p122sluv/32XMPM/I4O7wwFTxBAAAEEEEAAAQQQQAABBBBYrgIE3suVl4MjgAACCCQCY8eOtZNOOsn23HNPGzBggNWqVSt5yf744w975ZVXPBA/6qijrE+fPpnXcj1ZEYH3mDFjfLz777+/3/ixZs2amaFovC+++KKH4VruRMueFLcReBenw2sIIIAAAggggAACCCCAAAIILDsBAu9lZ8mREEAAAQSKEZg2bZodcsgh1rhxY7v33nttvfXWy7z7119/9a7ua665xvr27eud05kXczxZEYG3liw56KCDrEWLFr5G9zrrrJMZyS+//GJ33nmnXX/99Xb11Vf7kieZF3M8IfDOgcKvEEAAAQQQQAABBBBAAAEEEFgOAgTeywGVQyKAAAIIFBb4/vvv7ZhjjvG1r2+77TbbfffdrXLlyvbPP//YvHnz7JRTTrEPP/zQnn32WWvbtm2hA4QQMr9T4K2u6jfffNPatGljlSpV8tcqVKiQeU/6SbKvHjfddFOrV6+e6aaUderUMe2Taz+N9/DDD7cZM2b4kiU777xzZrxz5szx8erGlSNHjrSNNtoofTp/npxTPyjwVpD/9ttvW6tWrUo9XtnIomnTpvbQQw/ZmmuuWeR4kwEk5/3tt9/s/vvvt/79+9sjjzxiWiom2XJdr15L9v3hhx887Nf5hw4dak2aNPFdi9ovOS6PCCCAAAIIIIAAAggggAACCKxsAQLvlf0JcH4EEEDgXyLw559/2muvveZB6sEHH+zLmjRs2NDU3f3ggw/aueeea926dfNguEaNGgVUFMQqwP3777/994MHD7Yrr7zSRo8enQmQFZ5Xq1atUHit9cF///13D3MV4Oomk3Xr1vUwWAFyxYoV/Qaa2j+9abw6fpcuXeywww7zTu769ev7eBUCn3/++XbaaaeZbmpZ0nhvuukmGzhwoB+vZcuWHniXZry63k6dOnngfN9999kaa6zh++o6s8ersaed5PXwww972D5kyBDbYost/PL0xwHdgDM7vE47/fjjj35DTnmpk3399df3fXXeKlWq+HP+gwACCCCAAAIIIIAAAggggEB5FCDwLo+fCmNCAAEEVkEBhbFaCqRfv342bNgwa9CggbVr185mz55tWu5kgw02MHV+t27dOtMBLQaFrurGvuWWWzxs1u/mzp1r3333nW244YYe3irE1RIpCsE32WQTvcU3dSpfddVVHrQrwNb28ccfe1isrmWFxvq34447+rgU6CabzqvxXnHFFR4cK5xXt/WsWbNs+vTpvtSJgncteZJ0mGtf7aegWa8pzNemsWrM6fFqaRd1fcsg2RYtWuTjGDdunGm8MtN4q1at6qGzxqrAWd3mulb9PtkUWKvbXNer5wrLdbz58+e7Te3atf2tjRo18n3bt2/v405Cci3Nov31s8799ddf+3O5KiDXpq58eeT6w4K/gf8ggAACCCCAAAIIIIAAAgggsJIFCLxX8gfA6RFAAIF/k4BC2IULF/oSIQpXFSgrwFX4rCVKFP6mQ1zZKEB+9dVXvSNc78+1qUtbwewll1xSIEBevHixB+WjRo3yEDfXvjr/9ttvb5deemmhc2u8CxYs8CD+hRdeyIy3efPm/n4tZZJrvLoBp5YxKW68Crw13vRyKOqsvvnmm/0GnklAnz1mjVcB/cUXX1zg3Aq5J0yY4OPSTTVzberqTpx0XgX1CrjVAX/HHXfY448/7j8Xte8uu+xiF110USYAz/U+focAAggggAACCCCAAAIIIIDAyhQg8F6Z+pwbAQQQ+JcKKGRV97G6iLWsiLqO013S5Y0lGe9XX31la621lofG5Xm85c2P8SCAAAIIIIAAAggggAACCCCwogQIvFeUNOdBAAEEECggoBBZHdTqzlbncfaa0gXeXA5+UKe5/uXLeMsBGUNAAAEEEEAAAQQQQAABBBBAYIULEHivcHJOiAACCCCAAAIIIIAAAggggAACCCCAAAIIILA8BAi8l4cqx0QAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBY4QIE3iucnBMigAACCCCAAAIIIIAAAggggAACCCCAAAIILA8BAu/locoxEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBFa4AIH3CifnhAgggAACCCCAAAIIIIAAAggggAACCCCAAALLQ4DAe3mockwEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBFS5A4L3CyTkhAggggAACCCCAAAIIIIAAAggggAACCCCAwPIQIPBeHqocEwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGCFCxB4LwV5CMH0r2LFimU+ytLsW+aTreQdkmutUKGC6V9ZtmTfJTH+559//FRLsm9Zxsh7EUAAAQQQQACBFS2wtDXSktRlukadVzVWpUqVVtglL821Ls2+us4lcVqac64wVE6EAAIIIIAAAgiswgIE3mX8cFX4/vHHH/bmm2/axIkTbdasWbbOOuvYlltuaZ06dbLq1asXGYD/9ddf9ssvv9jzzz9vH330kf3000/WqlUr23333W399de3qlWr5hyNimad8/fff7cvv/zSz7vuuuvarrvuapUrV865T/LLv//+2/78808/r8753nvv2SGHHGLav6QgWNeqMf/222/29ddf2wcffGA1atSwPfbYwx+TcxT1qGudMGFCxql+/fq2+eab21ZbbWW1atUqMvzW9f7444/20ksv2YcffujP5bTTTjvZhhtu6NdcVHCua/38889t7Nix9vHHH1u1atWsbdu2bly3bt0iz1nUNfB7BBBAAAEEEECgvAioNvvhhx/sxRdftMmTJ9uvv/5qrVu39pqwSZMmHkIXVSOplvzkk0/s9ddft88++8xruXbt2tluu+1ma621VrE1kupBnUs1rM6rGrZly5a+b9OmTUtVw3711VdeE6oeVO1bpUqVYllXVs2ta50xY4a9+uqr7lWzZk2vJVX/rr766kXW3sl4x40bZ++++67Nnj3b623NETp27FjsHKFYCF5EAAEEEEAAAQQQKLMAgXcZyBTEKvx97LHHrF+/fjZ//nwPk1Wwq3i//PLL7aCDDvKQNXuyoX0XLVpkF1xwgT377LN+HBXGCrk1UbnnnnusRYsWhbpIVHRrUqHw9/HHH/fAet68eXbyySf7GBToZp8ruSRNbBTIa78nn3zSvvjiC58kjRo1ysP54jpzkgnVmDFj7IknnvDgevHixbb33nvbNddcY2uvvXZymkKPSUCvc/bu3duddB06X506deyyyy6zww8/PKeTAvqff/7ZnZ5++mkP6jUWXWezZs1s2LBh/phrkqRzfPfdd3bcccf5HxT0BwJt+iNEMm6dv7jrLnQx/AIBBBBAAAEEECgHAqqRVBOeeeaZ9sorr3gArZpLNZJqyPvvv98aN26cM0hWQ4BC3G7dunmIqxpJ9aNqpEMPPdT69Olja6yxRs5miKSGveSSS+ypp57y8yY1rELve++918NvHS9dkyY1rMaqWlQh8Ny5c61r1642YMAAW2211Qq8P02sc5ZUcx988MFeR6fPqWMk4y1rza19Zax6uXv37t7ooVpaDSJyOuCAA+yKK64wNVBkN43onPqDwPDhw+2qq66yhQsXZuYIDRs2dN/9998/53h1XjYEEEAAAQQQQACBZSugwNs+nPJJrNPYShKIhXuInd2hQYMGYeuttw4x+A6xQyY888wzYbvttguxAA5vvfVWiJOKAoeKk4IQi+AQC+8QJxMhFvohdn+E2IEcYngcYnd3iF3P4Ztvvgk6R3rT8WPnTYgBc9hkk01CLJZDnCCEnj17hthBHXTsorbY/RNi93mIhXbYdtttww477BBiwB7eeOONQudJHyMW+2HOnDnhwAMPDLGTJbRv3z7sueeeIYb64fjjjw8x6E+/vdBzXcP48eNDDPLDpptuGuIkx681dgWFbbbZJsQOpDB69Oig82RvsWspxElXqFevXjjiiCPcWwbXXXddiB1EIXbIhOnTp2fv5j/HLnQ/fqNGjUKcSIWpU6eGOLkKxxxzjBtcfPHFIU4Uc+7LLxFAAAEEEEAAgfIsEBsnwjnnnBNiN3Y44YQTQvwWnddXffv2Dap9dtlllxBD7ZyXEEPcsMUWW3jNOWjQoDBt2rTw9ttvhy5dunitqLpJtWr2pjozBs8hht1ewx577LEhdoiH2Ckerr/+eq/N4rf3gmqw7Bo2fuMu7LXXXl7Dbrzxxpka9vTTTw+xuaHYGrY0NbfGvyxrbtWlMZD3enuDDTbw2lNOqptVS6qGjw0v7pFdf2u8r732ms8RVOvGZhGfI8TmDa9NVdeqNs4eb7Y3PyOAAAIIIIAAAggsGwFl3QTepbRUWHriiSd6MRs7rj1wVoGrCcL//vc/L/pjt0nQhCS9qbiNS3OE+JVGD4816YidNV70fv/99yF26oT11lsv3H333YUmGzqWjq3Q+J133gnx66AhdimXKvDWeYYOHRpGjhzp4a+OobC8pMBbRbwmItrv0UcfzUyomjdvXmLgrX11bZoQabKgQl/BvAz0qNC7TZs2PinLnuxoX00sOnToEDR50h8EYmeN76uQ/cILL/Q/Ktx0003+u/RkQ88HDx7sk6qzzz7bJyw6p/7FZWA8sI/LoYSZM2fmDNrTnxfPEUAAAQQQQACB8iSgOkd1YFymzetJNQMkNZJC2jPOOMPr0yFDhhQKnrWvGizUsHHppZeGBQsWeH2kGkmh9M477xw22mijEL9BWKhGUp2rBgI1esTlT/z96Rq2V69eIS6TF26//Xav89JmqnFjR7g3iGjsCsUV1pcm8F4ZNbfqeV2HmkzOO+88r+dlpOtV/a3mETVeqEElu2kjLsXnDS1qMolLoXg9n8wRRowY4c0ehx12WKE5QtqL5wgggAACCCCAAALLToDAuwyWCmNV1MdlS7wDOr1rXDokdO7c2QtaBcrpTYVy/JqpdxkrlFXxnN4mTZrkxz3qqKN8spF+Tc/Twa5CY3WSl6bDW/ul91XHd2kC7+T86f01OYrraJcYeGsCoAmNumDUNaRO8WRSoEcF+PGrsx7aa/KjyUCy6bnC/bhcSbjjjjsKhP8yUzeRjqvOb40nuTY9xuVWQlyb3CdS6sLXJDDZ5P/QQw95d7smgunXkvfwiAACCCCAAAIIlFcB1Uhx6ZAQly8JDzzwQKEaacqUKSHeHyWccsopXhOlaySFsfG+L16jxnu5FKhDVSPddtttXh+qMSK7RtLrDz/8sNewN998c4F9)
## TODO
- add nice spacing and typography for easy reading
- pdf options
- problem numbers [true]
- number of columns [auto]
- font
- include column labels
- print
- addition
- subtraction
- mult? div?
- hex?
### Other Projects That Could Depend On This
- do the problems online/on computer
- a website to serve these up and let people use them for free
- a web API that serves it, so people can do that programmatically
- a snail mail service?
- https://developers.lulu.com/price-calculator
- if there's going to be exercises in the browser,
- parseInt('0101', 2)
- maybe re-implement in Javascript so all computation and rendering is done on the client
- [PDF rendering in the browser](https://pspdfkit.com/blog/2018/render-pdfs-in-the-browser-with-pdf-js/)