43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
import random
|
|
|
|
from app.schemas.grade_1.compose_and_decompose_numbers import (
|
|
ComposeAndDecomposeNumbersProblem,
|
|
DecompositionRow,
|
|
PictureAsset,
|
|
)
|
|
|
|
|
|
def compose_and_decompose_numbers(
|
|
picture: dict,
|
|
whole: int = 10,
|
|
randomize_rows: bool = False,
|
|
seed: int | None = None,
|
|
) -> dict:
|
|
"""Generate number decomposition rows for one picture asset."""
|
|
if whole < 2:
|
|
raise ValueError("whole must be at least 2")
|
|
|
|
selected_picture = PictureAsset.model_validate(picture)
|
|
pairs = [(first_part, whole - first_part) for first_part in range(whole - 1, 0, -1)]
|
|
|
|
if randomize_rows:
|
|
rng = random.Random(seed)
|
|
rng.shuffle(pairs)
|
|
|
|
problem = ComposeAndDecomposeNumbersProblem(
|
|
whole=whole,
|
|
picture=selected_picture,
|
|
rows=[
|
|
DecompositionRow(
|
|
position=index + 1,
|
|
whole=whole,
|
|
first_part=first_part,
|
|
second_part=second_part,
|
|
picture=selected_picture,
|
|
)
|
|
for index, (first_part, second_part) in enumerate(pairs)
|
|
],
|
|
)
|
|
|
|
return problem.model_dump()
|