File size: 3,406 Bytes
f438d4c c31fddb f438d4c c31fddb f438d4c c31fddb f438d4c c31fddb f438d4c c31fddb f438d4c c31fddb f438d4c c31fddb f438d4c c31fddb f438d4c c31fddb f438d4c c31fddb f438d4c b3df5fa c31fddb 35d1fe9 c31fddb f438d4c c31fddb f438d4c c31fddb f438d4c c31fddb e71c94c c9509de 35d1fe9 cad8275 c31fddb e71c94c c31fddb f438d4c c31fddb f438d4c 86f48c4 c31fddb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
from bs4 import BeautifulSoup
import requests
import numpy as np
from datetime import datetime
def gen_link():
if np.random.choice([True, False]):
# AMC
np.random.seed()
year = np.random.randint(2015, 2023)
AB = np.random.choice(['A', 'B'])
# Question
mu, sigma = 18, 5
s = np.random.normal(mu, sigma, 1000)
s = np.round(s)
s = s[(s >= 10) & (s <= 25)]
q = int(np.random.choice(s))
link = f'https://artofproblemsolving.com/wiki/index.php/{year}_AMC_12{AB}_Problems/Problem_{q}'
else:
# AIME
np.random.seed()
year = np.random.randint(2005, 2023)
I = np.random.choice(['I', 'II'])
mu, sigma = 6, 4
s = np.random.normal(mu, sigma, 1000)
s = np.round(s)
s = s[(s >= 1) & (s <= 15)]
q = int(np.random.choice(s))
link = f'https://artofproblemsolving.com/wiki/index.php/{year}_AIME_{I}_Problems/Problem_{q}'
return link
def convert_to_renderable_html(text):
text = text.replace('//latex.artofproblemsolving.com', 'https://latex.artofproblemsolving.com')
return text
def get_problem(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
problem_headline = soup.find('span', {'class': 'mw-headline', 'id': 'Problem'})
if problem_headline:
problem_content = []
for sibling in problem_headline.parent.find_next_siblings():
if sibling.name == 'h2':
break
elif sibling.name == 'p':
problem_content.append(convert_to_renderable_html(str(sibling)))
problem_html = " ".join(problem_content)
return problem_html
else:
print("No problem found")
def gen_html(num):
all_q = str()
num_tried = 0
num_succ = 0
while True:
try:
link = gen_link()
print(link)
hype = f'<a href="{link}" target="_blank">to AOPS</a>'
qhtml = get_problem(link)
all_q += (hype + qhtml + '<div class="spacer"></div>') # Add spacer div between questions
num_succ += 1
except Exception as e:
print(f"Error: {e}")
pass
num_tried += 1
if num_succ >= num or num_tried > 20:
break
all_q = f'''
<html>
<head>
<style>
body {{
font-family: Arial, sans-serif;
font-size: 12pt;
margin: 150px; /* Add side margins */
}}
.spacer {{
margin-top: 50px; /* Add spacing between questions */
}}
img.latex {{
font-size: 12pt; /* Ensure math font size matches the body text size */
}}
a {{
color: blue;
text-decoration: none;
}}
a:hover {{
text-decoration: underline;
}}
</style>
</head>
<body>
{all_q}
</body>
</html>
'''
return all_q
def save_html_to_file(html_content, output_filename):
with open(output_filename, 'w', encoding='utf-8') as file:
file.write(html_content)
|