# Khan/khan-exercises

Merge branch 'master' of http://github.com/Khan/khan-exercises into c…

…hemistry
2 parents 97c26f5 + 07beb59 commit fc65663156c4328f6c2c6d28bf1459dcba79ebca joelburget committed Sep 9, 2011
Showing with 19,097 additions and 4,033 deletions.
1. +95 −0 build/kathjax-config.js
2. +142 −0 build/kathjax.py
3. +231 −2 css/khan-exercise.css
5. +1 −3 exercises/angle_types.html
6. +8 −8 exercises/arithmetic_word_problems_1.html
7. +271 −0 exercises/arithmetic_word_problems_2.html
8. +168 −0 exercises/compound_inequalities.html
9. +108 −0 exercises/congruent_triangles_1.html
10. +4 −4 exercises/conic_sections.html
11. +2 −2 exercises/converting_decimals_to_fractions_1.html
12. +7 −6 exercises/converting_decimals_to_fractions_2.html
13. +1 −1 exercises/dependent_probability.html
14. +3 −3 exercises/domain_of_a_function.html
15. +13 −12 exercises/equation_of_a_parabola.html
16. +4 −2 exercises/estimation_with_decimals.html
17. +1 −1 exercises/fractions_on_the_number_line.html
18. +2 −1 exercises/geometry_1.html
19. +191 −0 exercises/graphing_inequalities.html
20. +1 −1 exercises/graphing_points.html
21. +5 −5 exercises/inequalities_on_a_number_line.html
22. +2 −2 exercises/inverse_trig_functions.html
23. +11 −7 exercises/khan-exercise.html
24. +118 −33 exercises/lines_of_symmetry.html
25. +1 −2 exercises/measuring_angles.html
26. +55 −36 exercises/number_line.html
27. +14 −16 exercises/ordering_fractions.html
28. +5 −2 exercises/ordering_negative_numbers.html
29. +5 −5 exercises/percentage_word_problems_1.html
30. +190 −0 exercises/polygon_intuition.html
31. +103 −0 exercises/properties_of_numbers_1.html
32. +59 −0 exercises/properties_of_numbers_2.html
33. +1 −0 exercises/ratio_word_problems.html
34. +3 −3 exercises/recognizing_conic_sections.html
35. +60 −61 exercises/signs_of_a_parabola.html
36. +73 −0 exercises/similar_triangles_1.html
37. +1 −1 exercises/subtracting_fractions.html
38. +160 −0 exercises/triangle_angles.html
39. +84 −0 exercises/triangle_inequality.html
40. +110 −0 exercises/triangle_types.html
41. +1 −1 exercises/writing_proportions.html
42. +9,032 −3,603 jquery.js
43. +639 −209 khan-exercise.js
44. +30 −0 utils/MathJax/1.1a/MathJax.js
45. +6 −0 utils/MathJax/1.1a/config/KAthJax-7d639a8567d885717dcee68710bda571.js
46. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_AMS-Regular.eot
47. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Caligraphic-Bold.eot
48. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Caligraphic-Regular.eot
49. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Fraktur-Bold.eot
50. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Fraktur-Regular.eot
51. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Main-Bold.eot
52. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Main-Italic.eot
53. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Main-Regular.eot
54. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Math-BoldItalic.eot
55. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Math-Italic.eot
56. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Math-Regular.eot
57. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Bold.eot
58. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Italic.eot
59. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Regular.eot
60. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Script-Regular.eot
61. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Size1-Regular.eot
62. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Size2-Regular.eot
63. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Size3-Regular.eot
64. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Size4-Regular.eot
65. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_Typewriter-Regular.eot
66. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/eot/MathJax_WinIE6-Regular.eot
67. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_AMS-Regular.otf
68. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Bold.otf
69. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Regular.otf
70. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Fraktur-Bold.otf
71. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Fraktur-Regular.otf
72. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Main-Bold.otf
73. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Main-Italic.otf
74. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Main-Regular.otf
75. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Math-BoldItalic.otf
76. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Math-Italic.otf
77. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Math-Regular.otf
78. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Bold.otf
79. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Italic.otf
80. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Regular.otf
81. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Script-Regular.otf
82. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Size1-Regular.otf
83. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Size2-Regular.otf
84. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Size3-Regular.otf
85. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Size4-Regular.otf
86. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_Typewriter-Regular.otf
87. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_WinChrome-Regular.otf
88. utils/MathJax/1.1a/fonts/HTML-CSS/TeX/otf/MathJax_WinIE6-Regular.otf
89. +765 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_AMS-Regular.svg
90. +136 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Caligraphic-Bold.svg
91. +134 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Caligraphic-Regular.svg
92. +319 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Fraktur-Bold.svg
93. +309 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Fraktur-Regular.svg
94. +656 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Main-Bold.svg
95. +374 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Main-Italic.svg
96. +659 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Main-Regular.svg
97. +331 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Math-BoldItalic.svg
98. +331 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Math-Italic.svg
99. +330 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Math-Regular.svg
100. +280 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_SansSerif-Bold.svg
101. +245 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_SansSerif-Italic.svg
102. +211 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_SansSerif-Regular.svg
103. +160 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Script-Regular.svg
104. +110 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Size1-Regular.svg
105. +109 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Size2-Regular.svg
106. +49 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Size3-Regular.svg
107. +102 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Size4-Regular.svg
108. +322 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_Typewriter-Regular.svg
109. +39 −0 utils/MathJax/1.1a/fonts/HTML-CSS/TeX/svg/MathJax_WinChrome-Regular.svg
110. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/Arrows.js
111. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/BasicLatin.js
112. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/CombDiacritMarks.js
113. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/CombDiactForSymbols.js
114. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/Dingbats.js
115. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/GeneralPunctuation.js
116. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/GeometricShapes.js
117. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/GreekAndCoptic.js
118. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/Latin1Supplement.js
119. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/LetterlikeSymbols.js
120. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/MathOperators.js
121. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/MiscMathSymbolsA.js
122. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/MiscMathSymbolsB.js
123. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/MiscTechnical.js
124. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/SpacingModLetters.js
125. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/SuppMathOperators.js
126. +16 −0 utils/MathJax/1.1a/jax/element/mml/optable/SupplementalArrowsB.js
135. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Arrows.js
136. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/BBBold.js
137. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/BoxDrawing.js
138. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/CombDiacritMarks.js
139. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Dingbats.js
140. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/EnclosedAlphanum.js
141. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/GeneralPunctuation.js
142. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/GeometricShapes.js
143. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/GreekAndCoptic.js
144. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Latin1Supplement.js
145. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/LatinExtendedA.js
146. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/LetterlikeSymbols.js
147. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Main.js
148. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/MathOperators.js
149. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/MiscMathSymbolsB.js
150. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/MiscSymbols.js
151. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/MiscTechnical.js
152. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/PUA.js
153. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/SpacingModLetters.js
154. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/SuppMathOperators.js
155. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Caligraphic/Bold/Main.js
156. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Caligraphic/Regular/Main.js
157. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/BasicLatin.js
158. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/Main.js
159. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/Other.js
160. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/PUA.js
161. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/BasicLatin.js
162. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/Main.js
163. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/Other.js
164. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/PUA.js
165. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Greek/Bold/Main.js
166. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Greek/BoldItalic/Main.js
167. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Greek/Italic/Main.js
168. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Greek/Regular/Main.js
169. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Main/Bold/Arrows.js
170. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Main/Bold/CombDiacritMarks.js
171. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Main/Bold/CombDiactForSymbols.js
172. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Main/Bold/GeneralPunctuation.js
173. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Main/Bold/GeometricShapes.js
174. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Main/Bold/Latin1Supplement.js
175. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Main/Bold/LatinExtendedA.js
176. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Main/Bold/LatinExtendedB.js
177. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Main/Bold/LetterlikeSymbols.js
178. +16 −0 utils/MathJax/1.1a/jax/output/HTML-CSS/fonts/TeX/Main/Bold/Main.js
Sorry, we could not display the entire diff because it was too big.
95 build/kathjax-config.js
142 build/kathjax.py
 @@ -0,0 +1,142 @@ +import hashlib +import os +import re +import shutil +import sys +import tempfile + +try: + import json +except ImportError: + import simplejson as json + +pack = [ + 'extensions/MathZoom.js', + 'extensions/TeX/AMSmath.js', + 'extensions/TeX/AMSsymbols.js', + 'extensions/TeX/noErrors.js', + 'extensions/TeX/noUndefined.js', + 'extensions/TeX/newcommand.js', + 'extensions/TeX/boldsymbol.js', + 'extensions/tex2jax.js', + 'jax/element/mml/jax.js', + 'jax/input/TeX/config.js', + 'jax/input/TeX/jax.js', + 'jax/output/HTML-CSS/config.js', + 'jax/output/HTML-CSS/jax.js', +] + +origwd = os.getcwd() +tempdir = tempfile.mkdtemp() +mjdir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../utils/MathJax/1.1a")) + +if os.path.isdir(mjdir): + print "%s exists, exiting" % mjdir + sys.exit(1) +else: + print "Creating directory %s" % mjdir + os.makedirs(mjdir) + +os.chdir(tempdir) + +print "Downloading MathJax..." +os.system('curl -# -L -o mathjax.zip https://github.com/mathjax/MathJax/zipball/v1.1a') + +print "Unzipping..." +os.system('unzip -q mathjax.zip') +os.unlink('mathjax.zip') + +try: + os.chdir((path for path in os.listdir(".") if path.startswith("mathjax-")).next()) +except: + print "Error unzipping mathjax.js" + sys.exit(1) + +# Pack most things into KAthJax.js + +print "Joining JavaScript files..." + +kathjax_js = open('KAthJax.js', 'w') + +config_js = open(os.path.join(origwd, os.path.dirname(__file__), "kathjax-config.js"), 'r') +kathjax_js.write(config_js.read()) +config_js.close() + +kathjax_js.write('MathJax.Ajax.Preloading(\n') +kathjax_js.write(',\n'.join('\t%s' % json.dumps('[MathJax]/%s' % path) for path in pack)) +kathjax_js.write('\n);\n\n') +kathjax_js.write('MathJax.Hub.Config({"v1.0-compatible":false});\n\n') + +r_comment = re.compile(r'^/\*.+?\*/\s*', re.DOTALL) +for path in pack: + fi = open(path, 'r') + contents = fi.read() + fi.close() + + kathjax_js.write(r_comment.sub('', contents.strip(), 1)) + kathjax_js.write('\n\n') + +kathjax_js.write('(function( ajax ) {\n') +kathjax_js.write('\tfor (var path in ajax.loading) {\n') +kathjax_js.write('\t\tif ( ( /KAthJax-[0-9a-f]{32}.js/ ).test( path ) ) {\n') +kathjax_js.write('\t\t\tajax.loadComplete( path );\n') +kathjax_js.write('\t\t}\n') +kathjax_js.write('\t}\n') +kathjax_js.write('})( MathJax.Ajax );\n') +kathjax_js.close() + +# Pack KAthJax.js and copy to mjdir + +os.mkdir(os.path.join(mjdir, 'config')) +os.system('uglifyjs --overwrite --ascii KAthJax.js') + +kathjax_js = open('KAthJax.js', 'r') +md5 = hashlib.md5(kathjax_js.read()).hexdigest() +kathjax_js.close() + +kathjax_basename = "KAthJax-%s" % md5 +shutil.copy('KAthJax.js', os.path.join(mjdir, 'config/%s.js' % kathjax_basename)) + +# Update hash in khan-exercise.js + +khan_exercise_path = os.path.join(origwd, os.path.dirname(__file__), "../khan-exercise.js") + +khan_exercise_f = open(khan_exercise_path, 'r') +khan_exercise = khan_exercise_f.read() +khan_exercise_f.close() + +khan_exercise_f = open(khan_exercise_path, 'w') +khan_exercise_f.write(re.sub(r'KAthJax-[0-9a-f]{32}', kathjax_basename, khan_exercise)) +khan_exercise_f.close() + +print "Generated %s.js, copying files..." % kathjax_basename + +# Copy some other things + +dirs = [ + 'fonts/HTML-CSS/TeX/eot', + 'fonts/HTML-CSS/TeX/otf', + 'fonts/HTML-CSS/TeX/svg', + 'jax/output/HTML-CSS/autoload', # not sure what this is + 'jax/output/HTML-CSS/fonts/TeX', # not sure if we need this either; better safe than sorry? + 'jax/element/mml/optable', # seems like we need this too +] + +for d in dirs: + dest = os.path.join(mjdir, d) + + # Make sure parent directory exists + if not os.path.exists(os.path.dirname(dest)): + os.makedirs(os.path.dirname(dest)) + + shutil.copytree(d, dest) + +shutil.copy('MathJax.js', mjdir) + +print "Removing temporary directory..." +os.chdir(origwd) +shutil.rmtree(tempdir) + +print "Done. You probably want to run:" +print " git add -A utils/MathJax" +print "to remove deleted files from git." 233 css/khan-exercise.css  @@ -46,18 +46,26 @@ body.debug .graphie { outline: 1px dashed red; } #scratchpad { padding-left: 30px; overflow: hidden; display: none; } #scratchpad div { position: absolute; z-index: 1; min-height: 378px; width: 100%; height: 98%; outline: 1px solid #ccc; } +#scratchpad-not-available { display: none; } #tester-info.info-box { background: #f2e4bf; } #tester-info .box { border: 1px solid black; padding: 2px 4px; margin-left: 5px; } .summary { display: none; } #browserwarning { display: none; padding: 18px; font-size: 120%; text-align: center; } -#answer_area input.button:disabled { opacity: 0.7; cursor: default; color: #333; } +#answer_area input.simple-button[disabled=disabled] { opacity: 0.5; filter: alpha(opacity = 50); cursor: default; } +#answer_area input.simple-button[disabled=disabled]:hover { color: #fff !important; } +#answer_area input.simple-button.orange[disabled=disabled]:hover { border-color: #bf4f04 !important; border-bottom-color: #803503 !important; } +#answer_area input.simple-button.green[disabled=disabled]:hover { border-color: #76a005 !important; border-bottom-color: #557303 !important; } + #hint-remainder { color: #777; } -#footer .simple-button { padding: 3px 10px; top: -1px } +#footer .simple-button, .info-box .simple-button { padding: 3px 10px; top: -1px } +.info-box .simple-button { top: 3px; ); + +} #issue .error { font-style: italic; font-weight: bold; } #issue-link { font-style: italic; } @@ -71,3 +79,224 @@ var, div.graphie { white-space: pre; } #issue-throbber { position: relative; top: 3px; } .exp input { vertical-align: super; font-size: 9px; height: 11px; } + +.correct-activity { + background-color: #69bb00; + text-shadow: 0 -1px 0 #557303; +} + +.incorrect-activity { + background-color: #e12c2d; + text-shadow: 0 -1px 0 #921118; +} + +.hint-activity { + background-color: #f19726; + text-shadow: 0 -1px 0 #B55C00; +} + +.user-activity { + margin: 5px; + padding: 2px 5px; + border: 1px solid #999; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + float: left; + cursor: pointer; + /*height: 25px;*/ + color: white; +} + +.user-activity input { + cursor: pointer; +} + +div.timeline-time { + float: left; + padding-top: 10px; +} + +div.timeline-time:before { + padding: 3px; + content: "~"; +} + +div.timeline-time:after { + padding: 3px; + content: "~"; +} + +div.timeline-total { + border-top: 1px solid #999; +} + +#timelinecontainer { + border: 1px solid #c6d1ad; + border-top: 0px; + position: relative; +} + +#timelinecontainer:before, #timelinecontainer:after { + content: ""; + display: table; +} + +#timelinecontainer:after { + clear: both; +} + +#timelinecontainer { + zoom: 1; +} + +#timeline { + overflow: hidden; + position: absolute; + left: 265px; + right: 225px; + border-left: 1px solid #c6d1ad; + border-right: 1px solid #c6d1ad; +} + +#timeline-events { + width: 10000px; +} + +#timeline-events:first-child { + margin-left: 5px; +} + +#timeline-events:last-child { + margin-right: 5px; +} + +#timeline-events:last-child:after { + content: ""; + height: 1px; + display: block; +} + +#timeline p { + margin: 0; +} + +#previous-problem { + margin: 5px; + cursor: pointer; + float: left; + width: 100px; +} + +#previous-step { + margin: 5px; + cursor: pointer; + float: left; + width: 100px; +} + +#next-step { + margin: 5px; + cursor: pointer; + float: right; + width: 80px; +} + +#previous-step span { + background: url(/images/previous-step.png) no-repeat 0 50% transparent; + padding: 4px 0 4px 25px; +} + +#next-step span { + background: url(/images/next-step.png) no-repeat 100% 50% transparent; + padding: 4px 25px 4px 0; +} + +#next-problem { + margin: 5px; + cursor: pointer; + float: right; + width: 80px; +} + +.user-activity.activated { + border: 2px solid #888; +} + +.lite header, .lite footer, .lite #extras, .lite .exercise-badge, .lite .hint-box { + display: none; +} + +.lite #page-container, .lite #container { + min-width: 0; + border-width: 0; +} + +.lite #answer_area { + margin-top: 10px; +} + +.lite #answercontent { + position: fixed; + right: 0px; + bottom: 0px; + margin: 10px; +} + +.lite #answercontent > * { + float: left; + margin-right: 10px; +} + +.lite #answercontent .info-box-header { + font-size: 16px; + content: "Answer:"; +} + +.lite #answercontent input.button { + margin-top: 2px; +} + +.lite #answercontent #examples-show, .lite #answercontent #examples { + display: none !important; +} + +.lite .ui-icon { + width: 18px; + height: 18px; +} + +.lite h1 { + font-family: inherit; +} + +#warning-bar { + background: red; + width: 100%; + height: 35px; + text-align: center; + color: #eee; + font-size: 15px; + display: none; +} + +#warning-bar span { + position: relative; + top: 5px; +} + +#warning-bar-close { + top: 5px; + float: right; + right: 20px; + position: relative; +} + +#warning-bar a { + color: #eee; +} + +#warning-bar-content a { + color: #eee; + text-decoration: underline; +} 2 exercises/adding_fractions.html  @@ -36,7 +36,7 @@ fraction( SIMP_N1, SIMP_D1 ) + fraction( SIMP_N2, SIMP_D2 ) Find a common denominator by finding the least common multiple of SIMP_D1 and SIMP_D2. - \text{LCM(}SIMP_D1\text{, }SIMP_D2\text{)} = LCM + \lcm(SIMP_D1, SIMP_D2) = LCM Change each fraction to an equivalent fraction with a denominator of LCM. fraction( SIMP_N1, SIMP_D1 ) + fraction( SIMP_N2, SIMP_D2 ) 4 exercises/angle_types.html  @@ -42,9 +42,7 @@ arc( [0,0], 1, ANGLE_ONE, ANGLE_TWO ); graph.protractor = new Protractor( [22, 0], 8 ); - jQuery( "#scratchpad-show" ).replaceWith( "Scratchpad not available" ).hide(); - jQuery( "#scratchpad" ).hide(); - + Khan.scratchpad.disable(); 16 exercises/arithmetic_word_problems_1.html  @@ -34,7 +34,7 @@ The difference is TOTAL - NUM2 plural('person') on the train. - TOTAL - NUM2 = NUM1 plural('person') plural('is', NUM1) on the train. + TOTAL - NUM2 = NUM1 plural('person', NUM1) plural('is', NUM1) on the train. @@ -58,15 +58,15 @@ The sum is NUM1 + NUM2 plural('person') on the train. - NUM1 + NUM2 = TOTAL plural('person') plural('is', NUM1) on the train. + NUM1 + NUM2 = TOTAL plural('person') plural('is', TOTAL) on the train. There plural('was', TOTAL) plural(TOTAL, 'person') riding on a train before it stopped and some number of people got off. - Now there are plural(NUM2, 'person') riding on the train. + Now there plural('is', NUM2) plural(NUM2, 'person') riding on the train. How many people got off the train at the stop? @@ -82,7 +82,7 @@ The difference is TOTAL - NUM2 plural('person'). - TOTAL - NUM2 = NUM1 plural('person') plural('is', NUM1). + TOTAL - NUM2 = NUM1 plural('person', NUM1) got off. @@ -128,7 +128,7 @@ The difference is TOTAL - NUM2 plural('tree'). - TOTAL - NUM2 = NUM1 plural('tree'). + TOTAL - NUM2 = NUM1 plural('tree', NUM1). @@ -153,7 +153,7 @@ The difference is TOTAL - NUM2 plural('car'). - TOTAL - NUM2 = NUM1 plural('car'). + TOTAL - NUM2 = NUM1 plural('car', NUM1). @@ -177,7 +177,7 @@ The difference is TOTAL - NUM2 plural('car'). - TOTAL - NUM2 = NUM1 plural('car'). + TOTAL - NUM2 = NUM1 plural('car', NUM1). @@ -286,7 +286,7 @@ The difference is TOTAL - NUM1 plural(exercise(1)). - He(1) did TOTAL - NUM1 = NUM2 plural(exercise(1)). + He(1) did TOTAL - NUM1 = NUM2 plural(exercise(1), NUM2). 271 exercises/arithmetic_word_problems_2.html  @@ -0,0 +1,271 @@ + + + + + Arithmetic word problems 2 + + + + + + randRange( 1, 12 ) + randRange( 2, 12 ) + NUM1 * NUM2 + + + + + + + A( color(1) ) clothing(1) costsNUM1, + and a popular color(2) clothing(2) costs NUM2 times as much. +

