reasoning-gym/reasoning_gym/arithmetic/gsm_symbolic/generator_39.py

62 lines
2.6 KiB
Python

from random import Random
from typing import Dict, Any
def generate_from_variables(total: int, grade: str, school_name: str, num_girls: int,
day: str, absent_girls: int, absent_boys: int) -> Dict[str, Any]:
num_boys = total - num_girls
remaining_boys = num_boys - absent_boys
question = f"There are {total} {grade}-graders at {school_name} School. {num_girls} of them are girls. On {day}, {absent_girls} {grade}-grade girls and {absent_boys} {grade}-grade boys were absent. How many {grade} grade boys were at {school_name} School on {day}?"
answer_cot = f"Of the {total} {grade} graders, {num_girls} are girls, so {total} students - {num_girls} girls = {num_boys} boys.\nOn {day} there were {num_boys} boys - {absent_boys} absent = {remaining_boys} boys.\n#### {remaining_boys}"
return {
'question': question,
'answer': str(remaining_boys),
'answer_cot': answer_cot,
'answer_value': remaining_boys,
'variables': {
'total_students': total,
'grade': grade,
'school_name': school_name,
'num_girls': num_girls,
'num_boys': num_boys,
'day': day,
'absent_girls': absent_girls,
'absent_boys': absent_boys,
'remaining_boys': remaining_boys
}
}
def generate_example(rng: Random, difficulty: float = 1.0) -> Dict[str, Any]:
school_names = ["Maple Grove", "Sunny Hill", "Oak Ridge", "Pine Valley"]
grades = ["first", "second", "third", "fourth", "fifth"]
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
school_name = rng.choice(school_names)
grade = rng.choice(grades)
day = rng.choice(days)
total = int(rng.randint(50, int(200 * difficulty)))
num_girls = int(rng.randint(20, total - 1))
num_boys = total - num_girls
absent_girls = int(rng.randint(2, min(num_girls, int(10 * difficulty))))
absent_boys = int(rng.randint(2, min(num_boys, int(10 * difficulty))))
result = generate_from_variables(total, grade, school_name, num_girls,
day, absent_girls, absent_boys)
return {
'question': result['question'],
'answer': result['answer'],
'metadata': {
'difficulty': difficulty,
'answer_value': result['answer_value'],
'answer_cot': result['answer_cot'],
'variables': result['variables']
}
}
def original_example() -> Dict[str, Any]:
return generate_from_variables(96, "fourth", "Small Tree", 43, "Friday", 5, 4)