euler-manager 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (618) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.travis.yml +2 -1
  4. data/README.md +27 -21
  5. data/Rakefile +3 -2
  6. data/config/config.rb +6 -2
  7. data/data/answers.yml +431 -430
  8. data/data/images/{p_015.gif → p015.gif} +0 -0
  9. data/data/images/{p_068_1.gif → p068_1.gif} +0 -0
  10. data/data/images/{p_068_2.gif → p068_2.gif} +0 -0
  11. data/data/images/{p_085.gif → p085.gif} +0 -0
  12. data/data/images/{p_086.gif → p086.gif} +0 -0
  13. data/data/images/{p_090.gif → p090.gif} +0 -0
  14. data/data/images/{p_091_1.gif → p091_1.gif} +0 -0
  15. data/data/images/{p_091_2.gif → p091_2.gif} +0 -0
  16. data/data/images/{p_107_1.gif → p107_1.gif} +0 -0
  17. data/data/images/{p_107_2.gif → p107_2.gif} +0 -0
  18. data/data/images/{p_109.gif → p109.gif} +0 -0
  19. data/data/images/{p_126.gif → p126.gif} +0 -0
  20. data/data/images/{p_128.gif → p128.gif} +0 -0
  21. data/data/images/{p_138.gif → p138.gif} +0 -0
  22. data/data/images/{p_139.gif → p139.gif} +0 -0
  23. data/data/images/{p_143_torricelli.gif → p143_torricelli.gif} +0 -0
  24. data/data/images/{p_144_1.gif → p144_1.gif} +0 -0
  25. data/data/images/{p_144_2.gif → p144_2.gif} +0 -0
  26. data/data/images/{p_147.gif → p147.gif} +0 -0
  27. data/data/images/{p_150.gif → p150.gif} +0 -0
  28. data/data/images/{p_151.gif → p151.gif} +0 -0
  29. data/data/images/{p_152_sum.gif → p152_sum.gif} +0 -0
  30. data/data/images/{p_153_formule1.gif → p153_formule1.gif} +0 -0
  31. data/data/images/{p_153_formule2.gif → p153_formule2.gif} +0 -0
  32. data/data/images/{p_153_formule5.gif → p153_formule5.gif} +0 -0
  33. data/data/images/{p_153_formule6.gif → p153_formule6.gif} +0 -0
  34. data/data/images/{p_154_pyramid.gif → p154_pyramid.gif} +0 -0
  35. data/data/images/{p_155_capacitors1.gif → p155_capacitors1.gif} +0 -0
  36. data/data/images/{p_155_capsform.gif → p155_capsform.gif} +0 -0
  37. data/data/images/{p_155_capsmu.gif → p155_capsmu.gif} +0 -0
  38. data/data/images/{p_161_k9.gif → p161_k9.gif} +0 -0
  39. data/data/images/{p_161_trio1.gif → p161_trio1.gif} +0 -0
  40. data/data/images/{p_161_trio3.gif → p161_trio3.gif} +0 -0
  41. data/data/images/{p_163.gif → p163.gif} +0 -0
  42. data/data/images/{p_173_square_laminas.gif → p173_square_laminas.gif} +0 -0
  43. data/data/images/{p_177_quad.gif → p177_quad.gif} +0 -0
  44. data/data/images/{p_184.gif → p184.gif} +0 -0
  45. data/data/images/{p_189_colours.gif → p189_colours.gif} +0 -0
  46. data/data/images/{p_189_grid.gif → p189_grid.gif} +0 -0
  47. data/data/images/{p_194_Fig.png → p194_Fig.png} +0 -0
  48. data/data/images/{p_194_GraphA.png → p194_GraphA.png} +0 -0
  49. data/data/images/{p_194_GraphB.png → p194_GraphB.png} +0 -0
  50. data/data/images/{p_199_circles_in_circles.gif → p199_circles_in_circles.gif} +0 -0
  51. data/data/images/{p_201_laserbeam.gif → p201_laserbeam.gif} +0 -0
  52. data/data/images/{p_208_robotwalk.gif → p208_robotwalk.gif} +0 -0
  53. data/data/images/{p_215_crackfree.gif → p215_crackfree.gif} +0 -0
  54. data/data/images/{p_220.gif → p220.gif} +0 -0
  55. data/data/images/{p_226_formula.gif → p226_formula.gif} +0 -0
  56. data/data/images/{p_226_scoop2.gif → p226_scoop2.gif} +0 -0
  57. data/data/images/{p_228.png → p228.png} +0 -0
  58. data/data/images/{p_237.gif → p237.gif} +0 -0
  59. data/data/images/{p_244_example.gif → p244_example.gif} +0 -0
  60. data/data/images/{p_244_start.gif → p244_start.gif} +0 -0
  61. data/data/images/{p_244_target.gif → p244_target.gif} +0 -0
  62. data/data/images/{p_246_anim.gif → p246_anim.gif} +0 -0
  63. data/data/images/{p_246_ellipse.gif → p246_ellipse.gif} +0 -0
  64. data/data/images/{p_247_hypersquares.gif → p247_hypersquares.gif} +0 -0
  65. data/data/images/{p_251_cardano.gif → p251_cardano.gif} +0 -0
  66. data/data/images/{p_252_convexhole.gif → p252_convexhole.gif} +0 -0
  67. data/data/images/{p_255_Example.gif → p255_Example.gif} +0 -0
  68. data/data/images/{p_255_Heron.gif → p255_Heron.gif} +0 -0
  69. data/data/images/{p_256_tatami3.gif → p256_tatami3.gif} +0 -0
  70. data/data/images/{p_257_bisector.gif → p257_bisector.gif} +0 -0
  71. data/data/images/{p_262_formula1.gif → p262_formula1.gif} +0 -0
  72. data/data/images/{p_264_TriangleCentres.gif → p264_TriangleCentres.gif} +0 -0
  73. data/data/images/{p_265_BinaryCircles.gif → p265_BinaryCircles.gif} +0 -0
  74. data/data/images/{p_270_CutSquare.gif → p270_CutSquare.gif} +0 -0
  75. data/data/images/{p_275_sculptures2.gif → p275_sculptures2.gif} +0 -0
  76. data/data/images/{p_281_pizza.gif → p281_pizza.gif} +0 -0
  77. data/data/images/{p_282_formula.gif → p282_formula.gif} +0 -0
  78. data/data/images/{p_282formula3.gif → p282formula3.gif} +0 -0
  79. data/data/images/{p_287_quadtree.gif → p287_quadtree.gif} +0 -0
  80. data/data/images/{p_289_euler.gif → p289_euler.gif} +0 -0
  81. data/data/images/{p_291_formula.gif → p291_formula.gif} +0 -0
  82. data/data/images/{p_299_ThreeSimTri.gif → p299_ThreeSimTri.gif} +0 -0
  83. data/data/images/{p_300_protein.gif → p300_protein.gif} +0 -0
  84. data/data/images/{p_306_pstrip.gif → p306_pstrip.gif} +0 -0
  85. data/data/images/{p_309_ladders.gif → p309_ladders.gif} +0 -0
  86. data/data/images/{p_311_biclinic.gif → p311_biclinic.gif} +0 -0
  87. data/data/images/{p_312_sierpinsky8t.gif → p312_sierpinsky8t.gif} +0 -0
  88. data/data/images/{p_312_sierpinskyAt.gif → p312_sierpinskyAt.gif} +0 -0
  89. data/data/images/{p_313_sliding_game_1.gif → p313_sliding_game_1.gif} +0 -0
  90. data/data/images/{p_313_sliding_game_2.gif → p313_sliding_game_2.gif} +0 -0
  91. data/data/images/{p_314_landgrab.gif → p314_landgrab.gif} +0 -0
  92. data/data/images/{p_315_clocks.gif → p315_clocks.gif} +0 -0
  93. data/data/images/{p_316_decexp1.gif → p316_decexp1.gif} +0 -0
  94. data/data/images/{p_316_decexp2.gif → p316_decexp2.gif} +0 -0
  95. data/data/images/{p_316_decexp3.gif → p316_decexp3.gif} +0 -0
  96. data/data/images/{p_321_swapping_counters_1.gif → p321_swapping_counters_1.gif} +0 -0
  97. data/data/images/{p_321_swapping_counters_2.gif → p321_swapping_counters_2.gif} +0 -0
  98. data/data/images/{p_326_formula1.gif → p326_formula1.gif} +0 -0
  99. data/data/images/{p_326_formula2.gif → p326_formula2.gif} +0 -0
  100. data/data/images/{p_327_rooms_of_doom.gif → p327_rooms_of_doom.gif} +0 -0
  101. data/data/images/{p_328_sum1.gif → p328_sum1.gif} +0 -0
  102. data/data/images/{p_328_sum2.gif → p328_sum2.gif} +0 -0
  103. data/data/images/{p_330_formula.gif → p330_formula.gif} +0 -0
  104. data/data/images/{p_331_crossflips1.gif → p331_crossflips1.gif} +0 -0
  105. data/data/images/{p_331_crossflips2.gif → p331_crossflips2.gif} +0 -0
  106. data/data/images/{p_331_crossflips3.gif → p331_crossflips3.gif} +0 -0
  107. data/data/images/{p_332_spherical.jpg → p332_spherical.jpg} +0 -0
  108. data/data/images/{p_332_sum.gif → p332_sum.gif} +0 -0
  109. data/data/images/{p_334_beans.gif → p334_beans.gif} +0 -0
  110. data/data/images/{p_334_cases.gif → p334_cases.gif} +0 -0
  111. data/data/images/{p_334_lfloor.gif → p334_lfloor.gif} +0 -0
  112. data/data/images/{p_334_oplus.gif → p334_oplus.gif} +0 -0
  113. data/data/images/{p_334_rfloor.gif → p334_rfloor.gif} +0 -0
  114. data/data/images/{p_335_mancala.gif → p335_mancala.gif} +0 -0
  115. data/data/images/{p_335_sum.gif → p335_sum.gif} +0 -0
  116. data/data/images/{p_336_maximix.gif → p336_maximix.gif} +0 -0
  117. data/data/images/{p_338_gridpaper.gif → p338_gridpaper.gif} +0 -0
  118. data/data/images/{p_340_formula.gif → p340_formula.gif} +0 -0
  119. data/data/images/{p_344_silverdollar.gif → p344_silverdollar.gif} +0 -0
  120. data/data/images/{p_351_hexorchard.png → p351_hexorchard.png} +0 -0
  121. data/data/images/{p_354_bee_honeycomb.png → p354_bee_honeycomb.png} +0 -0
  122. data/data/images/{p_356_cubicpoly1.gif → p356_cubicpoly1.gif} +0 -0
  123. data/data/images/{p_356_cubicpoly2.gif → p356_cubicpoly2.gif} +0 -0
  124. data/data/images/{p_361_Thue-Morse1.gif → p361_Thue-Morse1.gif} +0 -0
  125. data/data/images/p363_bezier.png +0 -0
  126. data/data/images/{p_364_comf_dist.gif → p364_comf_dist.gif} +0 -0
  127. data/data/images/{p_372_pencilray1.jpg → p372_pencilray1.jpg} +0 -0
  128. data/data/images/{p_372_pencilray2.gif → p372_pencilray2.gif} +0 -0
  129. data/data/images/{p_380_mazes.gif → p380_mazes.gif} +0 -0
  130. data/data/images/{p_384_formula.gif → p384_formula.gif} +0 -0
  131. data/data/images/{p_385_ellipsetriangle.png → p385_ellipsetriangle.png} +0 -0
  132. data/data/images/{p_394_eatpie.gif → p394_eatpie.gif} +0 -0
  133. data/data/images/{p_395_pythagorean.gif → p395_pythagorean.gif} +0 -0
  134. data/data/images/{p_404_c_ellipse.gif → p404_c_ellipse.gif} +0 -0
  135. data/data/images/{p_405_tile1.png → p405_tile1.png} +0 -0
  136. data/data/images/{p_405_tile2.gif → p405_tile2.gif} +0 -0
  137. data/data/images/{p_420_matrix.gif → p420_matrix.gif} +0 -0
  138. data/data/images/{p_424_kakuro1.gif → p424_kakuro1.gif} +0 -0
  139. data/data/images/{p_426_baxball1.gif → p426_baxball1.gif} +0 -0
  140. data/data/images/{p_426_baxball2.gif → p426_baxball2.gif} +0 -0
  141. data/data/images/{p_430_flips.gif → p430_flips.gif} +0 -0
  142. data/data/problems/1.yml +1 -1
  143. data/data/problems/10.yml +6 -4
  144. data/data/problems/100.yml +2 -2
  145. data/data/problems/101.yml +15 -19
  146. data/data/problems/102.yml +9 -10
  147. data/data/problems/103.yml +7 -8
  148. data/data/problems/104.yml +2 -2
  149. data/data/problems/105.yml +4 -4
  150. data/data/problems/106.yml +3 -3
  151. data/data/problems/107.yml +12 -12
  152. data/data/problems/108.yml +8 -14
  153. data/data/problems/109.yml +12 -11
  154. data/data/problems/11.yml +21 -24
  155. data/data/problems/110.yml +9 -10
  156. data/data/problems/111.yml +1 -1
  157. data/data/problems/112.yml +1 -1
  158. data/data/problems/113.yml +1 -1
  159. data/data/problems/114.yml +2 -2
  160. data/data/problems/115.yml +1 -1
  161. data/data/problems/116.yml +11 -11
  162. data/data/problems/117.yml +3 -3
  163. data/data/problems/118.yml +1 -1
  164. data/data/problems/119.yml +1 -1
  165. data/data/problems/12.yml +6 -6
  166. data/data/problems/120.yml +4 -4
  167. data/data/problems/121.yml +1 -1
  168. data/data/problems/122.yml +10 -18
  169. data/data/problems/123.yml +3 -3
  170. data/data/problems/124.yml +17 -19
  171. data/data/problems/125.yml +1 -1
  172. data/data/problems/126.yml +12 -11
  173. data/data/problems/127.yml +8 -8
  174. data/data/problems/128.yml +3 -3
  175. data/data/problems/129.yml +1 -1
  176. data/data/problems/13.yml +1 -1
  177. data/data/problems/130.yml +6 -7
  178. data/data/problems/131.yml +2 -2
  179. data/data/problems/132.yml +2 -2
  180. data/data/problems/133.yml +2 -2
  181. data/data/problems/134.yml +3 -3
  182. data/data/problems/135.yml +3 -3
  183. data/data/problems/136.yml +3 -3
  184. data/data/problems/137.yml +9 -9
  185. data/data/problems/138.yml +5 -5
  186. data/data/problems/139.yml +2 -2
  187. data/data/problems/14.yml +8 -13
  188. data/data/problems/140.yml +5 -5
  189. data/data/problems/141.yml +2 -2
  190. data/data/problems/142.yml +3 -4
  191. data/data/problems/143.yml +3 -3
  192. data/data/problems/144.yml +4 -4
  193. data/data/problems/145.yml +1 -1
  194. data/data/problems/146.yml +1 -1
  195. data/data/problems/147.yml +6 -6
  196. data/data/problems/148.yml +8 -8
  197. data/data/problems/149.yml +12 -25
  198. data/data/problems/15.yml +4 -4
  199. data/data/problems/150.yml +16 -17
  200. data/data/problems/151.yml +3 -3
  201. data/data/problems/152.yml +2 -2
  202. data/data/problems/153.yml +30 -35
  203. data/data/problems/154.yml +16 -12
  204. data/data/problems/155.yml +7 -6
  205. data/data/problems/156.yml +8 -9
  206. data/data/problems/157.yml +4 -6
  207. data/data/problems/158.yml +12 -12
  208. data/data/problems/159.yml +14 -16
  209. data/data/problems/16.yml +1 -1
  210. data/data/problems/160.yml +3 -3
  211. data/data/problems/161.yml +6 -6
  212. data/data/problems/162.yml +3 -3
  213. data/data/problems/163.yml +3 -3
  214. data/data/problems/164.yml +3 -4
  215. data/data/problems/165.yml +12 -12
  216. data/data/problems/166.yml +6 -8
  217. data/data/problems/167.yml +6 -7
  218. data/data/problems/168.yml +5 -7
  219. data/data/problems/169.yml +2 -2
  220. data/data/problems/17.yml +5 -5
  221. data/data/problems/170.yml +9 -10
  222. data/data/problems/171.yml +4 -5
  223. data/data/problems/172.yml +3 -4
  224. data/data/problems/173.yml +2 -2
  225. data/data/problems/174.yml +4 -4
  226. data/data/problems/175.yml +12 -13
  227. data/data/problems/176.yml +1 -1
  228. data/data/problems/177.yml +2 -2
  229. data/data/problems/178.yml +6 -6
  230. data/data/problems/179.yml +4 -4
  231. data/data/problems/18.yml +11 -12
  232. data/data/problems/180.yml +9 -12
  233. data/data/problems/181.yml +1 -1
  234. data/data/problems/182.yml +14 -16
  235. data/data/problems/183.yml +12 -15
  236. data/data/problems/184.yml +3 -3
  237. data/data/problems/185.yml +11 -11
  238. data/data/problems/186.yml +10 -11
  239. data/data/problems/187.yml +8 -8
  240. data/data/problems/188.yml +4 -4
  241. data/data/problems/189.yml +4 -4
  242. data/data/problems/19.yml +1 -1
  243. data/data/problems/190.yml +2 -2
  244. data/data/problems/191.yml +5 -5
  245. data/data/problems/192.yml +10 -14
  246. data/data/problems/193.yml +1 -1
  247. data/data/problems/194.yml +10 -10
  248. data/data/problems/195.yml +5 -6
  249. data/data/problems/196.yml +15 -14
  250. data/data/problems/197.yml +7 -8
  251. data/data/problems/198.yml +8 -14
  252. data/data/problems/199.yml +3 -3
  253. data/data/problems/2.yml +8 -7
  254. data/data/problems/20.yml +4 -9
  255. data/data/problems/200.yml +7 -8
  256. data/data/problems/201.yml +14 -14
  257. data/data/problems/202.yml +2 -2
  258. data/data/problems/203.yml +21 -13
  259. data/data/problems/204.yml +7 -7
  260. data/data/problems/205.yml +6 -6
  261. data/data/problems/206.yml +1 -1
  262. data/data/problems/207.yml +10 -10
  263. data/data/problems/208.yml +4 -5
  264. data/data/problems/209.yml +6 -6
  265. data/data/problems/21.yml +7 -7
  266. data/data/problems/210.yml +6 -6
  267. data/data/problems/211.yml +2 -2
  268. data/data/problems/212.yml +16 -20
  269. data/data/problems/213.yml +6 -6
  270. data/data/problems/214.yml +9 -10
  271. data/data/problems/215.yml +5 -5
  272. data/data/problems/216.yml +5 -6
  273. data/data/problems/217.yml +7 -12
  274. data/data/problems/218.yml +9 -10
  275. data/data/problems/219.yml +5 -5
  276. data/data/problems/22.yml +3 -3
  277. data/data/problems/220.yml +15 -16
  278. data/data/problems/221.yml +8 -8
  279. data/data/problems/222.yml +1 -1
  280. data/data/problems/223.yml +5 -6
  281. data/data/problems/224.yml +5 -6
  282. data/data/problems/225.yml +2 -2
  283. data/data/problems/226.yml +8 -9
  284. data/data/problems/227.yml +3 -3
  285. data/data/problems/228.yml +17 -16
  286. data/data/problems/229.yml +16 -19
  287. data/data/problems/23.yml +1 -3
  288. data/data/problems/230.yml +9 -11
  289. data/data/problems/231.yml +5 -8
  290. data/data/problems/232.yml +1 -1
  291. data/data/problems/233.yml +2 -2
  292. data/data/problems/234.yml +11 -13
  293. data/data/problems/235.yml +2 -2
  294. data/data/problems/236.yml +13 -19
  295. data/data/problems/237.yml +4 -4
  296. data/data/problems/238.yml +16 -19
  297. data/data/problems/239.yml +2 -2
  298. data/data/problems/24.yml +2 -2
  299. data/data/problems/240.yml +7 -7
  300. data/data/problems/241.yml +4 -7
  301. data/data/problems/242.yml +5 -6
  302. data/data/problems/243.yml +13 -13
  303. data/data/problems/244.yml +15 -15
  304. data/data/problems/245.yml +8 -20
  305. data/data/problems/246.yml +11 -12
  306. data/data/problems/247.yml +11 -12
  307. data/data/problems/248.yml +1 -1
  308. data/data/problems/249.yml +2 -2
  309. data/data/problems/25.yml +8 -12
  310. data/data/problems/250.yml +4 -4
  311. data/data/problems/251.yml +4 -4
  312. data/data/problems/252.yml +13 -20
  313. data/data/problems/253.yml +9 -8
  314. data/data/problems/254.yml +3 -3
  315. data/data/problems/255.yml +15 -37
  316. data/data/problems/256.yml +19 -24
  317. data/data/problems/257.yml +8 -10
  318. data/data/problems/258.yml +9 -7
  319. data/data/problems/259.yml +1 -1
  320. data/data/problems/26.yml +11 -11
  321. data/data/problems/260.yml +15 -18
  322. data/data/problems/261.yml +15 -13
  323. data/data/problems/262.yml +15 -14
  324. data/data/problems/263.yml +13 -13
  325. data/data/problems/264.yml +10 -11
  326. data/data/problems/265.yml +2 -2
  327. data/data/problems/266.yml +7 -7
  328. data/data/problems/267.yml +1 -1
  329. data/data/problems/268.yml +1 -1
  330. data/data/problems/269.yml +3 -3
  331. data/data/problems/27.yml +12 -15
  332. data/data/problems/270.yml +4 -4
  333. data/data/problems/271.yml +5 -6
  334. data/data/problems/272.yml +5 -7
  335. data/data/problems/273.yml +4 -4
  336. data/data/problems/274.yml +4 -5
  337. data/data/problems/275.yml +4 -4
  338. data/data/problems/276.yml +5 -6
  339. data/data/problems/277.yml +7 -8
  340. data/data/problems/278.yml +16 -19
  341. data/data/problems/279.yml +3 -4
  342. data/data/problems/28.yml +6 -6
  343. data/data/problems/280.yml +2 -2
  344. data/data/problems/281.yml +4 -6
  345. data/data/problems/282.yml +3 -3
  346. data/data/problems/283.yml +6 -7
  347. data/data/problems/284.yml +7 -8
  348. data/data/problems/285.yml +4 -4
  349. data/data/problems/286.yml +2 -2
  350. data/data/problems/287.yml +19 -24
  351. data/data/problems/288.yml +7 -8
  352. data/data/problems/289.yml +11 -11
  353. data/data/problems/29.yml +10 -13
  354. data/data/problems/290.yml +3 -4
  355. data/data/problems/291.yml +4 -4
  356. data/data/problems/292.yml +5 -6
  357. data/data/problems/293.yml +9 -10
  358. data/data/problems/294.yml +12 -7
  359. data/data/problems/295.yml +11 -13
  360. data/data/problems/296.yml +9 -9
  361. data/data/problems/297.yml +7 -9
  362. data/data/problems/298.yml +32 -40
  363. data/data/problems/299.yml +17 -19
  364. data/data/problems/3.yml +6 -4
  365. data/data/problems/30.yml +1 -1
  366. data/data/problems/300.yml +14 -14
  367. data/data/problems/301.yml +9 -10
  368. data/data/problems/302.yml +5 -5
  369. data/data/problems/303.yml +4 -4
  370. data/data/problems/304.yml +7 -9
  371. data/data/problems/305.yml +4 -5
  372. data/data/problems/306.yml +10 -12
  373. data/data/problems/307.yml +4 -4
  374. data/data/problems/308.yml +4 -4
  375. data/data/problems/309.yml +11 -9
  376. data/data/problems/31.yml +2 -2
  377. data/data/problems/310.yml +6 -9
  378. data/data/problems/311.yml +10 -12
  379. data/data/problems/312.yml +10 -9
  380. data/data/problems/313.yml +5 -5
  381. data/data/problems/314.yml +8 -9
  382. data/data/problems/315.yml +35 -38
  383. data/data/problems/316.yml +17 -16
  384. data/data/problems/317.yml +8 -7
  385. data/data/problems/318.yml +14 -29
  386. data/data/problems/319.yml +10 -12
  387. data/data/problems/32.yml +2 -2
  388. data/data/problems/320.yml +2 -2
  389. data/data/problems/321.yml +12 -11
  390. data/data/problems/322.yml +4 -5
  391. data/data/problems/323.yml +7 -9
  392. data/data/problems/324.yml +7 -9
  393. data/data/problems/325.yml +2 -2
  394. data/data/problems/326.yml +3 -3
  395. data/data/problems/327.yml +19 -22
  396. data/data/problems/328.yml +23 -23
  397. data/data/problems/329.yml +6 -6
  398. data/data/problems/33.yml +2 -2
  399. data/data/problems/330.yml +12 -16
  400. data/data/problems/331.yml +16 -18
  401. data/data/problems/332.yml +10 -10
  402. data/data/problems/333.yml +15 -16
  403. data/data/problems/334.yml +17 -19
  404. data/data/problems/335.yml +3 -3
  405. data/data/problems/336.yml +5 -5
  406. data/data/problems/337.yml +7 -8
  407. data/data/problems/338.yml +18 -24
  408. data/data/problems/339.yml +3 -3
  409. data/data/problems/34.yml +1 -1
  410. data/data/problems/340.yml +7 -7
  411. data/data/problems/341.yml +4 -5
  412. data/data/problems/342.yml +6 -9
  413. data/data/problems/343.yml +8 -13
  414. data/data/problems/344.yml +8 -8
  415. data/data/problems/345.yml +17 -16
  416. data/data/problems/346.yml +6 -6
  417. data/data/problems/347.yml +8 -10
  418. data/data/problems/348.yml +5 -5
  419. data/data/problems/349.yml +4 -4
  420. data/data/problems/35.yml +1 -1
  421. data/data/problems/350.yml +5 -6
  422. data/data/problems/351.yml +7 -7
  423. data/data/problems/352.yml +13 -14
  424. data/data/problems/353.yml +2 -2
  425. data/data/problems/354.yml +6 -8
  426. data/data/problems/355.yml +4 -4
  427. data/data/problems/356.yml +5 -4
  428. data/data/problems/357.yml +3 -3
  429. data/data/problems/358.yml +11 -16
  430. data/data/problems/359.yml +12 -12
  431. data/data/problems/36.yml +1 -1
  432. data/data/problems/360.yml +4 -4
  433. data/data/problems/361.yml +9 -9
  434. data/data/problems/362.yml +8 -15
  435. data/data/problems/363.yml +29 -29
  436. data/data/problems/364.yml +4 -4
  437. data/data/problems/365.yml +3 -3
  438. data/data/problems/366.yml +16 -19
  439. data/data/problems/367.yml +11 -11
  440. data/data/problems/368.yml +14 -18
  441. data/data/problems/369.yml +2 -2
  442. data/data/problems/37.yml +1 -1
  443. data/data/problems/370.yml +4 -4
  444. data/data/problems/371.yml +5 -5
  445. data/data/problems/372.yml +6 -7
  446. data/data/problems/373.yml +10 -6
  447. data/data/problems/374.yml +11 -13
  448. data/data/problems/375.yml +11 -14
  449. data/data/problems/376.yml +19 -19
  450. data/data/problems/377.yml +5 -5
  451. data/data/problems/378.yml +8 -9
  452. data/data/problems/379.yml +10 -9
  453. data/data/problems/38.yml +9 -11
  454. data/data/problems/380.yml +8 -10
  455. data/data/problems/381.yml +6 -10
  456. data/data/problems/382.yml +12 -13
  457. data/data/problems/383.yml +5 -6
  458. data/data/problems/384.yml +14 -18
  459. data/data/problems/385.yml +12 -14
  460. data/data/problems/386.yml +4 -5
  461. data/data/problems/387.yml +13 -14
  462. data/data/problems/388.yml +6 -6
  463. data/data/problems/389.yml +3 -3
  464. data/data/problems/39.yml +2 -2
  465. data/data/problems/390.yml +12 -8
  466. data/data/problems/391.yml +18 -20
  467. data/data/problems/392.yml +9 -9
  468. data/data/problems/393.yml +8 -8
  469. data/data/problems/394.yml +14 -15
  470. data/data/problems/395.yml +16 -15
  471. data/data/problems/396.yml +13 -16
  472. data/data/problems/397.yml +4 -6
  473. data/data/problems/398.yml +8 -9
  474. data/data/problems/399.yml +18 -19
  475. data/data/problems/4.yml +2 -2
  476. data/data/problems/40.yml +2 -2
  477. data/data/problems/400.yml +10 -9
  478. data/data/problems/401.yml +6 -7
  479. data/data/problems/402.yml +7 -9
  480. data/data/problems/403.yml +9 -10
  481. data/data/problems/404.yml +8 -10
  482. data/data/problems/405.yml +10 -10
  483. data/data/problems/406.yml +24 -30
  484. data/data/problems/407.yml +6 -10
  485. data/data/problems/408.yml +10 -10
  486. data/data/problems/409.yml +12 -7
  487. data/data/problems/41.yml +1 -1
  488. data/data/problems/410.yml +5 -6
  489. data/data/problems/411.yml +10 -13
  490. data/data/problems/412.yml +10 -10
  491. data/data/problems/413.yml +6 -7
  492. data/data/problems/414.yml +26 -28
  493. data/data/problems/415.yml +12 -13
  494. data/data/problems/416.yml +4 -4
  495. data/data/problems/417.yml +12 -14
  496. data/data/problems/418.yml +13 -10
  497. data/data/problems/419.yml +11 -13
  498. data/data/problems/42.yml +2 -2
  499. data/data/problems/420.yml +8 -8
  500. data/data/problems/421.yml +8 -13
  501. data/data/problems/422.yml +8 -8
  502. data/data/problems/423.yml +11 -12
  503. data/data/problems/424.yml +10 -10
  504. data/data/problems/425.yml +7 -7
  505. data/data/problems/426.yml +9 -9
  506. data/data/problems/427.yml +12 -13
  507. data/data/problems/428.yml +17 -20
  508. data/data/problems/429.yml +5 -5
  509. data/data/problems/43.yml +1 -1
  510. data/data/problems/430.yml +6 -7
  511. data/data/problems/44.yml +4 -4
  512. data/data/problems/45.yml +4 -4
  513. data/data/problems/46.yml +6 -9
  514. data/data/problems/47.yml +5 -8
  515. data/data/problems/48.yml +1 -1
  516. data/data/problems/49.yml +1 -1
  517. data/data/problems/5.yml +1 -1
  518. data/data/problems/50.yml +1 -1
  519. data/data/problems/51.yml +1 -3
  520. data/data/problems/52.yml +1 -1
  521. data/data/problems/53.yml +6 -12
  522. data/data/problems/54.yml +17 -16
  523. data/data/problems/55.yml +3 -3
  524. data/data/problems/56.yml +2 -2
  525. data/data/problems/57.yml +9 -10
  526. data/data/problems/58.yml +11 -11
  527. data/data/problems/59.yml +2 -2
  528. data/data/problems/6.yml +2 -2
  529. data/data/problems/60.yml +1 -1
  530. data/data/problems/61.yml +7 -7
  531. data/data/problems/62.yml +1 -1
  532. data/data/problems/63.yml +1 -1
  533. data/data/problems/64.yml +30 -44
  534. data/data/problems/65.yml +19 -19
  535. data/data/problems/66.yml +9 -12
  536. data/data/problems/67.yml +9 -9
  537. data/data/problems/68.yml +3 -3
  538. data/data/problems/69.yml +3 -3
  539. data/data/problems/7.yml +1 -1
  540. data/data/problems/70.yml +4 -4
  541. data/data/problems/71.yml +4 -4
  542. data/data/problems/72.yml +4 -4
  543. data/data/problems/73.yml +4 -4
  544. data/data/problems/74.yml +9 -16
  545. data/data/problems/75.yml +3 -3
  546. data/data/problems/76.yml +1 -1
  547. data/data/problems/77.yml +1 -1
  548. data/data/problems/78.yml +8 -8
  549. data/data/problems/79.yml +2 -2
  550. data/data/problems/8.yml +12 -13
  551. data/data/problems/80.yml +1 -1
  552. data/data/problems/81.yml +8 -10
  553. data/data/problems/82.yml +10 -11
  554. data/data/problems/83.yml +10 -11
  555. data/data/problems/84.yml +45 -37
  556. data/data/problems/85.yml +2 -2
  557. data/data/problems/86.yml +8 -8
  558. data/data/problems/87.yml +1 -1
  559. data/data/problems/88.yml +11 -22
  560. data/data/problems/89.yml +14 -14
  561. data/data/problems/9.yml +6 -7
  562. data/data/problems/90.yml +7 -7
  563. data/data/problems/91.yml +6 -8
  564. data/data/problems/92.yml +6 -11
  565. data/data/problems/93.yml +11 -12
  566. data/data/problems/94.yml +1 -1
  567. data/data/problems/95.yml +2 -2
  568. data/data/problems/96.yml +7 -9
  569. data/data/problems/97.yml +3 -3
  570. data/data/problems/98.yml +2 -2
  571. data/data/problems/99.yml +4 -4
  572. data/euler-manager.gemspec +2 -2
  573. data/example/1/README.md +1 -1
  574. data/example/1/ruby/1.rb +7 -1
  575. data/example/1/scala/1.scala +1 -1
  576. data/example/15/README.md +4 -4
  577. data/example/2/README.md +1 -4
  578. data/languages/c.rb +22 -0
  579. data/languages/elixir.rb +25 -0
  580. data/languages/java.rb +3 -2
  581. data/languages/perl.rb +25 -0
  582. data/languages/php.rb +25 -0
  583. data/lib/euler/version.rb +1 -1
  584. data/rake/clean.rake +0 -2
  585. data/rake/sha_answers.rake +20 -0
  586. data/rake/update.rake +5 -2
  587. data/spec/euler_spec.rb +5 -0
  588. data/templates/c.c +11 -0
  589. data/templates/elixir.ex +1 -0
  590. data/templates/perl.pl +3 -0
  591. data/templates/php.php +5 -0
  592. metadata +148 -164
  593. data/data/images/blackdot.gif +0 -0
  594. data/data/images/bracket_left.gif +0 -0
  595. data/data/images/bracket_right.gif +0 -0
  596. data/data/images/sod_13.gif +0 -119
  597. data/data/images/symbol_asymp.gif +0 -0
  598. data/data/images/symbol_cong.gif +0 -0
  599. data/data/images/symbol_ge.gif +0 -0
  600. data/data/images/symbol_gt.gif +0 -0
  601. data/data/images/symbol_implies.gif +0 -0
  602. data/data/images/symbol_lceil.gif +0 -0
  603. data/data/images/symbol_le.gif +0 -0
  604. data/data/images/symbol_lfloor.gif +0 -0
  605. data/data/images/symbol_lt.gif +0 -0
  606. data/data/images/symbol_maps.gif +0 -0
  607. data/data/images/symbol_minus.gif +0 -0
  608. data/data/images/symbol_ne.gif +0 -0
  609. data/data/images/symbol_plusmn.gif +0 -0
  610. data/data/images/symbol_radic.gif +0 -0
  611. data/data/images/symbol_rceil.gif +0 -0
  612. data/data/images/symbol_rfloor.gif +0 -0
  613. data/data/images/symbol_sum.gif +0 -0
  614. data/data/images/symbol_times.gif +0 -0
  615. data/example/1/haskell/1.hs +0 -3
  616. data/example/12/README.md +0 -20
  617. data/example/12/haskell/12.hs +0 -3
  618. data/example/lib/Euler.hs +0 -1