+

+ How much does the color(2) clothing(2) cost? +

+

+ TOTAL +

+
+

+ The cost of the color(2) clothing(2) + is a multiple of the cost of the color(1) clothing(1), + so find the product. +

+

+ The product is NUM2 \times $NUM1. + + + NUM2 \times$NUM1 = $TOTAL + + + The color(2) clothing(2) costs$TOTAL. +

+
+
+ +
+

+ A( color(1) ) clothing(1) costs $TOTAL, + which is NUM2 times as much as a( color(2) ) clothing(2) costs. + + + How much does the color(2) clothing(2) cost? + + + NUM1 + + + + The cost of the color(1) clothing(1) + is a multiple of the cost of the color(2) clothing(2), + so find the result of dividing. + + + This result, called the quotient, is equal to$TOTAL \div NUM2. +

+

+ $TOTAL \div NUM2 =$NUM1 +

+

A( color( 2 ) ) clothing( 2 ) costs $NUM1. + + + + + + A( color(1) ) clothing(1) costs$TOTAL, + and a( color(2) ) clothing(2) costs $NUM2. + + + The color( 1 ) clothing( 1 ) costs how many times as much as + the color( 2 ) clothing( 2 ) costs? + + + NUM1 + + + + The cost of the color(1) clothing(1) + is a multiple of the cost of the color(2) clothing(2), + so find the result of dividing. + + + This result, called the quotient, is$TOTAL \div $NUM2. + + +$TOTAL \div $NUM2 = NUM1 + + + The color( 1 ) clothing( 1 ) costs NUM1 times as much as + the color( 2 ) clothing( 2 ) costs. + + + + + + + person(1) rode(1) his(1) bike(1) for plural( NUM1, distance(1) ) on each of the past NUM2 days. + + + How many plural( distance(1) ) did person(1) ride(1) his(1) bike(1) altogether? + + + TOTAL + + + + The total number of plural( distance(1) ) biked(1) + is the product of the number of plural( distance(1) ) biked(1) each day + and the number of days that person(1) went biking(1). + + + The product is NUM1\text{ plural( distance( 1 ) ) per day} \times NUM2\text{ days}. + + + NUM1\text{ plural( distance( 1 ) ) per day} \times NUM2\text{ days}= TOTAL\text{ plural( distance(1) )} + + + person( 1 ) biked( 1 ) a total of plural( TOTAL, distance( 1 ) ). + + + + + + + person(1) rode(1) his(1) bike(1) for a total of plural( TOTAL, distance(1) ) in the past NUM2 days. + + + How many plural( distance(1) ) did person(1) ride(1) his(1) bike(1) each day? + + + NUM1 + + + + The number of plural( distance(1) ) biked(1) each day + is the total number of plural( distance(1) ) biked(1) divided + by the number of days that person(1) went biking(1). + + + We are looking for the quotient, which is TOTAL\text{ plural( distance( 1 ) )} \div NUM2\text{ days}. + + + TOTAL\text{ plural( distance( 1 ) )} \div NUM2\text{ days} = NUM1 \text{ plural( distance(1) ) per day} + + person( 1 ) biked( 1 ) NUM1 plural( distance(1) ) each day. + + + + + + person(1) has biked(1) his(1) bike(1) for a total of plural( TOTAL, distance(1) ) + since he(1) started biking(1) daily. He(1) has been biking(1) plural( NUM2, distance(1) ) each day. + + + For how many days has person(1) been biking(1)? + + + NUM1 + + + + The number of days that person(1) has been biking(1) + is the total number of plural( distance(1) ) biked(1) divided + by the number of plural( distance(1) ) biked(1) each day. + + + TOTAL\text{ plural( distance( 1 ) )} \div NUM2\text{ plural( distance( 1 )) each day} = \text{number of days driving} + + + TOTAL\text{ plural( distance( 1 ) )} \div NUM2\text{ plural( distance( 1 )) each day} = NUM1\text{ days} + + + + + + + person(1) is a farmer(1). + He(1) plants plural( NUM1, 'row' ) of plural( crop(1) ) in a field(1), + and each row has plural( NUM2, crop(1) ). + + + How many plural( crop(1) ) did person(1) plant in the field(1)? + + + TOTAL + + + + The number of plural( crop(1) ) that person(1) planted + is the product of the number of rows that he(1) planted and + the number of plural( crop(1) ) planted in each row. + + + The product is NUM1\text{ rows of plural( crop( 1 ) )} \times NUM2\text{ plural( crop( 1 ) ) per row}. + + + NUM1\text{ rows of plural( crop( 1 ) )} \times NUM2\text{ plural( crop( 1 ) ) per row} = TOTAL plural( crop(1) ) + + + + + + + person(1) is a farmer(1). + He(1) plants plural( NUM1, 'row' ) of plural( crop(1) ) in a field(1), + with each row having the same number of plural( crop(1) ). + He(1) plants a total of plural( TOTAL, crop(1) ) in the field(1). + + + How many plural( crop(1) ) did person(1) plant in each row? + + + NUM2 + + + + The number of plural( crop(1) ) that person(1) planted + in each row is the total number of plural( crop(1) ) that he(1) planted + divided by the number of rows. + + + The result, called the quotient, is TOTAL\text{ plural( crop( 1 ) )} \div NUM1\text{ rows of plural( crop( 1 ) )}. + + + TOTAL\text{ plural( crop( 1 ) )} \div NUM1\text{ rows of plural( crop( 1 ) )} = NUM2\text{ plural( crop(1) ) per row} + + + + + + + person(1) is a farmer(1). + He(1) plants plural( TOTAL, crop(1) ) in a field(1), + and each row has plural( NUM1, crop(1) ). + + + How many plural( 'row' ) of plural( crop(1) ) did person(1) plant in the field(1)? + + + NUM2 + + + + The number of plural( 'row' ) of plural( crop(1) ) that person(1) planted + is the total number of plural( crop(1) ) that he(1) planted + divided by the number of plural( crop(1) ) in each row. + + + The result, called the quotient, is TOTAL\text{ plural( crop( 1 ) )} \div NUM1\text{ plural( crop(1) ) per row}. + + + TOTAL\text{ plural( crop( 1 ) )} \div NUM1\text{ plural( crop(1) ) per row} = NUM2\text{ plural( 'row' )} + + + + + + + + + 168 exercises/compound_inequalities.html  @@ -0,0 +1,168 @@ + + + + Compound inequalities + + + + + + + + [ randRange( 2, 9 ) * ( rand( 3 ) > 0 ? 1 : -1 ), randRange( 2, 9 ) * ( rand( 3 ) > 0 ? 1 : -1 ) ] + [ fraction( 1, COEF[0] ), fraction( 1, COEF[1]) ] + [ randFromArray([ "-", "+" ]), randFromArray([ "-", "+" ]) ] + [ rand( 3 ) > 0 ? randRange( 2, 9 ) : 0, rand( 3 ) > 0 ? randRange( 2, 9 ) : 0 ] + [ LEFT_INT[0] * ( SIGN[0] === "+" ? -1 : 1 ), LEFT_INT[1] * ( SIGN[1] === "+" ? -1 : 1 ) ] + [ randFromArray([ "<", ">", "≤", "≥" ]), randFromArray([ "<", ">", "≤", "≥" ]) ] + [ randRange( 1, 6 ) * abs( COEF[0] ) + ( SIGN[0] === "+" ? 1 : -1 ) * LEFT_INT[0], randRange( 1, 6 ) * abs( COEF[1] ) + ( SIGN[1] === "+" ? 1 : -1 ) * LEFT_INT[1] ] + randFromArray([ "a", "b", "c", "x", "y", "z" ]) + [ getComp( COEF[0], COMP[0] ), getComp( COEF[1], COMP[1] ) ] + [ fraction( RIGHT_INT[0] + ADD_TO_SIMPLIFY[0], COEF[0] ), fraction( RIGHT_INT[1] + ADD_TO_SIMPLIFY[1], COEF[1] ) ] + [ ( RIGHT_INT[0] + ADD_TO_SIMPLIFY[0] ) / COEF[0], ( RIGHT_INT[1] + ADD_TO_SIMPLIFY[1] ) / COEF[1] ] + [ "first", "second" ] + [ "#1F78B4", "#B30000" ] + [ COMP_SOLUTION[0] === "≤" || COMP_SOLUTION[0] === "≥", COMP_SOLUTION[1] === "≤" || COMP_SOLUTION[1] === "≥" ] + [ COMP_SOLUTION[0] === "≤" || COMP_SOLUTION[0] === "<", COMP_SOLUTION[1] === "≤" || COMP_SOLUTION[1] === "<" ] + ( LESS_THAN[0] && !LESS_THAN[1] && SOLUTION[0] >= SOLUTION [1] ) || ( !LESS_THAN[0] && LESS_THAN[1] && SOLUTION[0] <= SOLUTION [1] ) + ( LESS_THAN[0] && !LESS_THAN[1] && SOLUTION[1] > SOLUTION[0] ) || ( !LESS_THAN[0] && LESS_THAN[1] && SOLUTION[0] > SOLUTION[1] ) || ( SOLUTION[0] === SOLUTION[1] && !INCLUSIVE[0] && !INCLUSIVE[1] ) + randFromArray( [ "or", "and" ] ) + OR === "or" + [ randRange( 2, 9 ) * ( rand( 3 ) > 0 ? 1 : -1 ), randRange( 2, 9 ) * ( rand( 3 ) > 0 ? 1 : -1 ) ] + (function() { + if ( LESS_THAN[0] && LESS_THAN[1] ) { + if ( SOLUTION[0] === SOLUTION[1] ) { + return INCLUSIVE[0] ? 1 : 2; + } + return SOLUTION[0] > SOLUTION[1] ? 1 : 2; + } else if ( !LESS_THAN[0] && !LESS_THAN[1] ) { + if ( SOLUTION[0] === SOLUTION[1] ) { + return INCLUSIVE[0] ? 1 : 2; + } + return SOLUTION[0] < SOLUTION[1] ? 1 : 2; + } + + return 0; + })() + CONTAINS === 1 ? 2 : 1 + + + + + Solve for VARIABLE_NAME: + + \color{COLOR[0]}{COEF[0] + VARIABLE_NAMESIGN[0] + LEFT_INT[0]COMP[0] + RIGHT_INT[0]} OR + \color{COLOR[1]}{COEF[1] + VARIABLE_NAMESIGN[1] + LEFT_INT[1]COMP[1] + RIGHT_INT[1]} + + + + All real numbers. + VARIABLE_NAME + COMP_SOLUTION[CONTAINS - 1] + SOLUTION[CONTAINS - 1] + VARIABLE_NAME + COMP_SOLUTION[IS_CONTAINED - 1] + SOLUTION[IS_CONTAINED - 1] + No solution. + VARIABLE_NAME + COMP_SOLUTION[0] + SOLUTION[0] OR VARIABLE_NAME + COMP_SOLUTION[1] + SOLUTION[1] + + + + • VARIABLE_NAME + COMP_SOLUTION[0] + FAKE_ANSWER[0] OR VARIABLE_NAME + COMP_SOLUTION[1] + FAKE_ANSWER[1] • + • VARIABLE_NAME + COMP_SOLUTION[0] + SOLUTION[0] OR VARIABLE_NAME + COMP_SOLUTION[1] + randRangeNonZero( -9, 9 ) • + • VARIABLE_NAME + COMP_SOLUTION[0] + randRangeNonZero( -9, 9 ) OR VARIABLE_NAME + COMP_SOLUTION[1] + SOLUTION[1] • + • VARIABLE_NAME + COMP_SOLUTION[0] + FAKE_ANSWER[0] • + • VARIABLE_NAME + COMP_SOLUTION[0] + SOLUTION[0] OR VARIABLE_NAME + COMP_SOLUTION[1] + SOLUTION[1] • + + • VARIABLE_NAME + COMP[0] + SOLUTION[0] OR VARIABLE_NAME + COMP_SOLUTION[1] + SOLUTION[1] • + • VARIABLE_NAME + COMP[0] + FAKE_ANSWER[0] OR VARIABLE_NAME + COMP_SOLUTION[1] + FAKE_ANSWER[1] • + + + • VARIABLE_NAME + COMP_SOLUTION[0] + SOLUTION[0] OR VARIABLE_NAME + COMP[1] + SOLUTION[1] • + • VARIABLE_NAME + COMP_SOLUTION[0] + FAKE_ANSWER[0] OR VARIABLE_NAME + COMP[1] + FAKE_ANSWER[1] • + + + • VARIABLE_NAME + COMP[0] + SOLUTION[0] OR VARIABLE_NAME + COMP[1] + SOLUTION[1] • + • VARIABLE_NAME + COMP[0] + FAKE_ANSWER[0] OR VARIABLE_NAME + COMP[1] + FAKE_ANSWER[1] • + + • VARIABLE_NAME + COMP_SOLUTION[0] + round( ( RIGHT_INT[0] - ADD_TO_SIMPLIFY[0] ) / COEF[0] ) OR VARIABLE_NAME + COMP_SOLUTION[1] + + round( ( RIGHT_INT[1] - ADD_TO_SIMPLIFY[1] ) / COEF[1] ) • + • All real numbers. • + • No solution. • + + + + + + The FIRST[i] inequality can be simplified into this: + \color{COLOR[i]}{VARIABLE_NAME + COMP_SOLUTION[i] + SOLUTION[i]} + + + + + var start = min( SOLUTION[0], SOLUTION[1] ) - randRange( 2, 5 ); + var end = max( SOLUTION[0], SOLUTION[1] ) + randRange( 2, 5 ); + + init({ + range: [ [ start - 1, end + 1 ], [ -1, 1 ] ] + }); + + numberLine( start, end, null, start ); + + // Draw both inequalities + var y_placement = [ 0.05, -0.05 ]; + for ( var i = 0; i < 2; i++ ) { + style({ stroke: COLOR[i], fill: COLOR[i], strokeWidth: 3.5, arrows: "->" }); + path( [ [ SOLUTION[i] + 0.15 * ( LESS_THAN[i] ? -1 : 1 ), y_placement[i] ], [ LESS_THAN[i] ? start : end, y_placement[i] ] ] ); + style({ stroke: COLOR[i], fill: INCLUSIVE[i] ? COLOR[i] : null }); + circle( [ SOLUTION[i], y_placement[i] ], 0.15 ); + } + + + Since this is an "or" inequality, the solution is the part of the number line which is covered by either of the graphs of the inequalities. + The combined graphs of the inequalities span the entire number line, therefore the solution is "All real numbers." + + Notice how the FIRST[IS_CONTAINED - 1] inequality is completely included by the FIRST[CONTAINS - 1] inequality. Therefore the answer is: + \color{COLOR[CONTAINS - 1]}{VARIABLE_NAME + COMP_SOLUTION[CONTAINS - 1] + SOLUTION[CONTAINS - 1]} + + + Therefore, since the graphs of the equalities do not intersect, the solution is: + + \color{COLOR[0]}{VARIABLE_NAME + COMP_SOLUTION[0] + SOLUTION[0]} or + \color{COLOR[1]}{VARIABLE_NAME + COMP_SOLUTION[1] + SOLUTION[1]} + + + + + The solution to an inequality with the word "and" is the intersection of the graphs of the inequalities. + Since the graphs of the inequalities do not intersect, there is no solution. + + Since the FIRST[IS_CONTAINED - 1] inequality is completely included by the FIRST[CONTAINS - 1] inequality, their intersection is the FIRST[IS_CONTAINED -1] inequality. Therefore the answer is: + \color{COLOR[IS_CONTAINED - 1]}{VARIABLE_NAME + COMP_SOLUTION[IS_CONTAINED - 1] + SOLUTION[IS_CONTAINED - 1]} + + + Therefore, the solution is: + + \color{COLOR[0]}{VARIABLE_NAME + COMP_SOLUTION[0] + SOLUTION[0]} and + \color{COLOR[1]}{VARIABLE_NAME + COMP_SOLUTION[1] + SOLUTION[1]} + + + + + + + + + + 108 exercises/congruent_triangles_1.html  @@ -0,0 +1,108 @@ + + + + + Congruent Triangles 1 + + + + + + + randomTriangle() + [ "B", "C", "Both", "None" ] + randFromArray( ANSWERS ) + ANSWER === "B" || ANSWER === "Both" ? MAIN : randomTriangle() + ANSWER === "C" || ANSWER === "Both" ? MAIN : randomTriangle() + randFromArray( [ "SSS", "AAA","SAS", "ASA", "AAS" ] ) + + + + + + Which triangles are congruent to triangle A? + + + + init({ + range: [ [-1, 12 ], [ -10, 2.5 ] ] + }) + var start = randRange( 0, 2 ); + drawCongruentTriangle( MAIN, "A", [ 2, -2 ], 3, TYPE, start ); + drawCongruentTriangle( B, "B", [ 5, -5 ], 3, TYPE, start ); + drawCongruentTriangle( C, "C", [ 1, -8 ], 3, TYPE, start ); + + + ANSWER + ¬ + • B • + • C • + • Both • + • None • + + + Triangles are congruent when all corresponding sides and interior angles are congruent. + However, we do not need to know all the values in order to determine whether two triangles are congruent. + The rules we use for determining congruency are SSS, ASA, SAS and AAS + + + + + + + 8 exercises/conic_sections.html  @@ -2,14 +2,14 @@ - Conic sections + Conic Sections - - + + + - 4 exercises/converting_decimals_to_fractions_1.html  @@ -13,7 +13,7 @@ randRange( 1, 9 ) / 10 floor( D * 10 ) - Express D as a fraction. + Express D.toFixed( 1 ) as a fraction. D The number T is in the tenths place, so we have cardinal( T ) tenths. @@ -27,7 +27,7 @@ floor( D * 10 ) floor( ( D * 100 ) % 10 ) - Express D as a fraction. + Express D.toFixed( 2 ) as a fraction. D The number T is in the tenths place, so we have cardinal( T ) tenths. 13 exercises/converting_decimals_to_fractions_2.html  @@ -37,21 +37,22 @@ randRange( 1, 19 ) randRangeExclude(1, 99, [ 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 ]) / 100 - getGCD( D * 100 , 100 ) + getGCD( round( D * 100 ) , 100 ) + ( W + D ).toFixed( 2 ) - Express W + D as a mixed number. Reduce to lowest terms. + Express FIXED as a mixed number. Reduce to lowest terms. - W + D + W + D - W + D can be represented as follows: + FIXED can be represented as follows: = W + fraction( floor( D * 10 ), 10 ) + fraction( floor( ( D * 100 ) % 10 ), 100 ) - = W + fraction( D * 100, 100 ) + = W + fraction( roundTo( 0, D * 100 ), 100 ) Reduce the fractional part by dividing the numerator and denominator by GCD. - =W + fractionReduce( D * 100 , 100 ) + =W + fractionReduce( round( D * 100 ) , 100 ) 2 exercises/dependent_probability.html  @@ -89,7 +89,7 @@ You have NUM_COINS coins in a bag. NUM_UNFAIR_COINS of them are unfair in that they have a PERCENT_CHANCE_UNFAIR_HEADS\% chance of coming up heads when flipped (the rest are fair coins). You randomly choose one coin from the bag and flip it NUM_FLIPS times. - What is the percent probability of getting NUM_FLIPS heads? + What is the percent probability of getting NUM_FLIPS heads? Round your answer to the nearest hundredth of a percent. ANSWER 6 exercises/domain_of_a_function.html  @@ -72,7 +72,7 @@ - f(x)= \begin{cases} \dfrac{ x + A }{ ( x + A )( x - B ) } & \text{, if$x \neq B$} \\ C & \text{, if$x = B$} \end{cases} + f(x)= \begin{cases} \dfrac{ x + A }{ ( x + A )( x - B ) } & \text{if$x \neq B$} \\ C & \text{if$x = B$} \end{cases} CHOICES["two-denom-cond"] @@ -135,7 +135,7 @@ - f(x) = \begin{cases} \dfrac{ 1 }{ \sqrt{ x - A } } & \text{, if$x \geq A$} \\ \dfrac{ 1 }{ \sqrt{ A - x } } & \text{, if$x < A$} \end{cases} + f(x) = \begin{cases} \dfrac{ 1 }{ \sqrt{ x - A } } & \text{if$x \geq A$} \\ \dfrac{ 1 }{ \sqrt{ A - x } } & \text{if$x < A$} \end{cases} CHOICES["inverse-sqrt-cond"] @@ -184,7 +184,7 @@ - f(x) = \begin{cases} \dfrac{ x + A }{ ( x + A )( x - C ) } & \text{, if$x \neq B$} \\ A & \text{, if$x = B$} \end{cases} + f(x) = \begin{cases} \dfrac{ x + A }{ ( x + A )( x - C ) } & \text{if$x \neq B$} \\ A & \text{if$x = B$} \end{cases} CHOICES["two-denom-cond-weird"] 25 exercises/equation_of_a_parabola.html  @@ -24,27 +24,28 @@ - The equation of a parabola P is y = Ax^2 + Bx + C - What are its vertex (h, k) and its y intercept? + The equation of a parabola P is y = Ax^2 + Bx + C. + What are its vertex (h, k) and its y-intercept? (h, k) = (H, K) - Y intercept= C + y-intercept = C + + - Y intercept is the point on the Y axis, where x = 0 - If x = 0, we have y = A \cdot 0^2 + B \cdot 0 + C - y = C, thus the Y intercept is C + The y-intercept is the point on the y-axis where x = 0. + If x = 0, we have y = A \cdot 0^2 + B \cdot 0 + C = C, so the y-intercept is C. The equation of a parabola with vertex (h, k) is y = a(x - h)^2 + k. - We can rewrite the given equation as Ax^2 + A \cdot - 2 * H + H * A * H + K, in order to get the form a(x - h)^2 -i We factor out A, y = A ( x^2 + 2 * H + H * H ) + K - The equation in the parantheses is of the form ( a + b )^2, because ( x^2 + 2 * H + H * H ) = ( x^2 + 2 \cdot H + H^2 ) - Therefore y = A( x - H)^2 + K. - y = A(x - (H))^2 + K - Thus, the center (h, k) = (H, K) + We can rewrite the given equation as Ax^2 + A \cdot - 2 * Hx + H * A * H + K, in order to get the form a(x - h)^2 +i We factor out A, giving y = A ( x^2 + 2 * Hx + H * H ) + K + The equation in the parentheses is of the form ( a + b )^2, because ( x^2 + 2 * H + H * H ) = ( x^2 + 2 \cdot H + H^2 ) + Therefore, y = A( x - H)^2 + K. + y = A(x - (H))^2 + K. + Thus, the center (h, k) is (H, K) 6 exercises/estimation_with_decimals.html  @@ -50,8 +50,8 @@ randFromArray( [ [ "jogging", "ran", "mile" ], [ "riding a bicycle ", "traveled", "mile" ], [ "collecting mushrooms", "collected", "pound" ], [ "painting a roof", "painted", "square foot" ], [ "harvesting grain", "harvested", "tonne" ] ] ) 0$.map( VALUES, function( i ){ - if ( round( i ) < i ) { - return "smaller than"; + if ( round( i ) < i ) { + return "smaller than"; } else{ return "bigger or equal to"; @@ -90,5 +90,7 @@ + +
2 exercises/fractions_on_the_number_line.html
 @@ -38,7 +38,7 @@ [ "A", "B", "C", "D", "E" ] POSS_ANSWER[ WRONGS.indexOf( NUMBER ) ] SIGN + " \\dfrac{" + NOMINATOR + "}{" + DENOMINATOR + "}" - SIGN + fraction( NOMINATOR, DENOMINATOR, true, true, false ) + SIGN + fraction( NOMINATOR, DENOMINATOR, true, true, false )
