euler-manager 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (645) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -1
  3. data/Rakefile +3 -0
  4. data/bin/euler +28 -9
  5. data/config/config.rb +1 -0
  6. data/data/answers.yml +430 -456
  7. data/data/images/blackdot.gif +0 -0
  8. data/data/images/bracket_left.gif +0 -0
  9. data/data/images/bracket_right.gif +0 -0
  10. data/data/images/p295_lenticular.gif +0 -0
  11. data/data/images/p296_bisector.gif +0 -0
  12. data/data/images/p303_formula100.gif +0 -0
  13. data/data/images/p303_formula10000.gif +0 -0
  14. data/data/images/p392_gridlines.png +0 -0
  15. data/data/images/p400_winning.png +0 -0
  16. data/data/images/p411_longpath.png +0 -0
  17. data/data/images/p412_table53.png +0 -0
  18. data/data/images/p412_tablenums.png +0 -0
  19. data/data/images/p422_hyperbola.gif +0 -0
  20. data/data/images/p428_necklace.png +0 -0
  21. data/data/images/p_015.gif +0 -0
  22. data/data/images/p_068_1.gif +0 -0
  23. data/data/images/p_068_2.gif +0 -0
  24. data/data/images/p_085.gif +0 -0
  25. data/data/images/p_086.gif +0 -0
  26. data/data/images/p_090.gif +0 -0
  27. data/data/images/p_091_1.gif +0 -0
  28. data/data/images/p_091_2.gif +0 -0
  29. data/data/images/p_107_1.gif +0 -0
  30. data/data/images/p_107_2.gif +0 -0
  31. data/data/images/p_109.gif +0 -0
  32. data/data/images/p_126.gif +0 -0
  33. data/data/images/p_128.gif +0 -0
  34. data/data/images/p_138.gif +0 -0
  35. data/data/images/p_139.gif +0 -0
  36. data/data/images/p_143_torricelli.gif +0 -0
  37. data/data/images/p_144_1.gif +0 -0
  38. data/data/images/p_144_2.gif +0 -0
  39. data/data/images/p_147.gif +0 -0
  40. data/data/images/p_150.gif +0 -0
  41. data/data/images/p_151.gif +0 -0
  42. data/data/images/p_152_sum.gif +0 -0
  43. data/data/images/p_153_formule1.gif +0 -0
  44. data/data/images/p_153_formule2.gif +0 -0
  45. data/data/images/p_153_formule5.gif +0 -0
  46. data/data/images/p_153_formule6.gif +0 -0
  47. data/data/images/p_154_pyramid.gif +0 -0
  48. data/data/images/p_155_capacitors1.gif +0 -0
  49. data/data/images/p_155_capsform.gif +0 -0
  50. data/data/images/p_155_capsmu.gif +0 -0
  51. data/data/images/p_161_k9.gif +0 -0
  52. data/data/images/p_161_trio1.gif +0 -0
  53. data/data/images/p_161_trio3.gif +0 -0
  54. data/data/images/p_163.gif +0 -0
  55. data/data/images/p_173_square_laminas.gif +0 -0
  56. data/data/images/p_177_quad.gif +0 -0
  57. data/data/images/p_184.gif +0 -0
  58. data/data/images/p_189_colours.gif +0 -0
  59. data/data/images/p_189_grid.gif +0 -0
  60. data/data/images/p_194_Fig.png +0 -0
  61. data/data/images/p_194_GraphA.png +0 -0
  62. data/data/images/p_194_GraphB.png +0 -0
  63. data/data/images/p_199_circles_in_circles.gif +0 -0
  64. data/data/images/p_201_laserbeam.gif +0 -0
  65. data/data/images/p_208_robotwalk.gif +0 -0
  66. data/data/images/p_215_crackfree.gif +0 -0
  67. data/data/images/p_220.gif +0 -0
  68. data/data/images/p_226_formula.gif +0 -0
  69. data/data/images/p_226_scoop2.gif +0 -0
  70. data/data/images/p_228.png +0 -0
  71. data/data/images/p_237.gif +0 -0
  72. data/data/images/p_244_example.gif +0 -0
  73. data/data/images/p_244_start.gif +0 -0
  74. data/data/images/p_244_target.gif +0 -0
  75. data/data/images/p_246_anim.gif +0 -0
  76. data/data/images/p_246_ellipse.gif +0 -0
  77. data/data/images/p_247_hypersquares.gif +0 -0
  78. data/data/images/p_251_cardano.gif +0 -0
  79. data/data/images/p_252_convexhole.gif +0 -0
  80. data/data/images/p_255_Example.gif +0 -0
  81. data/data/images/p_255_Heron.gif +0 -0
  82. data/data/images/p_256_tatami3.gif +0 -0
  83. data/data/images/p_257_bisector.gif +0 -0
  84. data/data/images/p_262_formula1.gif +0 -0
  85. data/data/images/p_264_TriangleCentres.gif +0 -0
  86. data/data/images/p_265_BinaryCircles.gif +0 -0
  87. data/data/images/p_270_CutSquare.gif +0 -0
  88. data/data/images/p_275_sculptures2.gif +0 -0
  89. data/data/images/p_281_pizza.gif +0 -0
  90. data/data/images/p_282_formula.gif +0 -0
  91. data/data/images/p_282formula3.gif +0 -0
  92. data/data/images/p_287_quadtree.gif +0 -0
  93. data/data/images/p_289_euler.gif +0 -0
  94. data/data/images/p_291_formula.gif +0 -0
  95. data/data/images/p_299_ThreeSimTri.gif +0 -0
  96. data/data/images/p_300_protein.gif +0 -0
  97. data/data/images/p_306_pstrip.gif +0 -0
  98. data/data/images/p_309_ladders.gif +0 -0
  99. data/data/images/p_311_biclinic.gif +0 -0
  100. data/data/images/p_312_sierpinsky8t.gif +0 -0
  101. data/data/images/p_312_sierpinskyAt.gif +0 -0
  102. data/data/images/p_313_sliding_game_1.gif +0 -0
  103. data/data/images/p_313_sliding_game_2.gif +0 -0
  104. data/data/images/p_314_landgrab.gif +0 -0
  105. data/data/images/p_315_clocks.gif +0 -0
  106. data/data/images/p_316_decexp1.gif +0 -0
  107. data/data/images/p_316_decexp2.gif +0 -0
  108. data/data/images/p_316_decexp3.gif +0 -0
  109. data/data/images/p_321_swapping_counters_1.gif +0 -0
  110. data/data/images/p_321_swapping_counters_2.gif +0 -0
  111. data/data/images/p_326_formula1.gif +0 -0
  112. data/data/images/p_326_formula2.gif +0 -0
  113. data/data/images/p_327_rooms_of_doom.gif +0 -0
  114. data/data/images/p_328_sum1.gif +0 -0
  115. data/data/images/p_328_sum2.gif +0 -0
  116. data/data/images/p_330_formula.gif +0 -0
  117. data/data/images/p_331_crossflips1.gif +0 -0
  118. data/data/images/p_331_crossflips2.gif +0 -0
  119. data/data/images/p_331_crossflips3.gif +0 -0
  120. data/data/images/p_332_spherical.jpg +0 -0
  121. data/data/images/p_332_sum.gif +0 -0
  122. data/data/images/p_334_beans.gif +0 -0
  123. data/data/images/p_334_cases.gif +0 -0
  124. data/data/images/p_334_lfloor.gif +0 -0
  125. data/data/images/p_334_oplus.gif +0 -0
  126. data/data/images/p_334_rfloor.gif +0 -0
  127. data/data/images/p_335_mancala.gif +0 -0
  128. data/data/images/p_335_sum.gif +0 -0
  129. data/data/images/p_336_maximix.gif +0 -0
  130. data/data/images/p_338_gridpaper.gif +0 -0
  131. data/data/images/p_340_formula.gif +0 -0
  132. data/data/images/p_344_silverdollar.gif +0 -0
  133. data/data/images/p_351_hexorchard.png +0 -0
  134. data/data/images/p_354_bee_honeycomb.png +0 -0
  135. data/data/images/p_356_cubicpoly1.gif +0 -0
  136. data/data/images/p_356_cubicpoly2.gif +0 -0
  137. data/data/images/p_361_Thue-Morse1.gif +0 -0
  138. data/data/images/p_364_comf_dist.gif +0 -0
  139. data/data/images/p_372_pencilray1.jpg +0 -0
  140. data/data/images/p_372_pencilray2.gif +0 -0
  141. data/data/images/p_380_mazes.gif +0 -0
  142. data/data/images/p_384_formula.gif +0 -0
  143. data/data/images/p_385_ellipsetriangle.png +0 -0
  144. data/data/images/p_394_eatpie.gif +0 -0
  145. data/data/images/p_395_pythagorean.gif +0 -0
  146. data/data/images/p_404_c_ellipse.gif +0 -0
  147. data/data/images/p_405_tile1.png +0 -0
  148. data/data/images/p_405_tile2.gif +0 -0
  149. data/data/images/p_420_matrix.gif +0 -0
  150. data/data/images/p_424_kakuro1.gif +0 -0
  151. data/data/images/p_426_baxball1.gif +0 -0
  152. data/data/images/p_426_baxball2.gif +0 -0
  153. data/data/images/p_430_flips.gif +0 -0
  154. data/data/images/sod_13.gif +115 -0
  155. data/data/images/spacer.gif +0 -0
  156. data/data/images/symbol_asymp.gif +0 -0
  157. data/data/images/symbol_cong.gif +0 -0
  158. data/data/images/symbol_ge.gif +0 -0
  159. data/data/images/symbol_gt.gif +0 -0
  160. data/data/images/symbol_implies.gif +0 -0
  161. data/data/images/symbol_lceil.gif +0 -0
  162. data/data/images/symbol_le.gif +0 -0
  163. data/data/images/symbol_lfloor.gif +0 -0
  164. data/data/images/symbol_lt.gif +0 -0
  165. data/data/images/symbol_maps.gif +0 -0
  166. data/data/images/symbol_minus.gif +0 -0
  167. data/data/images/symbol_ne.gif +0 -0
  168. data/data/images/symbol_plusmn.gif +0 -0
  169. data/data/images/symbol_radic.gif +0 -0
  170. data/data/images/symbol_rceil.gif +0 -0
  171. data/data/images/symbol_rfloor.gif +0 -0
  172. data/data/images/symbol_sum.gif +0 -0
  173. data/data/images/symbol_times.gif +0 -0
  174. data/data/problems/1.yml +5 -3
  175. data/data/problems/10.yml +3 -4
  176. data/data/problems/100.yml +7 -9
  177. data/data/problems/101.yml +32 -45
  178. data/data/problems/102.yml +11 -12
  179. data/data/problems/103.yml +18 -22
  180. data/data/problems/104.yml +9 -11
  181. data/data/problems/105.yml +12 -17
  182. data/data/problems/106.yml +14 -15
  183. data/data/problems/107.yml +16 -16
  184. data/data/problems/108.yml +17 -28
  185. data/data/problems/109.yml +27 -29
  186. data/data/problems/11.yml +24 -29
  187. data/data/problems/110.yml +11 -15
  188. data/data/problems/111.yml +27 -17
  189. data/data/problems/112.yml +13 -11
  190. data/data/problems/113.yml +11 -9
  191. data/data/problems/114.yml +46 -100
  192. data/data/problems/115.yml +15 -12
  193. data/data/problems/116.yml +33 -72
  194. data/data/problems/117.yml +36 -78
  195. data/data/problems/118.yml +5 -5
  196. data/data/problems/119.yml +9 -7
  197. data/data/problems/12.yml +8 -9
  198. data/data/problems/120.yml +7 -13
  199. data/data/problems/121.yml +9 -11
  200. data/data/problems/122.yml +21 -38
  201. data/data/problems/123.yml +9 -9
  202. data/data/problems/124.yml +24 -54
  203. data/data/problems/125.yml +7 -8
  204. data/data/problems/126.yml +12 -13
  205. data/data/problems/127.yml +21 -27
  206. data/data/problems/128.yml +19 -14
  207. data/data/problems/129.yml +9 -8
  208. data/data/problems/13.yml +52 -2
  209. data/data/problems/130.yml +12 -15
  210. data/data/problems/131.yml +9 -8
  211. data/data/problems/132.yml +7 -8
  212. data/data/problems/133.yml +9 -9
  213. data/data/problems/134.yml +7 -15
  214. data/data/problems/135.yml +9 -16
  215. data/data/problems/136.yml +9 -13
  216. data/data/problems/137.yml +22 -32
  217. data/data/problems/138.yml +11 -16
  218. data/data/problems/139.yml +11 -11
  219. data/data/problems/14.yml +14 -24
  220. data/data/problems/140.yml +18 -25
  221. data/data/problems/141.yml +10 -11
  222. data/data/problems/142.yml +3 -10
  223. data/data/problems/143.yml +13 -16
  224. data/data/problems/144.yml +23 -26
  225. data/data/problems/145.yml +7 -7
  226. data/data/problems/146.yml +6 -6
  227. data/data/problems/147.yml +7 -8
  228. data/data/problems/148.yml +15 -7
  229. data/data/problems/149.yml +26 -35
  230. data/data/problems/15.yml +7 -7
  231. data/data/problems/150.yml +18 -29
  232. data/data/problems/151.yml +17 -15
  233. data/data/problems/152.yml +11 -8
  234. data/data/problems/153.yml +38 -53
  235. data/data/problems/154.yml +10 -12
  236. data/data/problems/155.yml +12 -15
  237. data/data/problems/156.yml +20 -22
  238. data/data/problems/157.yml +26 -28
  239. data/data/problems/158.yml +13 -14
  240. data/data/problems/159.yml +15 -25
  241. data/data/problems/16.yml +5 -2
  242. data/data/problems/160.yml +3 -4
  243. data/data/problems/161.yml +6 -10
  244. data/data/problems/162.yml +10 -11
  245. data/data/problems/163.yml +13 -15
  246. data/data/problems/164.yml +3 -3
  247. data/data/problems/165.yml +25 -28
  248. data/data/problems/166.yml +7 -11
  249. data/data/problems/167.yml +10 -12
  250. data/data/problems/168.yml +7 -9
  251. data/data/problems/169.yml +4 -5
  252. data/data/problems/17.yml +7 -7
  253. data/data/problems/170.yml +7 -10
  254. data/data/problems/171.yml +7 -9
  255. data/data/problems/172.yml +3 -2
  256. data/data/problems/173.yml +9 -7
  257. data/data/problems/174.yml +13 -15
  258. data/data/problems/175.yml +13 -15
  259. data/data/problems/176.yml +5 -5
  260. data/data/problems/177.yml +13 -12
  261. data/data/problems/178.yml +5 -5
  262. data/data/problems/179.yml +3 -6
  263. data/data/problems/18.yml +13 -17
  264. data/data/problems/180.yml +20 -25
  265. data/data/problems/181.yml +7 -3
  266. data/data/problems/182.yml +22 -27
  267. data/data/problems/183.yml +17 -23
  268. data/data/problems/184.yml +11 -14
  269. data/data/problems/185.yml +17 -18
  270. data/data/problems/186.yml +16 -24
  271. data/data/problems/187.yml +9 -12
  272. data/data/problems/188.yml +5 -6
  273. data/data/problems/189.yml +5 -7
  274. data/data/problems/19.yml +7 -8
  275. data/data/problems/190.yml +7 -9
  276. data/data/problems/191.yml +9 -10
  277. data/data/problems/192.yml +14 -22
  278. data/data/problems/193.yml +5 -3
  279. data/data/problems/194.yml +11 -14
  280. data/data/problems/195.yml +7 -9
  281. data/data/problems/196.yml +13 -21
  282. data/data/problems/197.yml +7 -11
  283. data/data/problems/198.yml +13 -16
  284. data/data/problems/199.yml +10 -10
  285. data/data/problems/2.yml +6 -6
  286. data/data/problems/20.yml +10 -18
  287. data/data/problems/200.yml +8 -8
  288. data/data/problems/201.yml +14 -16
  289. data/data/problems/202.yml +11 -10
  290. data/data/problems/203.yml +11 -16
  291. data/data/problems/204.yml +7 -7
  292. data/data/problems/205.yml +6 -6
  293. data/data/problems/206.yml +2 -2
  294. data/data/problems/207.yml +13 -16
  295. data/data/problems/208.yml +8 -8
  296. data/data/problems/209.yml +11 -23
  297. data/data/problems/21.yml +8 -9
  298. data/data/problems/210.yml +6 -6
  299. data/data/problems/211.yml +7 -7
  300. data/data/problems/212.yml +26 -36
  301. data/data/problems/213.yml +6 -7
  302. data/data/problems/214.yml +10 -11
  303. data/data/problems/215.yml +11 -14
  304. data/data/problems/216.yml +7 -10
  305. data/data/problems/217.yml +14 -23
  306. data/data/problems/218.yml +9 -10
  307. data/data/problems/219.yml +10 -15
  308. data/data/problems/22.yml +7 -9
  309. data/data/problems/220.yml +15 -20
  310. data/data/problems/221.yml +10 -16
  311. data/data/problems/222.yml +5 -3
  312. data/data/problems/223.yml +6 -8
  313. data/data/problems/224.yml +6 -8
  314. data/data/problems/225.yml +6 -7
  315. data/data/problems/226.yml +9 -12
  316. data/data/problems/227.yml +9 -9
  317. data/data/problems/228.yml +14 -17
  318. data/data/problems/229.yml +17 -25
  319. data/data/problems/23.yml +11 -15
  320. data/data/problems/230.yml +15 -19
  321. data/data/problems/231.yml +8 -12
  322. data/data/problems/232.yml +9 -10
  323. data/data/problems/233.yml +7 -6
  324. data/data/problems/234.yml +14 -19
  325. data/data/problems/235.yml +4 -5
  326. data/data/problems/236.yml +20 -22
  327. data/data/problems/237.yml +14 -9
  328. data/data/problems/238.yml +21 -33
  329. data/data/problems/239.yml +5 -5
  330. data/data/problems/24.yml +7 -6
  331. data/data/problems/240.yml +7 -7
  332. data/data/problems/241.yml +9 -12
  333. data/data/problems/242.yml +7 -9
  334. data/data/problems/243.yml +14 -15
  335. data/data/problems/244.yml +19 -28
  336. data/data/problems/245.yml +22 -30
  337. data/data/problems/246.yml +10 -13
  338. data/data/problems/247.yml +14 -17
  339. data/data/problems/248.yml +5 -2
  340. data/data/problems/249.yml +3 -3
  341. data/data/problems/25.yml +12 -11
  342. data/data/problems/250.yml +3 -3
  343. data/data/problems/251.yml +11 -9
  344. data/data/problems/252.yml +24 -25
  345. data/data/problems/253.yml +19 -32
  346. data/data/problems/254.yml +13 -17
  347. data/data/problems/255.yml +40 -50
  348. data/data/problems/256.yml +31 -39
  349. data/data/problems/257.yml +10 -14
  350. data/data/problems/258.yml +7 -9
  351. data/data/problems/259.yml +14 -12
  352. data/data/problems/26.yml +17 -7
  353. data/data/problems/260.yml +21 -25
  354. data/data/problems/261.yml +13 -15
  355. data/data/problems/262.yml +15 -16
  356. data/data/problems/263.yml +13 -15
  357. data/data/problems/264.yml +15 -16
  358. data/data/problems/265.yml +10 -12
  359. data/data/problems/266.yml +6 -6
  360. data/data/problems/267.yml +13 -10
  361. data/data/problems/268.yml +5 -4
  362. data/data/problems/269.yml +10 -11
  363. data/data/problems/27.yml +15 -21
  364. data/data/problems/270.yml +13 -13
  365. data/data/problems/271.yml +7 -9
  366. data/data/problems/272.yml +8 -11
  367. data/data/problems/273.yml +13 -17
  368. data/data/problems/274.yml +16 -19
  369. data/data/problems/275.yml +13 -15
  370. data/data/problems/276.yml +5 -7
  371. data/data/problems/277.yml +17 -20
  372. data/data/problems/278.yml +20 -28
  373. data/data/problems/279.yml +4 -3
  374. data/data/problems/28.yml +6 -13
  375. data/data/problems/280.yml +9 -9
  376. data/data/problems/281.yml +10 -13
  377. data/data/problems/282.yml +9 -6
  378. data/data/problems/283.yml +8 -8
  379. data/data/problems/284.yml +15 -18
  380. data/data/problems/285.yml +11 -11
  381. data/data/problems/286.yml +7 -8
  382. data/data/problems/287.yml +22 -32
  383. data/data/problems/288.yml +10 -11
  384. data/data/problems/289.yml +14 -15
  385. data/data/problems/29.yml +13 -20
  386. data/data/problems/290.yml +3 -4
  387. data/data/problems/291.yml +3 -6
  388. data/data/problems/292.yml +8 -9
  389. data/data/problems/293.yml +9 -10
  390. data/data/problems/294.yml +6 -6
  391. data/data/problems/295.yml +16 -21
  392. data/data/problems/296.yml +9 -11
  393. data/data/problems/297.yml +12 -15
  394. data/data/problems/298.yml +29 -29
  395. data/data/problems/299.yml +15 -21
  396. data/data/problems/3.yml +3 -3
  397. data/data/problems/30.yml +7 -8
  398. data/data/problems/300.yml +15 -16
  399. data/data/problems/301.yml +15 -17
  400. data/data/problems/302.yml +13 -14
  401. data/data/problems/303.yml +9 -7
  402. data/data/problems/304.yml +10 -15
  403. data/data/problems/305.yml +6 -10
  404. data/data/problems/306.yml +20 -24
  405. data/data/problems/307.yml +7 -8
  406. data/data/problems/308.yml +19 -30
  407. data/data/problems/309.yml +11 -12
  408. data/data/problems/31.yml +11 -14
  409. data/data/problems/310.yml +10 -15
  410. data/data/problems/311.yml +11 -17
  411. data/data/problems/312.yml +10 -11
  412. data/data/problems/313.yml +13 -13
  413. data/data/problems/314.yml +23 -25
  414. data/data/problems/315.yml +39 -45
  415. data/data/problems/316.yml +13 -13
  416. data/data/problems/317.yml +6 -7
  417. data/data/problems/318.yml +35 -57
  418. data/data/problems/319.yml +15 -19
  419. data/data/problems/32.yml +9 -10
  420. data/data/problems/320.yml +9 -8
  421. data/data/problems/321.yml +8 -9
  422. data/data/problems/322.yml +6 -8
  423. data/data/problems/323.yml +12 -15
  424. data/data/problems/324.yml +10 -13
  425. data/data/problems/325.yml +15 -21
  426. data/data/problems/326.yml +15 -8
  427. data/data/problems/327.yml +19 -23
  428. data/data/problems/328.yml +28 -31
  429. data/data/problems/329.yml +12 -13
  430. data/data/problems/33.yml +9 -9
  431. data/data/problems/330.yml +17 -36
  432. data/data/problems/331.yml +16 -22
  433. data/data/problems/332.yml +9 -11
  434. data/data/problems/333.yml +17 -20
  435. data/data/problems/334.yml +22 -34
  436. data/data/problems/335.yml +11 -12
  437. data/data/problems/336.yml +18 -20
  438. data/data/problems/337.yml +9 -11
  439. data/data/problems/338.yml +27 -37
  440. data/data/problems/339.yml +9 -9
  441. data/data/problems/34.yml +7 -3
  442. data/data/problems/340.yml +8 -10
  443. data/data/problems/341.yml +12 -14
  444. data/data/problems/342.yml +9 -13
  445. data/data/problems/343.yml +18 -25
  446. data/data/problems/344.yml +16 -17
  447. data/data/problems/345.yml +17 -22
  448. data/data/problems/346.yml +7 -7
  449. data/data/problems/347.yml +9 -12
  450. data/data/problems/348.yml +7 -8
  451. data/data/problems/349.yml +8 -9
  452. data/data/problems/35.yml +7 -4
  453. data/data/problems/350.yml +12 -14
  454. data/data/problems/351.yml +8 -9
  455. data/data/problems/352.yml +38 -42
  456. data/data/problems/353.yml +17 -21
  457. data/data/problems/354.yml +11 -13
  458. data/data/problems/355.yml +4 -4
  459. data/data/problems/356.yml +6 -6
  460. data/data/problems/357.yml +5 -5
  461. data/data/problems/358.yml +16 -25
  462. data/data/problems/359.yml +19 -22
  463. data/data/problems/36.yml +7 -4
  464. data/data/problems/360.yml +8 -8
  465. data/data/problems/361.yml +14 -15
  466. data/data/problems/362.yml +16 -28
  467. data/data/problems/363.yml +22 -23
  468. data/data/problems/364.yml +9 -11
  469. data/data/problems/365.yml +7 -13
  470. data/data/problems/366.yml +19 -22
  471. data/data/problems/367.yml +14 -15
  472. data/data/problems/368.yml +18 -35
  473. data/data/problems/369.yml +7 -11
  474. data/data/problems/37.yml +7 -6
  475. data/data/problems/370.yml +10 -13
  476. data/data/problems/371.yml +8 -9
  477. data/data/problems/372.yml +9 -12
  478. data/data/problems/373.yml +5 -6
  479. data/data/problems/374.yml +17 -21
  480. data/data/problems/375.yml +13 -17
  481. data/data/problems/376.yml +19 -21
  482. data/data/problems/377.yml +6 -7
  483. data/data/problems/378.yml +8 -11
  484. data/data/problems/379.yml +9 -11
  485. data/data/problems/38.yml +9 -13
  486. data/data/problems/380.yml +14 -17
  487. data/data/problems/381.yml +12 -18
  488. data/data/problems/382.yml +16 -19
  489. data/data/problems/383.yml +7 -9
  490. data/data/problems/384.yml +20 -24
  491. data/data/problems/385.yml +12 -16
  492. data/data/problems/386.yml +9 -11
  493. data/data/problems/387.yml +14 -15
  494. data/data/problems/388.yml +6 -8
  495. data/data/problems/389.yml +8 -8
  496. data/data/problems/39.yml +7 -6
  497. data/data/problems/390.yml +9 -14
  498. data/data/problems/391.yml +21 -25
  499. data/data/problems/392.yml +16 -17
  500. data/data/problems/393.yml +5 -6
  501. data/data/problems/394.yml +15 -18
  502. data/data/problems/395.yml +12 -13
  503. data/data/problems/396.yml +17 -22
  504. data/data/problems/397.yml +13 -16
  505. data/data/problems/398.yml +8 -9
  506. data/data/problems/399.yml +18 -18
  507. data/data/problems/4.yml +5 -4
  508. data/data/problems/40.yml +11 -14
  509. data/data/problems/400.yml +10 -11
  510. data/data/problems/401.yml +6 -7
  511. data/data/problems/402.yml +16 -21
  512. data/data/problems/403.yml +12 -14
  513. data/data/problems/404.yml +14 -16
  514. data/data/problems/405.yml +10 -11
  515. data/data/problems/406.yml +35 -41
  516. data/data/problems/407.yml +9 -16
  517. data/data/problems/408.yml +9 -9
  518. data/data/problems/409.yml +5 -7
  519. data/data/problems/41.yml +5 -4
  520. data/data/problems/410.yml +10 -13
  521. data/data/problems/411.yml +15 -19
  522. data/data/problems/412.yml +11 -15
  523. data/data/problems/413.yml +8 -8
  524. data/data/problems/414.yml +29 -34
  525. data/data/problems/415.yml +12 -15
  526. data/data/problems/416.yml +7 -7
  527. data/data/problems/417.yml +16 -17
  528. data/data/problems/418.yml +9 -12
  529. data/data/problems/419.yml +13 -18
  530. data/data/problems/42.yml +9 -10
  531. data/data/problems/420.yml +5 -6
  532. data/data/problems/421.yml +14 -25
  533. data/data/problems/422.yml +16 -18
  534. data/data/problems/423.yml +16 -18
  535. data/data/problems/424.yml +18 -19
  536. data/data/problems/425.yml +11 -12
  537. data/data/problems/426.yml +20 -21
  538. data/data/problems/427.yml +11 -13
  539. data/data/problems/428.yml +21 -25
  540. data/data/problems/429.yml +6 -6
  541. data/data/problems/43.yml +15 -13
  542. data/data/problems/430.yml +14 -16
  543. data/data/problems/44.yml +9 -12
  544. data/data/problems/45.yml +11 -11
  545. data/data/problems/46.yml +9 -14
  546. data/data/problems/47.yml +11 -16
  547. data/data/problems/48.yml +5 -3
  548. data/data/problems/49.yml +7 -6
  549. data/data/problems/5.yml +5 -4
  550. data/data/problems/50.yml +11 -6
  551. data/data/problems/51.yml +9 -11
  552. data/data/problems/52.yml +5 -4
  553. data/data/problems/53.yml +15 -24
  554. data/data/problems/54.yml +29 -39
  555. data/data/problems/55.yml +16 -17
  556. data/data/problems/56.yml +5 -7
  557. data/data/problems/57.yml +10 -11
  558. data/data/problems/58.yml +11 -18
  559. data/data/problems/59.yml +11 -19
  560. data/data/problems/6.yml +13 -9
  561. data/data/problems/60.yml +5 -6
  562. data/data/problems/61.yml +18 -26
  563. data/data/problems/62.yml +5 -5
  564. data/data/problems/63.yml +5 -3
  565. data/data/problems/64.yml +52 -126
  566. data/data/problems/65.yml +21 -47
  567. data/data/problems/66.yml +13 -23
  568. data/data/problems/67.yml +10 -13
  569. data/data/problems/68.yml +15 -19
  570. data/data/problems/69.yml +18 -10
  571. data/data/problems/7.yml +5 -2
  572. data/data/problems/70.yml +10 -12
  573. data/data/problems/71.yml +11 -13
  574. data/data/problems/72.yml +11 -12
  575. data/data/problems/73.yml +11 -12
  576. data/data/problems/74.yml +25 -37
  577. data/data/problems/75.yml +10 -12
  578. data/data/problems/76.yml +4 -4
  579. data/data/problems/77.yml +4 -4
  580. data/data/problems/78.yml +13 -8
  581. data/data/problems/79.yml +7 -7
  582. data/data/problems/8.yml +14 -8
  583. data/data/problems/80.yml +7 -7
  584. data/data/problems/81.yml +9 -15
  585. data/data/problems/82.yml +10 -15
  586. data/data/problems/83.yml +10 -19
  587. data/data/problems/84.yml +36 -59
  588. data/data/problems/85.yml +7 -5
  589. data/data/problems/86.yml +11 -11
  590. data/data/problems/87.yml +7 -8
  591. data/data/problems/88.yml +30 -49
  592. data/data/problems/89.yml +13 -14
  593. data/data/problems/9.yml +6 -9
  594. data/data/problems/90.yml +16 -18
  595. data/data/problems/91.yml +10 -15
  596. data/data/problems/92.yml +14 -25
  597. data/data/problems/93.yml +13 -17
  598. data/data/problems/94.yml +7 -7
  599. data/data/problems/95.yml +13 -19
  600. data/data/problems/96.yml +24 -40
  601. data/data/problems/97.yml +7 -10
  602. data/data/problems/98.yml +9 -12
  603. data/data/problems/99.yml +9 -12
  604. data/euler-manager.gemspec +1 -0
  605. data/example/1/README.md +4 -4
  606. data/example/15/README.md +8 -0
  607. data/example/15/python/15.py +5 -0
  608. data/example/15/python/euler.py +0 -0
  609. data/example/2/README.md +7 -5
  610. data/example/Eulerfile.rb +1 -0
  611. data/lib/euler/problem.rb +6 -1
  612. data/lib/euler/solution.rb +4 -2
  613. data/lib/euler/version.rb +1 -1
  614. data/rake/clean.rake +16 -0
  615. data/rake/update.rake +88 -0
  616. data/spec/euler/solution_spec.rb +2 -1
  617. data/templates/Eulerfile.rb +12 -0
  618. metadata +189 -29
  619. data/data/problems/431.yml +0 -33
  620. data/data/problems/432.yml +0 -13
  621. data/data/problems/433.yml +0 -18
  622. data/data/problems/434.yml +0 -32
  623. data/data/problems/435.yml +0 -21
  624. data/data/problems/436.yml +0 -21
  625. data/data/problems/437.yml +0 -22
  626. data/data/problems/438.yml +0 -29
  627. data/data/problems/439.yml +0 -17
  628. data/data/problems/440.yml +0 -21
  629. data/data/problems/441.yml +0 -23
  630. data/data/problems/442.yml +0 -9
  631. data/data/problems/443.yml +0 -13
  632. data/data/problems/444.yml +0 -28
  633. data/data/problems/445.yml +0 -37
  634. data/data/problems/446.yml +0 -29
  635. data/data/problems/447.yml +0 -31
  636. data/data/problems/448.yml +0 -14
  637. data/data/problems/449.yml +0 -17
  638. data/data/problems/450.yml +0 -26
  639. data/data/problems/451.yml +0 -15
  640. data/data/problems/452.yml +0 -8
  641. data/data/problems/453.yml +0 -16
  642. data/data/problems/454.yml +0 -17
  643. data/data/problems/455.yml +0 -16
  644. data/data/problems/456.yml +0 -15
  645. data/scripts/update_problems +0 -68
