first
This commit is contained in:
0
app/__init__.py
Normal file
0
app/__init__.py
Normal file
3
app/check.py
Normal file
3
app/check.py
Normal file
@@ -0,0 +1,3 @@
|
||||
|
||||
def check(binary_string):
|
||||
return int(binary_string, 2)
|
||||
1
app/config.py
Normal file
1
app/config.py
Normal file
@@ -0,0 +1 @@
|
||||
BEGIN_ANSWERS_TOKEN = "*BEGIN ANSWERS*"
|
||||
15
app/generate.py
Normal file
15
app/generate.py
Normal 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
27
app/main.py
Executable 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
29
app/test/test_generate.py
Normal 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
|
||||
Reference in New Issue
Block a user