3 exercises/geometry_1.html
 @@ -2,7 +2,8 @@ - Geometry 1 + + Geometry 1
191 exercises/graphing_inequalities.html
 @@ -0,0 +1,191 @@ + + + + Graphing inequalities + + + + +
+
+ randRange( 2, 9 ) * ( rand( 3 ) > 0 ? 1 : -1 ) + fraction( 1, Y_COEF ) + randRangeExclude( -9, 9, [ -1, 0, 1 ] ) + randRangeNonZero( -20, 20 ) + -X_COEF / Y_COEF + fractionReduce( -X_COEF, Y_COEF ) + RIGHT_INT / Y_COEF + fractionReduce( RIGHT_INT, Y_COEF ) + randFromArray([ "<", ">", "≤", "≥" ]) + getComp( Y_COEF, COMP ) + COMP_SOLUTION == "<" || COMP_SOLUTION == "≤" + COMP_SOLUTION == "≥" || COMP_SOLUTION == "≤" + M * -10 + B + M * 10 + B +
+ [ randRangeExclude( -9, 9, [ -3, -2, -1, 0 ] ), randRangeExclude( -9, 9, [ -1, -2 ] ) ] + [ randRangeExclude( -9, 9, [ -3, -2, -1, 0 ] ), randRangeExclude( -9, 9, [ -1, -2 ] ) ] + POINT_1[1] > M * POINT_1[0] + B !== LESS_THAN || ( INCLUSIVE && M * POINT_1[0] + B === POINT_1[1] ) + POINT_2[1] > M * POINT_2[0] + B !== LESS_THAN || ( INCLUSIVE && M * POINT_2[0] + B === POINT_2[1] ) +
+
+ +
+
+