data/example/2/README.md CHANGED
@@ -1,9 +1,11 @@
1
1
  # [Even Fibonacci numbers](http://projecteuler.net/problem=2)
2
2
 
3
-
4
- <p>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:</p>
5
- <p style="text-align:center;">1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...</p>
6
- <p>By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.</p>
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
+
5
+ 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
6
+
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
+
7
9
  <!--
8
10
  Note: This problem has been changed recently, please check that you are using the right parameters.
9
- -->
11
+ -->
data/example/Eulerfile.rb CHANGED
@@ -11,6 +11,7 @@ Euler.config do |config|
11
11
 
12
12
  config.answers_file "#{data_dir}/answers.yml"
13
13
  config.problems_dir "#{data_dir}/problems"
14
+ config.images_dir "https://raw.githubusercontent.com/yaworsw/euler-manager/develop/data/images"
14
15
 
15
16
  # The +directory_strategy+ is a Proc which returns the directory assigned to a
16
17
  # a given solution.
data/lib/euler/problem.rb CHANGED
@@ -13,7 +13,7 @@ module Euler
13
13
  Problem.new problem_spec
14
14
  end
15
15
 
16
- attr_reader :id, :name, :url, :content
16
+ attr_reader :id, :name, :url
17
17
 
18
18
  # Given a hash with symbol keys initialize the problem using the +:id+,
