This commit is contained in:
Eric Mertens 2022-11-12 19:44:11 -08:00
parent 40c6998e05
commit 3337b9f536
3 changed files with 100 additions and 0 deletions

80
2019/25.cpp Normal file
View File

@ -0,0 +1,80 @@
#include <algorithm>
#include <iostream>
#include <map>
#include <tuple>
#include <utility>
#include <vector>
#include <string_view>
#include <aocpp/Startup.hpp>
#include <intcode/intcode.hpp>
using namespace aocpp;
using namespace intcode;
namespace {
auto RunWithIO(
Machine m,
std::string const& input
) -> void
{
auto it = input.begin();
Run(m,
[&]() -> ValueType {
if (it < input.end()) { return *it++; }
throw std::runtime_error{"insufficient input"};
},
[&](ValueType o) { std::cout << char(o); });
}
auto Search(std::string & script)
{
unsigned prev = 0;
script += "west\n";
for (unsigned i = 1; i < 256; i++) {
unsigned curr = i ^ (i >> 1);
if (curr < prev) {
script += "take ";
} else {
script += "drop ";
}
switch (curr ^ prev) {
case (1<<0): script += "cake\n"; break;
case (1<<1): script += "sand\n"; break;
case (1<<2): script += "asterisk\n"; break;
case (1<<3): script += "ornament\n"; break;
case (1<<4): script += "festive hat\n"; break;
case (1<<5): script += "food ration\n"; break;
case (1<<6): script += "space heater\n"; break;
case (1<<7): script += "semiconductor\n"; break;
}
script += "west\n";
prev = curr;
}
}
} // namespace
auto main(int argc, char** argv) -> int {
std::string script =
"north\n" "take sand\n"
"north\n" "take space heater\n"
"east\n" "take semiconductor\n"
"west\n" "south\n" "south\n" "east\n" "take ornament\n"
"east\n" "east\n" "west\n" "west\n" "south\n" "take festive hat\n"
"east\n" "take asterisk\n"
"south\n" "east\n" "take cake\n"
"east\n" /* electromagnet */ "south\n" "north\n" "west\n"
"west\n" "west\n" "take food ration\n"
"east\n" "north\n" "west\n"
"west\n" /* photons */
"east\n" "north\n" "west\n"
"west\n" /* molten lava */ "west\n" "east\n" "north\n" /* infinite loop */ "north\n";
Search(script);
RunWithIO(Machine{ParseStream(aocpp::Startup(argc, argv))}, script);
}

View File

@ -60,3 +60,6 @@ target_link_libraries(23 aocpp intcode)
add_executable(24 24.cpp) add_executable(24 24.cpp)
target_link_libraries(24 aocpp) target_link_libraries(24 aocpp)
add_executable(25 25.cpp)
target_link_libraries(25 aocpp intcode)

17
CMakePresets.json Normal file
View File

@ -0,0 +1,17 @@
{
"version": 2,
"configurePresets": [
{
"name": "preset",
"displayName": "Configure preset using toolchain file",
"description": "Sets Ninja generator, build and install directory",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
"CMAKE_TOOLCHAIN_FILE": "",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
}
}
]
}