Ad
  • Custom User Avatar

    return boxes.reduce( (result, box) => (result.length > 0 ? result : pathToBomb(box, path)), [] );

    this part of the code is wrong, man. Try debugging, it’s a nullability issue

  • Custom User Avatar

    That's a good point. I chose reduce, because I preferred a declarative style for this exercise. Since the array contains only a few boxes, the performance difference is negligible. For a much larger dataset, though, I'd definitely switch to an early-exit loop. Thanks for the feedback!

  • Custom User Avatar

    The traverseBoxes uses a reduce method, that will iterate over all elements of the array, even if it finds the result on the first one. Consider:

    export function traverseBoxes(boxes: Box[], path: string[] = []): string[] {
    for (const box of boxes) {
    const result = pathToBomb(box, path);
    if (result.length > 0) return result;
    }
    return [];
    }

  • Custom User Avatar

    Seems like the more readable the code gets, the worse it performs.

    It's probably because of all the references and function calls.

  • Custom User Avatar

    lol. I've checked on godbolt and we've been getting less and less efficient (at least in terms of assembly length). My initial solution was 186 lines, then 247, and yours is 504. It's not an actual speed comparison, but assuming it's a similar effect, that would show an inverse relation to legibility.

    Yours is definitely the most legible, whereas my initial minimizes the number of passes.