Which of the following ordered pairs printPoint( POINT_1 ) and printPoint( POINT_2 ) are solutions to the inequality Y_COEFy + X_COEFx COMP + RIGHT_INT?

+ +
+
+ printPoint( POINT_1 ) +
+
+ and +
+
+ printPoint( POINT_2 ) +
+
+ None of the above. +
+
+ +
+
1. printPoint( POINT_1 )
2. +
3. printPoint( POINT_2 )
4. +
5. printPoint( POINT_1 ) and printPoint( POINT_2 )
6. +
7. None of the above.
8. +
+ +
+

To graph the inequality, we need to first put it in slope-intercept form (yCOMPmx + b).

+
+

Add -X_COEFx to both sides of the inequality.

+

+ + Y_COEFy + X_COEFx +-X_COEFxCOMP + RIGHT_INTy +-X_COEFx + +

+

+ + Y_COEFyCOMP + (-X_COEF)x + RIGHT_INT + +

+
+

When multiplying or dividing both sides of an inequality by a negative number you have to flip the inequality. Therefore COMP becomes COMP_SOLUTION.

+
+

Multiply both sides of the inequality by ONE_OVER_Y_COEF.

+

+ + (Y_COEFy) \cdot (ONE_OVER_Y_COEF)COMP_SOLUTION(-X_COEFx + RIGHT_INT) \cdot (ONE_OVER_Y_COEF) + +

