AoC code coverage
Current view: top level - puzzles/2015 - Day03.cpp (source / functions) Coverage Total Hit
Test: master Lines: 73.3 % 30 22
Test Date: 2025-07-28 10:53:57 Functions: 66.7 % 3 2

            Line data    Source code
       1              : #include "PuzzleImpl.h"
       2              : #include "Vector.h"
       3              : 
       4              : #include <libassert/assert.hpp>
       5              : 
       6              : #include <array>
       7              : #include <unordered_set>
       8              : 
       9              : namespace {
      10              : using Coord = Vec2<int>;
      11              : 
      12            0 : constexpr std::array<Coord, 128u> makeDirLut() {
      13            0 :   std::array<Coord, 128u> lut{};
      14            0 :   lut['^'] = {0, 1};
      15            0 :   lut['>'] = {1, 0};
      16            0 :   lut['v'] = {0, -1};
      17            0 :   lut['<'] = {-1, 0};
      18            0 :   return lut;
      19            0 : }
      20              : 
      21              : static constexpr std::array<Coord, 128u> dirLut = makeDirLut();
      22              : 
      23              : } // namespace
      24              : 
      25            1 : template <> size_t part1<2015, 3>(std::string_view const input) {
      26            1 :   std::unordered_set<Coord> visitedHouses;
      27            1 :   Coord coord{0, 0};
      28            1 :   visitedHouses.insert(coord);
      29         8192 :   for (char const c : input) {
      30         8192 :     coord += dirLut[c];
      31         8192 :     visitedHouses.insert(coord);
      32         8192 :   }
      33            1 :   return visitedHouses.size();
      34            1 : }
      35              : 
      36            1 : template <> size_t part2<2015, 3>(std::string_view const input) {
      37            1 :   std::unordered_set<Coord> visitedHouses;
      38            1 :   std::array<Coord, 2u> coords = {{{0, 0}, {0, 0}}};
      39            1 :   visitedHouses.emplace(0, 0);
      40            1 :   unsigned int coordIdx = 0;
      41         8192 :   for (char const c : input) {
      42         8192 :     coords[coordIdx] += dirLut[c];
      43         8192 :     visitedHouses.insert(coords[coordIdx]);
      44         8192 :     coordIdx ^= 1u;
      45         8192 :   }
      46            1 :   return visitedHouses.size();
      47            1 : }
        

Generated by: LCOV version 2.0-1