data/data/problems/90.yml CHANGED
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  :id: 90
3
3
  :name: Cube digit pairs
4
- :url: http://projecteuler.net/problem=90
4
+ :url: https://projecteuler.net/problem=90
5
5
  :content: "Each of the six faces on a cube has a different digit (0 to 9) written
6
6
  on it; the same is done to a second cube. By placing the two cubes side-by-side
7
7
  in different positions we can form a variety of 2-digit numbers.\n\nFor example,
8
- the square number 64 could be formed:\n\n ![]({{ images_dir }}/p_090.gif) \n\nIn
8
+ the square number 64 could be formed:\n\n ![]({{ images_dir }}/p090.gif) \n\nIn
9
9
  fact, by carefully choosing the digits on both cubes it is possible to display all
10
10
  of the square numbers below one-hundred: 01, 04, 09, 16, 25, 36, 49, 64, and 81.\n\nFor
11
11
  example, one way this can be achieved is by placing {0, 5, 6, 7, 8, 9} on one cube
@@ -14,8 +14,8 @@
14
14
  7, 8, 9} and {1, 2, 3, 4, 6, 7} allows for all nine square numbers to be displayed;
15
15
  otherwise it would be impossible to obtain 09.\n\nIn determining a distinct arrangement
16
16
  we are interested in the digits on each cube, not the order.\n\n{1, 2, 3, 4, 5,
17
- 6} is equivalent to {3, 6, 4, 1, 2, 5} \n\r{1, 2, 3, 4, 5, 6} is distinct from
18
- {1, 2, 3, 4, 5, 9}\n\nBut because we are allowing 6 and 9 to be reversed, the two
19
- distinct sets in the last example both represent the extended set {1, 2, 3, 4, 5,
20
- 6, 9} for the purpose of forming 2-digit numbers.\n\nHow many distinct arrangements
21
- of the two cubes allow for all of the square numbers to be displayed?\n\n"
17
+ 6} is equivalent to {3, 6, 4, 1, 2, 5} \n{1, 2, 3, 4, 5, 6} is distinct from {1,
18
+ 2, 3, 4, 5, 9}\n\nBut because we are allowing 6 and 9 to be reversed, the two distinct
19
+ sets in the last example both represent the extended set {1, 2, 3, 4, 5, 6, 9} for
20
+ the purpose of forming 2-digit numbers.\n\nHow many distinct arrangements of the
21
+ two cubes allow for all of the square numbers to be displayed?\n\n"
data/data/problems/91.yml CHANGED
@@ -1,14 +1,12 @@
1
1
  ---