19
19
  # +:name+, +url+, and +:content+ keys.
@@ -24,6 +24,11 @@ module Euler
24
24
  @content = options[:content]
25
25
  end
26
26
 
27
+ # Passing content though an ultra simple template engine before returning it
28
+ def content
29
+ @content.gsub(/\{\{\s?images_dir\s?\}\}/, Euler.images_dir)
30
+ end
31
+
27
32
  # Returns true if this problem has an answer.
28
33
  def has_answer?
29
34
  not answer.empty?
@@ -1,3 +1,5 @@
1
+ require 'digest/sha1'
2
+
1
3
  module Euler
2
4
 
3
5
  # This class represents a user created solution to a project Euler problem.
@@ -15,7 +17,7 @@ module Euler
15
17
  # initialize the instance.
16
18
  def initialize problem, language
17
19
  if problem.is_a?(Problem)
18
- @problem = problems
20
+ @problem = problem
19
21
  else
20
22
  @problem_id = problem
21
23
  end
@@ -65,7 +67,7 @@ module Euler
65
67
  def test
66
68
  expected = answer
67
69
  result = run
68
- expected == result
70
+ expected == Digest::SHA1.hexdigest(result)
69
71
  end
70
72
 
71
73
  # Alias for +test+.
data/lib/euler/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Euler
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
data/rake/clean.rake ADDED
@@ -0,0 +1,16 @@
1
+ # Delete all of the problem's .yaml files and the images from the data directory
2
+
3
+ desc "Deletes all of the data that has been downloaded for Project Euler problems"
4
+ task :clean do
5
+
6
+ data_dir = "#{__dir__}/../data"
7
+ answers_file = "#{data_dir}/answers.yml"
8
+ problems_dir = "#{data_dir}/problems"
9
+ images_dir = "#{data_dir}/images"
10
+
11
+ FileUtils.rm_rf(images_dir)
12
+ FileUtils.rm_rf(problems_dir)
13
+
14
+ FileUtils.mkdir(images_dir)
15
+ FileUtils.mkdir(problems_dir)
16
+ end
data/rake/update.rake ADDED
@@ -0,0 +1,88 @@
1
+ # Gets all of the problems from projecteuler.net and serializes them as yaml
2
+ # into the data/problems directory. This way http requests do not need to be
3
+ # each time the manager is asked to describe a problem.
4
+
5
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
6
+
7
+ require 'colorize'
8
+ require 'nokogiri'
9
+ require 'open-uri'
10
+ require 'reverse_markdown'
11
+ require 'yaml'
12
+
13
+ require 'euler'
14
+
15
+ desc "Scrape the Project Euler website and download problem descriptions and images"
16
+ task :update do
17
+
18
+ # Number of seconds to wait in the beginning of each iteration of the http request loop
19
+ sleep_time = 0.5
20
+
21
+ puts
22
+ puts 'Updating project Euler problem specs.'
23
+ puts
24
+
25
+ data_dir = "#{__dir__}/../data"
26
+ answers_file = "#{data_dir}/answers.yml"
27
+ problems_dir = "#{data_dir}/problems"
28
+ images_dir = "#{data_dir}/images"
29
+
30
+ puts 'Data directory: '.light_black + data_dir.underline
31
+ puts 'Answers File: '.light_black + answers_file.underline
32
+ puts 'Problems Directory: '.light_black + problems_dir.underline
33
+ puts
34
+
35
+ problem_ids = YAML.load_file(answers_file).keys
36
+ problems_count = problem_ids.count
37
+ problems_count_digits = problems_count.to_s.size
38
+
39
+ puts problems_count.to_s.underline + ' Problems will be updated.'
40
+ puts
41
+
42
+ # Fetch problems from projecteuler.net
43
+ problems = problem_ids.map.with_index do |problem_id, index|
44
+ zero_padded_index = (index + 1).to_s.rjust(problems_count_digits, '0')
45
+ zero_padded_problem_id = problem_id.to_s.rjust(problems_count_digits, '0')
46
+
47
+ print "(#{zero_padded_index} / #{problems_count}) ##{zero_padded_index} "
48
+
49
+ sleep(sleep_time)
50
+
51
+ url = "http://projecteuler.net/problem=#{problem_id}"
52
+
53
+ doc = Nokogiri::HTML(open(url))
54
+
55
+ problem_name = ReverseMarkdown.convert(doc.css('h2').first.inner_html).strip
56
+
57
+ print ": #{problem_name.strip.bold.underline} "
58
+
59
+ # download images
60
+ doc.css('.problem_content img').each do |img|
61
+ image_url = "http://projecteuler.net/#{img['src']}"
62
+ file_name = File.basename(image_url)
63
+ file_path = "#{images_dir}/#{file_name}"
64
+ open(image_url) do |i|
65
+ File.open(file_path, 'wb') do |f|
66
+ f.puts(i.read)
67
+ end
68
+ end
69
+ img['src'] = "\{\{\ images_dir\ \}\}/#{file_name}"
70
+ end
71
+
72
+ problem = Euler::Problem.new({
73
+ id: problem_id,
74
+ name: problem_name,
75
+ url: url,
76
+ content: ReverseMarkdown.convert(doc.css('.problem_content').first.to_xml)
77
+ })
78
+
79
+ File.open("#{problems_dir}/#{problem.id}.yml", 'w') do |f|
80
+ f.write(problem.to_yaml)
81
+ end
82
+
83
+ print "\u2713".encode('utf-8').green.bold
84
+ puts
85
+
86
+ problem
87
+ end
88
+ end
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'digest/sha1'
2
3
 