+

+ + y COMP_SOLUTION + M_FRACx + B_FRAC + +

+
+
+

Graph the line.

+
+ graphInit({ + range: 10, + scale: 20, + tickStep: 1, + labelStep: 1, + labelFormat: function( s ) { return "\\small{" + s + "}"; }, + axisArrows: "<->" + }); + + + if ( !INCLUSIVE ) { + style ({ + "stroke-dasharray": "-" + }); + } + + line( [ -10, NEG_10_INTERCEPT ], [ 10, POS_10_INTERCEPT ] , { + stroke: "#28AE7B", + }); + +
+
+
+

Since our inequality has a LESS_THAN ? "less-than" : "greater-than"INCLUSIVE ? " or equal to" : "" sign, that means that any point LESS_THAN ? "below" : "above" the line is a solution to the inequality.

+

Note that since the sign is LESS_THAN ? "less-than" : "greater-than" or equal to, any point on the line is also a solution.

+

Note that since the sign is LESS_THAN ? "less-than" : "greater-than" (and not equal to), any point on the line is not part of the solution.

+
+ + // Highlight solution space + var x_start = -10; + var x_end = 10; + + if ( ( NEG_10_INTERCEPT < POS_10_INTERCEPT && !LESS_THAN ) || ( POS_10_INTERCEPT < NEG_10_INTERCEPT && LESS_THAN ) ) { + var temp = NEG_10_INTERCEPT; + NEG_10_INTERCEPT = POS_10_INTERCEPT; + POS_10_INTERCEPT = temp; + + temp = x_start; + x_start = x_end; + x_end = temp; + } + + style( { + "fill": "#FF0000", + "fill-opacity": 0.1, + "stroke": null + }); + + path([ [ x_end, POS_10_INTERCEPT ], [ x_end, NEG_10_INTERCEPT ], [ x_start, NEG_10_INTERCEPT ] ]); + + var vertical_end = 10; + if ( NEG_10_INTERCEPT < POS_10_INTERCEPT ) { + vertical_end = -10; + } + path([ [ -10, NEG_10_INTERCEPT ], [ -10, vertical_end ], [ 10, vertical_end ], [ 10, NEG_10_INTERCEPT ] ]); +
+
+
+