2
2
  :id: 91
3
3
  :name: Right triangles with integer coordinates
4
- :url: http://projecteuler.net/problem=91
4
+ :url: https://projecteuler.net/problem=91
5
5
  :content: "The points P (_x_<sub>1</sub>, _y_<sub>1</sub>) and Q (_x_<sub>2</sub>,
6
6
  _y_<sub>2</sub>) are plotted at integer co-ordinates and are joined to the origin,
7
- O(0,0), to form ΔOPQ.\n\n ![]({{ images_dir }}/p_091_1.gif) \n\nThere are exactly
7
+ O(0,0), to form ΔOPQ.\n\n ![]({{ images_dir }}/p091_1.gif) \n\nThere are exactly
8
8
  fourteen triangles containing a right angle that can be formed when each co-ordinate
9
- lies between 0 and 2 inclusive; that is, \n0 ![]({{ images_dir }}/symbol_le.gif)
10
- _x_<sub>1</sub>, _y_<sub>1</sub>, _x_<sub>2</sub>, _y_<sub>2</sub> ![]({{ images_dir
11
- }}/symbol_le.gif) 2.\n\n ![]({{ images_dir }}/p_091_2.gif) \n\nGiven that 0 ![]({{
12
- images_dir }}/symbol_le.gif) _x_<sub>1</sub>, _y_<sub>1</sub>, _x_<sub>2</sub>,
13
- _y_<sub>2</sub> ![≤]({{ images_dir }}/symbol_le.gif) 50, how many right triangles
14
- can be formed?\n\n"
9
+ lies between 0 and 2 inclusive; that is, \n0 ≤ _x_<sub>1</sub>, _y_<sub>1</sub>,
10
+ _x_<sub>2</sub>, _y_<sub>2</sub> ≤ 2.\n\n ![]({{ images_dir }}/p091_2.gif) \n\nGiven
11
+ that 0 _x_<sub>1</sub>, _y_<sub>1</sub>, _x_<sub>2</sub>, _y_<sub>2</sub> 50,
12
+ how many right triangles can be formed?\n\n"
data/data/problems/92.yml CHANGED
@@ -1,16 +1,11 @@
1
1
  ---