3
4
  class EulerLang
4
5
  def run solution
@@ -59,7 +60,7 @@ describe Euler::Solution do
59
60
 
60
61
  solution = Euler::Solution.new(1, 'euler-lang')
61
62
  problem = solution.problem
62
- allow(problem).to receive(:answer).and_return('42', '9001')
63
+ allow(problem).to receive(:answer).and_return(Digest::SHA1.hexdigest('42'), Digest::SHA1.hexdigest('9001'))
63
64
 
64
65
  solution.correct?.should be_truthy
65
66
 
@@ -0,0 +1,12 @@
1
+ Euler.config do |config|
2
+
3
+ # Images included in problem prompts are typically loaded from your local
4
+ # file system. You can opt into loading the images from this gem's github
5
+ # repo by uncommenting the following line.
6
+ # config.images_dir "https://raw.githubusercontent.com/yaworsw/euler-manager/develop/data/images"
7
+
8
+ # Also you can have the images included in your kata repo by running the
9
+ # command euler include_images and uncommenting the following line.
10
+ # config.images_dir "#{File.dirname(__FILE__)}/.data/images"
11
+
12
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: euler-manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Yaworsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-22 00:00:00.000000000 Z
11
+ date: 2014-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: reverse_markdown
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description:
126
140
  email:
