Add includes of cassert
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
#include <array>
|
#include <array>
|
||||||
|
#include <cassert>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <string>
|
#include <string>
|
||||||
@@ -7,7 +8,10 @@ using Int = long;
|
|||||||
|
|
||||||
struct Vector
|
struct Vector
|
||||||
{
|
{
|
||||||
Vector(Int x, Int y, Int z) : x_(x), y_(y), z_(z) {}
|
Vector(Int x, Int y, Int z)
|
||||||
|
: x_(x), y_(y), z_(z)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
Int x() const noexcept { return x_; }
|
Int x() const noexcept { return x_; }
|
||||||
Int y() const noexcept { return y_; }
|
Int y() const noexcept { return y_; }
|
||||||
@@ -49,7 +53,7 @@ auto operator==(Vector const& lhs, Vector const& rhs) -> bool
|
|||||||
struct NodeState
|
struct NodeState
|
||||||
{
|
{
|
||||||
NodeState(Vector const& pos, Vector const& velocity, Vector const& accel)
|
NodeState(Vector const& pos, Vector const& velocity, Vector const& accel)
|
||||||
: pos_(pos), velocity_(velocity), accel_(accel)
|
: pos_(pos), velocity_(velocity), accel_(accel)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
#include <regex>
|
#include <regex>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using Int = long;
|
using Int = long;
|
||||||
using StateName = char;
|
using StateName = char;
|
||||||
|
@@ -11,6 +11,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "position.h"
|
#include "position.h"
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using Int = std::int64_t;
|
using Int = std::int64_t;
|
||||||
|
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
#include "position.h"
|
#include "position.h"
|
||||||
|
|
||||||
|
@@ -11,6 +11,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using UInt = std::uint64_t;
|
using UInt = std::uint64_t;
|
||||||
|
|
||||||
@@ -23,19 +24,19 @@ struct Event
|
|||||||
UInt pos{1};
|
UInt pos{1};
|
||||||
std::size_t l{0};
|
std::size_t l{0};
|
||||||
std::stoull(s.substr(pos));
|
std::stoull(s.substr(pos));
|
||||||
timestamp_ = std::stoull(s.substr(pos), &l); // year
|
timestamp_ = std::stoull(s.substr(pos), &l); // year
|
||||||
pos += l + 1;
|
pos += l + 1;
|
||||||
timestamp_ *= 12;
|
timestamp_ *= 12;
|
||||||
timestamp_ += std::stoull(s.substr(pos), &l) - 1; // month
|
timestamp_ += std::stoull(s.substr(pos), &l) - 1; // month
|
||||||
pos += l + 1;
|
pos += l + 1;
|
||||||
timestamp_ *= 31; // Just need order not actual values.
|
timestamp_ *= 31; // Just need order not actual values.
|
||||||
timestamp_ += std::stoull(s.substr(pos), &l) - 1; // day
|
timestamp_ += std::stoull(s.substr(pos), &l) - 1; // day
|
||||||
pos += l + 1;
|
pos += l + 1;
|
||||||
timestamp_ *= 24;
|
timestamp_ *= 24;
|
||||||
timestamp_ += std::stoull(s.substr(pos), &l); // hour
|
timestamp_ += std::stoull(s.substr(pos), &l); // hour
|
||||||
pos += l + 1;
|
pos += l + 1;
|
||||||
timestamp_ *= 60;
|
timestamp_ *= 60;
|
||||||
timestamp_ += std::stoull(s.substr(pos), &l); // minute
|
timestamp_ += std::stoull(s.substr(pos), &l); // minute
|
||||||
pos += l + 2;
|
pos += l + 2;
|
||||||
if (s.substr(pos) == "falls asleep"s) {
|
if (s.substr(pos) == "falls asleep"s) {
|
||||||
wake_up_ = false;
|
wake_up_ = false;
|
||||||
@@ -79,11 +80,11 @@ private:
|
|||||||
auto print_timestamp(UInt timestamp)
|
auto print_timestamp(UInt timestamp)
|
||||||
{
|
{
|
||||||
std::cout << "[" << timestamp << ": " << timestamp / static_cast<UInt>(24 * 60 * 31 * 12) << "-"
|
std::cout << "[" << timestamp << ": " << timestamp / static_cast<UInt>(24 * 60 * 31 * 12) << "-"
|
||||||
<< std::setw(2) << std::setfill('0')
|
<< std::setw(2) << std::setfill('0')
|
||||||
<< 1 + timestamp / static_cast<UInt>(24 * 60 * 31) % 12 << "-" << std::setw(2)
|
<< 1 + timestamp / static_cast<UInt>(24 * 60 * 31) % 12 << "-" << std::setw(2)
|
||||||
<< std::setfill('0') << 1 + (timestamp / static_cast<UInt>(24 * 60)) % 31 << " "
|
<< std::setfill('0') << 1 + (timestamp / static_cast<UInt>(24 * 60)) % 31 << " "
|
||||||
<< std::setw(2) << std::setfill('0') << (timestamp / 60) % 24 << ":" << std::setw(2)
|
<< std::setw(2) << std::setfill('0') << (timestamp / 60) % 24 << ":" << std::setw(2)
|
||||||
<< std::setfill('0') << timestamp % 60 << "]";
|
<< std::setfill('0') << timestamp % 60 << "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
auto how_sleepy(std::vector<UInt> const& guard) -> UInt
|
auto how_sleepy(std::vector<UInt> const& guard) -> UInt
|
||||||
@@ -120,8 +121,8 @@ auto main() -> int
|
|||||||
}
|
}
|
||||||
print_timestamp(e.timestamp());
|
print_timestamp(e.timestamp());
|
||||||
std::cout << ": Guard " << current_it->first << " wakes up after "
|
std::cout << ": Guard " << current_it->first << " wakes up after "
|
||||||
<< e.timestamp() - asleep_from << " minutes sleep. Has slept a total of "
|
<< e.timestamp() - asleep_from << " minutes sleep. Has slept a total of "
|
||||||
<< how_sleepy(current_it->second) << " minutes.\n";
|
<< how_sleepy(current_it->second) << " minutes.\n";
|
||||||
asleep_from = 0;
|
asleep_from = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,7 +143,7 @@ auto main() -> int
|
|||||||
std::max_element(sleepiest_guard->second.begin(), sleepiest_guard->second.end()) -
|
std::max_element(sleepiest_guard->second.begin(), sleepiest_guard->second.end()) -
|
||||||
sleepiest_guard->second.begin()};
|
sleepiest_guard->second.begin()};
|
||||||
std::cout << "Busiest guard: " << sleepiest_guard_id << " was asleep most in minute "
|
std::cout << "Busiest guard: " << sleepiest_guard_id << " was asleep most in minute "
|
||||||
<< sleepiest_minute << "\n";
|
<< sleepiest_minute << "\n";
|
||||||
std::cout << "Result: " << sleepiest_guard_id * sleepiest_minute << "\n";
|
std::cout << "Result: " << sleepiest_guard_id * sleepiest_minute << "\n";
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 01/12/2022.
|
// Created by Matthew Gretton-Dann on 01/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -23,19 +24,19 @@ struct Event
|
|||||||
UInt pos{1};
|
UInt pos{1};
|
||||||
std::size_t l{0};
|
std::size_t l{0};
|
||||||
std::stoull(s.substr(pos));
|
std::stoull(s.substr(pos));
|
||||||
timestamp_ = std::stoull(s.substr(pos), &l); // year
|
timestamp_ = std::stoull(s.substr(pos), &l); // year
|
||||||
pos += l + 1;
|
pos += l + 1;
|
||||||
timestamp_ *= 12;
|
timestamp_ *= 12;
|
||||||
timestamp_ += std::stoull(s.substr(pos), &l) - 1; // month
|
timestamp_ += std::stoull(s.substr(pos), &l) - 1; // month
|
||||||
pos += l + 1;
|
pos += l + 1;
|
||||||
timestamp_ *= 31; // Just need order not actual values.
|
timestamp_ *= 31; // Just need order not actual values.
|
||||||
timestamp_ += std::stoull(s.substr(pos), &l) - 1; // day
|
timestamp_ += std::stoull(s.substr(pos), &l) - 1; // day
|
||||||
pos += l + 1;
|
pos += l + 1;
|
||||||
timestamp_ *= 24;
|
timestamp_ *= 24;
|
||||||
timestamp_ += std::stoull(s.substr(pos), &l); // hour
|
timestamp_ += std::stoull(s.substr(pos), &l); // hour
|
||||||
pos += l + 1;
|
pos += l + 1;
|
||||||
timestamp_ *= 60;
|
timestamp_ *= 60;
|
||||||
timestamp_ += std::stoull(s.substr(pos), &l); // minute
|
timestamp_ += std::stoull(s.substr(pos), &l); // minute
|
||||||
pos += l + 2;
|
pos += l + 2;
|
||||||
if (s.substr(pos) == "falls asleep"s) {
|
if (s.substr(pos) == "falls asleep"s) {
|
||||||
wake_up_ = false;
|
wake_up_ = false;
|
||||||
@@ -79,11 +80,11 @@ private:
|
|||||||
auto print_timestamp(UInt timestamp)
|
auto print_timestamp(UInt timestamp)
|
||||||
{
|
{
|
||||||
std::cout << "[" << timestamp << ": " << timestamp / static_cast<UInt>(24 * 60 * 31 * 12) << "-"
|
std::cout << "[" << timestamp << ": " << timestamp / static_cast<UInt>(24 * 60 * 31 * 12) << "-"
|
||||||
<< std::setw(2) << std::setfill('0')
|
<< std::setw(2) << std::setfill('0')
|
||||||
<< 1 + timestamp / static_cast<UInt>(24 * 60 * 31) % 12 << "-" << std::setw(2)
|
<< 1 + timestamp / static_cast<UInt>(24 * 60 * 31) % 12 << "-" << std::setw(2)
|
||||||
<< std::setfill('0') << 1 + (timestamp / static_cast<UInt>(24 * 60)) % 31 << " "
|
<< std::setfill('0') << 1 + (timestamp / static_cast<UInt>(24 * 60)) % 31 << " "
|
||||||
<< std::setw(2) << std::setfill('0') << (timestamp / 60) % 24 << ":" << std::setw(2)
|
<< std::setw(2) << std::setfill('0') << (timestamp / 60) % 24 << ":" << std::setw(2)
|
||||||
<< std::setfill('0') << timestamp % 60 << "]";
|
<< std::setfill('0') << timestamp % 60 << "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
auto how_sleepy(std::vector<UInt> const& guard) -> UInt
|
auto how_sleepy(std::vector<UInt> const& guard) -> UInt
|
||||||
@@ -120,8 +121,8 @@ auto main() -> int
|
|||||||
}
|
}
|
||||||
print_timestamp(e.timestamp());
|
print_timestamp(e.timestamp());
|
||||||
std::cout << ": Guard " << current_it->first << " wakes up after "
|
std::cout << ": Guard " << current_it->first << " wakes up after "
|
||||||
<< e.timestamp() - asleep_from << " minutes sleep. Has slept a total of "
|
<< e.timestamp() - asleep_from << " minutes sleep. Has slept a total of "
|
||||||
<< how_sleepy(current_it->second) << " minutes.\n";
|
<< how_sleepy(current_it->second) << " minutes.\n";
|
||||||
asleep_from = 0;
|
asleep_from = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -144,8 +145,8 @@ auto main() -> int
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::cout << "Guard " << guard_sleep.first << " slept most for " << *sleepiest_minute
|
std::cout << "Guard " << guard_sleep.first << " slept most for " << *sleepiest_minute
|
||||||
<< " minutes at " << sleepiest_minute - guard_sleep.second.begin()
|
<< " minutes at " << sleepiest_minute - guard_sleep.second.begin()
|
||||||
<< " score: " << score << "\n";
|
<< " score: " << score << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << "Result: " << max_score << "\n";
|
std::cout << "Result: " << max_score << "\n";
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 01/12/2022.
|
// Created by Matthew Gretton-Dann on 01/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
@@ -65,8 +66,8 @@ auto main() -> int
|
|||||||
|
|
||||||
for (unsigned i{0}; i < transitions.size(); ++i) {
|
for (unsigned i{0}; i < transitions.size(); ++i) {
|
||||||
std::cout << ((i & 16) ? plant : soil) << ((i & 8) ? plant : soil) << ((i & 4) ? plant : soil)
|
std::cout << ((i & 16) ? plant : soil) << ((i & 8) ? plant : soil) << ((i & 4) ? plant : soil)
|
||||||
<< ((i & 2) ? plant : soil) << ((i & 1) ? plant : soil) << " => " << transitions[i]
|
<< ((i & 2) ? plant : soil) << ((i & 1) ? plant : soil) << " => " << transitions[i]
|
||||||
<< "\n";
|
<< "\n";
|
||||||
}
|
}
|
||||||
constexpr UInt num_runs{20};
|
constexpr UInt num_runs{20};
|
||||||
for (UInt i{0}; i < num_runs; ++i) {
|
for (UInt i{0}; i < num_runs; ++i) {
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 01/12/2022.
|
// Created by Matthew Gretton-Dann on 01/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 01/12/2022.
|
// Created by Matthew Gretton-Dann on 01/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
@@ -8,6 +8,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using Int = std::int64_t;
|
using Int = std::int64_t;
|
||||||
using UInt = std::uint64_t;
|
using UInt = std::uint64_t;
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using UInt = unsigned long;
|
using UInt = unsigned long;
|
||||||
|
|
||||||
@@ -9,6 +10,7 @@ struct Item
|
|||||||
UInt value_;
|
UInt value_;
|
||||||
unsigned depth_;
|
unsigned depth_;
|
||||||
};
|
};
|
||||||
|
|
||||||
using Items = std::vector<Item>;
|
using Items = std::vector<Item>;
|
||||||
|
|
||||||
auto print1(Items::const_iterator begin, Items::const_iterator end, unsigned current_depth)
|
auto print1(Items::const_iterator begin, Items::const_iterator end, unsigned current_depth)
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using UInt = unsigned long;
|
using UInt = unsigned long;
|
||||||
|
|
||||||
@@ -9,6 +10,7 @@ struct Item
|
|||||||
UInt value_;
|
UInt value_;
|
||||||
unsigned depth_;
|
unsigned depth_;
|
||||||
};
|
};
|
||||||
|
|
||||||
using Items = std::vector<Item>;
|
using Items = std::vector<Item>;
|
||||||
|
|
||||||
auto print1(Items::const_iterator begin, Items::const_iterator end, unsigned current_depth)
|
auto print1(Items::const_iterator begin, Items::const_iterator end, unsigned current_depth)
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
|
#include <cassert>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
struct State
|
struct State
|
||||||
{
|
{
|
||||||
explicit State(std::string const& rules) : rules_(rules)
|
explicit State(std::string const& rules)
|
||||||
|
: rules_(rules)
|
||||||
{
|
{
|
||||||
assert(rules.size() == 512);
|
assert(rules.size() == 512);
|
||||||
assert(rules[0] == '.' || rules[511] == '.');
|
assert(rules[0] == '.' || rules[511] == '.');
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
|
#include <cassert>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
struct State
|
struct State
|
||||||
{
|
{
|
||||||
explicit State(std::string const& rules) : rules_(rules)
|
explicit State(std::string const& rules)
|
||||||
|
: rules_(rules)
|
||||||
{
|
{
|
||||||
assert(rules.size() == 512);
|
assert(rules.size() == 512);
|
||||||
assert(rules[0] == '.' || rules[511] == '.');
|
assert(rules[0] == '.' || rules[511] == '.');
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -124,6 +125,7 @@ struct State
|
|||||||
get(new_scorex, scorey, new_posx, posy) += states;
|
get(new_scorex, scorey, new_posx, posy) += states;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_player2(unsigned scorex, unsigned scorey, unsigned posx, unsigned posy, unsigned amount,
|
void move_player2(unsigned scorex, unsigned scorey, unsigned posx, unsigned posy, unsigned amount,
|
||||||
UInt states)
|
UInt states)
|
||||||
{
|
{
|
||||||
@@ -148,6 +150,7 @@ private:
|
|||||||
return data_[scorey * target_score * loop_size * loop_size + scorex * loop_size * loop_size +
|
return data_[scorey * target_score * loop_size * loop_size + scorex * loop_size * loop_size +
|
||||||
(posy - 1) * loop_size + (posx - 1)];
|
(posy - 1) * loop_size + (posx - 1)];
|
||||||
}
|
}
|
||||||
|
|
||||||
auto get(unsigned scorex, unsigned scorey, unsigned posx, unsigned posy) noexcept -> UInt&
|
auto get(unsigned scorex, unsigned scorey, unsigned posx, unsigned posy) noexcept -> UInt&
|
||||||
{
|
{
|
||||||
return data_[scorey * target_score * loop_size * loop_size + scorex * loop_size * loop_size +
|
return data_[scorey * target_score * loop_size * loop_size + scorex * loop_size * loop_size +
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
#define ADVENT_OF_CODE_GRAPH_UTILS_H
|
#define ADVENT_OF_CODE_GRAPH_UTILS_H
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <cassert>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
@@ -133,14 +134,14 @@ auto dijkstra(Node const& initial, Cost initial_cost, TransitionManager transiti
|
|||||||
current_cost = cost_it->first;
|
current_cost = cost_it->first;
|
||||||
assert(iter < nodes.size());
|
assert(iter < nodes.size());
|
||||||
assert(std::accumulate(costs.begin(), costs.end(), std::size_t{0}, [](auto a, auto c) {
|
assert(std::accumulate(costs.begin(), costs.end(), std::size_t{0}, [](auto a, auto c) {
|
||||||
return a + c.second.size();
|
return a + c.second.size();
|
||||||
}) == nodes.size() - iter);
|
}) == nodes.size() - iter);
|
||||||
for (auto& nodep : cost_it->second) {
|
for (auto& nodep : cost_it->second) {
|
||||||
if (iter++ % 100'000 == 0) {
|
if (iter++ % 100'000 == 0) {
|
||||||
std::cout << "Iteration: " << iter << " cost " << current_cost
|
std::cout << "Iteration: " << iter << " cost " << current_cost
|
||||||
<< " total number of nodes: " << nodes.size()
|
<< " total number of nodes: " << nodes.size()
|
||||||
<< ", number of costs left to visit: " << costs.size()
|
<< ", number of costs left to visit: " << costs.size()
|
||||||
<< ", number of nodes left: " << (nodes.size() - iter) << '\n';
|
<< ", number of nodes left: " << (nodes.size() - iter) << '\n';
|
||||||
}
|
}
|
||||||
if (transition_manager.is_finished(*nodep)) {
|
if (transition_manager.is_finished(*nodep)) {
|
||||||
auto result{std::make_pair(*nodep, current_cost)};
|
auto result{std::make_pair(*nodep, current_cost)};
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using Int = std::int64_t;
|
using Int = std::int64_t;
|
||||||
|
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 02/12/2022.
|
// Created by Matthew Gretton-Dann on 02/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 02/12/2022.
|
// Created by Matthew Gretton-Dann on 02/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -20,7 +21,7 @@ auto main() -> int
|
|||||||
auto left{line.substr(0, line.size() / 2)};
|
auto left{line.substr(0, line.size() / 2)};
|
||||||
auto right{line.substr(line.size() / 2)};
|
auto right{line.substr(line.size() / 2)};
|
||||||
std::sort(left.begin(), left.end());
|
std::sort(left.begin(), left.end());
|
||||||
std::sort(right.begin(), right.end());
|
std::sort(right.begin(), right.end());
|
||||||
std::string result;
|
std::string result;
|
||||||
std::set_intersection(left.begin(), left.end(), right.begin(), right.end(),
|
std::set_intersection(left.begin(), left.end(), right.begin(), right.end(),
|
||||||
std::back_inserter(result));
|
std::back_inserter(result));
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 02/12/2022.
|
// Created by Matthew Gretton-Dann on 02/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
#include <regex>
|
#include <regex>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using UInt = std::uint64_t;
|
using UInt = std::uint64_t;
|
||||||
|
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 05/12/2021.
|
// Created by Matthew Gretton-Dann on 05/12/2021.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 07/12/2022.
|
// Created by Matthew Gretton-Dann on 07/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 07/12/2022.
|
// Created by Matthew Gretton-Dann on 07/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 08/12/2022.
|
// Created by Matthew Gretton-Dann on 08/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <complex>
|
#include <complex>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 08/12/2022.
|
// Created by Matthew Gretton-Dann on 08/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <complex>
|
#include <complex>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 09/12/2022.
|
// Created by Matthew Gretton-Dann on 09/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
@@ -18,17 +19,20 @@ enum class Op { undef, add, mult, dbl, square };
|
|||||||
struct Monkey
|
struct Monkey
|
||||||
{
|
{
|
||||||
auto add_item(UInt score) { items_.push_back(score); }
|
auto add_item(UInt score) { items_.push_back(score); }
|
||||||
|
|
||||||
auto op(Op op)
|
auto op(Op op)
|
||||||
{
|
{
|
||||||
assert(op == Op::dbl || op == Op::square);
|
assert(op == Op::dbl || op == Op::square);
|
||||||
op_ = op;
|
op_ = op;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto op(Op op, UInt amt)
|
auto op(Op op, UInt amt)
|
||||||
{
|
{
|
||||||
assert(op == Op::add || op == Op::mult);
|
assert(op == Op::add || op == Op::mult);
|
||||||
op_ = op;
|
op_ = op;
|
||||||
amt_ = amt;
|
amt_ = amt;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto test(UInt test) { test_ = test; }
|
auto test(UInt test) { test_ = test; }
|
||||||
auto true_monkey(UInt monkey) { true_monkey_ = monkey; }
|
auto true_monkey(UInt monkey) { true_monkey_ = monkey; }
|
||||||
auto false_monkey(UInt monkey) { false_monkey_ = monkey; }
|
auto false_monkey(UInt monkey) { false_monkey_ = monkey; }
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
#include "position.h"
|
#include "position.h"
|
||||||
|
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 09/12/2022.
|
// Created by Matthew Gretton-Dann on 09/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
@@ -54,14 +55,14 @@ auto main() -> int
|
|||||||
// Distance(ish) to row we're interested in:
|
// Distance(ish) to row we're interested in:
|
||||||
Int const row_dist{std::abs(sy - row)};
|
Int const row_dist{std::abs(sy - row)};
|
||||||
std::cout << "Sensor (" << sx << ", " << sy << "):\n"
|
std::cout << "Sensor (" << sx << ", " << sy << "):\n"
|
||||||
<< " Nearest beacon is: " << bx << ", " << by << "\n"
|
<< " Nearest beacon is: " << bx << ", " << by << "\n"
|
||||||
<< " Distance: " << dist << "\n"
|
<< " Distance: " << dist << "\n"
|
||||||
<< " y-Distance to row " << row << ": " << row_dist << "\n";
|
<< " y-Distance to row " << row << ": " << row_dist << "\n";
|
||||||
// If that distance is non-negative then we have places the beacon can't be
|
// If that distance is non-negative then we have places the beacon can't be
|
||||||
if (row_dist <= dist) {
|
if (row_dist <= dist) {
|
||||||
Int const x_dist{dist - row_dist};
|
Int const x_dist{dist - row_dist};
|
||||||
std::cout << " x distance left: " << x_dist << "\n"
|
std::cout << " x distance left: " << x_dist << "\n"
|
||||||
<< " Range: " << sx - x_dist << " - " << sx + x_dist + 1 << "\n";
|
<< " Range: " << sx - x_dist << " - " << sx + x_dist + 1 << "\n";
|
||||||
Range const missing{sx - x_dist, sx + x_dist + 1};
|
Range const missing{sx - x_dist, sx + x_dist + 1};
|
||||||
ranges.insert(missing);
|
ranges.insert(missing);
|
||||||
}
|
}
|
||||||
@@ -83,7 +84,7 @@ auto main() -> int
|
|||||||
}
|
}
|
||||||
auto b{std::max(r.first, last_pos)};
|
auto b{std::max(r.first, last_pos)};
|
||||||
std::cout << " Taking range start as: " << b << '\n'
|
std::cout << " Taking range start as: " << b << '\n'
|
||||||
<< " Adding to count: " << r.second - b << "\n";
|
<< " Adding to count: " << r.second - b << "\n";
|
||||||
count += (r.second - b);
|
count += (r.second - b);
|
||||||
last_pos = r.second;
|
last_pos = r.second;
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 09/12/2022.
|
// Created by Matthew Gretton-Dann on 09/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 16/12/2022.
|
// Created by Matthew Gretton-Dann on 16/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
@@ -21,7 +22,8 @@ using namespace std::string_literals;
|
|||||||
|
|
||||||
struct Grid3
|
struct Grid3
|
||||||
{
|
{
|
||||||
explicit Grid3(std::size_t size) : size_(size) { map_.resize(size * size * size, false); }
|
explicit Grid3(std::size_t size)
|
||||||
|
: size_(size) { map_.resize(size * size * size, false); }
|
||||||
|
|
||||||
auto point(Point3 const& p) const noexcept -> bool
|
auto point(Point3 const& p) const noexcept -> bool
|
||||||
{
|
{
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 16/12/2022.
|
// Created by Matthew Gretton-Dann on 16/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
@@ -21,7 +22,8 @@ using namespace std::string_literals;
|
|||||||
|
|
||||||
struct Grid3
|
struct Grid3
|
||||||
{
|
{
|
||||||
explicit Grid3(std::size_t size) : size_(size) { map_.resize(size * size * size, ' '); }
|
explicit Grid3(std::size_t size)
|
||||||
|
: size_(size) { map_.resize(size * size * size, ' '); }
|
||||||
|
|
||||||
auto point(Point3 const& p) const noexcept -> char
|
auto point(Point3 const& p) const noexcept -> char
|
||||||
{
|
{
|
||||||
|
@@ -8,6 +8,7 @@
|
|||||||
#include <numeric>
|
#include <numeric>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using Int = std::int64_t;
|
using Int = std::int64_t;
|
||||||
using UInt = std::uint64_t;
|
using UInt = std::uint64_t;
|
||||||
@@ -19,10 +20,13 @@ struct Monkey
|
|||||||
{
|
{
|
||||||
Monkey() = default;
|
Monkey() = default;
|
||||||
|
|
||||||
explicit Monkey(Int value) : value_(value), value_known_(true) {}
|
explicit Monkey(Int value)
|
||||||
|
: value_(value), value_known_(true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
Monkey(std::string lhs, char op, std::string rhs)
|
Monkey(std::string lhs, char op, std::string rhs)
|
||||||
: lhs_(std::move(lhs)), rhs_(std::move(rhs)), op_(op)
|
: lhs_(std::move(lhs)), rhs_(std::move(rhs)), op_(op)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,6 +8,7 @@
|
|||||||
#include <numeric>
|
#include <numeric>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using Int = std::int64_t;
|
using Int = std::int64_t;
|
||||||
using UInt = std::uint64_t;
|
using UInt = std::uint64_t;
|
||||||
@@ -19,10 +20,13 @@ struct Monkey
|
|||||||
{
|
{
|
||||||
Monkey() = default;
|
Monkey() = default;
|
||||||
|
|
||||||
explicit Monkey(Int value) : value_(value), value_known_(true) {}
|
explicit Monkey(Int value)
|
||||||
|
: value_(value), value_known_(true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
Monkey(std::string lhs, char op, std::string rhs)
|
Monkey(std::string lhs, char op, std::string rhs)
|
||||||
: lhs_(std::move(lhs)), rhs_(std::move(rhs)), op_(op)
|
: lhs_(std::move(lhs)), rhs_(std::move(rhs)), op_(op)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,13 +72,13 @@ auto calculate(Int lhs, char op, Int rhs)
|
|||||||
auto find_lhs(Int result, char op, Int rhs)
|
auto find_lhs(Int result, char op, Int rhs)
|
||||||
{
|
{
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case '+': // result = lhs + rhs -> lhs = result - rhs;
|
case '+': // result = lhs + rhs -> lhs = result - rhs;
|
||||||
return result - rhs;
|
return result - rhs;
|
||||||
case '-': // result = lhs - rhs -> lhs = result + rhs;
|
case '-': // result = lhs - rhs -> lhs = result + rhs;
|
||||||
return result + rhs;
|
return result + rhs;
|
||||||
case '*': // result = lhs * rhs -> lhs = result / rhs
|
case '*': // result = lhs * rhs -> lhs = result / rhs
|
||||||
return result / rhs;
|
return result / rhs;
|
||||||
case '/': // result = lhs / rhs -> lhs = result * rhs;
|
case '/': // result = lhs / rhs -> lhs = result * rhs;
|
||||||
return result * rhs;
|
return result * rhs;
|
||||||
case '=':
|
case '=':
|
||||||
return rhs;
|
return rhs;
|
||||||
@@ -86,13 +90,13 @@ auto find_lhs(Int result, char op, Int rhs)
|
|||||||
auto find_rhs(Int result, Int lhs, char op)
|
auto find_rhs(Int result, Int lhs, char op)
|
||||||
{
|
{
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case '+': // result = lhs + rhs -> rhs = result - lhs;
|
case '+': // result = lhs + rhs -> rhs = result - lhs;
|
||||||
return result - lhs;
|
return result - lhs;
|
||||||
case '-': // result = lhs - rhs -> rhs = lhs - result;
|
case '-': // result = lhs - rhs -> rhs = lhs - result;
|
||||||
return lhs - result;
|
return lhs - result;
|
||||||
case '*': // result = lhs * rhs -> rhs = result / lhs
|
case '*': // result = lhs * rhs -> rhs = result / lhs
|
||||||
return result / lhs;
|
return result / lhs;
|
||||||
case '/': // result = lhs / rhs -> rhs = lhs / result;
|
case '/': // result = lhs / rhs -> rhs = lhs / result;
|
||||||
return lhs / result;
|
return lhs / result;
|
||||||
case '=':
|
case '=':
|
||||||
return lhs;
|
return lhs;
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 16/12/2022.
|
// Created by Matthew Gretton-Dann on 16/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
@@ -150,7 +151,7 @@ auto main() -> int
|
|||||||
grid.push_back(line);
|
grid.push_back(line);
|
||||||
max_row_length = std::max(max_row_length, line.size());
|
max_row_length = std::max(max_row_length, line.size());
|
||||||
}
|
}
|
||||||
for (auto& row : grid) { row.resize(max_row_length, ' ');};
|
for (auto& row : grid) { row.resize(max_row_length, ' '); };
|
||||||
|
|
||||||
std::string instructions;
|
std::string instructions;
|
||||||
if (!std::getline(std::cin, instructions)) {
|
if (!std::getline(std::cin, instructions)) {
|
||||||
@@ -183,7 +184,7 @@ auto main() -> int
|
|||||||
Int const facing{encode_direction(direction)};
|
Int const facing{encode_direction(direction)};
|
||||||
|
|
||||||
std::cout << " Position: " << pos.first << ", " << pos.second << " Facing: " << direction.first
|
std::cout << " Position: " << pos.first << ", " << pos.second << " Facing: " << direction.first
|
||||||
<< ", " << direction.second << " = " << facing << "\n";
|
<< ", " << direction.second << " = " << facing << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
Int const facing{encode_direction(direction)};
|
Int const facing{encode_direction(direction)};
|
||||||
@@ -193,7 +194,7 @@ auto main() -> int
|
|||||||
std::cout << row << "\n";
|
std::cout << row << "\n";
|
||||||
}
|
}
|
||||||
std::cout << "Position: " << pos.first << ", " << pos.second << " Facing: " << direction.first
|
std::cout << "Position: " << pos.first << ", " << pos.second << " Facing: " << direction.first
|
||||||
<< ", " << direction.second << " = " << facing << "\n";
|
<< ", " << direction.second << " = " << facing << "\n";
|
||||||
std::cout << "Encoding: " << pos.second * 1000 + pos.first * 4 + facing;
|
std::cout << "Encoding: " << pos.second * 1000 + pos.first * 4 + facing;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 16/12/2022.
|
// Created by Matthew Gretton-Dann on 16/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
@@ -127,7 +128,7 @@ auto wrap_round(Point const& pos, Point const& direction) -> std::pair<Point, Po
|
|||||||
return {Point{square_size * 2 + x, 0}, down};
|
return {Point{square_size * 2 + x, 0}, down};
|
||||||
}
|
}
|
||||||
assert(((sx == 1 || sx == 2) && sy == 0) || (sx == 1 && sy == 1) ||
|
assert(((sx == 1 || sx == 2) && sy == 0) || (sx == 1 && sy == 1) ||
|
||||||
((sx == 0 || sx == 1) && sy == 2) || (sx == 0 && sy == 3));
|
((sx == 0 || sx == 1) && sy == 2) || (sx == 0 && sy == 3));
|
||||||
return {pos, direction};
|
return {pos, direction};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,8 +181,8 @@ auto move_pos(Grid& grid, Point pos, Point direction, Int amt) -> std::pair<Poin
|
|||||||
}
|
}
|
||||||
if (direction != next_direction) {
|
if (direction != next_direction) {
|
||||||
std::cout << " Change of direction: " << pos.first << ", " << pos.second << " -> "
|
std::cout << " Change of direction: " << pos.first << ", " << pos.second << " -> "
|
||||||
<< next_pos.first << ", " << next_pos.second << ". Direction "
|
<< next_pos.first << ", " << next_pos.second << ". Direction "
|
||||||
<< direction_char(direction) << " -> " << direction_char(next_direction) << "\n";
|
<< direction_char(direction) << " -> " << direction_char(next_direction) << "\n";
|
||||||
}
|
}
|
||||||
pos = next_pos;
|
pos = next_pos;
|
||||||
direction = next_direction;
|
direction = next_direction;
|
||||||
@@ -259,7 +260,7 @@ auto main() -> int
|
|||||||
Int const facing{encode_direction(direction)};
|
Int const facing{encode_direction(direction)};
|
||||||
|
|
||||||
std::cout << " Position: " << pos.first << ", " << pos.second << " Facing: " << direction.first
|
std::cout << " Position: " << pos.first << ", " << pos.second << " Facing: " << direction.first
|
||||||
<< ", " << direction.second << " = " << facing << "\n";
|
<< ", " << direction.second << " = " << facing << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
Int const facing{encode_direction(direction)};
|
Int const facing{encode_direction(direction)};
|
||||||
@@ -269,7 +270,7 @@ auto main() -> int
|
|||||||
std::cout << row << "\n";
|
std::cout << row << "\n";
|
||||||
}
|
}
|
||||||
std::cout << "Position: " << pos.first << ", " << pos.second << " Facing: " << direction.first
|
std::cout << "Position: " << pos.first << ", " << pos.second << " Facing: " << direction.first
|
||||||
<< ", " << direction.second << " = " << facing << "\n";
|
<< ", " << direction.second << " = " << facing << "\n";
|
||||||
std::cout << "Encoding: " << pos.second * 1000 + pos.first * 4 + facing;
|
std::cout << "Encoding: " << pos.second * 1000 + pos.first * 4 + facing;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 16/12/2022.
|
// Created by Matthew Gretton-Dann on 16/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
@@ -45,8 +46,8 @@ auto next_state(Grid const& grid, Dirs const& dirs) -> Grid
|
|||||||
++num_pts;
|
++num_pts;
|
||||||
|
|
||||||
if (std::all_of(all_dirs.begin(), all_dirs.end(), [&x, &y, &grid](auto const& dir) {
|
if (std::all_of(all_dirs.begin(), all_dirs.end(), [&x, &y, &grid](auto const& dir) {
|
||||||
return grid.at(dir.second + y).at(dir.first + x) == '.';
|
return grid.at(dir.second + y).at(dir.first + x) == '.';
|
||||||
})) {
|
})) {
|
||||||
result.at(y).at(x) = '#';
|
result.at(y).at(x) = '#';
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -55,8 +56,8 @@ auto next_state(Grid const& grid, Dirs const& dirs) -> Grid
|
|||||||
Point direction{0, 0};
|
Point direction{0, 0};
|
||||||
for (auto const& ds : dirs) {
|
for (auto const& ds : dirs) {
|
||||||
if (std::all_of(ds.begin(), ds.end(), [&x, &y, &grid](auto const& d) {
|
if (std::all_of(ds.begin(), ds.end(), [&x, &y, &grid](auto const& d) {
|
||||||
return grid.at(y + d.second).at(x + d.first) == '.';
|
return grid.at(y + d.second).at(x + d.first) == '.';
|
||||||
})) {
|
})) {
|
||||||
moved = true;
|
moved = true;
|
||||||
direction = ds[1];
|
direction = ds[1];
|
||||||
}
|
}
|
||||||
@@ -160,6 +161,7 @@ auto calc_score(Grid const& grid) -> UInt
|
|||||||
}
|
}
|
||||||
|
|
||||||
using namespace std::string_literals;
|
using namespace std::string_literals;
|
||||||
|
|
||||||
auto main() -> int
|
auto main() -> int
|
||||||
{
|
{
|
||||||
std::string line;
|
std::string line;
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 16/12/2022.
|
// Created by Matthew Gretton-Dann on 16/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
@@ -45,8 +46,8 @@ auto next_state(Grid const& grid, Dirs const& dirs) -> Grid
|
|||||||
++num_pts;
|
++num_pts;
|
||||||
|
|
||||||
if (std::all_of(all_dirs.begin(), all_dirs.end(), [&x, &y, &grid](auto const& dir) {
|
if (std::all_of(all_dirs.begin(), all_dirs.end(), [&x, &y, &grid](auto const& dir) {
|
||||||
return grid.at(dir.second + y).at(dir.first + x) == '.';
|
return grid.at(dir.second + y).at(dir.first + x) == '.';
|
||||||
})) {
|
})) {
|
||||||
result.at(y).at(x) = '#';
|
result.at(y).at(x) = '#';
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -55,8 +56,8 @@ auto next_state(Grid const& grid, Dirs const& dirs) -> Grid
|
|||||||
Point direction{0, 0};
|
Point direction{0, 0};
|
||||||
for (auto const& ds : dirs) {
|
for (auto const& ds : dirs) {
|
||||||
if (std::all_of(ds.begin(), ds.end(), [&x, &y, &grid](auto const& d) {
|
if (std::all_of(ds.begin(), ds.end(), [&x, &y, &grid](auto const& d) {
|
||||||
return grid.at(y + d.second).at(x + d.first) == '.';
|
return grid.at(y + d.second).at(x + d.first) == '.';
|
||||||
})) {
|
})) {
|
||||||
moved = true;
|
moved = true;
|
||||||
direction = ds[1];
|
direction = ds[1];
|
||||||
}
|
}
|
||||||
@@ -160,6 +161,7 @@ auto calc_score(Grid const& grid) -> UInt
|
|||||||
}
|
}
|
||||||
|
|
||||||
using namespace std::string_literals;
|
using namespace std::string_literals;
|
||||||
|
|
||||||
auto main() -> int
|
auto main() -> int
|
||||||
{
|
{
|
||||||
std::string line;
|
std::string line;
|
||||||
@@ -206,6 +208,6 @@ auto main() -> int
|
|||||||
|
|
||||||
UInt const score{calc_score(grid)};
|
UInt const score{calc_score(grid)};
|
||||||
std::cout << "Score: " << score << "\n";
|
std::cout << "Score: " << score << "\n";
|
||||||
std::cout << "Number of turns: " << num_rounds<< "\n";
|
std::cout << "Number of turns: " << num_rounds << "\n";
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 16/12/2022.
|
// Created by Matthew Gretton-Dann on 16/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
// Created by Matthew Gretton-Dann on 16/12/2022.
|
// Created by Matthew Gretton-Dann on 16/12/2022.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
Reference in New Issue
Block a user