2
2
  :id: 92
3
3
  :name: Square digit chains
4
- :url: http://projecteuler.net/problem=92
4
+ :url: https://projecteuler.net/problem=92
5
5
  :content: "A number chain is created by continuously adding the square of the digits
6
6
  in a number to form a new number until it has been seen before.\n\nFor example,\n\n44
7
- ![]({{ images_dir }}/symbol_maps.gif) 32 ![]({{ images_dir }}/symbol_maps.gif)
8
- 13 ![]({{ images_dir }}/symbol_maps.gif) 10 ![→]({{ images_dir }}/symbol_maps.gif)
9
- **1** ![→]({{ images_dir }}/symbol_maps.gif) **1** \n85 ![→]({{ images_dir }}/symbol_maps.gif)
10
- **89** ![→]({{ images_dir }}/symbol_maps.gif) 145 ![→]({{ images_dir }}/symbol_maps.gif)
11
- 42 ![→]({{ images_dir }}/symbol_maps.gif) 20 ![→]({{ images_dir }}/symbol_maps.gif)
12
- 4 ![→]({{ images_dir }}/symbol_maps.gif) 16 ![→]({{ images_dir }}/symbol_maps.gif)
13
- 37 ![→]({{ images_dir }}/symbol_maps.gif) 58 ![→]({{ images_dir }}/symbol_maps.gif)
14
- **89**\n\nTherefore any chain that arrives at 1 or 89 will become stuck in an endless
15
- loop. What is most amazing is that EVERY starting number will eventually arrive
16
- at 1 or 89.\n\nHow many starting numbers below ten million will arrive at 89?\n\n"
7
+ 32 1310 → **1** → **1** \n85 → **89** → 145 → 42 → 20 → 4 → 16 → 37 → 58
8
+ **89**\n\nTherefore any chain that arrives at 1 or 89 will become stuck in an
9
+ endless loop. What is most amazing is that EVERY starting number will eventually
10
+ arrive at 1 or 89.\n\nHow many starting numbers below ten million will arrive at
11
+ 89?\n\n"
data/data/problems/93.yml CHANGED
@@ -1,16 +1,15 @@
1
1
  ---