127
141
  - wj.px01@gmail.com
@@ -139,6 +153,173 @@ files:
139
153
  - bin/euler
140
154
  - config/config.rb
141
155
  - data/answers.yml
156
+ - data/images/blackdot.gif
157
+ - data/images/bracket_left.gif
158
+ - data/images/bracket_right.gif
159
+ - data/images/p295_lenticular.gif
160
+ - data/images/p296_bisector.gif
161
+ - data/images/p303_formula100.gif
162
+ - data/images/p303_formula10000.gif
163
+ - data/images/p392_gridlines.png
164
+ - data/images/p400_winning.png
165
+ - data/images/p411_longpath.png
166
+ - data/images/p412_table53.png
167
+ - data/images/p412_tablenums.png
168
+ - data/images/p422_hyperbola.gif
169
+ - data/images/p428_necklace.png
170
+ - data/images/p_015.gif
171
+ - data/images/p_068_1.gif
172
+ - data/images/p_068_2.gif
173
+ - data/images/p_085.gif
174
+ - data/images/p_086.gif
175
+ - data/images/p_090.gif
176
+ - data/images/p_091_1.gif
177
+ - data/images/p_091_2.gif
178
+ - data/images/p_107_1.gif
179
+ - data/images/p_107_2.gif
180
+ - data/images/p_109.gif
181
+ - data/images/p_126.gif
182
+ - data/images/p_128.gif
183
+ - data/images/p_138.gif
184
+ - data/images/p_139.gif
185
+ - data/images/p_143_torricelli.gif
186
+ - data/images/p_144_1.gif
187
+ - data/images/p_144_2.gif
188
+ - data/images/p_147.gif
189
+ - data/images/p_150.gif
190
+ - data/images/p_151.gif
191
+ - data/images/p_152_sum.gif
192
+ - data/images/p_153_formule1.gif
193
+ - data/images/p_153_formule2.gif
194
+ - data/images/p_153_formule5.gif
195
+ - data/images/p_153_formule6.gif
196
+ - data/images/p_154_pyramid.gif
197
+ - data/images/p_155_capacitors1.gif
198
+ - data/images/p_155_capsform.gif
199
+ - data/images/p_155_capsmu.gif
200
+ - data/images/p_161_k9.gif
201
+ - data/images/p_161_trio1.gif
202
+ - data/images/p_161_trio3.gif
203
+ - data/images/p_163.gif
204
+ - data/images/p_173_square_laminas.gif
205
+ - data/images/p_177_quad.gif
206
+ - data/images/p_184.gif
207
+ - data/images/p_189_colours.gif
208
+ - data/images/p_189_grid.gif
209
+ - data/images/p_194_Fig.png
210
+ - data/images/p_194_GraphA.png
211
+ - data/images/p_194_GraphB.png
212
+ - data/images/p_199_circles_in_circles.gif
213
+ - data/images/p_201_laserbeam.gif
214
+ - data/images/p_208_robotwalk.gif
215
+ - data/images/p_215_crackfree.gif
216
+ - data/images/p_220.gif
217
+ - data/images/p_226_formula.gif
218
+ - data/images/p_226_scoop2.gif
219
+ - data/images/p_228.png
220
+ - data/images/p_237.gif
221
+ - data/images/p_244_example.gif
222
+ - data/images/p_244_start.gif
223
+ - data/images/p_244_target.gif
224
+ - data/images/p_246_anim.gif
225
+ - data/images/p_246_ellipse.gif
226
+ - data/images/p_247_hypersquares.gif
227
+ - data/images/p_251_cardano.gif
228
+ - data/images/p_252_convexhole.gif
229
+ - data/images/p_255_Example.gif
230
+ - data/images/p_255_Heron.gif
231
+ - data/images/p_256_tatami3.gif
232
+ - data/images/p_257_bisector.gif
233
+ - data/images/p_262_formula1.gif
234
+ - data/images/p_264_TriangleCentres.gif
235
+ - data/images/p_265_BinaryCircles.gif
236
+ - data/images/p_270_CutSquare.gif
237
+ - data/images/p_275_sculptures2.gif
238
+ - data/images/p_281_pizza.gif
239
+ - data/images/p_282_formula.gif
240
+ - data/images/p_282formula3.gif
241
+ - data/images/p_287_quadtree.gif
242
+ - data/images/p_289_euler.gif
243
+ - data/images/p_291_formula.gif
244
+ - data/images/p_299_ThreeSimTri.gif
245
+ - data/images/p_300_protein.gif
246
+ - data/images/p_306_pstrip.gif
247
+ - data/images/p_309_ladders.gif
248
+ - data/images/p_311_biclinic.gif
249
+ - data/images/p_312_sierpinsky8t.gif
250
+ - data/images/p_312_sierpinskyAt.gif
251
+ - data/images/p_313_sliding_game_1.gif
252
+ - data/images/p_313_sliding_game_2.gif
253
+ - data/images/p_314_landgrab.gif
254
+ - data/images/p_315_clocks.gif
255
+ - data/images/p_316_decexp1.gif
256
+ - data/images/p_316_decexp2.gif
257
+ - data/images/p_316_decexp3.gif
258
+ - data/images/p_321_swapping_counters_1.gif
259
+ - data/images/p_321_swapping_counters_2.gif
260
+ - data/images/p_326_formula1.gif
261
+ - data/images/p_326_formula2.gif
262
+ - data/images/p_327_rooms_of_doom.gif
263
+ - data/images/p_328_sum1.gif
264
+ - data/images/p_328_sum2.gif
265
+ - data/images/p_330_formula.gif
266
+ - data/images/p_331_crossflips1.gif
267
+ - data/images/p_331_crossflips2.gif
268
+ - data/images/p_331_crossflips3.gif
269
+ - data/images/p_332_spherical.jpg
270
+ - data/images/p_332_sum.gif
271
+ - data/images/p_334_beans.gif
272
+ - data/images/p_334_cases.gif
273
+ - data/images/p_334_lfloor.gif
274
+ - data/images/p_334_oplus.gif
275
+ - data/images/p_334_rfloor.gif
276
+ - data/images/p_335_mancala.gif
277
+ - data/images/p_335_sum.gif
278
+ - data/images/p_336_maximix.gif
279
+ - data/images/p_338_gridpaper.gif
280
+ - data/images/p_340_formula.gif
281
+ - data/images/p_344_silverdollar.gif
282
+ - data/images/p_351_hexorchard.png
283
+ - data/images/p_354_bee_honeycomb.png
284
+ - data/images/p_356_cubicpoly1.gif
285
+ - data/images/p_356_cubicpoly2.gif
286
+ - data/images/p_361_Thue-Morse1.gif
287
+ - data/images/p_364_comf_dist.gif
288
+ - data/images/p_372_pencilray1.jpg
289
+ - data/images/p_372_pencilray2.gif
290
+ - data/images/p_380_mazes.gif
291
+ - data/images/p_384_formula.gif
292
+ - data/images/p_385_ellipsetriangle.png
293
+ - data/images/p_394_eatpie.gif
294
+ - data/images/p_395_pythagorean.gif
295
+ - data/images/p_404_c_ellipse.gif
296
+ - data/images/p_405_tile1.png
297
+ - data/images/p_405_tile2.gif
298
+ - data/images/p_420_matrix.gif
299
+ - data/images/p_424_kakuro1.gif
300
+ - data/images/p_426_baxball1.gif
301
+ - data/images/p_426_baxball2.gif
302
+ - data/images/p_430_flips.gif
303
+ - data/images/sod_13.gif
304
+ - data/images/spacer.gif
305
+ - data/images/symbol_asymp.gif
306
+ - data/images/symbol_cong.gif
307
+ - data/images/symbol_ge.gif
308
+ - data/images/symbol_gt.gif
309
+ - data/images/symbol_implies.gif
310
+ - data/images/symbol_lceil.gif
311
+ - data/images/symbol_le.gif
312
+ - data/images/symbol_lfloor.gif
313
+ - data/images/symbol_lt.gif
314
+ - data/images/symbol_maps.gif
315
+ - data/images/symbol_minus.gif
316
+ - data/images/symbol_ne.gif
317
+ - data/images/symbol_plusmn.gif
318
+ - data/images/symbol_radic.gif
319
+ - data/images/symbol_rceil.gif
320
+ - data/images/symbol_rfloor.gif
321
+ - data/images/symbol_sum.gif
322
+ - data/images/symbol_times.gif
142
323
  - data/problems/1.yml
