Advertisement
Guest User

Untitled

a guest
Aug 25th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.09 KB | None | 0 0
  1. /*
  2. * 1. largeSum
  3. * */
  4.  
  5. const largeSum = (a, b, limit) => {
  6. if (
  7. typeof a !== "number" ||
  8. typeof b !== "number" ||
  9. typeof limit !== "number"
  10. )
  11. throw new Error(
  12. "Input values should be number. Exptected for @a: number, @b: number, @limit: number"
  13. );
  14.  
  15. let sum = 0;
  16. for (let i = 1; a * i < limit || b * i < limit; i++) {
  17. const _a = a * i;
  18. const _b = b * i;
  19. if (_a < limit) {
  20. sum += _a;
  21. }
  22. if (_b < limit && _b % a !== 0) {
  23. sum += _b;
  24. }
  25. }
  26. return sum;
  27. };
  28.  
  29. /*
  30. * 2. sequence
  31. * */
  32.  
  33. const isEven = n => !(n % 2);
  34.  
  35. const f = num => {
  36. if (isEven(num)) {
  37. return num / 2;
  38. } else {
  39. return 1 + 3 * num;
  40. }
  41. };
  42.  
  43. const a = num => {
  44. if (typeof num !== "number") throw new Error("@n param should be a number");
  45.  
  46. const seq = [num];
  47. while (seq[seq.length - 1] !== 1) {
  48. seq.push(f(seq[seq.length - 1]));
  49. }
  50.  
  51. return seq.reduce((acc, val) => acc + val);
  52. };
  53.  
  54. /*
  55. * 3. countLeapDays
  56. * */
  57.  
  58. const hasLeapDay = year => !(year % 400) || (!(year % 4) && !!(year % 100));
  59.  
  60. const getLeapDay = year => new Date(`Feb 29, ${year}`).getDay();
  61.  
  62. const countLeapDays = (start, end) => {
  63. if (
  64. start > end ||
  65. typeof start !== "number" ||
  66. (end && typeof end !== "number")
  67. ) {
  68. throw new Error("Please, provide valide time range");
  69. }
  70.  
  71. const dayRow = [
  72. "Sunday",
  73. "Monday",
  74. "Tuesday",
  75. "Wednesday",
  76. "Thursday",
  77. "Friday",
  78. "Saturday",
  79. "Answer"
  80. ];
  81. const dayMap = {
  82. Sunday: 0,
  83. Monday: 0,
  84. Tuesday: 0,
  85. Wednesday: 0,
  86. Thursday: 0,
  87. Friday: 0,
  88. Saturday: 0
  89. };
  90. const leapYears = [];
  91.  
  92. if (!end) {
  93. return dayRow[getLeapDay(start)];
  94. }
  95.  
  96. for (let year = start; year < end; year++) {
  97. if (hasLeapDay(year)) {
  98. leapYears.push(year);
  99. }
  100. }
  101.  
  102. if (leapYears.length) {
  103. leapYears.forEach(year => {
  104. return year && (dayMap[dayRow[getLeapDay(year)]] += 1);
  105. });
  106. }
  107.  
  108. return dayMap;
  109. };
  110.  
  111. const logSuccess = (values, result) =>
  112. console.log("✅ Test passed: " + values + " : " + result);
  113. const logFailure = (values, result, exp) =>
  114. console.error(
  115. "❌ Test failed: " + values + " : " + result + ". Expected:" + exp
  116. );
  117.  
  118. /* 1. */
  119. const test1 = largeSum.call(null, 5, 7, 40);
  120. const test2 = largeSum.call(null, 5, 7, 1000000);
  121. const test3 = largeSum.call(null, 5, 7, 21);
  122. const expectedResult1 = 210;
  123. const expectedResult2 = 157142642861;
  124. const expectedResult3 = 71;
  125.  
  126. /* 2. */
  127. const test2_1 = a.call(null, 3);
  128. const test2_2 = a.call(null, 9);
  129. const test2_3 = a.call(null, 6171);
  130. const expectedResult2_1 = 49;
  131. const expectedResult2_2 = 339;
  132. const expectedResult2_3 = 12152173;
  133.  
  134. /* 3. */
  135. const test3_1 = countLeapDays.call(null, 1940);
  136. const test3_2 = countLeapDays.call(null, 2000);
  137. const test3_3 = countLeapDays.call(null, 1900, 2000);
  138. const expectedResult3_1 = "Thursday";
  139. const expectedResult3_2 = "Tuesday";
  140. const expectedResult3_3 = {
  141. Sunday: 3,
  142. Monday: 4,
  143. Tuesday: 3,
  144. Wednesday: 3,
  145. Thursday: 4,
  146. Friday: 3,
  147. Saturday: 4
  148. };
  149.  
  150. /*TESTS:
  151. * */
  152. console.info("Running test 1...");
  153. (test1 === expectedResult1 ? logSuccess : logFailure)(
  154. "5, 7, 40",
  155. test1,
  156. expectedResult1
  157. );
  158. (test2 === expectedResult2 ? logSuccess : logFailure)(
  159. "5, 7, 1000000",
  160. test2,
  161. expectedResult2
  162. );
  163. (test3 === expectedResult3 ? logSuccess : logFailure)(
  164. "5, 7, 21",
  165. test3,
  166. expectedResult3
  167. );
  168. console.info("Running test 2...");
  169. (test2_1 === expectedResult2_1 ? logSuccess : logFailure)(
  170. "3",
  171. test2_1,
  172. expectedResult2_1
  173. );
  174. (test2_2 === expectedResult2_2 ? logSuccess : logFailure)(
  175. "9",
  176. test2_2,
  177. expectedResult2_2
  178. );
  179. (test2_3 === expectedResult2_3 ? logSuccess : logFailure)(
  180. "6171",
  181. test2_3,
  182. expectedResult2_3
  183. );
  184. console.info("Running test 3...");
  185. (test3_1 === expectedResult3_1 ? logSuccess : logFailure)(
  186. "1940",
  187. test3_1,
  188. expectedResult3_1
  189. );
  190. (test3_2 === expectedResult3_2 ? logSuccess : logFailure)(
  191. "2000",
  192. test3_2,
  193. expectedResult3_2
  194. );
  195. (JSON.stringify(test3_3) === JSON.stringify(expectedResult3_3)
  196. ? logSuccess
  197. : logFailure)(
  198. `{
  199. Sunday: 3,
  200. Monday: 4,
  201. Tuesday: 3,
  202. Wednesday: 3,
  203. Thursday: 4,
  204. Friday: 3,
  205. Saturday: 4
  206. }`,
  207. JSON.stringify(test3_3),
  208. expectedResult3_3
  209. );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement