-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathproblem.html
More file actions
246 lines (222 loc) · 17.6 KB
/
problem.html
File metadata and controls
246 lines (222 loc) · 17.6 KB
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
.sheet { padding: 1.5rem 0; font-family: var(--font-sans); }
.brief { background: var(--color-background-secondary); border-radius: var(--border-radius-lg); padding: 1.25rem 1.5rem; margin-bottom: 1.5rem; border: 0.5px solid var(--color-border-tertiary); }
.brief h1 { font-size: 20px; font-weight: 500; color: var(--color-text-primary); margin-bottom: 4px; }
.brief p { font-size: 13px; color: var(--color-text-secondary); line-height: 1.6; }
.section { background: var(--color-background-primary); border: 0.5px solid var(--color-border-tertiary); border-radius: var(--border-radius-lg); padding: 1.25rem; margin-bottom: 1rem; }
.sec-header { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.sec-num { width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 500; flex-shrink: 0; }
.s1 { background: #EEEDFE; color: #3C3489; }
.s2 { background: #E1F5EE; color: #085041; }
.s3 { background: #FAEEDA; color: #633806; }
.s4 { background: #FAECE7; color: #712B13; }
.s5 { background: #E6F1FB; color: #0C447C; }
.sec-title { font-size: 15px; font-weight: 500; color: var(--color-text-primary); }
.sec-subtitle { font-size: 12px; color: var(--color-text-secondary); }
.given-box { background: var(--color-background-secondary); border-radius: var(--border-radius-md); padding: 12px 14px; margin-bottom: 14px; }
.given-label { font-size: 11px; font-weight: 500; color: var(--color-text-secondary); letter-spacing: 0.05em; text-transform: uppercase; margin-bottom: 8px; }
.given-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 8px; }
.given-item { background: var(--color-background-primary); border: 0.5px solid var(--color-border-tertiary); border-radius: var(--border-radius-md); padding: 8px 10px; }
.given-item .val { font-size: 15px; font-weight: 500; color: var(--color-text-primary); font-family: var(--font-mono); }
.given-item .lbl { font-size: 11px; color: var(--color-text-secondary); margin-top: 2px; }
.task-list { list-style: none; }
.task-list li { display: flex; gap: 10px; padding: 9px 0; border-bottom: 0.5px solid var(--color-border-tertiary); font-size: 13px; color: var(--color-text-primary); line-height: 1.55; align-items: flex-start; }
.task-list li:last-child { border-bottom: none; }
.task-num { font-size: 11px; font-weight: 500; color: var(--color-text-secondary); min-width: 20px; padding-top: 1px; }
.formula { font-family: var(--font-mono); font-size: 12px; background: var(--color-background-secondary); padding: 2px 6px; border-radius: 4px; color: var(--color-text-primary); display: inline; }
.expected { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; padding-top: 10px; border-top: 0.5px solid var(--color-border-tertiary); }
.exp-label { font-size: 11px; font-weight: 500; color: var(--color-text-secondary); letter-spacing: 0.05em; text-transform: uppercase; width: 100%; }
.exp-pill { font-size: 12px; padding: 4px 10px; border-radius: var(--border-radius-md); border: 0.5px solid var(--color-border-tertiary); color: var(--color-text-secondary); font-family: var(--font-mono); }
.warn { background: #FAEEDA; border-radius: var(--border-radius-md); padding: 8px 12px; font-size: 12px; color: #633806; margin-top: 10px; line-height: 1.5; }
.final-card { background: var(--color-background-primary); border: 1.5px solid var(--color-border-info); border-radius: var(--border-radius-lg); padding: 1.25rem; margin-bottom: 1rem; }
.final-card .sec-header { margin-bottom: 10px; }
.output-block { background: var(--color-background-secondary); border-radius: var(--border-radius-md); padding: 12px 14px; font-family: var(--font-mono); font-size: 12px; color: var(--color-text-primary); line-height: 1.8; border: 0.5px solid var(--color-border-tertiary); margin-top: 10px; white-space: pre; }
.badge { font-size: 11px; padding: 3px 8px; border-radius: var(--border-radius-md); font-weight: 500; margin-left: auto; }
.hard { background: #FAECE7; color: #712B13; }
.med { background: #FAEEDA; color: #633806; }
.easy { background: #EAF3DE; color: #27500A; }
</style>
<div class="sheet">
<h2 class="sr-only">Smart City Planner — real problem sheet with given values and expected answers</h2>
<div class="brief">
<h1>Smart City Planner — problem sheet</h1>
<p>You are the lead engineer for a new city district called <strong style="color:var(--color-text-primary);font-weight:500;">Naya Nagar</strong> in Delhi. The municipal corporation has given you exact measurements and budgets. Use Python to answer every question below. All values are fixed — your output must match the expected answers.</p>
</div>
<div class="section">
<div class="sec-header">
<div class="sec-num s1">1</div>
<div>
<div class="sec-title">Land plot measurements</div>
<div class="sec-subtitle">math.sqrt · math.pi · math.ceil · operators</div>
</div>
<span class="badge easy">Easy</span>
</div>
<div class="given-box">
<div class="given-label">Given data</div>
<div class="given-grid">
<div class="given-item"><div class="val">120 m</div><div class="lbl">Park plot — circle radius</div></div>
<div class="given-item"><div class="val">85 m × 200 m</div><div class="lbl">Commercial plot — rectangle</div></div>
<div class="given-item"><div class="val">a=90, b=110, c=140 m</div><div class="lbl">Hospital plot — triangle sides</div></div>
<div class="given-item"><div class="val">₹180 / metre</div><div class="lbl">Fencing cost per metre</div></div>
</div>
</div>
<ul class="task-list">
<li><span class="task-num">1.1</span>Calculate the area of the circular park using <span class="formula">math.pi * r ** 2</span>. Round to 2 decimal places.</li>
<li><span class="task-num">1.2</span>Calculate the area of the rectangular commercial plot.</li>
<li><span class="task-num">1.3</span>Calculate the area of the triangular hospital plot using Heron's formula: <span class="formula">s = (a+b+c)/2</span>, then <span class="formula">math.sqrt(s*(s-a)*(s-b)*(s-c))</span>. Round to 2 decimal places.</li>
<li><span class="task-num">1.4</span>The perimeter of the circular park is <span class="formula">2 * math.pi * r</span>. Use <span class="formula">math.ceil()</span> on the perimeter before multiplying by ₹180 — because you must buy whole metres of fencing. Print the total fencing cost.</li>
<li><span class="task-num">1.5</span>Write a function <span class="formula">classify_plot(area)</span>: area < 5000 = "Small", 5000–20000 = "Medium", >20000 = "Large". Classify all three plots.</li>
</ul>
<div class="expected">
<div class="exp-label">Expected answers</div>
<div class="exp-pill">Park area: 45238.93 m²</div>
<div class="exp-pill">Commercial: 17000 m²</div>
<div class="exp-pill">Hospital: 4879.30 m²</div>
<div class="exp-pill">Fencing cost: ₹1,35,936</div>
<div class="exp-pill">Park → Large, Commercial → Medium, Hospital → Small</div>
</div>
</div>
<div class="section">
<div class="sec-header">
<div class="sec-num s2">2</div>
<div>
<div class="sec-title">Building specifications</div>
<div class="sec-subtitle">math.pow · math.log · math.floor · math.ceil</div>
</div>
<span class="badge med">Medium</span>
</div>
<div class="given-box">
<div class="given-label">Given data — three buildings to analyse</div>
<div class="given-grid">
<div class="given-item"><div class="val">Residential tower</div><div class="lbl">40m × 30m · 25 floors · concrete</div></div>
<div class="given-item"><div class="val">Office block</div><div class="lbl">60m × 45m · 12 floors · steel</div></div>
<div class="given-item"><div class="val">Community hall</div><div class="lbl">25m × 20m · 2 floors · wood</div></div>
<div class="given-item"><div class="val">Floor height: 3.2 m</div><div class="lbl">Same for all buildings</div></div>
</div>
</div>
<ul class="task-list">
<li><span class="task-num">2.1</span>For each building, calculate total height = <span class="formula">floors * 3.2</span> and volume = <span class="formula">length * width * total_height</span>. Store results in a dictionary per building.</li>
<li><span class="task-num">2.2</span>Elevators needed = <span class="formula">math.ceil(math.log(floors, 2))</span>, minimum 1. Calculate for each building.</li>
<li><span class="task-num">2.3</span>Structural load in tonnes: densities are concrete = 2400, steel = 7800, wood = 600 (kg/m³). Use <span class="formula">math.pow(volume, 1) * density / 1000</span> then apply <span class="formula">math.floor()</span> to the result. Print load for each building.</li>
<li><span class="task-num">2.4</span>Which building has the highest structural load? Print its name and the load value.</li>
</ul>
<div class="expected">
<div class="exp-label">Expected answers</div>
<div class="exp-pill">Residential: 96000 m³ · 5 elevators · 230,400 tonnes</div>
<div class="exp-pill">Office: 103,680 m³ · 4 elevators · 808,704 tonnes</div>
<div class="exp-pill">Community hall: 3,200 m³ · 1 elevator · 1,920 tonnes</div>
<div class="exp-pill">Highest load: Office block</div>
</div>
</div>
<div class="section">
<div class="sec-header">
<div class="sec-num s3">3</div>
<div>
<div class="sec-title">Solar energy system</div>
<div class="sec-subtitle">math.cos · math.sin · math.radians · math.degrees · math.pow</div>
</div>
<span class="badge med">Medium</span>
</div>
<div class="given-box">
<div class="given-label">Given data</div>
<div class="given-grid">
<div class="given-item"><div class="val">28.6°</div><div class="lbl">Delhi latitude</div></div>
<div class="given-item"><div class="val">500 m²</div><div class="lbl">Rooftop panel area (residential)</div></div>
<div class="given-item"><div class="val">800 m²</div><div class="lbl">Rooftop panel area (office)</div></div>
<div class="given-item"><div class="val">18%</div><div class="lbl">Panel efficiency (0.18)</div></div>
<div class="given-item"><div class="val">5.5 hrs</div><div class="lbl">Peak sun hours per day</div></div>
<div class="given-item"><div class="val">₹8.50</div><div class="lbl">Cost per kWh saved</div></div>
</div>
</div>
<ul class="task-list">
<li><span class="task-num">3.1</span>Convert 28.6° to radians using <span class="formula">math.radians(28.6)</span>. Print the result.</li>
<li><span class="task-num">3.2</span>Sun angle factor = <span class="formula">math.cos(math.radians(28.6))</span>. Daily output (kWh) = <span class="formula">area * 0.18 * sun_factor * 5.5</span>. Calculate for both rooftops.</li>
<li><span class="task-num">3.3</span>Optimal tilt angle = <span class="formula">28.6 * 0.76 + 3.1</span> degrees. Convert this back to radians using <span class="formula">math.radians()</span>. Print both values.</li>
<li><span class="task-num">3.4</span>Annual savings = <span class="formula">math.floor(daily_output * 365 * 8.5)</span>. Calculate for both buildings and print combined total savings.</li>
<li><span class="task-num">3.5</span>Use <span class="formula">math.sin(math.radians(28.6))</span> to calculate the shadow length factor of a 10m tall panel mast: <span class="formula">shadow = 10 / math.tan(math.radians(28.6))</span>. Round to 2 decimal places.</li>
</ul>
<div class="expected">
<div class="exp-label">Expected answers</div>
<div class="exp-pill">Radians: 0.4992</div>
<div class="exp-pill">Residential daily: 389.74 kWh</div>
<div class="exp-pill">Office daily: 623.59 kWh</div>
<div class="exp-pill">Optimal tilt: 24.836°</div>
<div class="exp-pill">Combined annual savings: ₹31,08,175</div>
<div class="exp-pill">Shadow length: 18.38 m</div>
</div>
</div>
<div class="section">
<div class="sec-header">
<div class="sec-num s4">4</div>
<div>
<div class="sec-title">Population & traffic simulation</div>
<div class="sec-subtitle">random.randint · random.uniform · random.choice · random.seed</div>
</div>
<span class="badge med">Medium</span>
</div>
<div class="given-box">
<div class="given-label">Given data — 4 zones</div>
<div class="given-grid">
<div class="given-item"><div class="val">Residential</div><div class="lbl">Area: 45238.93 m² (from Q1.1)</div></div>
<div class="given-item"><div class="val">Commercial</div><div class="lbl">Area: 17000 m² (from Q1.2)</div></div>
<div class="given-item"><div class="val">Hospital</div><div class="lbl">Area: 4879.30 m² (from Q1.3)</div></div>
<div class="given-item"><div class="val">Industrial</div><div class="lbl">Area: 30000 m² (fixed)</div></div>
</div>
</div>
<ul class="task-list">
<li><span class="task-num">4.1</span>Set <span class="formula">random.seed(42)</span> at the top of this section so your results are reproducible.</li>
<li><span class="task-num">4.2</span>For each zone, generate a random density using <span class="formula">random.randint(50, 200)</span>. Population = <span class="formula">math.floor(area * density / 1000)</span> (per 1000 m²). Store each zone as a dict with keys: zone, area, density, population.</li>
<li><span class="task-num">4.3</span>For each zone: peak vehicles = <span class="formula">math.floor(population * random.uniform(0.3, 0.6))</span>, off-peak = <span class="formula">math.floor(population * random.uniform(0.05, 0.15))</span>. Also pick a road condition from <span class="formula">['Good', 'Average', 'Poor']</span> using <span class="formula">random.choice()</span>.</li>
<li><span class="task-num">4.4</span>Write <span class="formula">suggest_lanes(peak_vehicles)</span>: <500→2 lanes, 500–1500→4 lanes, 1500–3000→6 lanes, >3000→8 lanes + flyover. Print suggestion for each zone.</li>
</ul>
<div class="warn">Important: use <span class="formula">random.seed(42)</span> before any random call in this section. This locks your random numbers so they are predictable and testable.</div>
</div>
<div class="section">
<div class="sec-header">
<div class="sec-num s5">5</div>
<div>
<div class="sec-title">City statistics engine</div>
<div class="sec-subtitle">math.sqrt · math.log · all previous data combined</div>
</div>
<span class="badge hard">Hard</span>
</div>
<div class="given-box">
<div class="given-label">Use all values computed in sections 1–4</div>
<div class="given-grid">
<div class="given-item"><div class="val">4 zones</div><div class="lbl">From section 4</div></div>
<div class="given-item"><div class="val">3 buildings</div><div class="lbl">From section 2</div></div>
<div class="given-item"><div class="val">2 solar rooftops</div><div class="lbl">From section 3</div></div>
</div>
</div>
<ul class="task-list">
<li><span class="task-num">5.1</span>Write <span class="formula">population_stats(zones)</span>. From your list of zone dicts, calculate: total population, average population, std deviation using <span class="formula">math.sqrt(variance)</span> where variance = mean of squared differences from the mean.</li>
<li><span class="task-num">5.2</span>Calculate total structural load across all 3 buildings (sum from section 2). Express it in millions of tonnes using <span class="formula">round(total / 1_000_000, 2)</span>.</li>
<li><span class="task-num">5.3</span>Naya Nagar's "green score" = <span class="formula">math.log(park_area / total_city_area * 100 + 1, 10) * 50</span>. Total city area = sum of all 4 zone areas. Round to 1 decimal place. A score > 20 is "Eco-Friendly".</li>
<li><span class="task-num">5.4</span>Write <span class="formula">generate_city_report()</span> that prints a clean summary: city name, total population, total building load in million tonnes, combined daily solar output, green score and rating, and a recommendation line.</li>
</ul>
<div class="output-block">===== NAYA NAGAR CITY REPORT =====
Total population : ????
Total building load : ???? million tonnes
Daily solar output : ???? kWh
Green score : ???? — Eco-Friendly / Needs Work
Recommendation : ????
==================================</div>
</div>
<div class="final-card">
<div class="sec-header">
<div class="sec-num" style="background:#E6F1FB;color:#0C447C;">F</div>
<div>
<div class="sec-title">Final constraint checklist</div>
</div>
</div>
<ul class="task-list">
<li><span class="task-num">R1</span>Only <span class="formula">import math</span> and <span class="formula">import random</span> — no other imports</li>
<li><span class="task-num">R2</span>Every function must return a value — never return None silently</li>
<li><span class="task-num">R3</span>Use <span class="formula">math.sqrt</span>, <span class="formula">math.pow</span>, <span class="formula">math.floor</span>, <span class="formula">math.ceil</span>, <span class="formula">math.pi</span>, <span class="formula">math.log</span>, <span class="formula">math.radians</span>, <span class="formula">math.cos</span>, <span class="formula">math.sin</span> — all nine must appear at least once</li>
<li><span class="task-num">R4</span>Use <span class="formula">random.randint</span>, <span class="formula">random.uniform</span>, <span class="formula">random.choice</span>, <span class="formula">random.seed</span> — all four must appear</li>
<li><span class="task-num">R5</span>Section 4 must start with <span class="formula">random.seed(42)</span> — non-negotiable</li>
<li><span class="task-num">R6</span>All currency output must be formatted as ₹X,XX,XXX — use Python string formatting</li>
</ul>
</div>
</div>