euler-manager 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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"