2
2
  :id: 93
3
3
  :name: Arithmetic expressions
4
- :url: http://projecteuler.net/problem=93
4
+ :url: https://projecteuler.net/problem=93
5
5
  :content: "By using each of the digits from the set, {1, 2, 3, 4}, exactly once, and
6
- making use of the four arithmetic operations (+, ![−]({{ images_dir }}/symbol_minus.gif),
7
- \\*, /) and brackets/parentheses, it is possible to form different positive integer
8
- targets.\n\nFor example,\n\n8 = (4 \\* (1 + 3)) / 2 \n14 = 4 \\* (3 + 1 / 2) \n19
9
- = 4 \\* (2 + 3) ![−]({{ images_dir }}/symbol_minus.gif) 1 \n36 = 3 \\* 4 \\* (2
10
- + 1)\n\nNote that concatenations of the digits, like 12 + 34, are not allowed.\n\nUsing
11
- the set, {1, 2, 3, 4}, it is possible to obtain thirty-one different target numbers
12
- of which 36 is the maximum, and each of the numbers 1 to 28 can be obtained before
13
- encountering the first non-expressible number.\n\nFind the set of four distinct
14
- digits, _a_ ![<]({{ images_dir }}/symbol_lt.gif) _b_ &lt _c_ ![<]({{ images_dir
15
- }}/symbol_lt.gif) _d_, for which the longest set of consecutive positive integers,
16
- 1 to _n_, can be obtained, giving your answer as a string: _abcd_.\n\n"
6
+ making use of the four arithmetic operations (+, −, \\*, /) and brackets/parentheses,
7
+ it is possible to form different positive integer targets.\n\nFor example,\n\n8
8
+ = (4 \\* (1 + 3)) / 2 \n14 = 4 \\* (3 + 1 / 2) \n19 = 4 \\* (2 + 3) − 1 \n36
9
+ = 3 \\* 4 \\* (2 + 1)\n\nNote that concatenations of the digits, like 12 + 34, are
10
+ not allowed.\n\nUsing the set, {1, 2, 3, 4}, it is possible to obtain thirty-one
11
+ different target numbers of which 36 is the maximum, and each of the numbers 1 to
12
+ 28 can be obtained before encountering the first non-expressible number.\n\nFind
13
+ the set of four distinct digits, _a_ \\< _b_ \\< _c_ \\< _d_, for which the longest
14
+ set of consecutive positive integers, 1 to _n_, can be obtained, giving your answer
15
+ as a string: _abcd_.\n\n"
data/data/problems/94.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :id: 94
3
3
  :name: Almost equilateral triangles