143
324
  - data/problems/10.yml
144
325
  - data/problems/100.yml
@@ -508,34 +689,8 @@ files:
508
689
  - data/problems/429.yml
509
690
  - data/problems/43.yml
510
691
  - data/problems/430.yml
511
- - data/problems/431.yml
512
- - data/problems/432.yml
513
- - data/problems/433.yml
514
- - data/problems/434.yml
515
- - data/problems/435.yml
516
- - data/problems/436.yml
517
- - data/problems/437.yml
518
- - data/problems/438.yml
519
- - data/problems/439.yml
520
692
  - data/problems/44.yml
521
- - data/problems/440.yml
522
- - data/problems/441.yml
523
- - data/problems/442.yml
524
- - data/problems/443.yml
525
- - data/problems/444.yml
526
- - data/problems/445.yml
527
- - data/problems/446.yml
528
- - data/problems/447.yml
529
- - data/problems/448.yml
530
- - data/problems/449.yml
531
693
  - data/problems/45.yml
532
- - data/problems/450.yml
533
- - data/problems/451.yml
534
- - data/problems/452.yml
535
- - data/problems/453.yml
536
- - data/problems/454.yml
537
- - data/problems/455.yml
538
- - data/problems/456.yml
539
694
  - data/problems/46.yml
540
695
  - data/problems/47.yml
