aboutsummaryrefslogtreecommitdiff
path: root/challenge-119/dave-jacoby/node/ch-2.js
blob: 7386e2a0db0568cf87129424e62d7bc76d13ec6e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"use strict";

// let list = Array(20).fill();
// for (let i in list) {
//   let j = first_pass(i);
//   let s = get_sequence(i * 2);
//   let v = solve_sequence(i);
//   console.log(["", "i", i, "j", j, "v", v].join("\t"));
// }

let list = [2, 5, 10, 60, 200];

for (let i in list) {
  let n = list[i];
  let s = solve_sequence(n);
  console.log(["", n, s].join("\t"));
}

function solve_sequence(n) {
  let j = n * 2;
  let s = get_sequence(1 + j);
  while (s[n] == undefined) {
    j = j * 2;
    s = get_sequence(j);
  }
  return s[n];
}

function get_sequence(n) {
  n = parseInt(n);
  let sequence = Array(n)
    .fill("")
    .map((x, i) => first_pass(i + 1))
    .filter((x) => !x.toString().match(/0/))
    .filter((x) => !x.toString().match(/11/));
  sequence.unshift(0);
  return sequence;
}

function first_pass(n) {
  if (n == 0) {
    return 0;
  }
  let output = [];
  while (n) {
    let i = n % 4;
    n = parseInt(n / 4);
    output.push(i);
  }
  return output.reverse().join("");
}