| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | --- | 
					
						
							|  |  |  | id: 5d792533bb38fab70b27f527 | 
					
						
							| 
									
										
										
										
											2020-08-25 02:19:45 -07:00
										 |  |  | title: Part 16 | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | challengeType: 0 | 
					
						
							| 
									
										
										
										
											2021-01-13 03:31:00 +01:00
										 |  |  | dashedName: part-16 | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | # --description--
 | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-09 19:37:02 +09:00
										 |  |  | `arg1` and `arg2` are the numbers input by the user in a string such as "1+3". | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | Pass `parseFloat(arg1)` and `parseFloat(arg2)` as the arguments to `infixToFunction[fn]` (remember `infixToFunction[fn]` is a function). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | # --hints--
 | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | See description above for instructions. | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ```js | 
					
						
							|  |  |  | const regex = /([0-9.]+)([+-\/*])([0-9.]+)/; | 
					
						
							|  |  |  | assert( | 
					
						
							|  |  |  |   infixEval('23+35', regex) === '58' && | 
					
						
							|  |  |  |     infixEval('100-20', regex) === '80' && | 
					
						
							|  |  |  |     infixEval('10*10', regex) === '100' && | 
					
						
							|  |  |  |     infixEval('120/6', regex) === '20' | 
					
						
							|  |  |  | ); | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | # --seed--
 | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ## --before-user-code--
 | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```html | 
					
						
							|  |  |  | <!DOCTYPE html> | 
					
						
							|  |  |  | <html lang="en"> | 
					
						
							|  |  |  | <head> | 
					
						
							|  |  |  |   <meta charset="UTF-8"> | 
					
						
							|  |  |  |   <title>Spreadsheet</title> | 
					
						
							|  |  |  |   <style> | 
					
						
							|  |  |  |     #container { | 
					
						
							|  |  |  |       display: grid; | 
					
						
							|  |  |  |       grid-template-columns: 50px repeat(10, 200px); | 
					
						
							|  |  |  |       grid-template-rows: repeat(11, 30px); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     .label { | 
					
						
							|  |  |  |       background-color: lightgray; | 
					
						
							|  |  |  |       text-align: center; | 
					
						
							|  |  |  |       vertical-align: middle; | 
					
						
							|  |  |  |       line-height: 30px; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   </style> | 
					
						
							|  |  |  | </head> | 
					
						
							|  |  |  | <body> | 
					
						
							|  |  |  | <div id="container"> | 
					
						
							|  |  |  |   <div></div> | 
					
						
							|  |  |  | </div> | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ## --after-user-code--
 | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```html | 
					
						
							|  |  |  | </body> | 
					
						
							|  |  |  | </html> | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ## --seed-contents--
 | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ```html | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const infixToFunction = { | 
					
						
							|  |  |  |   "+": (x, y) => x + y, | 
					
						
							|  |  |  |   "-": (x, y) => x - y, | 
					
						
							|  |  |  |   "*": (x, y) => x * y, | 
					
						
							|  |  |  |   "/": (x, y) => x / y | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const infixEval = (str, regex) => | 
					
						
							|  |  |  |   str.replace(regex, (match, arg1, fn, arg2) => | 
					
						
							|  |  |  |     infixToFunction[fn] | 
					
						
							|  |  |  |   ); | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | </script> | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | # --solutions--
 | 
					
						
							| 
									
										
										
										
											2019-11-05 02:09:40 -01:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```html | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  | const infixToFunction = { | 
					
						
							|  |  |  |   "+": (x, y) => x + y, | 
					
						
							|  |  |  |   "-": (x, y) => x - y, | 
					
						
							|  |  |  |   "*": (x, y) => x * y, | 
					
						
							|  |  |  |   "/": (x, y) => x / y | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const infixEval = (str, regex) => | 
					
						
							|  |  |  |   str.replace(regex, (match, arg1, fn, arg2) => | 
					
						
							|  |  |  |     infixToFunction[fn](parseFloat(arg1), parseFloat(arg2)) | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | ``` |