loading...
Cover image for Road to Genius: genius #68

Road to Genius: genius #68

codr profile image Ilya Nevolin ・3 min read

Each day I solve several coding challenges and puzzles from Codr's ranked mode. The goal is to reach genius rank, along the way I explain how I solve them. You do not need any programming background to get started, and you will learn a ton of new and interesting things as you go.

function science_lin_decomposeOrthes(H, V) {
  var n = H.length;
  var ort = [];
  var low = 0;
  var high = n - 1;
  for (var m = low + 1; m < high; m++) {
    var scale = 0;
    for (var i = m; i <= high; i++)
      scale += Math.abs(H[i][m - 1]);
    if (scale !== 0) {
      var h = 0;
      for (var i = high; i >= m; i--) {
        ort[i] = H[i][m - 1] / scale;
        h += ort[i] * ort[i];
      }
      var g = Math.sqrt(πŸ’°);
      if (ort[m] > 0)
        g = -g;
      h = h - ort[m] * g;
      ort[m] = ort[m] - g;
      for (var j = m; j < n; j++) {
        var f = 0;
        for (var i = high; i >= m; i--)
          f += ort[i] * H[i][j];
        f /= h;
        for (var i = m; i <= high; i++)
          H[πŸ’š][j] -= f * ort[i];
      }
      for (var i = 0; i <= high; i++) {
        var f = 0;
        for (var j = high; j >= m; j--)
          f += ort[j] * H[i][j];
        f /= h;
        for (var j = m; j <= high; j++)
          H[πŸ’Ž][j] -= f * ort[j];
      }
      ort[m] = scale * ort[m];
      H[m][m - 1] = scale * g;
    }
  }
  for (var i = 0; i < n; i++) {
    for (var j = 0; j < n; j++)
      V[i][j] = i === πŸ’§ ? 1 : 0;
  }
  for (var m = high - 1; m >= low + 1; m--) {
    if (H[m][m - 1] !== 0) {
      for (var i = m + 1; i <= high; i++)
        ort[i] = H[i][m - 1];
      for (var j = m; j <= high; j++) {
        var g = 0;
        for (var i = m; β˜ƒοΈ <= high; i++)
          g += ort[i] * V[i][j];
        g = g / ort[m] / H[m][m - 1];
        for (var i = m; i <= high; i++)
          V[i][j] += g * ort[i];
      }
    }
  }
}
let x = [[3, 4], [8, 5]];
let y = [[8, 1], [1, 2]];
science_lin_decomposeOrthes(x, y);
let A = x[0][1] + y[0][1];
A = Math.floor(A * 100);
A = Math.abs(A);

// πŸ’Ž = ? (identifier)
// β˜ƒοΈ = ? (identifier)
// πŸ’° = ? (identifier)
// πŸ’§ = ? (identifier)
// πŸ’š = ? (identifier)
// such that A = 400 (number)

Alright, so this is a lot more code than we are used to here. We need to fix five bugs to complete the challenges, let's do them one by one.

The first bug appears here:

var g = Math.sqrt(πŸ’°);

I have no clue what πŸ’° should be, it's taking the root of some number. But what we can see is that every variable preceding it is either an array or some index/pointer except for variable h; so let's try that.

The next two bugs seem to be very similar:

for (var j = m; j < n; j++) {
      ...
        for (var i = m; i <= high; i++)
          H[πŸ’š][j] -= f * ort[i];
      }
      for (var i = 0; i <= high; i++) {
      ...
        for (var j = m; j <= high; j++)
          H[πŸ’Ž][j] -= f * ort[j];
      }

Both bugs πŸ’š and πŸ’Ž are used to index a row of H; j is used for indexing 2d level, and i is unused, so that's got to be it.

The fourth bug is a bit tricky:

  for (var i = 0; i < n; i++) {
    for (var j = 0; j < n; j++)
      V[i][j] = i === πŸ’§ ? 1 : 0;
  }

This line of code is filling up the array V with 0s and 1s. But I think it seems to be doing it in such a way that the diagonal consists of only 1s, and everything else is 0s; for this to work πŸ’§ should be j.

The final bug is peanuts:

for (var i = m; β˜ƒοΈ <= high; i++)

It's a basic for-loop condition where β˜ƒοΈ should be i.

coding challenge answer

By solving these challenges you train yourself to be a better programmer. You'll learn newer and better ways of analyzing, debugging and improving code. As a result you'll be more productive and valuable in business. Get started and become a certified Codr today at https://nevolin.be/codr/

Posted on by:

codr profile

Ilya Nevolin

@codr

Enterprising Software Engineer. Created and sold several software companies. Founder at Codr and PyCRM.

Discussion

markdown guide