4
- :url: http://projecteuler.net/problem=94
4
+ :url: https://projecteuler.net/problem=94
5
5
  :content: |+
6
6
  It is easily proved that no equilateral triangle exists with integral length sides and integral area. However, the _almost equilateral triangle_ 5-5-6 has an area of 12 square units.
7
7
 
data/data/problems/95.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :id: 95
3
3
  :name: Amicable chains
4
- :url: http://projecteuler.net/problem=95
4
+ :url: https://projecteuler.net/problem=95
5
5
  :content: |+
6
6
  The proper divisors of a number are all the divisors excluding the number itself. For example, the proper divisors of 28 are 1, 2, 4, 7, and 14. As the sum of these divisors is equal to 28, we call it a perfect number.
7
7
 
@@ -9,7 +9,7 @@
9
9
 
10
10
  Perhaps less well known are longer chains. For example, starting with 12496, we form a chain of five numbers:
11
11
 
12
- 12496 ![]({{ images_dir }}/symbol_maps.gif) 14288 ![]({{ images_dir }}/symbol_maps.gif) 15472 ![]({{ images_dir }}/symbol_maps.gif) 14536 ![]({{ images_dir }}/symbol_maps.gif) 14264 ( ![]({{ images_dir }}/symbol_maps.gif) 12496 ![]({{ images_dir }}/symbol_maps.gif) ...)
12
+ 12496 → 14288 → 15472 → 14536 → 14264 (→ 12496 → ...)
13
13
 