541
696
  - data/problems/48.yml
@@ -600,6 +755,9 @@ files:
600
755
  - example/1/README.md
601
756
  - example/1/ruby/1.rb
602
757
  - example/1/scala/1.scala
758
+ - example/15/README.md
759
+ - example/15/python/15.py
760
+ - example/15/python/euler.py
603
761
  - example/2/README.md
604
762
  - example/2/python/2.py
605
763
  - example/2/python/euler.py
@@ -619,11 +777,13 @@ files:
619
777
  - lib/euler/problem.rb
620
778
  - lib/euler/solution.rb
621
779
  - lib/euler/version.rb
622
- - scripts/update_problems
780
+ - rake/clean.rake
781
+ - rake/update.rake
623
782
  - spec/euler/problem_spec.rb
624
783
  - spec/euler/solution_spec.rb
625
784
  - spec/euler_spec.rb
626
785
  - spec/spec_helper.rb
786
+ - templates/Eulerfile.rb
627
787
  - templates/coffeescript.coffee
628
788
  - templates/java.java
629
789
  - templates/javascript.js
@@ -1,33 +0,0 @@
1
- ---
2
- :id: 431
3
- :name: Square Space Silo
4
- :url: http://projecteuler.net/problem=431
5
- :content: "\r\n<p>Fred the farmer arranges to have a new storage silo installed on
6
- his farm and having an obsession for all things square he is absolutely devastated
7
- when he discovers that it is circular. Quentin, the representative from the company
8
- that installed the silo, explains that they only manufacture cylindrical silos,
9
- but he points out that it is resting on a square base. Fred is not amused and insists
10
- that it is removed from his property.</p>\r\n\r\n<p>Quick thinking Quentin explains
11
- that when granular materials are delivered from above a conical slope is formed
12
- and the natural angle made with the horizontal is called the angle of repose. For
13
- example if the angle of repose, $\\alpha = 30$ degrees, and grain is delivered at
14
- the centre of the silo then a perfect cone will form towards the top of the cylinder.
15
- In the case of this silo, which has a diameter of 6m, the amount of space wasted
16
- would be approximately 32.648388556 m<sup>3</sup>. However, if grain is delivered
17
- at a point on the top which has a horizontal distance of $x$ metres from the centre
18
- then a cone with a strangely curved and sloping base is formed. He shows Fred a
19
- picture.</p>\r\n\r\n<div style=\"text-align:center;\">\r\n <img src=\"project/images/p_431_grain_silo.png\">\n</div>\r\n\r\n<p>We
20
- shall let the amount of space wasted in cubic metres be given by $V(x)$. If $x =
21
- 1.114785284$, which happens to have three squared decimal places, then the amount
22
- of space wasted, $V(1.114785284) \\approx 36$. Given the range of possible solutions
23
- to this problem there is exactly one other option: $V(2.511167869) \\approx 49$.
24
- It would be like knowing that the square is king of the silo, sitting in splendid
25
- glory on top of your grain.</p>\r\n\r\n<p>Fred's eyes light up with delight at this
26
- elegant resolution, but on closer inspection of Quentin's drawings and calculations
27
- his happiness turns to despondency once more. Fred points out to Quentin that it's
28
- the radius of the silo that is 6 metres, not the diameter, and the angle of repose
29
- for his grain is 40 degrees. However, if Quentin can find a set of solutions for
30
- this particular silo then he will be more than happy to keep it.</p>\r\n\r\n<p>If
31
- Quick thinking Quentin is to satisfy frustratingly fussy Fred the farmer's appetite
32
- for all things square then determine the values of $x$ for all possible square space
33
- wastage options and calculate $\\sum x$ correct to 9 decimal places.</p>\r\n"
@@ -1,13 +0,0 @@
1
- ---
2
- :id: 432
3
- :name: Totient sum
4
- :url: http://projecteuler.net/problem=432
5
- :content: "\r\n<p>\r\nLet S(<var>n,m</var>) = <img src=\"images/symbol_sum.gif\" width=\"11\"
6
- height=\"14\" alt=\"∑\" border=\"0\" style=\"vertical-align:middle;\">φ(<var>n <img
7
- src=\"images/symbol_times.gif\" width=\"9\" height=\"9\" alt=\"×\" border=\"0\"
8
- style=\"vertical-align:middle;\"> i</var>) for 1 <img src=\"images/symbol_le.gif\"
9
- width=\"10\" height=\"12\" alt=\"≤\" border=\"0\" style=\"vertical-align:middle;\"><var>i
10
- <img src=\"images/symbol_le.gif\" width=\"10\" height=\"12\" alt=\"≤\" border=\"0\"
11
- style=\"vertical-align:middle;\"> m</var>. (φ is Euler's totient function)<br>\r\nYou
12
- are given that S(510510,10<sup>6</sup> )= 45480596821125120. \r\n</p>\r\n<p>\r\nFind
13
- S(510510,10<sup>11</sup>).<br>\r\nGive the last 9 digits of your answer.\r\n</p>\r\n\r\n"
@@ -1,18 +0,0 @@
1
- ---
2
- :id: 433
3
- :name: Steps in Euclid's algorithm
4
- :url: http://projecteuler.net/problem=433
5
- :content: "\r\n<p>\r\nLet E(<var>x</var><sub>0</sub>, <var>y</var><sub>0</sub>) be
6
- the number of steps it takes to determine the greatest common divisor of <var>x</var><sub>0</sub>
7
- and <var>y</var><sub>0</sub> with <b>Euclid's algorithm</b>. More formally:<br><var>x</var><sub>1</sub>
8
- = <var>y</var><sub>0</sub>, <var>y</var><sub>1</sub> = <var>x</var><sub>0</sub>
9
- mod <var>y</var><sub>0</sub><br><var>x<sub>n</sub></var> = <var>y</var><sub><var>n</var>-1</sub>,
10
- <var>y</var><sub><var>n</var></sub> = <var>x</var><sub><var>n</var>-1</sub> mod
11
- <var>y</var><sub><var>n</var>-1</sub><br>\r\nE(<var>x</var><sub>0</sub>, <var>y</var><sub>0</sub>)
12
- is the smallest <var>n</var> such that <var>y</var><sub><var>n</var></sub> = 0.\r\n</p>\r\n<p>\r\nWe
13
- have E(1,1) = 1, E(10,6) = 3 and E(6,10) = 4.\r\n</p>\r\n<p>\r\nDefine S(N) as the
14
- sum of E(<var>x,y</var>) for 1 <img src=\"images/symbol_le.gif\" width=\"10\" height=\"12\"
15
- alt=\"≤\" border=\"0\" style=\"vertical-align:middle;\"><var>x,y</var> <img src=\"images/symbol_le.gif\"
16
- width=\"10\" height=\"12\" alt=\"≤\" border=\"0\" style=\"vertical-align:middle;\">
17
- N.<br>\r\nWe have S(1) = 1, S(10) = 221 and S(100) = 39826.\r\n</p>\r\n<p>\r\nFind
18
- S(5·10<sup>6</sup>).\r\n</p>\r\n\r\n\r\n"
@@ -1,32 +0,0 @@
1
- ---
2
- :id: 434
3
- :name: Rigid graphs
4
- :url: http://projecteuler.net/problem=434
5
- :content: "\r\n<p>Recall that a graph is a collection of vertices and edges connecting
6
- the vertices, and that two vertices connected by an edge are called adjacent.<br>\r\nGraphs
7
- can be embedded in Euclidean space by associating each vertex with a point in the
8
- Euclidean space.<br>\r\nA <strong>flexible</strong> graph is an embedding of a graph
9
- where it is possible to move one or more vertices continuously so that the distance
10
- between at least two nonadjacent vertices is altered while the distances between
11
- each pair of adjacent vertices is kept constant.<br>\r\nA <strong>rigid</strong>
12
- graph is an embedding of a graph which is not flexible.<br>\r\nInformally, a graph
13
- is rigid if by replacing the vertices with fully rotating hinges and the edges with
14
- rods that are unbending and inelastic, no parts of the graph can be moved independently
15
- from the rest of the graph.\r\n</p>\r\n<p>The <strong>grid graphs</strong> embedded
16
- in the Euclidean plane are not rigid, as the following animation demonstrates:<br><img
17
- src=\"project/images/p434_rigid.gif\"></p>\r\n<p>However, one can make them rigid
18
- by adding diagonal edges to the cells. For example, for the 2x3 grid graph, there
19
- are 19 ways to make the graph rigid:<br><img src=\"project/images/p434_rigid23.png\"></p>\r\n<p>Note
20
- that for the purposes of this problem, we do not consider changing the orientation
21
- of a diagonal edge or adding both diagonal edges to a cell as a different way of
22
- making a grid graph rigid.\r\n</p>\r\n<p>Let <var>R</var>(<var>m</var>,<var>n</var>)
23
- be the number of ways to make the <var>m</var> <img src=\"images/symbol_times.gif\"
24
- width=\"9\" height=\"9\" alt=\"×\" border=\"0\" style=\"vertical-align:middle;\"><var>n</var>
25
- grid graph rigid. <br>\r\nE.g. <var>R</var>(2,3) = 19 and <var>R</var>(5,5) = 23679901\r\n</p>\r\n<p>Define
26
- <var>S</var>(<var>N</var>) as <img src=\"images/symbol_sum.gif\" width=\"11\" height=\"14\"
27
- alt=\"∑\" border=\"0\" style=\"vertical-align:middle;\"><var>R</var>(<var>i</var>,<var>j</var>)
28
- for 1 <img src=\"images/symbol_le.gif\" width=\"10\" height=\"12\" alt=\"≤\" border=\"0\"
29
- style=\"vertical-align:middle;\"><var>i</var>, <var>j</var> <img src=\"images/symbol_le.gif\"
30
- width=\"10\" height=\"12\" alt=\"≤\" border=\"0\" style=\"vertical-align:middle;\"><var>N</var>.<br>\r\nE.g.
31
- <var>S</var>(5) = 25021721.<br>\r\nFind <var>S</var>(100), give your answer modulo
32
- 1000000033\r\n</p>\r\n"
@@ -1,21 +0,0 @@
1
- ---
2
- :id: 435
3
- :name: Polynomials of Fibonacci numbers
4
- :url: http://projecteuler.net/problem=435
5
- :content: "\r\n<p>The <strong>Fibonacci numbers</strong> {f<sub>n</sub>, n <img src=\"images/symbol_ge.gif\"
6
- width=\"10\" height=\"12\" alt=\"≥\" border=\"0\" style=\"vertical-align:middle;\">
7
- 0} are defined recursively as f<sub>n</sub> = f<sub>n-1</sub> + f<sub>n-2</sub>
8
- with base cases f<sub>0</sub> = 0 and f<sub>1</sub> = 1.</p>\r\n<p>Define the polynomials
9
- {F<sub>n</sub>, n <img src=\"images/symbol_ge.gif\" width=\"10\" height=\"12\" alt=\"≥\"
10
- border=\"0\" style=\"vertical-align:middle;\"> 0} as F<sub>n</sub>(x) = <img src=\"images/symbol_sum.gif\"
11
- width=\"11\" height=\"14\" alt=\"∑\" border=\"0\" style=\"vertical-align:middle;\">f<sub>i</sub>x<sup>i</sup>
12
- for 0 <img src=\"images/symbol_le.gif\" width=\"10\" height=\"12\" alt=\"≤\" border=\"0\"
13
- style=\"vertical-align:middle;\"> i <img src=\"images/symbol_le.gif\" width=\"10\"
14
- height=\"12\" alt=\"≤\" border=\"0\" style=\"vertical-align:middle;\"> n.</p>\r\n<p>For
15
- example, F<sub>7</sub>(x) = x + x<sup>2</sup> + 2x<sup>3</sup> + 3x<sup>4</sup>
16
- + 5x<sup>5</sup> + 8x<sup>6</sup> + 13x<sup>7</sup>, and F<sub>7</sub>(11) = 268357683.</p>\r\n<p>Let
17
- n = 10<sup>15</sup>. Find the sum [<img src=\"images/symbol_sum.gif\" width=\"11\"
18
- height=\"14\" alt=\"∑\" border=\"0\" style=\"vertical-align:middle;\"><sub>0<img
19
- src=\"images/symbol_le.gif\" width=\"10\" height=\"12\" alt=\"≤\" border=\"0\" style=\"vertical-align:middle;\">x<img
20
- src=\"images/symbol_le.gif\" width=\"10\" height=\"12\" alt=\"≤\" border=\"0\" style=\"vertical-align:middle;\">100</sub>
21
- F<sub>n</sub>(x)] mod 1307674368000 (= 15!).</p>\r\n"
@@ -1,21 +0,0 @@
1
- ---
2
- :id: 436
3
- :name: Unfair wager
4
- :url: http://projecteuler.net/problem=436
5
- :content: "\r\n<p>Julie proposes the following wager to her sister Louise.<br>\r\nShe
6
- suggests they play a game of chance to determine who will wash the dishes.<br>\r\nFor
7
- this game, they shall use a generator of independent random numbers uniformly distributed
8
- between 0 and 1.<br>\r\nThe game starts with <var>S</var> = 0.<br>\r\nThe first
9
- player, Louise, adds to <var>S</var> different random numbers from the generator
10
- until <var>S</var> &gt; 1 and records her last random number '<var>x</var>'.<br>\r\nThe
11
- second player, Julie, continues adding to <var>S</var> different random numbers
12
- from the generator until <var>S</var> &gt; 2 and records her last random number
13
- '<var>y</var>'.<br>\r\nThe player with the highest number wins and the loser washes
14
- the dishes, i.e. if <var>y</var> &gt; <var>x</var> the second player wins.</p>\r\n\r\n<p>For
15
- e<var>x</var>ample, if the first player draws 0.62 and 0.44, the first player turn
16
- ends since 0.62+0.44 &gt; 1 and <var>x</var> = 0.44.<br>\r\nIf the second players
17
- draws 0.1, 0.27 and 0.91, the second player turn ends since 0.62+0.44+0.1+0.27+0.91
18
- &gt; 2 and <var>y</var> = 0.91.\r\nSince <var>y</var> &gt; <var>x</var>, the second
19
- player wins.</p>\r\n\r\n<p>Louise thinks about it for a second, and objects: \"That's
20
- not fair\".<br>\r\nWhat is the probability that the second player wins?<br>\r\nGive
21
- your answer rounded to 10 places behind the decimal point in the form 0.abcdefghij</p>\r\n\r\n"
@@ -1,22 +0,0 @@
1
- ---
2
- :id: 437
3
- :name: Fibonacci primitive roots
4
- :url: http://projecteuler.net/problem=437
5
- :content: "\r\n<p>\r\nWhen we calculate 8<sup>n</sup> modulo 11 for n=0 to 9 we get:
6
- 1, 8, 9, 6, 4, 10, 3, 2, 5, 7.<br>\r\nAs we see all possible values from 1 to 10
7
- occur. So 8 is a <b>primitive root</b> of 11.<br>\r\nBut there is more:<br>\r\nIf
8
- we take a closer look we see:<br>\r\n1+8=9<br>\r\n8+9=17<img src=\"images/symbol_cong.gif\"
9
- width=\"9\" height=\"11\" alt=\"≡\" border=\"0\" style=\"vertical-align:middle;\">6
10
- mod 11<br>\r\n9+6=15<img src=\"images/symbol_cong.gif\" width=\"9\" height=\"11\"
11
- alt=\"≡\" border=\"0\" style=\"vertical-align:middle;\">4 mod 11<br>\r\n6+4=10<br>\r\n4+10=14<img
12
- src=\"images/symbol_cong.gif\" width=\"9\" height=\"11\" alt=\"≡\" border=\"0\"
13
- style=\"vertical-align:middle;\">3 mod 11<br>\r\n10+3=13<img src=\"images/symbol_cong.gif\"
14
- width=\"9\" height=\"11\" alt=\"≡\" border=\"0\" style=\"vertical-align:middle;\">2
15
- mod 11<br>\r\n3+2=5<br>\r\n2+5=7<br>\r\n5+7=12<img src=\"images/symbol_cong.gif\"
16
- width=\"9\" height=\"11\" alt=\"≡\" border=\"0\" style=\"vertical-align:middle;\">1
17
- mod 11.\r\n</p>\r\nSo the powers of 8 mod 11 are cyclic with period 10, and 8<sup>n</sup>
18
- + 8<sup>n+1</sup> ≡ 8<sup>n+2</sup> (mod 11).<br>\r\n8 is called a <b>Fibonacci
19
- primitive root</b> of 11.<br>\r\nNot every prime has a Fibonacci primitive root.<br>\r\nThere
20
- are 323 primes less than 10000 with one or more Fibonacci primitive roots and the
21
- sum of these primes is 1480491.<br>\r\nFind the sum of the primes less than 100,000,000
22
- with at least one Fibonacci primitive root.\r\n\r\n\r\n"