After plotting the points, we can see that + printPoint( POINT_1 ) is the only solution + printPoint( POINT_2 ) is the only solution + printPoint( POINT_1 ) andprintPoint( POINT_2 ) are both solutions + there are no solutions + to the inequality. +

+
+ style({ + fill: "#000", + "fill-opacity": 1, + stroke: "none" + }); + + circle( POINT_1, 3/20 ); + circle( POINT_2, 3/20 ); + label( POINT_1, printPoint( POINT_1 ), "above right" ); + label( POINT_2, printPoint( POINT_2 ), "above right" ); +
+
+
+
+
+
+ +
2 exercises/graphing_points.html
 @@ -69,7 +69,7 @@ -

(POINTS[FORGOTTEN].join( ", " ))

+

PAIR( POINTS[FORGOTTEN] )

• PAIR( POINTS[0] )
• PAIR( POINTS[1] )
10 exercises/inequalities_on_a_number_line.html
 @@ -194,19 +194,19 @@

- The arrow is pointing to the left of INT, so everything less than INT is included. + The arrow is pointing to the left of SIGN + INT, so everything less than SIGN + INT is included.

- The arrow is pointing to the right of INT, so everything greater than INT is included. + The arrow is pointing to the right of SIGN + INT, so everything greater than SIGN + INT is included.

- The circle is filled in, so INT itself is also included. + The circle is filled in, so SIGN + INT itself is also included.

- The circle is not filled in, so INT itself is not included. + The circle is not filled in, so SIGN + INT itself is not included.

- VARIABLE_NAME REL INT + VARIABLE_NAME RELSIGN + INT

4 exercises/inverse_trig_functions.html
 @@ -62,7 +62,7 @@ } { - sin: [ "0", DEG ? "180°" : "\\pi" ], + sin: [ DEG ? "-90°" : "-\\frac{\\pi}{2}", DEG ? "90°" : "\\frac{\\pi}{2}" ], cos: [ "0", DEG ? "180°" : "\\pi" ], tan: [ DEG ? "-90°" : "-\\frac{\\pi}{2}", DEG ? "90°" : "\\frac{\\pi}{2}" ] }[ FN ] @@ -72,7 +72,7 @@
-

What is the principle value of FN_TEX( PRETTY( X ) )?

+

What is the principal value of FN_TEX( PRETTY( X ) )?