14
14
  Since this chain returns to its starting point, it is called an amicable chain.
15
15
 
data/data/problems/96.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :id: 96
3
3
  :name: Su Doku
4
- :url: http://projecteuler.net/problem=96
4
+ :url: https://projecteuler.net/problem=96
5
5
  :content: "Su Doku (Japanese meaning _number place_) is the name given to a popular
6
6
  puzzle concept. Its origin is unclear, but credit must be attributed to Leonhard
7
7
  Euler who invented a similar, and much more difficult, puzzle idea called Latin
@@ -20,11 +20,9 @@
20
20
  to eliminate options (there is much contested opinion over this). The complexity
21
21
  of the search determines the difficulty of the puzzle; the example above is considered
22
22
  _easy_ because it can be solved by straight forward direct deduction.\n\nThe 6K
23
- text file, [sudoku.txt](project/sudoku.txt) (right click and 'Save Link/Target As...'),
24
- contains fifty different Su Doku puzzles ranging in difficulty, but all with unique
25
- solutions (the first puzzle in the file is the example above).\n\nBy solving all
26
- fifty puzzles find the sum of the 3-digit numbers found in the top left corner of
27
- each solution grid; for example, 483 is the 3-digit number found in the top left
28
- corner of the solution grid above.\n\n<!--<p class='info'>Note: If you're convinced
29
- that &quot;guess and test&quot; methods need not be employed please tell how you
30
- would solve #6 and #46. (c;</p>-->\n"
23
+ text file, [sudoku.txt](project/resources/p096_sudoku.txt) (right click and 'Save
24
+ Link/Target As...'), contains fifty different Su Doku puzzles ranging in difficulty,
25
+ but all with unique solutions (the first puzzle in the file is the example above).\n\nBy
26
+ solving all fifty puzzles find the sum of the 3-digit numbers found in the top left
27
+ corner of each solution grid; for example, 483 is the 3-digit number found in the
28
+ top left corner of the solution grid above.\n\n"
data/data/problems/97.yml CHANGED
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  :id: 97
3
3
  :name: Large non-Mersenne prime
4
- :url: http://projecteuler.net/problem=97
4
+ :url: https://projecteuler.net/problem=97
5
5
  :content: |+
6
- The first known prime found to exceed one million digits was discovered in 1999, and is a Mersenne prime of the form 2<sup>6972593</sup> ![−]({{ images_dir }}/symbol_minus.gif)1; it contains exactly 2,098,960 digits. Subsequently other Mersenne primes, of the form 2<sup><i>p</i></sup> ![−]({{ images_dir }}/symbol_minus.gif)1, have been found which contain more digits.
6
+ The first known prime found to exceed one million digits was discovered in 1999, and is a Mersenne prime of the form 2<sup>6972593</sup>−1; it contains exactly 2,098,960 digits. Subsequently other Mersenne primes, of the form 2<sup><i>p</i></sup>−1, have been found which contain more digits.
7
7
 
8
- However, in 2004 there was found a massive non-Mersenne prime which contains 2,357,207 digits: 28433 ![×]({{ images_dir }}/symbol_times.gif)2<sup>7830457</sup>+1.
8
+ However, in 2004 there was found a massive non-Mersenne prime which contains 2,357,207 digits: 28433×2<sup>7830457</sup>+1.
9
9
 
10
10
  Find the last ten digits of this prime number.
11
11
 
data/data/problems/98.yml CHANGED
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  :id: 98
3
3
  :name: Anagramic squares
4
- :url: http://projecteuler.net/problem=98
4
+ :url: https://projecteuler.net/problem=98
5
5
  :content: |+
6
6
  By replacing each of the letters in the word CARE with 1, 2, 9, and 6 respectively, we form a square number: 1296 = 36<sup>2</sup>. What is remarkable is that, by using the same digital substitutions, the anagram, RACE, also forms a square number: 9216 = 96<sup>2</sup>. We shall call CARE (and RACE) a square anagram word pair and specify further that leading zeroes are not permitted, neither may a different letter have the same digital value as another letter.
7
7
 
8
- Using [words.txt](project/words.txt) (right click and 'Save Link/Target As...'), a 16K text file containing nearly two-thousand common English words, find all the square anagram word pairs (a palindromic word is NOT considered to be an anagram of itself).
8
+ Using [words.txt](project/resources/p098_words.txt) (right click and 'Save Link/Target As...'), a 16K text file containing nearly two-thousand common English words, find all the square anagram word pairs (a palindromic word is NOT considered to be an anagram of itself).
9
9
 
10
10
  What is the largest square number formed by any member of such a pair?
11
11
 
data/data/problems/99.yml CHANGED
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  :id: 99
3
3
  :name: Largest exponential
4
- :url: http://projecteuler.net/problem=99
4
+ :url: https://projecteuler.net/problem=99
5
5
  :content: |+
6
- Comparing two numbers written in index form like 2<sup>11</sup> and 3<sup>7</sup> is not difficult, as any calculator would confirm that 2<sup>11</sup> = 2048 ![<]({{ images_dir }}/symbol_lt.gif) 3<sup>7</sup> = 2187.
6
+ Comparing two numbers written in index form like 2<sup>11</sup> and 3<sup>7</sup> is not difficult, as any calculator would confirm that 2<sup>11</sup> = 2048 \< 3<sup>7</sup> = 2187.
7
7
 
8
- However, confirming that 632382<sup>518061</sup> ![>]({{ images_dir }}/symbol_gt.gif) 519432<sup>525806</sup> would be much more difficult, as both numbers contain over three million digits.
8
+ However, confirming that 632382<sup>518061</sup> \> 519432<sup>525806</sup> would be much more difficult, as both numbers contain over three million digits.
9
9
 
10
- Using [base\_exp.txt](project/base_exp.txt) (right click and 'Save Link/Target As...'), a 22K text file containing one thousand lines with a base/exponent pair on each line, determine which line number has the greatest numerical value.
10
+ Using [base\_exp.txt](project/resources/p099_base_exp.txt) (right click and 'Save Link/Target As...'), a 22K text file containing one thousand lines with a base/exponent pair on each line, determine which line number has the greatest numerical value.
11
11
 
12
12
  NOTE: The first two lines in the file represent the numbers in the example given above.
13
13
 
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ['William Yaworsky']
10
10
  spec.email = ['wj.px01@gmail.com']
11
11
  spec.summary = %q{Manage and test project Euler problems from your command line.}
12
- # spec.description = %q{This gem provides a framework for solving project Euler problems. You can test}
12
+ spec.description = %q{This gem provides a framework for managing project Euler solutions.}
13
13
  spec.homepage = 'https://github.com/yaworsw/euler-manager'
14
14
  spec.license = 'MIT'
15
15
 
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.required_ruby_version = '>= 1.9.3'
21
+ spec.required_ruby_version = '>= 2.0.0'
22
22
 
23
23
  spec.add_dependency 'commander'
24
24
  spec.add_dependency 'colorize'
data/example/1/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # [Multiples of 3 and 5](http://projecteuler.net/problem=1)
1
+ # [Multiples of 3 and 5](https://projecteuler.net/problem=1)
2
2
 
3
3
  If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
4
4
 
data/example/1/ruby/1.rb CHANGED
@@ -1,5 +1,11 @@
1
1
  require_relative '../../lib/euler.rb'
2
2
 
3
- answer = 0
3
+ one_to_one_thousand = (1...1000).to_a
4
+
5
+ divisible_by_three_or_five = lambda { |num|
6
+ num % 3 == 0 || num % 5 == 0
7
+ }
8
+
9
+ answer = one_to_one_thousand.select(&divisible_by_three_or_five).reduce(:+)
4
10
 
5
11
  puts answer
@@ -2,7 +2,7 @@ import euler._
2
2
 
3
3
  object Main extends App {
4
4
 
5
- val answer = 0
5
+ val answer = (1 until 1000).filter((x) => x % 3 == 0 || x % 5 == 0).foldLeft(0)(_+_)
6
6
 
7
7
  println(answer)
8
8
 
data/example/15/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # [Lattice paths](http://projecteuler.net/problem=15)
1
+ # [Lattice paths](https://projecteuler.net/problem=15)
2
2
 
3
- Starting in the top left corner of a 2 ![×](https://raw.githubusercontent.com/yaworsw/euler-manager/develop/.data/images/symbol_times.gif)2 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right corner.
3
+ Starting in the top left corner of a 2×2 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right corner.
4
4
 
5
- ![](https://raw.githubusercontent.com/yaworsw/euler-manager/develop/.data/images/p_015.gif)
5
+ ![](https://raw.githubusercontent.com/yaworsw/euler-manager/develop/data/images/p015.gif)
6
6
 
7
- How many such routes are there through a 20 ![×](https://raw.githubusercontent.com/yaworsw/euler-manager/develop/.data/images/symbol_times.gif)20 grid?
7
+ How many such routes are there through a 20×20 grid?
8
8
 
data/example/2/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # [Even Fibonacci numbers](http://projecteuler.net/problem=2)
1
+ # [Even Fibonacci numbers](https://projecteuler.net/problem=2)
2
2
 
3
3
  Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
4
4
 
@@ -6,6 +6,3 @@ Each new term in the Fibonacci sequence is generated by adding the previous two
6
6
 
7
7
  By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
8
8
 
9
- <!--
10
- Note: This problem has been changed recently, please check that you are using the right parameters.
11
- -->
data/languages/c.rb ADDED
@@ -0,0 +1,22 @@
1
+ Euler.register_language('c', Class.new do
2
+ def run solution
3
+ dir = File.dirname(file_path(solution))
4
+ Dir.chdir(dir)
5
+ `gcc #{file_path(solution)} -o #{solution.dir}/solution`
6
+ `#{solution.dir}/solution`
7
+ end
8
+
9
+ def init solution
10
+ FileUtils.cp(template_path, file_path(solution))
11
+ end
12
+
13
+ private
14
+
15
+ def file_path solution
16
+ "#{solution.dir}/#{solution.problem.id}.c"
17
+ end
18
+
19
+ def template_path
20
+ "#{File.dirname(__FILE__)}/../templates/c.c"
21
+ end
22
+ end)
@@ -0,0 +1,25 @@
1
+ Euler.register_language('elixir', Class.new do
2
+
3
+ # Compile and run the solution
4
+ def run solution
5
+ `elixir #{file_path(solution)}`
6
+ end
7
+
8
+ # Copy the template to the solution directory
9
+ def init solution
10
+ FileUtils.cp(template_path, file_path(solution))
11
+ end
12
+
13
+ private
14
+
15
+ # Returns the path of the solution
16
+ def file_path solution
17
+ "#{solution.dir}/#{solution.problem.id}.ex"
18
+ end
19
+
20
+ # Returns the path of the template
21
+ def template_path
22
+ "#{File.dirname(__FILE__)}/../templates/elixir.ex"
23
+ end
24
+
25
+ end)
data/languages/java.rb CHANGED
@@ -4,8 +4,9 @@ Euler.register_language('java', Class.new do
4
4
  def run solution
5
5
  dir = File.dirname(file_path(solution))
6
6
  Dir.chdir(dir)
7
- `find #{Euler.root}/lib -type f -name "*.java" -not -name "java.java" -print | xargs javac`
8
- `javac -cp .:#{Euler.root}/lib ./*.java && java Main`
7
+ libs = Dir["#{Euler.root}/lib/**/*.java"].reject { |f| File.basename(f) == 'java.java' }
8
+ `javac #{libs.join(' ')}`
9
+ `javac -cp .:#{Euler.root}/lib ./*.java && java -cp .:#{Euler.root}/lib Main`
9
10
  end
10
11
 
11
12
  # Copy the java template to the solution directory
data/languages/perl.rb ADDED
@@ -0,0 +1,25 @@
1
+ Euler.register_language('perl', Class.new do
2
+
3
+ # Run the solution
4
+ def run solution
5
+ `perl #{file_path(solution)}`
6
+ end
7
+
8
+ # Copy the template into the solution's directory
9
+ def init solution
10
+ FileUtils.cp(template_path, file_path(solution))
11
+ end
12
+
13
+ private
14
+
15
+ # Returns the path to the solution
16
+ def file_path solution
17
+ "#{solution.dir}/#{solution.problem.id}.pl"
18
+ end
19
+
20
+ # Returns the path to the template
21
+ def template_path
22
+ "#{File.dirname(__FILE__)}/../templates/perl.pl"
23
+ end
24
+
25
+ end)
data/languages/php.rb ADDED
@@ -0,0 +1,25 @@
1
+ Euler.register_language('php', Class.new do
2
+
3
+ # Run the solution
4
+ def run solution
5
+ `php #{file_path(solution)}`
6
+ end
7
+
8
+ # Copy the template into the solution's directory
9
+ def init solution
10
+ FileUtils.cp(template_path, file_path(solution))
11
+ end
12
+
13
+ private
14
+
15
+ # Returns the path to the solution
16
+ def file_path solution
17
+ "#{solution.dir}/#{solution.problem.id}.php"
18
+ end
19
+
20
+ # Returns the path to the template
21
+ def template_path
22
+ "#{File.dirname(__FILE__)}/../templates/php.php"
23
+ end
24
+
25
+ end)
data/lib/euler/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Euler
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
data/rake/clean.rake CHANGED
@@ -1,5 +1,3 @@
1
- # Delete all of the problem's .yaml files and the images from the data directory
2
-
3
1
  desc "Deletes all of the data that has been downloaded for Project Euler problems"
4
2
  task :clean do
5
3
 
@@ -0,0 +1,20 @@
1
+ require 'digest/sha1'
2
+ require 'yaml'
3
+
4
+ desc "SHA problem solutions"
5
+ task :sha_answers do
6
+
7
+ data_dir = "#{__dir__}/../data"
8
+ answers_file = "#{data_dir}/answers.yml"
9
+ raw_answers_file = "#{data_dir}/answers-raw.yml"
10
+
11
+ raw_answers = YAML.load_file(answers_file)
12
+
13
+ raw_answers.map do |id, answer|
14
+ Digest::SHA1.hexdigest(answer)
15
+ end
16
+
17
+ File.open(answers_file, 'w') do |f|
18
+ f.write(raw_answers.to_yaml)
19
+ end
20
+ end
data/rake/update.rake CHANGED
@@ -15,6 +15,9 @@ require 'euler'
15
15
  desc "Scrape the Project Euler website and download problem descriptions and images"
16
16
  task :update do
17
17
 
18
+ protocol = 'https'
19
+ domain = 'projecteuler.net'
20
+
18
21
  # Number of seconds to wait in the beginning of each iteration of the http request loop
19
22
  sleep_time = 0.5
20
23
 
@@ -48,7 +51,7 @@ task :update do
48
51
 
49
52
  sleep(sleep_time)
50
53
 
51
- url = "http://projecteuler.net/problem=#{problem_id}"
54
+ url = "#{protocol}://#{domain}/problem=#{problem_id}"
52
55
 
53
56
  doc = Nokogiri::HTML(open(url))
54
57
 
@@ -58,7 +61,7 @@ task :update do
58
61
 
59
62
  # download images
60
63
  doc.css('.problem_content img').each do |img|
61
- image_url = "http://projecteuler.net/#{img['src']}"
64
+ image_url = "#{protocol}://#{domain}/#{img['src']}"
62
65
  file_name = File.basename(image_url)
63
66
  file_path = "#{images_dir}/#{file_name}"
64
67
  open(image_url) do |i|