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

69 lines
2.9 KiB
Python

from random import Random
from typing import Dict, Any
def generate_from_variables(name: str, hours: int, days: int, rate: int,
bonus: int, month: str) -> Dict[str, Any]:
daily_pay = hours * rate
monthly_days = days * 4
monthly_base = daily_pay * monthly_days
monthly_bonus = bonus * 4
total_pay = monthly_base + monthly_bonus
question = f"{name} works a {hours}-hour shift each day, {days} days a week. He earns ${rate} per hour and gets a ${bonus} bonus each week if the company performs well. How much money did {name} make in {month} if the company performed very well for the whole month?"
answer_cot = f"In a day, {name} makes {hours} * {rate} = ${daily_pay}\n" \
f"If he works {days} days a week, the total number of days for the whole month is {days} * 4= {monthly_days} days.\n" \
f"Since he makes ${daily_pay} per day, the total amount for the whole month is {monthly_days} * {daily_pay}= ${monthly_base}.\n" \
f"He also got a {bonus} * 4 = ${monthly_bonus} bonus because the company performed well in all the weeks of {month}.\n" \
f"At the end of {month}, he earned {monthly_base} + {monthly_bonus} = ${total_pay}.\n#### {total_pay}"
return {
'question': question,
'answer': str(total_pay),
'answer_cot': answer_cot,
'answer_value': total_pay,
'variables': {
'name': name,
'hours_per_day': hours,
'days_per_week': days,
'hourly_rate': rate,
'weekly_bonus': bonus,
'month': month,
'daily_pay': daily_pay,
'monthly_base': monthly_base,
'monthly_bonus': monthly_bonus
}
}
def generate_example(rng: Random, difficulty: float = 1.0) -> Dict[str, Any]:
names = ["James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph"]
months = ["January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"]
name = rng.choice(names)
month = rng.choice(months)
hours = int(rng.randint(6, int(13 * difficulty)))
days = int(rng.randint(3, int(7 * difficulty)))
rate = int(rng.randint(8, int(31 * difficulty)))
bonus = int(rng.randint(100, int(601 * difficulty)))
# Ensure rate * hours is an integer
while (hours * rate) % 1 != 0:
rate = int(rng.randint(8, int(31 * difficulty)))
result = generate_from_variables(name, hours, days, rate, bonus, month)
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("Watson", 10, 5, 10, 300, "April")