This commit is contained in:
2020-06-11 10:56:27 +02:00
commit 5f2d5fb86c
11 changed files with 380 additions and 0 deletions

0
app/__init__.py Normal file
View File

3
app/check.py Normal file
View File

@@ -0,0 +1,3 @@
def check(binary_string):
return int(binary_string, 2)

1
app/config.py Normal file
View File

@@ -0,0 +1 @@
BEGIN_ANSWERS_TOKEN = "*BEGIN ANSWERS*"

15
app/generate.py Normal file
View File

@@ -0,0 +1,15 @@
import random
from app.check import check
def generate(bits=8):
return "".join([random.choice("10") for i in range(bits)])
def generate_problems(bits, num_problems):
return [generate(bits) for i in range(num_problems)]
def generate_answers(problems):
return [check(problem) for problem in problems]

27
app/main.py Executable file
View File

@@ -0,0 +1,27 @@
import sys
from app.generate import generate_answers, generate_problems
from config import BEGIN_ANSWERS_TOKEN
def main():
if len(sys.argv) < 3:
print(
"please supply the number of bits and the number of exercises you'd like, "
"space-separated, like so:\n\n $ binary 8 100\n"
)
sys.exit()
bits = int(sys.argv[1])
num_problems = int(sys.argv[2])
problems = generate_problems(bits, num_problems)
answers = generate_answers(problems)
problems_string = "\n\n".join(problems)
answers_string = "\n\n".join(
[f"{problem} | {answer} " for problem, answer in zip(problems, answers)]
)
sys.stdout.write(BEGIN_ANSWERS_TOKEN.join((problems_string, answers_string)))
return problems_string, answers_string

29
app/test/test_generate.py Normal file
View File

@@ -0,0 +1,29 @@
from app.generate import generate, generate_problems
from app.check import check
def test_generate():
first_problem = generate(bits=5)
assert len(first_problem) == 5
assert all(char in ('1', '0') for char in first_problem)
assert '1' in first_problem
assert '0' in first_problem
def test_generate_problems():
problems = generate_problems(bits=5, num_problems=100)
first_problem = problems[0]
assert len(problems) == 100
assert len(first_problem) == 5
assert all(char in ('1', '0') for char in first_problem)
assert '1' in first_problem
assert '0' in first_problem
def test_check():
assert check('110') == 6
assert check('000') == 0
assert check('001') == 1
assert check('011') == 3
assert check('010') == 2