Compare commits

22 Commits

Author SHA1 Message Date
da8a4cc5de aoc24: day17 cpu 2024-12-18 21:53:42 +01:00
5810fe22e9 aoc24: day17 started 2024-12-17 18:01:49 +01:00
5c7da45fe1 aoc24: day16 create graph 2024-12-16 21:17:17 +01:00
9c840a7c8f aoc24: add day16 2024-12-16 16:43:34 +01:00
1108b8c65b aoc24: day07a complete 2024-12-16 04:03:02 +01:00
7ae660566e aoc24: add day11 2024-12-11 08:08:46 +01:00
521b3dc806 aoc24: add day10 2024-12-10 17:45:40 +01:00
c175b4ebc4 aoc24: day05 filter invalid 2024-12-09 15:16:11 +01:00
ec9028c5f5 aoc24: add day07-08 2024-12-09 02:15:47 +01:00
aaff50eae9 aoc24: day05a add back 2024-12-09 01:30:49 +01:00
57d9bdf0f3 aoc24: day06a complete 2024-12-09 01:27:55 +01:00
a35123500e aoc24: Add README.md 2024-12-09 00:12:55 +01:00
5a02b90f85 aoc24: day04b complete 2024-12-08 23:58:15 +01:00
a1d5d359f2 aoc24: day02b complete 2024-12-08 22:35:49 +01:00
5c692fe727 aoc24: day05a complete 2024-12-06 12:13:39 +01:00
8df8cbb0e4 aoc24: day05a split sections
rules and updates
2024-12-05 16:38:03 +01:00
1c6bbc6cef aoc24: day03b complete 2024-12-03 21:20:47 +01:00
9e68114169 aoc24: day03a complete 2024-12-03 20:56:46 +01:00
c685dcddfb aoc24: day03 tokenizer 2024-12-03 16:43:38 +01:00
616f6bd610 aoc24: day02b not working 2024-12-03 01:49:01 +01:00
242f599c8a aoc24: day02a complete 2024-12-02 21:31:24 +01:00
311ccc0e71 not complete 2024-12-02 17:23:49 +01:00
61 changed files with 7194 additions and 101 deletions

View File

@@ -16,6 +16,12 @@ FetchContent_Declare(
GIT_TAG v4.0.5
)
list(APPEND FETCH_CONTENTS utf8cpp)
FetchContent_Declare(
asio
GIT_REPOSITORY https://github.com/mononerv/asio.git
GIT_TAG bcb8a933b27021d77f2d183991d815ea6c8cdc97
)
list(APPEND FETCH_CONTENTS asio)
FetchContent_Declare(
stb
GIT_REPOSITORY https://github.com/mononerv/stb.git
@@ -75,6 +81,8 @@ if (NOT MSVC)
"-Werror"
# fmt warnings
"-Wno-unknown-attributes"
# ctre warning
"-Wno-missing-template-arg-list-after-template-kw"
)
else()
set(BASE_OPTIONS
@@ -87,7 +95,7 @@ else()
endif()
set(HEADERS
aoc/aoc.hpp
aoc/utils.hpp
)
set(SOURCES "")
add_library(aoclib OBJECT ${HEADERS} ${SOURCES})
@@ -110,19 +118,30 @@ target_link_libraries(aoclib
ctre
stb::stb
Threads::Threads
asio::asio
)
source_group(TREE "${CMAKE_CURRENT_LIST_DIR}" FILES ${HEADERS} ${SOURCES})
add_subdirectory(sol/24)
set(HEADERS "")
set(SOURCES aoc.cpp)
set(SOURCES "aoc.cpp")
add_executable(aoc ${HEADERS} ${SOURCES})
target_include_directories(aoc PRIVATE ${PROJECT_SOURCE_DIR})
target_include_directories(aoc
PUBLIC
${PROJECT_SOURCE_DIR}
PRIVATE
${PROJECT_SOURCE_DIR}/aoc
)
target_compile_features(aoc PRIVATE cxx_std_23)
target_compile_options(aoc PRIVATE ${BASE_OPTIONS})
target_compile_definitions(aoc PRIVATE ${BASE_DEFINITIONS})
target_link_libraries(aoc
target_compile_definitions(aoc
PRIVATE
${BASE_DEFINITIONS}
)
target_link_libraries(aoc
PUBLIC
aoclib
aoc24
)
source_group(TREE "${CMAKE_CURRENT_LIST_DIR}" FILES ${HEADERS} ${SOURCES})

View File

@@ -14,12 +14,6 @@ This project has support for different languages.
There are different ways to setup this project, using `ninja` or Visual Studio.
To use `miniaudio` to play audio on host machine use the flag `-DUSE_MINIAUDIO=ON`.
```sh
cmake -S . -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Debug
```
Use `ninja` to build.

79
aoc.cpp
View File

@@ -1,72 +1,25 @@
#include <fstream>
#include <span>
#include <vector>
#include <algorithm>
#include <fstream>
#include <expected>
#include <system_error>
#include <ranges>
#include <string>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <utility>
#include "fmt/format.h"
#include "aoc/24/01.hpp"
#include "aoc/utils.hpp"
#include "sol/24/aoc.hpp"
auto entry([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
return aoc24::entry(args);
}
auto main([[maybe_unused]]int argc, [[maybe_unused]]char const* argv[]) -> int {
constexpr auto filename = "./dat/24/re/01.txt";
std::ifstream strm{filename, std::ios::in};
if (!strm.is_open()) {
fmt::print("Error opening file: {}\n", filename);
return 1;
}
std::vector<std::uint32_t> a{};
std::vector<std::uint32_t> b{};
std::string str{};
while (strm) {
auto const c = char(strm.peek());
if (std::isdigit(c)) {
str += char(strm.get());
continue;
}
if (c == ' ') {
if (!str.empty()) {
a.emplace_back(std::stoi(str));
str.clear();
}
}
if (c == '\n') {
if (!str.empty()) {
b.emplace_back(std::stoi(str));
str.clear();
}
}
[[discard]]strm.get();
}
fmt::print("a: {}, b: {}\n", a.size(), b.size());
std::sort(std::begin(a), std::end(a));
std::sort(std::begin(b), std::end(b));
auto diff_view = std::views::zip(a, b) | std::views::transform([](auto const& p) {
auto const [x, y] = p;
return x > y ? x - y : y - x;
});
auto const sum = std::accumulate(std::begin(diff_view), std::end(diff_view), 0);
fmt::print("Part A: {}\n", std::abs(sum));
auto values = a | std::views::transform([&b](auto v) {
return std::pair{v, b | std::views::filter([v](auto c) {
return v == c; // Filter elements in `b` equal to `v`
}) | std::ranges::to<std::vector>()};
}) | std::ranges::to<std::vector>();
auto const meow = std::accumulate(std::begin(values), std::end(values), 0, [](auto const acc, auto const& pair) {
return acc + std::int32_t(pair.first * pair.second.size());
});
fmt::print("Part B: {}\n", meow);
return 0;
auto const res = entry({argv, static_cast<std::size_t>(argc)});
if (res) return 0;
fmt::print(stderr, "{}: {}\n", res.error().err.message(), res.error().msg);
return 1;
}

View File

View File

@@ -1,7 +0,0 @@
#ifndef AOC_AOC_HPP
#define AOC_AOC_HPP
namespace aoc {
}
#endif // !AOC_AOC_HPP

109
aoc/utils.hpp Normal file
View File

@@ -0,0 +1,109 @@
#ifndef AOC_AOC_HPP
#define AOC_AOC_HPP
#include <type_traits>
#include <cstddef>
#include <limits>
#include <numbers>
#include <memory>
#include <system_error>
#include <expected>
#include <fstream>
#include <ranges>
#include <vector>
namespace aoc {
namespace types {
using f32 = float;
using f64 = double;
using b8 = bool;
using u8 = std::uint8_t;
using u16 = std::uint16_t;
using u32 = std::uint32_t;
using u64 = std::uint64_t;
using usize = std::size_t;
using isize = std::ptrdiff_t;
using i8 = std::int8_t;
using i16 = std::int16_t;
using i32 = std::int32_t;
using i64 = std::int64_t;
using c8 = char;
}
using f32 = types::f32;
using f64 = types::f64;
using b8 = types::b8;
using u8 = types::u8;
using u16 = types::u16;
using u32 = types::u32;
using u64 = types::u64;
using usize = types::usize;
using isize = types::isize;
using i8 = types::i8;
using i16 = types::i16;
using i32 = types::i32;
using i64 = types::i64;
using c8 = types::c8;
template <typename T>
concept Integral = std::is_integral<T>::value;
// Aliases
namespace nums = std::numbers;
template <typename T>
using lim = std::numeric_limits<T>;
inline constexpr auto pi = std::numbers::pi;
template <typename T>
inline constexpr auto pi_v = std::numbers::pi_v<T>;
struct error {
std::string msg;
std::error_code err;
};
inline auto make_error(std::string const& str, std::errc ec) -> std::unexpected<error> {
return std::unexpected(error{str, std::make_error_code(ec)});
}
inline auto read_text(std::string const& path) -> std::expected<std::string, aoc::error> {
std::fstream strm(path, std::ios::in | std::ios::binary);
if (!strm.is_open())
return aoc::make_error(path, std::errc::no_such_file_or_directory);
return std::string{
std::istreambuf_iterator<c8>(strm),
std::istreambuf_iterator<c8>()
};
}
// ranges and view aliases
template <typename T>
using vec = std::vector<T>;
inline constexpr auto split = std::views::split;
[[maybe_unused]]constexpr auto map_to_str = std::views::transform([](auto const& str) {
return std::string(std::begin(str), std::end(str));
});
[[maybe_unused]]constexpr auto map_to_sv = std::views::transform([](auto const& str) {
return std::string_view(std::begin(str), std::end(str));
});
[[maybe_unused]]constexpr auto filter_non_empty = std::views::filter([](auto const& str) {
return !str.empty();
});
}
#endif // !AOC_AOC_HPP

6
dat/24/ex/02.txt Normal file
View File

@@ -0,0 +1,6 @@
7 6 4 2 1
1 2 7 8 9
9 7 6 2 1
1 3 2 4 5
8 6 4 4 1
1 3 6 7 9

1
dat/24/ex/03.txt Normal file
View File

@@ -0,0 +1 @@
xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))

1
dat/24/ex/03b.txt Normal file
View File

@@ -0,0 +1 @@
xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))

10
dat/24/ex/04.txt Normal file
View File

@@ -0,0 +1,10 @@
MMMSXXMASM
MSAMXMSMSA
AMXSXMAAMM
MSAMASMSMX
XMASAMXAMM
XXAMMXXAMA
SMSMSASXSS
SAXAMASAAA
MAMMMXMMMM
MXMXAXMASX

28
dat/24/ex/05.txt Normal file
View File

@@ -0,0 +1,28 @@
47|53
97|13
97|61
97|47
75|29
61|13
75|53
29|13
97|29
53|29
61|53
97|53
61|29
47|13
75|47
97|75
47|61
75|61
47|29
75|13
53|13
75,47,61,53,29
97,61,53,29,13
75,29,13
75,97,47,61,53
61,13,29
97,13,75,29,47

10
dat/24/ex/06.txt Normal file
View File

@@ -0,0 +1,10 @@
....#.....
.........#
..........
..#.......
.......#..
..........
.#..^.....
........#.
#.........
......#...

9
dat/24/ex/07.txt Normal file
View File

@@ -0,0 +1,9 @@
190: 10 19
3267: 81 40 27
83: 17 5
156: 15 6
7290: 6 8 6 15
161011: 16 10 13
192: 17 8 14
21037: 9 7 18 13
292: 11 6 16 20

12
dat/24/ex/08.txt Normal file
View File

@@ -0,0 +1,12 @@
............
........0...
.....0......
.......0....
....0.......
......A.....
............
............
........A...
.........A..
............
............

1
dat/24/ex/09.txt Normal file
View File

@@ -0,0 +1 @@
2333133121414131402

4
dat/24/ex/10a.txt Normal file
View File

@@ -0,0 +1,4 @@
0123
1234
8765
9876

7
dat/24/ex/10b.txt Normal file
View File

@@ -0,0 +1,7 @@
...0...
...1...
...2...
6543456
7.....7
8.....8
9.....9

7
dat/24/ex/10c.txt Normal file
View File

@@ -0,0 +1,7 @@
..90..9
...1.98
...2..7
6543456
765.987
876....
987....

7
dat/24/ex/10d.txt Normal file
View File

@@ -0,0 +1,7 @@
10..9..
2...8..
3...7..
4567654
...8..3
...9..2
.....01

8
dat/24/ex/10e.txt Normal file
View File

@@ -0,0 +1,8 @@
89010123
78121874
87430965
96549874
45678903
32019012
01329801
10456732

1
dat/24/ex/11a.txt Normal file
View File

@@ -0,0 +1 @@
0 1 10 99 999

1
dat/24/ex/11b.txt Normal file
View File

@@ -0,0 +1 @@
125 17

4
dat/24/ex/12a.txt Normal file
View File

@@ -0,0 +1,4 @@
AAAA
BBCD
BBCC
EEEC

10
dat/24/ex/12b.txt Normal file
View File

@@ -0,0 +1,10 @@
RRRRIICCFF
RRRRIICCCF
VVRRRCCFFF
VVRCCCJFFF
VVVVCJJCFE
VVIVCCJJEE
VVIIICJJEE
MIIIIIJJEE
MIIISIJEEE
MMMISSJEEE

12
dat/24/ex/14.txt Normal file
View File

@@ -0,0 +1,12 @@
p=0,4 v=3,-3
p=6,3 v=-1,-3
p=10,3 v=-1,2
p=2,0 v=2,-1
p=0,0 v=1,3
p=3,0 v=-2,-2
p=7,6 v=-1,-3
p=3,0 v=-1,-2
p=9,3 v=2,3
p=7,3 v=-1,2
p=2,4 v=2,-3
p=9,5 v=-3,-3

15
dat/24/ex/16.txt Normal file
View File

@@ -0,0 +1,15 @@
###############
#.......#....E#
#.#.###.#.###.#
#.....#.#...#.#
#.###.#####.#.#
#.#.#.......#.#
#.#.#####.###.#
#...........#.#
###.#.#####.#.#
#...#.....#.#.#
#.#.#.###.#.#.#
#.....#...#.#.#
#.###.#.#.#.#.#
#S..#.....#...#
###############

5
dat/24/ex/17.txt Normal file
View File

@@ -0,0 +1,5 @@
Register A: 729
Register B: 0
Register C: 0
Program: 0,1,5,4,3,0

1000
dat/24/re/02.txt Normal file

File diff suppressed because it is too large Load Diff

6
dat/24/re/03.txt Normal file
View File

@@ -0,0 +1,6 @@
'{}mul(339,896)>^+!)^mul(799,303)don't()>mul(188,763)'<};who()select()%;+mul(924,355)mul(492,757) what()mul(582,171)][*+select()#mul(840,899){!when()from()%<mul(711,51)when()why()} ~mul(131,623)&select()^how()mul(966,541)[*>where()mul(318,527)} :!-'mul(530,886)?}>mul(937,475) $;),%:}mul(201,723)where()select()mul(673,729)why()who()^'who()mul(673,694)[+mul(295,161)[!how(88,740)*mul(364,904)how()<]when()+where()mul(329,432)when()mul(499,11)who(238,444)<mul(533,879)'&who()#$;(&'<mul(65,49)#where(630,776)#mul(979,846)select()%]!<>)#~mul(775,866);,[)':where()%{[mul(835,890)+&&select()&[when()why(783,259) select()mul(735,871)!)when()'what()[/:mul(952,728)mul(633,505)@ -(?mul(176,469)*%what()>what()who()@{+do()'mul(117,634)-?(^^%:mul(234,514)where()@%mul(291,507)#from()*!*mul(668,282)@&)>,:select()>{%mul(195,300)-why()select()+&~>/^from()mul(801,834)why()</when()<&]mul(265,493)$what(382,576)#(+#']mul(590,771)%/mul(716,564)#}'mul(359,60)*~];#]mul(197,425)who()+^^?[:@[mul(752,102)]mul(271,88)mul(933,166)why()@,$^+?mul(343,220)+'what();mul(309,990){from(665,45)why(){ when(){ mul(782,953)+,:who()@]*mul(779,796)select()mul(616,478)&]>~mul(463,630){*, from()$}:@mul(280,83)when()[mul(358,910)[;'why()where()mul(242,569)from()#<>from()&mul(553,455)%who()<when()where()[mul(567,429)what()mul(257,307)}<don't()what()>)mul(284,63)%%*+?mul(437,226)* }how()when()~%'mul(57,491)]select(918,666)where()$when()why()'from()?]mul(321,301)'~:mul(619,356):mul(78,106)what()}!+~mul(609,442); $where()$who()mul(996,918)mul(217,653)@##:#mul(998,408))~<#where()from()who()who()what()(mul(305,980)-~(:>where();when()#mul(721,412)how()'< { mul(143,735){:]why(){#),@mul(670,301)$when(),}why()]?why(839,544)mul(120,681){when()$[?@-)mul(805,510)>from()))when();?'#mul(104,633)%<$%}why()mul(555,387)@$+mul(850,237)!^where()<}from()select()from()<@mul(298,559)who():from()+what();mul(556,540)$%<&(%don't()$/':'*)(mul(976,624)!~*/%why()mul(790,645):~^from()[{+*!mul(153,86)+select(){#!from()how()$mul(980,956)>from()select()}<}@}?~mul(151,20)select()mul(703*(){+]who()what()mul(827,322)+](}mul(531,132what()where()+mul(933,2){&$how()%#;]don't())[]mul(845,519)how(),]when()^mul(518,563)#,++$#mul(500,591)(#/what()where()how()from()mul(243,908);mul(574,691)/who(),who()how()&mul#{where()when()]!@mul(534,43)}do(),}/from()when()~{&@mul(92%what()~}mul(496,669)^(!+ ^~mul(28,334)mul(621,688)]mul(627,561))mul(206,37)]~^&mul(288,740,<@mul(540,77)<&:who(594,229)&'*who(){mul(923,453)mul(733,228)where()how()mul(104,17)/!why()~what()*@}mul(500,830)#'(&%{select()*?mul(301,211)]>@@,mul(21,358) ?mul(285,542)how()from())mul(361,19)(who()%}select(){*mul(362,324)<[]'&when()'mul,why()mul(352,273)mul(742,91)>mul(624,723)) ;@+mul(14,149)(from()%%,(mul(547,492)~+mul(712?@@@&{{mul(972,531)
]&%where()~}who()[how()]mul(602,51)how()+&>,{>] #do()from()~{,*[-mul(862,742)how()why()]%mul(432,72)what(){:do()%@!}-mul(663/+,what()--(&?mul(384,302)'@(mul(649,348)+from()%mul(184,596)~+}~mul(719,53)mul(634,179){-:where()mul(684,320where()when(395,300){who()how()^/;where()mul(849,756)!mul(530,108)#*+}what()^(]select()mul(333,615)[why()%?]~$how()mul(314,366)}where()mul(222,364)<){*[mul(449,95){:who(844,554)<;why()$who() mul(831,201))$mul(408,650)who()what()}<[do()~how()select()!]'why()<when()mul(478,641)what()<mul>]how(289,983)* <+%&mul(836,460)%mul(339,868)why():from()from()%mul(91,296)!+^,*when()who()from()-$mul(6,37)when()when()mul(69,574)who(),from(),how()mul(431,678~+how()]mul(644,184)-(?why(571,97)])why()from()mul(516>select()mul(67,86)+~%^!~what();mul(526,440)!+>?<:&mul(81,534)&}'mul(64,25)[-;mul(828$<>*mul(157,667)@[ *who()mul(356,285)select()(~*do()how()';why()&^?mul(165,944)select()mul(980,979)<:!~%mul(15why()$ mul(109,665)&-!why()]<'&mul(887,673)]mul(906,700)#mul}@-where()/{{ -mul(935,960),)''[{mul(533,431)what())'@mul(63,509)@why(464,997)$]mul(164,971)select()~where()how()#>' when()>mul(301,62) +;'+what()}!->mul(722,492))!'mul(262,457):@when()-/mul(902,705)~#(mul(640,550)/*$$#select()where(905,349)!&&don't()when()mul(998,104)select()from()select()'when()mul(37,27)!where()$:do()}mul(160,45)mul(716,642~,{+&+!}[}mul(281,768)who()-?;);%mul(270,620) mul(793from()(![(! : who()mul(481,293)?mul(264,360)where(){from();(select()~!from()mul(748,940)[~]why()$[+how(709,453)mul(590&!+*why()]when()mul(182,631)(how()?(select():;&]{mul(83,366)%when()when()&mul(878,366)why()[:,]mul(77,997);%/$&%]mul(827,204)mul(919,654)>,where()%+mul(678,952)who()@select()}*(mul(344,894)where()mul(408,29)#*!{}*~where(906,182)mul(144,162)!&#select()how()&why()~*#don't()-()]~:how()mul(803,649)]@?#;mul(170,978)mul(263,974)!@why()$how()@mul(155,265)&/%^/mul(571,825)$where()mul(507,171)from()^(~*mul(437,680)from()who()>select()}mul(332,921) where()mul(218,74)})from()/mul(470,570)why()@?who()don't()@({*mul(931,767)mul(486,567):&])%/{]%mul(901,942),' ]why()^where()do(){#,what()mul(331,184)how()when()how()*{:^){mul(339,48){'(what(545,390)mul(818,891)who()mul(828,226), how()where()'#,%?mul(798,324))<how()mul(145,827)mul(256,218)who()?};when()/^mul(125,982)!%mul(274,98)}%what()-:who()},;mul(748,186)(()when()?where()why()<where()do()<%where()mul(556,171){>';mul(337,760)[#mul(350,889)~#how()mul(859,480){}^?&select()where()do()~<mul(808,237)$ % [#mul(218,295)mul(583,684);from():,from()+&-mul(628,340)[why()}why()?how()/,'mul(639,874)^}who()!why()mul(607,392)-&who()@+what()%mul(263,676)+%:]{ :-select()mul(166,500)/mul(711,477) : {how()<mul(939,832)'+<{!,when(),?)mul}[what()where()+:-,from()mul(457,751)&from()+why()mul(219,492)^/$! $from(832,913)@+!mul(892,437)+[>); who()^mul(640,455}why()#mul(744,51)'[who()/> select()mul^where()select()^}^mul(450,596))select()what()}&%;?mul(218,957)+*who(),}do()from()^} when()+[select(938,490))select()mul(406{how()(+who()()select()mul(329,937)&!mul(693,766)<{+}<[@mul)]%why()when()){~[ who()mul(888,144)~$:,mul(517,97)@) ~mul(394,320)why()when()who()(,%mul(761,855)
mul(22,362)('from(886,421)]mul(730,655)[@,how()(mul(692,165)]&$when()!}from()%mul(481,375)where()~mul(954,570)?why()-+mul(338,656)who()~ <}from()mul(616,31)where()/]:select())?from()mul(113,2):?$mul(295,905)];mul(410,181)@%${^how()>select()where()-mul(779>+what();^who(),>)mul(599,200)%~][select()>+>mul(486,481)*!who(693,495)-$mul(237,686)? how()! -@#do()#<(where()-&'>&what()mul(321,434)}@what()~/from()do()?who()$where()mul(328,792)select()how()mul(82,296)#</ why()what()}mul(859,169)[>,who())/when(637,168)mul(465,709)mul(208,775)^[@when()>>##<>mul(379,29)%mul(826,43){when()?who()*why()do()&[):@mul(411,966)^mul(24,557)<;where()mul(391,794)#;mul(592,819)+,}'%'mul(210,928)%mul(29,613);$who()why()!]who()mul(56,646)*@]-{~+:mul(425,457)>mul(896,578)%(how()](*where()when()select(237,23)mul(895,482)~<{mul(432,547)who(471,124){mul(483,785)*mul(422,876)^>& ;(^where()~#mul(709,114)(:;where()select()?%mul(263,276)&?;from()&&~(mul(113,694)who()mul(228,70): >[:@ ;@mul(707,104);:mul(423,229)&$[]>who()mul(194,895)><&&when()%%mul(836,144)<^!~)/;#who()>mul(786,723)?!#[mul(287;why()mul(734,761)!who()/<)mul(520,746)where(){!>>select()how()mul(185,986)mul(566,786)why()when()[~do(),}mul(188,610)/+^%<why()mul(784,533);-;?#/when(743,88)mul(841,352)from()why()how()+/!<mul(728,38);<why()from()>-how()[mul(671,105)*[}[mul(403,996)mul(214+($?{when()mul(268,651),[>mul(660,864)%-/how()->([~mul(769,53)?from(197,675)^[-mul(83,519)where()select()don't()[:from()@{who() ?mul(305,335)[when()when();where(751,621)what()mul(395,86)how()?,who():>mul(349,362)how()?*select()when()from()who()where()''mul(414,725)*)when()select()]+mul(180,197)$who()why()&%'}mul(531who()#{mul(370,295)who()%mul(121,586)*^^%?>{,when()mul(944,189)&[/)select()>&^mul(222,28)@</<mul(752,302)}!<why()'$where()?,mul(974,242)}>!where()'mul(449,827)^[mul(289,78)$how(287,947)mul(337,811)why()''-what()[/when(370,472)from()>mul(865,636){#mul(524,198)why(714,875)!*%mul(181,23)^)why()?:what(630,704)+}mul(569,165);when()')where(597,70):$where()why(),mul(15,411)* ) &don't()mul(124,709)$;/[+select()(</mul(99,652)mul(53,14),select()where()mul(380,904)^}!?**[@when()mul(491,229)$#where()mul(245,344)select()select(){mul(297,527)'<from()/-,>{mul(50,277))*;+*<#do()!@mul~mul(19,630),,,*+{mul(404,379)mul(72,663)when()don't()where(221,302)from()^>mul(942,445)+^from()]from()*{)mul(83,601)-+what(): where()what()from(),mulwhy()where(856,731)&/+mul(777,574)!+when()<where()why()'>don't()*^<what()from();>mul(680,66)how()$mul(361,449):,how(766,248)#}&}[mul(869,603);;where()what()mul(385,816)[!' <-~from();mul(298,605*<mul(189,109)from()+/)!:mul(451,205)mul(949,138)from()+# $;}mul(356,99)who()*#-)':mul(95,448)who()$@who()-%&mul(167,343)mul(300*~%who()$(how();}])mul(919,379)>from()^mul(573,375)when()@(where()%mul(871,907)mul(718,918)?mul/~ ~what()-!select()~do()why():mul(682why()]mul(585,886)(,?+*?%!mul(684,834)what(786,470)mul(443,590))where(228,285) !/%?mul(815,879)#!/usr/bin/perl@mul(444,941)$select(687,764)%'(where()>-/mul(180,328)
[/:@how()*what()!+mul(911,368)?/what()~(+]mul(843?$,who()mul(865,234)@]/-from()mul(397,906)^mul(806,349)]how()where()^)+%select()when()~mul(827,131)]don't()@+/mul(44,818)[,<,mul(295,441)what()/select()]^mul(756,90) [mul(67,416){mul(230,994)select()how()who()/mul(66,226);<~!when()mul(325,467),mul(6,370)mul(619,21)~<what(761,805)who())+?;^-mul(5,165{don't()how()who()#,mul(713,804) mul(737,356);mul(905,649who()what()mul(139,324)~from()mul(502,936)when()-&select()^']]who()mul(404}>mul(699,668))^<from()%!%>:mul(755,644)<%?#)mul(46,923!mul(730,880)]~]how()-why()'&mul(952,543)from()<what()what()where()>>!-mul(123,880){(<when()<mul(425,371)from(),how()+?]-*!where()mul(425,817)?!mul(668,3) who()mul(785,430)*mul(607,686)?] $~mul(979,796)]/@'why()mul(244,801)+when()how():mul(311,17)@:,#-why()($mul(486,732)mul(480,165)mul(153who():when()&~)who()$mul(662,582)<((what()* {/(&mul(894,455);;(how()what()[>mul(555,437)*mul(692,73)&*when()~>mul(465,602)(mul(471,204){%from();don't()$mul(945,735)from()select(520,626)>@who()]who()mul(615,73)):(;^^when(793,925)*&do(){mul(431,683)*+#select()where()from()?+mul(254,617)#%where()>;%don't()$who()#how()^[how()why()*mul(907where()select()(!:'!?@mul(208,995)}/:when()how(415,229)^-'from()mul;mul(22,79),']^?(mul(583,536):mul(355/-where()?<mul(281,314)how()^!+<;>~%,mul(990,358)//+&how() do()?who()%!}]mul(603,599)@mul(285,652){&@@mul(808,857when()when()%select()/'$@mul(585,541)from()@mul(136*#from()@mul(710,522) #*when()*}/mul(801,485) >/mul(393,477)where()(mul(13,599)what()when()(*%>@?];mul(808,562)>mul(407,85)mul(244/$&!+where()mul(67,663)<from()-{where()% where()mul(629,684){}#^)-why()where()+mul(79,607)*don't()'from(27,368)*where()<#^mul(697,649)/(why()~from()*mul(448,917)mul>-mul(934,570)]mul(857,473)who()mul(585,495)where()mul(45,904)!when()where())-:mul(747,283)why()#where();what()how(){'from()mul(405,574)[,?what()why()-([mul}where()select(450,140) /<mul(198,934)when(394,203)why()<']@,mul(299,635)>@who():<mul(629,260)&!/!who()mul(360,191)select()#*'mul(409,799)select()}} *from()*,mul(902,917)do()where()why()%}}]+mul(548,522)^]how()->@who(),>~mul(104,734)$]#-#who()mul(760,886)what()<where()[#mul(150,972)mul(276,427)from(729,212)where()% {!mul(534,660)when()-?mul(406,3),!%*why())mul(990,129)how() what()mul(532,895)how()when()mul(869,39))/;->&where(352,510)->(don't()mul(863,264)$<)where()*/(@'mul(756,795)^)]mul(278,155):&!%$select()mul(189,750)[$#-/mul(549,580))^how(152,70):$mul(28,530)-],;]mul(33,157);!/+?what(253,786)%what()mul(841,40)+&when()why()^mul(898,936)!])mul(891,523);>mul(312,16)@how()*where()'where()<@?mul(967,420)/}why()~,mul(581,636)/ [mul(673,139)who()>mul(578,980):,<what():}{&: mul(605}^-+~]'@$ }mul(229,41)#@)+mul:mul(447,836)how()*%*what():;['*mul(672,963);what()mul(287,244)%;+<%{@mul(448,425)//+~([who()mul(871,92)]}?++[--%*mul(42,503)#?[{$^}>%mul(75,107)+)how()-mul:/where()why()mul(315,687)!{%'what()mul(110,111)+ #:%!mul(731,760)
(+&mul(887,468)$::)],mul(765,973)'from()from()*mul(810,344)?what()mul(768,468)~'+)select()where()(select()where()$mul(576,358)%??'mul(41,789how()when()&-mul(606,191)!when()'~mul]]how():;~{how()mul(15,34)>%%*^how(54,122)$@mul(739,223)how()~*@!don't()]:{~'@>why()<mul(929,311)(%@;mul(949,785)>-]&how() **;}mul(900,428)select()]$'mul(874,363)what()@mul(892,45)^*+mul(387,178)?<how()mul(383,479)/@#who()/)do()^}where(662,769)~$mul(845,224)$from()mul(60,887)mul(773,136)%^mul(436,490)%+mul(283,346);?mul(77,681)^##mul(556,520)$how()(&^how()select()) who()mul(418,701)!^:},where()/%mul(871,886)when()[mul(409,599)*from(463,269){from(324,295)from()who()mul(790,739)mul(677;why()}^when()how()+from()don't()&*%,why()#!how(252,857)-?mul(728,703)how()who() ')^from()'how()^do()[mul+!@;~select()select()mul(108,547)select()mul(96,190)];,{what()/when(742,998){})mul(632,699)how()'(what()when(),^mul(917,127)where()^()<mul(763,236)/^@+(when()^!%*mul(270,488))?what(116,413)!?:mul(922,831)$,who()@!*(>mul(823,845){where()mul(854,982);;/how()-why()mul(899,363)[where()who()what()>$]['do()<'how())mul(201,507)select(): >select()select()what()/where()*do()}@when(392,773)?mul(231,610){- why()*from()when():select():mul(334,751)from()how()~+who()-mul(811,647){^mul(116,805)^where()@}mul(691,631) when()&%from(),@^mul(336,461) ,what())who()when(540,382)'mul(549,430)%]from())@mul(339,808)?mul(264,497)'when()what()~who()~@how()$+mul(965,916)('who())%~from()from()%mul(776,506)/select()mul(385,184)*##select()mul(691,451)]$$mul(303,437);!when()&/<>]^mul(524,315)#^)mul(42,992who()}&-select()mul(902,182)(!''where()'+mul(48,755)@~what(644,7)$select()&%who()-mul(629,650)!^mul(822,985){/select()why()where()!who()%%mul(102,630)why()-{don't(),mul(166,527)'where()mul(245,921)select()-select()mul~>select()'%who()<+,mul(795,941))%$,what()where()>mul(414,585)from(26,999){mul(293,208)when()?#?<!who()mul(781,159)/#do()select()mul(409,682)/select():who()mul(565,948)mul(903,713):how()>mul(99,672)why()(select()+]when()mul(300,836)[<mul(129,851)mul(545,309)why(388,433)@~/mul@how())&*mul(466,194) };;@what()who()(mul(213,565what()why()how()#%,<where()mul(844,768))&()]}-<why()+don't()/};'</&mul(134,385)mul(176,788)[-]]mul(111,769)[;{mul(796,855)when()?$who()?,;/$mul(800,759)&what()+why()<how()*mul(20,432)why(611,106)where()* /]?$%do()who()/!^mul(691,133)who();^(:>}where()/mul(425,328))mul(702,532)?#(mul(45,856) ]/$mul(220,616)^when(){^* ?where():,mul(931,398)$;-mul(471,783)why(){:who()what()]>mul(276,590)select()when() /$(^<'mul+*&do()&)>;<mul(675,852)~;mul(128,569)!who()from(306,117){-what()mul(868,808)('why()mul(71,753)(why()~mul(250,975)?how(){;select()->mul(785,175)mul(131,573),]from():(mul(833,970)! ><<(mul(496,285)&from()~select(){mul(296,374)?[#&from()from(){{when() mul(718,993)@who()&>mul(639,708)why()where()/-<{[ how()&mul(187,633)#:]:?mul(872,562)/who()[-who()(>$%}don't()!{:*mul(82,739)select()]+ ?$?@when()mul(830,429)<what() !#^where(985,664)don't()$:,;}}where()mul(920,165)/,&:#:+'?^mul(979,57)what(740,146)},<;:[+from()-mul(481,113~when()( ~why()[,how()don't()where()^from()%from()mul(845,384)]why(),mul(884,267%what()how()why()where(358,396)mul(795,514):<what()select()'when()-mul(415,325){select()]where()&mul(876,97)@}#@^[mul(204,271)
$'do()mul(983,642);>+;:$>mul(390,30)(&@%&'} {%mul(208,444)mul(854,207);:@where(774,785)mul(120,222)mul(885,372)$ '<[mul(476,77)select()from()mul(305,758)}#[>;,@where()~<mul(999,999)!&?mul,why()when()how()&from()+why(610,462)mul(28,578)+-,&[>how()(why(){mul(2,348)%@(~}how():mul(148,153)where()^:'why(907,374)+]mul(375,986);{]where()(!@what()]:mul(254,345))*)where()select()@?^#what()mul(94?what()!@when()select(),$?select()mul(966,420)select()/+{[;!(>what()mul(688,942)&]'^)'#!mul(363,573):$,from()select()mul(260,171)#mul(116,728)'(?mul(51,309)[!^mul(400,128))select()$-^how(740,875)where()@from()mul(319,269)select(844,13)who()#/mul(431,542)mul(794,709)- who()*do()*:)select()mul(12,579)@%])[what()&/mul(361,146)why()>:'-^&;mul(465,576))select()@%mul(101,476)who()%}' [#mul(13,38);:how()from()from()#}#&-mul(30,350)what()/+select()+]don't()!#:@;,[when()mul(303,869)when()where()]/'^!^ mul(938,614) {who()?!what(363,886)mul(439,873)>who()what()-+when()where()[why()mul?from()what()> where()who()!mul(510,226) {how()mul(353,498)]select()why()?[why()'*}(mul(709,649)~?select()*($>[from()mul(144,790)!%!mul(653,286)[<$)*+from()what(),from()mul(373,21))] select()?;+mul(601,965)what(), ,:mul(970,654)~why()(~*<+&mul(19,700)what()$what() <{<mul(850,749)when()/select()#;*&mul(561,720)from()mul(439,509)who()from()@}/,mul(390,146)who(888,573);&;@+:mul(658,554)don't()who()*how()}where(){+how()&mul(769,268)^from()?;when(518,375):'mul(570,233) )[?from()$ *mul(183,547)what(277,464) !;;mul(490,847);+)#?*where()why()how()mul(23,467)(:!mul(305,784)mul(237,433)+~[who()<:-$mul(842,162)?>({,)'how()-@mul(629,950)how()when()who()what(623,556)mul(891,30)(!don't()>who()who()%+ [)when()mul(808,962)+?</}*,&^@mul(90,782)[[mul(944,224)mul(442,115)from()where();when()+mul(162,476)mul(689,801)%><({~$#+do()}what()how()(what()*-@mul(296,108)>]^+&mul(592,463)~['%%& mul(733,447),#how()where()select()how()who()>mul(496,360)(&%*{+what()!mul(615,52)#<why(665,627)?;]$:[mul(865,200)') ')}@{}@mul(275,101)where():@</<#, select()mul(693,721)/who();from()>&*,mul(807,92)&]mul(544,513){/+who(868,321)from()mul(164,401)how()][%what()where()(+[>mul(815,703)from()(when(),*select() {<mul(20,330)mul(78,579)from(){{where()]+-*#&mul(141,703)mul(832,264)$/do()+/##>what()mul(437,310)who(226,447)mul(45,389)#&who()<mul(672,921)what()mul(9,140);)mul(19,667)};]+@why()[,)(mul(256,632)#!'!$;$where()how()mul(648,453)+'who()(?!}mul(453,188)!from()$ ]when()what(326,8)mul(96,408)mul(291,868)%~where()when()]#&^%mul(899,304)'>*[mul(659,114))what()#:+[%mul(686,605)<',,{who()^@-mul(127,293)& ;@mul(608,869)?%+*select(74,799)who()when()/^select()don't()where()$why()>why()when()%mul(752,203)-}'{^#;[%^mul(307,633)%when(970,30)mul(265,251)what(42,790)#mul(188,777)<:*& when():/when()?mul(94,809)mul(621,327)+;/*,,[select();~do()^(when()<what(554,336)mul(178,771)+%<{;;when(),/>mul(896,407),$mul(280,745)*:){^~:({where(796,413)mul(262,847)why()&&<where()$~}#mul(792,379):$!-!select()/]mul(199,174)-}!%#]mul(639,740)'select()@from()&[#

140
dat/24/re/04.txt Normal file
View File

@@ -0,0 +1,140 @@
MMMMAXASMSXXMMSMXASXMSSMMMAXXMAXAMXSSSMMSMSSSSMMMSXMSSMMSAXMASMMMSAMXSXSMMXMSMMAMAMXXSXSXMAMMMXSSMMSSMMMSSMMSAMXMXMASXMASXXSSMSAMMXMASXMMMXA
AAAMAAXMAMMMSAMMXMAXXAAASMSMSSMMXMXXAAAXAAXAAAAXASASAAAAMMSAMXMAXSASXSAAMSAAAAXXASAMXAAMAMASMMASAXMAMAAAAAAXMASXMXMAXAMXMMXAMXMMSSMSAAXMASXM
SSXXXAMMAMXAMASMMXSAMMXMMAXAMAMMAXMMMMMSXMMMMMSMASMMSMMMSASASAMXMSAMAMXMASMSSSMMMMAMSMMMASMSAMXXMMMAXMMMSSMMSAMXSAMXSXSAAMMMSAMXAAMMASXAAXAS
XMXAXMAMMMMSMSMXAAXAMXSXMMMAMAASASXSMAMXAMSXSAAMXMMAMSMMMMSASXSMMMMMAMXXXXAMAMAMASAMAAAXXSASXMMMSSMXMMAXAAMMMMMMSASASASMXSAMMXSMMSXSAMXMMSMM
SAAMAMSXSAMXMMXMMMXAMAAXSXMXMSXMASAASMMMSMMAMSMSMMMXSAXASXMXMMXMXAMSSSMMSMMMAMSMMSASXSMSXMXMMXSAAMMAASMMMSXMAXAXSAMXSXXXAMASAASXMAAMXSXAAAAA
XAMXAMXASXSASXMXMMSSMXMMXMASXXXMAMXMMXAAMAMXMAXXXXASXMMMXAMSXSAMMXMAAAAAAXXSSMXAXSXMAAAAXSXMXAMMSMMMXXAAXAMSAMMMMXMAXAMMMSMMMMMAAMAMAXMMXSSM
XSXSSSMAMAMASMASXXAMMMSAXMASAMXSAMXMSSMMSSMMMSAMXMSAMAXSSSMAAMAXAAMMSMMASXMXXASMMSAMXMAMSXASMMSAAAXMXMSMMMXMAXSAMAMSSMMAMAMAXMSMMXSMMMMAAMMM
AXAMXAMSMSMASASXMMASAAMMMSSMXMAMAMXXAMXXXXMAAXAMAXXMASXMAMXMASMSSXSAMXXAMAMAMMMXASMMXXMMSMMMXAAXXMXSAMAXXSAMAMSAMAMXAMSXSASMSAAXMAMASXMMMXAM
AMAMSAMAAXMAMXMMMSXMMASAASXMAMSSMMSMMSSMXMXMMSSSXSAXXMAMAMXXXXAAAXMASMMMMSMSXSMMMMMMMSXAXASAMMSSMSAXAMASAXASMMXMSMXMXMAMMXSASMMSMASAMXXSMSSM
MXMMXASMSMMSSSXMMMXMASMMSMAMMSAAMAMAAAAXAAAMXMAAAXAMXMXMXXMSAMXMXMMAMXAAAXMMASMSXAXAAXMMSXMASAAXAMMSMMMSASXMMSAMAMXXSSSSSSMMMAAAMXMMXXSAMAAM
SASMMMMAXMAMAMMXAMAMXMXMAXAMXMXSMAXSMSSMMXMSAMMMMMSMSMASXSSMSXXXXSMSSSSMMMAMAMASAMXMSSXXAMSAMMSMSAXAXSAMAMAAXXAXAMMMMAAAMMAMSMMSAMMMSMMAMSSM
SXSAASMXMMXSAMASMSMMMSAMMXMXSMAMMSXXAMXXSAXSMMAAAXMAAASMMSAAXXSAMXAAAXXAXSAMXMAMASXMAAMSAXMXSAMXXMMMSMAMMMSMMSSMMSAAMMMMMXAMAAXXXAAAAMSAMXAA
SAMMMSAMXAXMAAMAXAAAASMSSSMSMMASAMXMAMMAMXMMMSMSSXMXMXMAXSMMMMSAXMMMMMSXMAMXXMASAMAMMMMMSMXMAXMSMAAMAMXMAMXMAAMASAMSSXSASAASMSMSMMMSXMAMSSXM
MXMASXMAMASXSMMMSSMMMSXAAAXAASXSAMASAMXXXAMAAAXAXASXXXSXMSAXSASMMXSMSASMMSAMXXAMASXMXSAAXXSMASXSASXSMSMSXSAXXMXMMMXMAXSAMXMMMAAAAAMMMXSAXXAS
SAMXSAAMSMMXAAXXMXXSASMMSMMSAMXMASASMXXMSXSASMMMMAMAMMMMXSXAMXSMSAMAMASAAXAXMMSSMMAAXXMMXAXMXSAXAMASAAAMMSASAXAXMXMMMAMAMXSASMSMSMSAAAXSMMSS
XMAMSXMXSAMSSMMSMMXMAMXXMMMXMXASXMASXSAMSAXAMXMSASMSMAAMXMMXMSXMMAMMMMMMMMSAAAXAMSMMXMSMMMMMMMMMAMXMXMSMAMAMXSSSMAAAAXMSMAAAMAXAAAAMMXSASMAS
MASAMMMAMAMAASAAAXAMMMMXMAMSMMAXAMAXAXSMMMMXMMXXAMAASXSMAXAAMXAMSSMXSXMMMAMMMMSAMXSSMMSAMMAXXAASAMAXAXAMXSAAMXMAXMSMXMMMXMMAMXMMMSMMMXSAMMXM
AAMMAAMXXAMMSMSSSSXSAASMSSSMSAASXSMMSSXXAMAMMMMMXMXMXMAXXMXXSSXMAXAAXASMMSSSSXXXXAMSAMSAMSSMMSMSMSASMSAMXSMSMASMAXAASMSSMXMSSXMSAXAMXAMAMXSS
MAMXXSXMSMMXAXXXAMXMXMMAAMMAMMXMAAXAXAMSMSSXAAAMXSXMSSSMMMSAXAMMMSXMSMMAAMAAMMMMMASXXMMSMAAAXMMXXMASMAMXMXMAMXSASMMXSAAXMAMAMAMMMMMMMXSAMAMA
SSSSMAMMASXSSSXMXMASXSMMMMMAMXSMSMMSSMMXXAMXSSSMAMAXAAAAAAMXXAXXASAMXASMMMMMMAMAMMXXAMMASMSMMMMMAMSMMASMXMSASMSAXAMAMMMMMSMMSAMASXXAAXMAXSSS
SXAAMAMXASXAXAXMMSMSAAAXXMSXSAMXMXMXSXASMXSAXXAMAMAMMMMMSXMAXXMXXXAMSMMMMXSASXSASXAMXMXAMMMAAAAMXMXXMASAAXMASAMAMXMASXSAAAAASASAXMXMSMSMMMAX
MMSMMASMAMMSMMXXAMAMXMMMSAAAXMXAMXXAXMMAAAMASXMMSSXXMASXXAMMXSASMSMMMAAMSASASXSASMMXAXMAXAXSSSMSAMMXMASMXMMMMXMMMMMMMAMXXMXXMAMMSMSAAMAMXMAM
SAMXSASMAMAXAXMMSSMXASAXXMASXMSXXMMSSSXMMMSXSAMAMMXSSMSAMMMXXAASAAAASMMMMASXMASAMXXAXMSMSMMAXAMSXXAAMAXXMXSMSASAAXSSMMMXXSSSMXMXAAMSMSMSMMSM
SASAMMSXSMMSMAMAAAXSAMXSAXAXMAAXMMXMAXXXMXMMMAMSSMAXAAMMMASMMMXMMSSMSAAXMAMXMAMMMXXMSAXAAXMXMSMMAXSXMASMXAXASASMSMAXAXSXXMAXASMMMAMMXMXXXMAM
SAMMSAMXMAAXXAMXSSMMAMSMMMMSMSASMAXMMMMMSASAMSMXAMXSMMMASMSAMMMSMMMAMMMMAXMAMAMAMMXMAMMMMMSAMAAMMMAAMMAMMMMMMXMAXAMMSAMXMMAMXXXMSASXAMSSMMSX
MXMASMMMSSMSMXXMAMXMMMAAAASXAMSAMXSMASXAXMXMSAMSXMMMASXXSMMAMXAMAAMXMSMXMAXXMSXMAXAMSSMXAAMMMMMMAAMXXMASAMAXSAMMMXXXMXMAXMASXAMXSASXXXAAAAXS
XAMXSSXAAAXSMSMSAXSSSSSMMMAMXMAXMXSXAMMMSSSSSMXMAMASAMSSMXSMMMSSSMMAMAAASMMSMMASASMXAAMMMSXXASMSXSXMXSMMMSSSSMSMXSSSMMSMXSASMAMAMAMMSMSSMMMS
SSSMXXMMSXMSMMAMMMMAAAMXSXMMSMXMSAMMMSSMAXXXMXXSAMMMMSMSAAXAAMAMXMSASMXMXAMAASAMXAXSMSMSAMAMAAAAAXAMXMXXXAMXMXAXMXAASAAAMMMSXAMASXMAAXAXMSAS
XXAMAXMAMMMSSMXMMAMMMMMASAXAAMAAMASXXAXMMMMMMAMSASXSMAAMMMSMMSMMAMMMSASXSSSMMMXMXMASAAAMASXMMMMSMMAXXMAXMAMSMMMXAMMMASMSMAASMMXXSAMMSSMMAMAS
AXAMMSMAXSAMXXMXSXSAMXMAMXMSSSMSSXMXMASMMAAAMAMMXMASXMMMAXAMXAXMASXXMXMAAAXXXXXXASAMAMMMAMMMXXAAXXXMAMSSSXMASXMASXSMAXMXXSSMSMASMXSSXXAMMMAM
XSAAXXMAMMMXSAMXSXXMMAMXXSAAXXMMAMXXMASASXSMSXSXSMXMASMSSSMAMSMSAXAASMMMMMSXSAXSXMASXMSMSXXXAMSXSASMMMXAAXSAMXXXAAAMAMXAMMAAXMXSAAXMMXXMXMAX
MAMAMSMSSSXAXMMAMAAXSXSXAXMXMSAAMAXMMASAMAMXSAMAXMMAMSAAAMXSXMASASMMMASXSAAAXXMSMSAMAXMAXASMXMAXMAAAAXMMMMSASAMXMSMMAMMSXSMMMMMMMMSAMMAMSSSS
XMMMMAAAMAMASXMASMMMMASMMXSXAXMMXXMAMAMMMSMAMAMSSMMAMMMMSMAMAMMMAAXAXSAAMMMSXMASAMASAMAMSMSAMXMXMASAMMMMAXSAMXMSXAXXASMXXSMMASAAAXSAASXMXAMX
MXAAXMMMSMMAAXSAMMAAMMMASASMSXSXAXSASXSXAMMSSXAAAASXXSAMAMASXSXMSMSXMXMXMXAMXMASXMMMMSAXMASMMAMSXMAMXAXMAMMSMSAMXSXSASASAMASASMSMXMMMMAMMAMX
XMXMXAXAMXMXSMMASXSSSXSAMMXAMASMSXSAMAAMASAAAMMSXMMAXSASXSASAAAMMAMXAMXASXAMXMASAMXAASXSMAMMMAXAAMAXSSMMMMMAXAMAXAXMMMMMASMMASAMMXAAXSAMXAMX
XSAMSMMXMAMMMASXMAAAAAMXSXMXMXMAXAMXMSMSXMMSMMAMAMMXMSAMXMAMXMASAAMSXMMAXMAXAMAMMMSMMSASMMMSSMSSMMMAXMASAXXSXMMSXMASXMXSAMXMAMAMXXMMXMAXSASA
SMMXASXXXAMASXMSMMMMMMMXMAMAMAMSMXMSXMASXMAXXMASMMMMMXMMXSMSSXXXMMMXMSSMMSSSMSMSMAMXXMAMAXAAXXXAAAMXMSAMASMXAXAMASAMXSAMXSMMXSXMSSMSSXMMSSMX
AAMSAMXAASXMXASXXXXMASXXMASMSSMMXAXXAMAMAMASAMASAAAMXAXSXMAAMMMMSMMAAAAAAAAAMXMAMXSMXMASXMMASXMMSXSMXMASAXASMMSXAMASAMXSAMASAMMAAAMSAASAMASM
MSMMAMMMMMASXMASMSXMSSXSMXXMAMAMMMMSXMAXXMXSXMASMSMSSMMSAMMMXSAAAASAMSSMMSSSMMSSSMAMXSASXXXAMAMAAAAXXSXMXXXAMAXMASXMMSSMMSAMASXMSSMMXMMAXMMM
XMAXAXASXMAMXXMASAAMAMMXXMASASXMAXAMASASMMASXMXMMXMAAXAXAMXSASXSMMMXMAXMXAXAAAAAAMAMXMXMXMMXSAMASXMMMMMAXXMXMASMAXXAXMMAAMXSAMAMXMMMXSSSMSAM
SSSSSSSSXMSSMAXXASXMASXSXMASAMASXSMSMMSAAMAMAMXMSMMSSMMSMSAMXMMMXMMAAMMSMSSSMMSSMMMSSMSMSAAASXSXXXXXXAMMMMAAMXXMAMSMMSMXMXAMASXMSAAMMMAMASAS
MAMAAXAXMMAAXXMMMMXSXXAMAMAMAMAMASAAAXMXSXMXAMAMAAMMAMXAMMXMAAAAAMSSMSAMXXAAXAXXMXAAMAAAMMXAMXMASMMSSMSAAXMSSMSMMMSAAMMMSMASXMXAMSMSAMAMASXM
MAMMMSMMAMSSMSASXMASAMXXAMAXMMASAMMMSXMAMXMSSSXMMMMSSSMMSMMSSSMMXXAAAMAMSMMMMXXAMAMXMMMSMSMXSAMAMAAAAXSMXSAAAASXXAMMMSAAAXXMASMSMXXSXSMSXXAX
SASAAAAMXMAAAXMAAMASXXASXSMSXXXMAMSMXAMASAXAAXMMSAAXXXXXMAAAMAXAXMMMMXAMAAXSXSSSMAMXXSXAAAAASAMMSMMSSMSAAXMMMMMAMSSMASMSXMXMXMAAASXMASAMMMSM
SXSMSXXMSSSMAXXXXMXMXAAXMAAAAMMMSMAAXXXASAMMSMMAMASXXAMMSMMXSAMSMXSAMSSMMSMMAXAMXSMMMASMSSMMSAMAMAMMMAMMMXXAXAMXMAAMASAXXMAXMMSMSAXMAMAMMAXA
SAMAXAMXAXAAAMAMXMXXSMSXSMMMASAAXSMMMMAAXAMXAMMMSMMMMSSMAMSMMXSXAAMAMAAMXMAMMMSMAXAMSAXMAMXXSAMAXXXAMSMMMSMXXMSMMSSMAMMMAMAXSAMXMMMMAMXMMMMA
MAMAMMAMMSMMMAAAMSMMMAAAMXMSAXMMXAXMAMAMMAMSXSAMAAAMXAMMAMXAAMMMMMXSMSSMASASXMAMASAMMXMMASAMXMSMSSMAMXAXXAMSSMMXAMXMASXSXMAXMAMAMXMMMXMSSSSX
XAMASMSAAXAAXXMXMASXMAMXMAAMAXMXSMMSMSASXMMMMSASMSMSXMXSMSSMMMAMMSAMXAAMASMMASXMASMMMSXSASASAMSAAXSAMMMMMASMAAMMMSASXMASMMSXSAMXMAMXSAAAAAMX
SAXMMXMMXSSMSSMASASXSMSMSMSXSMSASMAXAMASAMAAASMMMMAXMXAMXXMMASASAMASXMMMAMAXXMAMAXAAAXMMXSAMXAMMMMXMXXSASMXMSMMSASXMMMMMAAMASMMSSMSAXMSMMXMM
AMSSMMSMAMMMAASXMASAXAAMXSXXAAMASMMMXMXMMSSSXXXSAMXMAMSSSMXSASMSASXMMASMASXMSSSMSSSMSSXSAMXMMXMAASXSMXSAXXMAMXAAMSMSASAAMMSXMAAXAMMXXAXXXAXA
MXAAAASAMXAXSMMMSAMXMSMSXMMMMXMSMMXAMMSXXAAMXMSXMMSAMSMAXAAMAXXMXMMMXMMAAAXAXAAAMAMXMAMXSASXSASXXSAAAAMAMSASXMASXSASASXSAXXASXMSAMXMASMMSMMS
XMSSMMSAMSMXMXSXMSMXXMMSAMXXMMMXAMXSXAAMMMSMXSAMSASXXMMSMMMSAMSSSSXMAXXXMMMSMSMMMSMMXMASAXMAXASXAMMMSXMAMXAXMASMXMAMAMAMXAMXMAMXMSXSAMAAAMSM
XAAAXXXXMAXAAAMAAMXXAMASAXXXMASMAMSAMXSMXXMASMXMMASAMXAMAAXMASXAAAASXSMSAXAAAAAAXMAMSXMSMMMMMXMMMXXXAXMASMAMSSXMAMSMSMAXAXMASXXAMXAMXSSSMSAX
MSSMMSMMXSSSMMMMXSASMMASAMMXXMXMMXMASAXXSXMSMMASMAMMAMASXMMSXMMMMMAMAAASXMSSMSSMSMSMSAMXXAAXMMMAXXSXMXXAXXMMMMMSMMAAXMASMSSMMMSMMMSMAXMAXSAS
AAAXASAMAMXMAAXSMXMSAMXSMMASMMMASMSAMXSXSAXMASXSMAMXASMXMAMMAXAMMMSMMMMMAMAXMAXAXAAXMAMSSMSMSAXSMXASXXMMMXMXXAMMMMMSMSXXXAAAXAAAXAMXXMMMMSAA
XSAMMSAMSXASMMMSMAXSAMMSAMSAAASAMAMXXAMMMMMXMMAXXMSMAAMAMMASASXSXAAAAMXMMMAMMAMMMSMSSSMMAAAAXSMAAXMASMAMAMXAMXSAASXXAMXMMSSMMSMSMAXMMXSXMMSM
XMAAASXMMMMMAAXXSXXSXMASAMXMSMMASXSMSMSSSMAASMSMXXAXMAXAMXAXAMMMMXSMMXSXMMSSMXSXAAAAXMASMMMSMXSSSSXMXSAXSXSMSMSMSSMMXMAMAMMMMXAXXSMXAAAAXAMS
XSAMMSXMXAMSSSMMAMASXSXMAMXXMXSMSAXAAAAXMMSXSAAAMSSSMMXSAMSMMMAAAXMAMASAMAMAXMMMSSMSSSMMMSXMAMAMXMAMXMMXXASAAXMXXMAMAXAMXXAAMXMSAMAXSMSSMMSX
MXSXAMASMMMAAXXMASMSXMASAMMXMAXAMAMSMMMSXAXAMXMMMAMMMAAMMXMASXSMSAXAMASAMXSSMSAMXXXMXXXAMAAMMMMMMSMMMAMAMMMSMSSMSXSXSSSSMSSXSAXMAMSMMAAXAXXM
MAMMASXMAXMMMMMSAMXMAMAMAASXMAMMMXAMXSAAMXXAAASMMMSAMMSSXAXAMAXXAMSMMXSMMXXMASMSASMMMXSASMSMXMAAAAXAXAMXSXAXMAMASAMAXAXAMAXMSMSMSMXAXMMMSMAA
MASXMXMMSMMXSAXMAXSASXAMXMAAAMSXAMXXAMASMMSSSMSAAXMASAAMXMMMSXMXMXMXAXMAXXAMXMAMASAAMAXMXXXMASMMSSMXXAMXSMMSMAMMMAMAMMMSMAXXMAXAAAMXMASAMMSM
SXMAXXSAXAXASASXSMMAMSMMXMASMXMASMMMXMAMAAAAAASMMMSAMMXSAMXXAXAXXAAMMSXMSMMMXMXMSMMAMAXSAMXXAXAXXAAXSSMXMAMXMSSSSSMXMSAXMMSAMAMSMSMXSAXXXAAX
SASMMMMMMMMMSAMXAAMAMAXSXMXXAXXAAAAAMMSSXMMSMMMMSXMASXXSMXSASMSMSSSSMAMAXAASXMXMMMMXMAXMAXASMSMMSMSMAAXXSSMXAXAAAAMAAMMMASAMXAAAAXAXMASAMSSS
MAMMASAMASAMMAMSSMMSSXMMMMMAXXMMSMMXXXAAASMXAAXAMMSMMMXMAMAMXAXAAAXMXAMMSSMSAMAMSSSSSSSSXMXMAAMAAAAMXMMMMASMSMMMMMMMSAMXMMAXSXSMSMSMXAAXXAMX
MXMXXMXSASASMMMAAXAXXMSMAXAMMSAMAMSSSMMSMMMMSMMMSAMAAXAMAMMXMSMMMSMMSXSAAMAXMXASXAAAAAMXMMSMSMMSMSMMAXAASMXXXAMMXMXMXMAMSSSMMAMAMAASMSSSMMSS
MSSMMAXMASXMAMMSMMMMXAAMSSMSMXMXAMAAAAAAMXXAAASAMASMMSMSXSXMAXSSXMAXXAMMXSMMMSMSMMMMMMMASXAAAAXMAMMXSMXMSXMMXAMMASAMSMSMAXXAMXMAMSMXMAAXAAAX
SMAAMXXMAMMSAMMXXAAXMMSXMAAAMXSSSSMSMMMSSXMXSSMAMAXAMXASXMXSSMAXAMSMMMMMXSAMXAAXMXSMAXSAMMMSSSMAAXMAMASMMMAAMSMSASASAAAMMMMSMXSAXAMXMMSMSMMS
SSSXMMMMMXAMASAMSSMSMAXASMSMSAMMMAMXMAMXXMMAXXXMMSSMMASXXXAMXMMMXMXASXXMASAASMSMSMASMMMXSAXAAAAMSSMMSMMAASXSXXAMAMXMMSMSSMAXSMMXSMXXMSMAMAAA
MAMXAMSASMSMXMAXXXAAMMSAMAMXMASXMSMASASXAAMXSAAMAMXMASAXMMXSAASAMXSAMAAMASXMAAAAMXAMXAAASMMMSMMMXAMXAAXMXMAMAMXMMXSSXAASAMXMAMSASMSXMAXAMMMS
MAMMXMSASAMXSSXMAMSMSXMAMAMMSXMMSAMASMSMMSAMMMMMASAMXXMAMAASXMXSAXMMMSSMXMAAMSMSXMMSXMMMSASXAXXXMAXSSSMMAMXMAMXMMAMASMXSXSMSAMXAMAAXXASMXSAA
MXSMAXMAMAMAMAMAXAAAAAXXMAMXSAAXXMMXSASMAMAMSAXSASASAXMAMAXXMMMXMMAXAAAMMSSMXXXAXSXSMMAASMMSXMXMSSMAAMMSASAMAMSXMASMXSAMAXAMXSMMMMMSMASMAMXS
XXAXXMMXSXMMSAASXSMSMXXASXSASMMMSXMXMAMMXSXMSAXMASAMAXSASMMXAASMSSSMMXSMMAAXAXMSMMASXMMXSAMMSMAXAXMMMMMSSSXSAMXASXSXAMMMSMXMAMAMXXAAMMMMAMAA
MSAMMXSXXXAMMMMMAAAMAMSMMMMXSXAAXXXAMSMXMXMXMSMMAMAMAMMXXAASMMSAAXAAAMXXMSSMSSMAAMAMAMMXSAMAAMMSAXSXXMASAMXSXSAMXMMMSMMXXAAMSSSMASMXSAAMASXS
XAAXMASAMSMMAMMMSMMMAMSAAXMAMXMSMMMSSMMMMSXXAAXMXSAMXSAMMMMMSAMMMSSMMSMAXXXAXAMSXMASAMAASMMSSSXAMMSXMMXXAMMMAXAMAMXAMAMAXSAMXAAMAXMASMMSASAM
MXAMXAMAMMASASAAMMXSXASXMXXMSSMXXAAXXMXAMMMMSMSXASASASXMAXXAMXMAMMAMMAMMMSXMXMMMMSMSMMMAMXXXAMMSMAXASXMSSSMMMMMSASAMXAMXMMASMSMMXSXMXAMXAMXM
ASXAMMMAMXMMAXMXSMMMMXMAMSMXMAAXMMMSAMSXXAAMAMXMASAMXSAASMMSMMSSXMAXSXMASASMXSAMXSXMASAMXSSMSMAAMXSMMAXAAAMXMAMSMSASMMXSMSXMAXAXAAAXSSMSSMMM
XAMMSXSASAAMMMSSXXAXSSMAMAAASMMMMXMSAMAXSSXSAXAMXSXMMXMMMAAMAXAMMSSMSASMSAMXAMASMMSMAMASAMAAXMSSSXMASXMMSMMMMMXXAMAMXAASASXMASAMXSSMMAAAXAAM
AMSAAAAAMMSMMAMAMSXMSASMSMSMSXMAXMAMAMMXAMASAMSMMMASXMSAXMSSXMASAXAASAMXMMMMXMAXAMXMASAMASMMMMXMAMSAMAXXXAXSASMSXMMMMMMSAMAMXMXMXXMASMMMSXMX
MXMMSSMSMMMXMASAXSMMSAMXAAMASXMMMSASMMXMASXXMAMAASAMXXSASXMAXXAMMAMMMAMASXSXSMMSAMXSASAXXMAAXAAXSAMASMMSSMMSAMAMMXMASMXMAMXMASAMXASAMASASMSX
XAXAXAAAAAMMSMXMMXAXMASMMSMAMXSAASASXSAMMMMMXSMSMSMMMMMMMAAMMMSSMXXSXSSXSAMAMAMAXMMMXMASXXMMMMXXMAMASXSAMXASMMSMMASASXMMAMXSXSASMAMMSXMASASM
SMSMMMSMSMMMASXMMSAMXSMXXMMAMAAMMMAMASASAMAMAXAMXXAAXAAAXXMXAXMAMXAAAASMMMMAMAMSSSXSXMAXMASMSMSXSAMAXXXXAXASAAXAMXSAMAMSMSAXAMXMXAXMAMMXMMMX
XMAAAAAXXMXSAMMAAMAMXXAMXMXSMXSSSMSMXMAMMMSXMMMXASMMSSSMSAASMSSXMSAMXMMXAMXXSXXMAXASMMMSMSMAAASASXMMSMMXMMASMMSSMMSAMAMAXXMMSMMMMMXMMAMASXMA
SXMMMSSSSSXMMMSMMSSSMMAAASAMXMMAMAAAXMXMSAMASAXMMMSAAAAASMMAAMXXAXMXSSSMSSMXAMXMAMXMAAXMXMMSSMMAMXSAAAAMXSMMXMAXMASASXSXSSXMMSXAASXSMASASASX
XAXSAXMMXMAAXAAAAAAAXSMSXMASMMMAMSMSMASXMASAMMASAAMMMSMXMASXMASMMMSAMXAAAAXMMAAMAMSSSMMSAMMXMAMXMASXSMMAMMAMSMMMMMMAMMSAXMASAMMMMSAASXMASAMA
SSMAXSMSASMMMSSSMMMMMAAMMSSSMSSXXXMAAMMASXMMXXXSMSSMAAXASAMAMXXAMAMAMSSMMSMMSSSXXSAAASXSAXXAMAMAMXSAMAXSMSAMSAMSMXMXMASMMSAMXSAAXMXMMMMXMMMM
XAMMXMAMXXXXXMAMMXMSXXMSAXAXAAAMSAXXXAMAMXAXMMMSMAAMSSSMMSSXMMSAXSSSMXXAMXMAAMAXSXMMMMMSAMMMSASXSAMMMXMXAMMMSXMAAASMMASAAXSMXSMSMSAXAAMXSXAA
MSXXAMAMSSXSAMXMMSAMAMXMXMXMMMSAMAMSSMXSAXSMMAAMMMSXXAAXAMMASAAXXXAAMSMSMAMMXMAXMAMMMSXMXSAASASAMXSXMMAMSMSASMSMSMMAMXSMMSMMAMAXXSMSXSMAMSMS
MAMXSMXSAAXXAAXXAMXXAMAMSMSMMMMMMMMXAAAAXMXAXMMMSXMMMSSMXSAMXSMSMMSMMSAMMSMSMMXXMAMAXMASAAMXMAMXMAMASXAAAAMMXAAAAXMSAMXXMMMMASXMASXSAMMAMXMX
SMMAMXXMMXMSMSSMXSXMASASMASAAAAAMASMMMMSXMSAMASAMMXAAXAAAXMSXXXAXAAXXMAMAAASASXSSMSMMXAMMSXXMMMAMMSAMSMSMSMXMSMMMXXXAMASXMAXXMAMMXMMAMSXSSMS
AXMASMSMSXAMSAXXMAMXXMXXMMMSSSSMMMMASXMXAMASMAMASASMSSMMMSSMAMSMASMSMMSMMMSMAMAMSASASMSSMAXXAASXXMMAMAMMMMMSAAASXSMSSMASXMSMMXSMMASXSMMXAAAM
MXMXXAAAAMMMMMSSMAMXSMMXSAAXXMAXMXSASAMXAAAXMSSMMXAAMAAMAXAMXMAMAAXAXAAXSSXXMMAMMMMAMAMAMAMXXMMSMSSMSMMSAMAMSMXMAAAAXMAMXXXAAAMASASMAAMSSMMM
XSXXMSMSXMAAAXAAMAMAAAMASMSSXMAMSAMASXMXMMMSAAXMSAMMSSMMSSSSMSXSSMSAMXSAMXXMMSXSXMMSMXSAMASXMSAAMAAXXMASAMXMASMMMMMMMMASMASAMXSAMASMMMMAAMMS
SAMXMXAMASXSSMSASASXMMMASMMMXMASMAMAMAMAASXMAMASAMXAAAAXMAAAXAMXAMSAMXXAXXXAXAAXAXAMXASMXMMAAXSXSSXMXSASMMXXAMXXSSMXXSMXAXSAXAMMMAMXXAMSXMAA
XMSAAMAMAMMAXAMXMAXXAAMXMAAAAMXXXXMASASMSMAMXMSAMXMMSSMMMMMSMXXXAMMSAASMMAMSMXSXMMSSMXSAXSMMMMXMAXAXMAXMASAMXMMAAAXMASASMXSAMSXMMSMXSXMXSMXS
XXMMXXAMAXXSASAXMAMSSMSSSXMSSSSMMXSXMASXAMMMAMXMXAXXAAXMAMAAXXMXAMXXMXMXAAMAMAXAMAMAMAMXASASXMASMSSMAMASXMSSXASASMMMAMAMSAMXMMAMAMMAAXAXXXAM
MMSMMSSSSSMXAXMMSAMXAAXAAMXAMMMAAMMSMMMMMSMMXXMASXSXSXMXAMSSSXSASASMSMXMSMSAMXSXMXSMMXSAMSAMASAMXAAXSXAMAAAXMAMAAMASAMMMMXMAXSAMASMXMMMXAMAS
AAAAXAMXAAMMMMMAXAXSXMMMMXMAMAMMMMAMXASXXAASMAMAXMAMXAAMXMAAXXAAXAMAAAXMAAMMSXMMMMMMAAXMXMXMMMSMMSMMXMASASMSMSMMMSXSXSAAAXXXXSAMASXXXAMSSMSA
MSSXMASMSMMMSAXXMSMSSSXXXXSXMXSXXMAMXAMXSSSMMAMMSSMMSMMMSMXSXMMMMAMSMSMSASMXMAMAAAAMMMSXMXSXMAMXXAXMMSAMXXAAMAAXXMAXASXSSMMMMMMSAMMMSXMAXMXM
XAAAXAMXMASAMSMSSMAMAXXMMMAASAMXMSMSASMMAXMAXXSAAAAAXMAXAAAXMSAXXXXMMXAMAMMXMMSSSSMXAAXAXAAAMSMMXSAXAMASMMSMSSSMMMMMMMXMAASAAAXMASAAAMMSSMAX
XMMSMASXSAMXSAMMAMXMMMXAAMAAMASAAMAMAXMAXMSSMMMMSSMMSSSSMSMXAXASXSAAMMSMXSXMXXAXMMXSASMMMXSMMAAXAXXMXSAMAXMAMAAAAAXMXMMMXMMMXSSSMMMMSSMXAMXS
AXAAMXMAMXSMMAXSAMXMXMMSXSAXSMMMXSAMXMMSXMAMAAAMAMXAMAMXXAMMSMXMASMMXMXSAMAMSMAMSAAMXXAMAMXAXSXMMMSAMMAXSAMXMMMSSMMMASASASXXXAMMAMMMXXXXXASX
SMSSSXXMMAXASAMSAMXXAXMAXXMASXSAASMMXAMMAMXSSMSMSSMXMAMXSXSAASXMXMXXSXAMXXAMSAAAMMSSMSMMSSSSMXAASAMMXMAMMASAXMAXXAASASASASAXSASXXMAMSMXMXMAX
XAMXMMXAMMSXMXXMXMSSMSAMMXMXMAMMMMAXXXAMMMMXAXXAXAAXSMSMSAXXXXMASXMASMMMSSMMSMMSMAAMMXAXMAAXASXMMASASMSMSAMMSMSSMXXMAMAMAMAMSAMAMMAXAAASAXMS
XMSAAASXSAAMXMXSASAAXXAMAMSAMAMXSSMMMMSXMSMSSMMMSMMMSSMAMMMSMXMASAMAXAMAMAMASXMAMMMSASMMSMMMXSMASAMXMAMXMAXXSXMAAMSMSMSMSMSMMXMASXMMMXMSAMXX
SSXMSXMAXXAMXAMAXAMXMXMMSASXSMSAAASXAAXAXAMAAMMAAAAAXAMMMXAAAXMAXXMMSSMXMXMAXASMSAMMMMAASXAXXMXAMASXMAMMXSMXMASAMXSAAAAAAAXAMXMAXXMASXMXXMXX
MASAMAMXMASXSSMSMMMSASXXMAMAXXMASAMXMMXMMMMMSMMXSSMSSMMASMSSSMMSXMXMXMASMXMMSMMSSMMAMXMMMMXXAMMXSMMMSSXSAXAASAMXMXMSMSMSMMMAXXMXSASMSAXAXMXM
MXAMSXMXXAXXMASXAXAAAAMXMAMXMXMXMMSMMMXAAXXAMASXAXAMAMSMSAMXXMAXMSAMAXMASAAXXAMXSAXXXASMSMSSMXXAXXAXXMAMASMMSAMMXMAMXMXXAMXAXMAMSAMAMMMSXSAA
SMMXAXMMMASASMMSSMXSMMAXSSMMMSMXMAXMAAXSMSMXMAMMMMMSAMXAMAMXXMAMAMAMAXMAMXSMSMMASMMSXMSAAAAXMASMMSMSMMAMXMAXMAMXAXMSAMASAMSXMXSMXSMAMXXMAMSX
AAXSMAMASMMXMAMAMAMMMXXAMAMSAAMSMSSMMSMMASASMSMMAAXSMSMSMXMAMMSMSSSMAMMASAXAAAMMXXXMASMXMMMXSMAAAAAAAXXXAMXMXSAXAXAMXMASXMAAXAXMAXMXSXAMSMXM
MSAXMAMXMMMMMMMXMAXAXMAXSAMMMMSAAMAXAXAXAMSASAAXMSMMXSAAXXXSAXXXAAAMAMSAMXSXSMMAMMASXMAAMASAMXSMSSSSMMSMSMAMXMAMSMSXSAAXMXXSMSAMSSMXMASAMASM
XMASXSSSMSXSASASMXSMMMAAMMSAMMSMSMMMASXMMXXXSMSMMAASAMMMMSAMAMSMMMMMSXXASASMAXMASXAXXMSMSAMASAXMXMXMXAXAAAMMAMAMXAAAXMAXXSAXAMXAAAMASAMAMAMX
XMSXAXXMAAAXAMAMSASAAMXXMXSASAMXXAXXXAMXSAMXXMXAMSSMASXSAAAMAASXSASMMMSAMAXMAMSAMXAMMMAMMXSSMMXSXMASMSMSMSASASXMMMMSMXSAAMMMXMMMSMMMAASXMXSX
XSMMXMAMMMSMMMMMMSMMMSAASAXASASASAMXXAAAXASAXSXSMXXXXMASAMXSXXSAMASAAMMXMXMMXXAMXXXAXSASAXMAMSAXAMXSAAMAAMAXMMMMXXXXAAMMSMXAXXXMAMSXMAMAMAMX
XXXAAMXAAAMXXMAXMMSXAMXMMASXSAMMSASMSMMMSXMMSMAMXMASXMXMAXAAXSMAMASMMSAMMMSAMXSMSSSMXSMMMSSSMMXSAMMMMMSMSMMMMAAAMMSMMSSXMAMXMSXSXXXAMASASAAS
MSMSXSAMXMMMMMSMAAXMAMAMSXMXMAMASAMXXAAMSAMXAMMMAMSMMAAMXMSMMXXXMAMAXMASAAMXMSAAAMMMXMSAAXAMXAASMMXAAXAMXAAAXSMMAAXAMAMXMMXMASAMASMXMAMASASA
SAAXMMXXAAAMAAXSMMMXAMMMMASXSAMXMSMSSSSSSMMSMSXSSXAXMXMSXAXXAMMMMXSXMSAMMSMAMAMMMSAMXASMXSSXMMXXSMMMSSMSSSMSXXAXSAASAMXSMSMMAMAMAMAAMMSAMXMM
MMSMAAMSMSSSMSXSXMASXSMMSAMASAMMMAXMAAXAMXAAMAMMMMMXMAAXMXMXXXMAAAAXMMSMAXMXSAXMMXXMXXMMMSXXXXAAMXSAMAAXAMSMXSAMAMAMAMAMMAAMMSMMMSSXMMAMSSMX
MXXXMMXAAXAXAXASXXXAXAAMASMMMMMSSMMSMMMMSMMASASAXXMAXSMMMSMSMMSMMSAMXAMXAXAASXXSASMSMXAXXMAMXMMSMAMASMMMMXAMMMXMMASMMMAMXSSMXAAXAAXAMXASAAMS
XSAMSMMMSMAMXMAMMMMSMSMMAMXSAMMAAXMASXXMXAMXSMSASAMMMXAAAXAAXAAXMAMSMSSXSMMMSMMMMSAAMSSMSXXMAAAMMSSMMAAMXMMSSMAAXXMAXMAMMAMMSMXMMXMXSSMMMSMS
MMAXAAMAXMMMXMSMAAAXAMXMXMAMASMSSMSMSMXSMMMAXAXXXXSXAMSMSMXMSSXSASMMAAMAXMSAXAASXMMMMXMAMMAXXSAXAXAASXMMAMXAAMXSXMXSMMAXMAMXXSAAXASMMAAAAXMX
XSMMSSMAXXASMMXSSSSMAMSSSMXMSMMXAAMXMMMSXAMAMMMMSXMMSMXAMAAMAMXSMMSMMAMMAMMMMSMXAXXMSAMAMMMXAMXMMSAMXSXMASMSSMXXAXAMXMAMMAMMASMMMMAASXMMSXSX
XMSMAAMMMSMSAAMAXXXXXXAXMXSXMASXMMMAAAASXSMSMAAXMASAMXMXMSMMAMMXAAXXSXAMSSSMXMSSMMSMSXXMSAMXSAAAMMAASAMSAMXAXMASXMAXAXSMSMSXAXMASXSXMASXMASA
MAAXMMASMMMSMMSMSMMXMMMSMAMASMXMASMXXMXSAMAMSXMMSAMXSMMSAMMSSMSSMMSXASXXXAAXXMASMAMAMAMSMXSAMXXXASXMAAXMAMMSSMASXASMSMXAASAMXSSXSAXMSAMAMAMX
XSASXSAXAXAXAMXXSXAAMAAAMASXXMAXAMXAMXMMAMAMMMSXMASMSAXXAXMAMXAAAAAMMSMMMSMMXMAMMMMAMAMAAAMMSMSMMASXMAMXMMAMAMAMXSAAXAMSMMSSMXMAMAMAMXSXMASX
XAAAAMXSMMMSMMSAMXSSXMSMSXXAASXMMSSMMMASXMASAAXASXMASXXMXMMSSMSSMMSAXSASXAAXMMAXAAXMSMSMSMMXAAXXSAMXSXSAAMXSAMAXSAMSMSMASMAXAAMXMAMXMAAASAMM
SMMMXMMAMAXAAASMXXAXXMAMMASXMMXSAAAAXSAMAXAMMSSMMXMAMAMXMSMAMMMXAXXMMSAMXSXMMSSSMXMAAAMMAMXMMSMMSASXMAMMXMAXMSSMMAMAAXMASMMMSSSMSSSMMSSMMMSS
MASXMASASMSSMASMMMAXSMMSMAMMAXAMMSMMMMASMMSSXMAXAXMMSSMAMAXAXXSMMMSAMMAMXXAXAAAAAAMSMMMAMMSAAMAASAMAMSMMSMMSMSAXSAXMXMMXSAXAAXAXXAXXAXAXAXAX
SAMXXMSXSMAAMASAXMAXXAASMMMSXMXSAAAAAAXAXAXAAMSSMSAXMAXSSSSMSMMAMXSMMSMMMSMMMSSMMMXMAAMAMAMMXMXXMSMXAAAAXSXAXSAMXXSSMXMSMAMSXSMMMMMMMSMMMMSS
MASMSAMXXMSMMASAXMMMMMMMAXAMXSMMXSSMSMMMMSMSMMAAMSASXSMXAAAAAMSAMMMAAAAAXAAAXMAXASXXXMSAMASXSXMSAXMASMMMSMSMMMXMMSAXMASAXAMXMAXAXAAXMAMAAAXS
AAAXSAMXMMAMMMSASAMMAAMSMMASASAAXMAAAXAMAMAAMMMXMSAAAMSMMMMSMXSXSAMMMSSMMXMMSXMASMMSXMSMSMSMSAMMAMMAXAMSAXAXMAMAXMASXXSMSXSAMASXSSSXXASMSMMS
MMSMMASMASAXXXMMXAXSMMXAASAMXSSMSSMSMSASAMSMSXXAAMXMAMXXXSAMXXMASMMSAAAMSSXSXMAXXXAAAXMXAAXXMAMXAMMSSMMSMSSSSSSSXMXMXMMXXMSMMAMAXMXMSXMAMXAM
XAAAMAMXMMAMSASAMSMSAXSAMMASMMAXXAAMAMMMAMXXXASXSMAXMMMMMMMSMMSXSAAMXSMAAASMAXSMSMMSXMXMSSMASXMSSSXMAMAXXXAXAAAMXMAXAAMXMAXAMSSMXSAMXAMMMASM
MSSSMASXAMAAXAMXSAASXMAAMSXAXSAMMMAMXMAMXMMAMMMXAMXMXAAAAAXAXASMMMMSMXMMSMMXAMXAAAMMXMAXAAMXMAMXMXXSAMMSSXMMMMMMMSSSSMSAAXSXMMAMXMAMMAMXAXMA
MAAXMXSMXMMSMXMXSXMMMSSSMXAAAXASXXASMSSSSSMXMASXMMAMXSSSSSSXMASAAXXXAXMAXMSMSSMSMMAXAXMAMSMSSMMAMAAMASMAMAXAAAMSMMAAMASXSMAXMSAMMMAMXMMASXSX
MMSMSXMASXAAMAXXMMMSAMAMAXSMMSMMMSXSAMAAAAMAMMXAASASAMXXAAMAMSMXMMMMSAMXSAAAXXAAXXMSXSASAAXXAXSAMSSMMMMAMXXMSMSAAMAMMAMXXAMMMMMMSSXSAMXAMMXA
MAAAXASXMMMSAMXXMASASMAMAMXAXXAAXMAMMMMMMMSASXMMMXASXMXSSSMXMMASXXSAMSSSMMMSMMMXSAMAAXAMMMXMAMXAXXAAAMXASXSXAMSMSMSSXXXXMSMSMMSAMXASMMXAMXMX
SSMSMMMAASAMASXMAMSAMXMMAMSAMXMXSMSMMMSAAXSXXXAASMMMMAMXAMMSMMMMMXMASAMAAAXMAMSASXMXSMXMXMAMXMSMMXSMMSMASAAMXMSXXAAAMSSXAAAAAXMASMXMAXXXMAXM
AAMXASXXMMASAMAAMXMMMASMSXSAMXAAXAAAAASXSXXAXXSASAMAASAMXMASAXSASASMMMSMMMXSAMAAXMMMXMAXMSAMAMAAMAMAAAMAMMMMSMSXMAMMSMMASXSSSMSMMMXMAXMAMXSA
MMMSAMXMXMAMXMMXXMAASXMAXASASXMMSSSSMMSAMMMASAMMSAMXSMSXAMASAMSASASMAXXMASXMASMXMXMASMXSASASXSSSMASMMSMASXASAASASXXXAAAAMXAXXAASAMXMAMSAXAAA
XXMMAMXXXMASMXMASMSMSMMAMMMXXXMMAMXXMASAMXSMAMSAMXXXXMMSXSXMXMMXMXMXAMSSSSXMASXSXMMMSAAMXMMMXAMMMMSXMAXMSMSSMSMXMASXSSMXSMAMMSMSXSXMAMSAMXSM

1371
dat/24/re/05.txt Normal file

File diff suppressed because it is too large Load Diff

130
dat/24/re/06.txt Normal file
View File

@@ -0,0 +1,130 @@
................................##..........................................................................#.......#.............
...#.......................................................................................................#......................
.#.....................#.............................................#................#..................#...#..#.#..#...#........
.#........................#....#.#.#..........................................#...............................................#...
..................#.......................................................#.......#.............#.................................
........................................#...................................#.........#......#...............#......#......#......
......#...#.......#..............#.....#..#....................#.................................................#......#.........
......................#...................#....#....................................#.#........................#.........#...#....
....................#..........................................................................................#..................
..#.........................#.............#...............#.......................................................................
.#...............................#...............................#...#................#.........#......................#..........
...#.....................................#.........#.............#...................#.......#........................#......#....
#...........................#............................#.............................#........................................#.
.........................#................#...........#..........................#.#..............................................
...........#.#.......#...#.............#.................................#............................................#...#.......
....#.......................#.......#..........#....................................#...............................#.#..#........
....#............#.......#.............................#..................#......#......#..............#.............#.....#.#....
...................................#..............#............#...#..............................................#...............
..............................#....#.#........#......................#...................#........#..#............................
....................................#.#....#.............................................#....#......#...................#........
..................##..................#........#.....#.........................................#.......#............#.............
.............#......................................................##...................................................#......#.
#......#................#.......................##...............#.....#.......................#..#.........#.............#...#...
.............................................................................................................#.....#..............
.......#..........#...............#.....##......#.......#.................#............#..........................................
.......#.............#.........................................................#................................................#.
...........#.......................#.....#...............#..............#........#.....#.........#.........................#......
.........#........#...............#................................................................#......#..........#............
..............#..................#...#...............................#.#.................................#.............#........#.
.....................#.......#..............................#........................#...........#....#.................#.......#.
..........#..................................#......#..#................##.........................................#..........#...
.....................#.....#.........#.....#...............#..........................................#.........................#.
..........#...#..............................#...................#.........#........................................#.............
.......#.........................................................................#..........#............#..#..........#..........
.....#..#..#...............#....................#..............#...........#.....#.....................#..........................
................................................#.............................................................................#...
................#.......................................................................................#.........................
.............#...#.......................#..................................................#....#................................
...............................#.......#.#.............................................#....................#....#................
......#....................................................#.......#......#.................................................#.....
...........................................................#..........................#.#.....#................#.................#
....#....#............#.........................#..#.........................#..................#......#...#.........##...........
...#..................#................................#......#.............#.#............................#......................
..........................#.............................................................................##........................
..............................................................................#.................#..........##.....................
....#.....................#.................#......................#...........#.........................................#........
..................................#..#....#.................................................................#............#.....#.#
.#.........................#.........................#....................#......................................#................
................##...........................#....................................................................................
.........#........................................#...........................#........#.........#.......#......#.......#...#...#.
.#..................................................................................#.........#..................................#
....#...............#..........................#.....#....................................................#.......................
.......................#.............................#......#...........^........#................................................
#.#..#.....#...................##..........#...................................................................................#..
..#....#.....................................................#...#.............#....#............#..#............................#
........................#..........#.....#............#...........#...............#............#....#.................#........#..
.................................#.............#...#..................#................................................#..........
...........#............................................................................#................#....................#...
..#.........#.............................#............................#....................#....................#................
.................................#..#................#................#...........................................................
.......................#.......................................#........................#................#......#...........#.....
#..............#.......#.........#...#.....#......#.....................#...#....#.......................................#........
.........#.#.............................#....#.......#..........................................................#................
...#............................................................................................#.................................
....................#...................#....................#..............#......#..#.............#.............................
...........#.....................................................##...............................................................
.....#......#...............................................................................#........#...................#........
..............................................#.............#....#................................................................
......................#.....................#........................................................#...#.........#..#.....#.....
..#...............................................................#..#....................#.#.....................................
............................................#...............#.....#.....#...#..#..................................................
.#...........................................................................#....................................................
.............................................................................................................#....................
#....................................................#..............##.......................................#....................
#..#....................#.......#...................................................................#...#.........................
..#........................................#............#...............................................................#.........
...............#...........................#...................#....#......#..................................#....#...........#.#
..........##........#.........................#.......#..#.........#...............#........#........#..........#.................
....##.......................................#...........#...................#......#.............................................
..............................#.........#............................#.............................................#..............
......#........#...........................#..................................#.....#.............................................
...............#.........#.....#.............#.............#...............#.#...............................................#....
........................................#...............................................................................##.#...#..
................#.......#.....#........................................................................#........................#.
....................................................................................#.........................................#...
........................................................................................#...#.....................................
........................#.#.........................................................................................#......#....##
......#.........................#.............#...................................................................................
................#...........................#..............#...#..........................#.......#......##.................#..#..
....................................................#.#.................................#....#....................................
#..................................#...............................................#......#.#.............#.......................
.....#..........#.....................................................................................#.#.......#............#....
..#.........................................................#...................#..................................#..###.#.....#.
...#.#..........#.........#..#......................#..##...#.......#..#.#.#...............#.....#....#...........................
...........#.....#...........#........................................................#..................#........................
.................#........#.......#...................#...#.......#.....#........#..#.............................................
...............................................#.......................#..................#.......................................
....#...................#.#......#............#...................#..........#..##................................................
....#........................#...........................................................#..................#..#.............#....
............#...............................................#.....................................................................
.........#.......#...................#...........#...............#....................#................#...#..#.......#...........
...............#...........................................................................#.....................#................
.............#....#.........................................................#............#....#.#....#.....#..#................#..
..#...............#.........................................................#........##.....#...#.........................#.......
..........................#.....................................#.................................#...............................
..#.............#...#...............................#.................................................................##..........
......#........#........................#..........................#..............................................#...............
......#.........................#..#.............................................................................................#
..................................................#..................#.....#...........#....#...#..........#................#.....
....#.....................................#..........#.....#......#..........#....................................................
...............................#...#...###.#.............................................................#...................#....
...#...................................#.....#...#....................#........................#..#.......................#......#
....#...#........#...................#..........#......................................#............#.............................
#.................................#.....................#.................#................#...#.#................................
.................................#.......#...........#..#...#......#.......#.........................#............................
.......................................##..........................#..................................................#...........
......#............#.##.........#...............#..........#....#.......................................#..#.................#....
.....#............................#.....#..................................................#.......#......................#.......
.............#.......................................................#...#...#....#...................#...........................
......#.................#.#................................#..#...............#.............................#....#...........#....
...............#...##......#.............................#.......................................#................................
#..................................................#.........#....#....#.....#...................#.#....#.....#...................
......#...#...##.................................................................#............................#...............#...
.#..................................#.#...............#................................#...#......................................
.........#.......#...#.......................#..................................................#.#................#..............
..................#............................#.....#.....#........#.....................#........................#.......#..#...
..#.............................#.............#.#................................................#.#.##....................#......
.......#.#......................#.#.....................................................##.............#..........................
..............#...#........................#................................#.........#.......................#..........#........
.......................#...............................#..#.........#.............................................................

850
dat/24/re/07.txt Normal file
View File

@@ -0,0 +1,850 @@
234815: 36 8 815 40 55
155271616759: 1 7 652 2 7 421 4 58 3 9
8580336: 3 6 35 3 6 539 2 59 1 3 3
189612: 65 20 4 236 9 61 7 508
17087913891: 854 2 2 5 910 22 367 1
4724307587818: 82 651 885 4 1 8 7 8 18
25057637: 630 6 396 6 1 637
7872602815: 9 26 602 6 4 543 354
20319060825485: 3 47 1 8 3 6 712 52 7 9 2
6937026: 78 5 4 9 33 2 6 92 2 1 3 6
16490320: 1 290 2 97 5 7 176
81202174: 5 76 5 6 5 36 20 1 94 80
531135610: 111 491 16 25 55 613
527172: 3 955 854 462 72
2799: 8 26 71 9
1558950: 134 7 4 5 5 71 27 949
8043570: 4 72 22 8 279
43643248: 433 2 86 56 513 727 8
583307: 59 2 9 23 11 231 76
10272379: 876 1 514 739 27 9
3254637331: 1 3 32 9 35 6 6 7 5 1 5 42
892457: 89 24 20 6 31
133629334: 4 8 287 22 97
5784660503: 310 311 8 78 6 782 3
4400201: 65 236 957 270 11
1091316: 3 421 319 8 9
909346771: 606 3 5 1 9 3 3 5 5 90 6
73663: 73 6 63
507442: 481 26 418 22 4
246922771: 96 83 500 24 99 51
30421378: 33 8 9 13 33 9 37
995887199: 238 5 48 55 317
1374726: 1 9 701 77 3 1 582 3 39
5993001673: 7 1 859 1 59 28 9 2 115
32111: 6 37 5 25 8
15749: 48 9 6 94 46
163723896: 723 251 525 9 13 4 42
14156664983203: 9 25 50 937 721 2 67
173811792: 407 42 4 82 31
1447453: 5 8 462 241 7
29495757285: 7 373 488 449 4 9 285
4212640331532: 9 320 904 6 6 307 5
499870673: 49 98 70 667 7
1604946219: 58 75 1 895 721 220
765912480: 2 75 6 987 47 7
86058621: 956 12 8 69 9
41337379: 4 64 979 91 33 3 47
9744108902: 73 1 819 132 902
1530162: 98 67 5 155
198731: 220 6 44 3 9 5 4 6 5 8 3 8
84748076541: 789 7 5 7 73 5 7 3 994 3
2529151157: 7 705 97 376 9 317
2228: 66 7 88 7 4
2651040266: 807 45 612 8 73 5
1064798: 5 7 52 7 85
37595457: 264 734 8 2 14 97 3 1
263091920: 3 98 80 91 284
4343335925: 40 274 2 693 998 7
5450841: 840 721 9 1 6 75
643963238282: 2 6 33 1 885 783 1 2 91
171085643: 223 14 548 36 7
45690309: 27 821 2 687 3
5564104817: 7 643 728 813 4
86673: 89 7 69 2 701
87323: 32 5 3 7 64 29 6 8 3
19873: 380 7 106 7 508
1548: 5 8 93 740 656
762: 9 1 1 5 712
307671: 9 815 8 881 30 41 48
2932551: 42 54 431 3 27
23646: 5 91 4 9
1653697595: 7 54 5 40 6 9 9 72 7 8 9 3
17216951640: 538 40 8 52 898 1 642
4346316390: 78 753 74 387 3
527476015: 6 2 9 433 23 4 7 52 8 15
7028573625: 481 902 8 9 3 4 34 5 45
93857: 64 6 9 5 98 8 62 9 26 3 8
45372094843: 8 95 597 948 40
13074553: 81 571 79 66 6 2 43 5 3
3472508224: 4 9 60 719 23 3 677 7
1123: 88 5 5 8 339
1376356816: 483 548 65 2 8
314881054465: 55 465 65 66 64 886 1
23746140: 6 5 1 1 9 2 8 524 8 4 9 3
724670: 1 8 1 3 700 3 2 6 6 2 46 4
169538: 31 94 44 534 4
10188004277: 456 26 943 796 2 77
53849072361: 8 42 71 3 9 6 7 462 2 7 7
102705: 7 168 5 58 915
6862448: 5 680 239 9 996 4 4
56087: 4 821 71 8 61 891 52
188280018: 260 57 93 72 18
3521099170: 2 48 7 69 2 5 54 54 4 6
11299837: 184 4 231 1 6 591 6
574320039: 3 9 903 53 5 69 634 9
48049: 6 249 32 240 1
9770796: 48 836 175 2 386 4 63
190310120618: 9 70 49 65 80 8 77
90545520: 692 1 6 23 94 6 7 3 4 5 3
473: 427 5 7 1 33 4
283849008: 834 414 4 4 428 2 17 8
1420968: 734 25 78 5 6 4
11864163: 23 8 91 77 495
39421369: 16 7 5 114 9 4 387 107
1822914130: 870 65 62 24 322
290186191: 50 1 34 4 90 21 9 413
14426: 7 9 9 18 10
3992: 5 790 3 37 2
470473510: 5 512 5 2 42 875 1 4 3 3
1933330256: 263 4 9 7 573 757 2 56
391837988: 484 8 5 6 73 3 5 3 6 8 1
41215: 3 3 55 31 4 281 7 7
932574: 1 690 4 6 5 52 56 4 674
40262525: 246 7 227 103 445
19826832189: 30 27 6 5 91 70 8 4 189
2847924866: 50 7 816 99 7 82 3
14027830830: 50 783 74 9 4 2 807 6
56176536: 656 2 728 1 9 6 7 9 3 5 6
441309276: 696 5 704 7 756 1 9
297893: 2 322 461 932 77
53805752: 4 1 6 8 6 4 1 576 8 7 19 8
31530: 6 1 6 2 7 7 8 35 948 9 2 1
7174489: 76 944 89
153772299459: 3 9 9 4 5 4 1 90 86 9 77 9
7038084958: 4 840 30 521 2 6 8 9 6 2
27975: 5 70 6 62 75
1157576: 7 31 5 846 9 3 9 5
335534490: 243 863 2 8 90
23443: 5 8 34 26 4
630040988: 2 70 7 53 866 8
900135925: 899 417 2 716 92 5
2834904: 78 49 93 1 1 24
37470200672: 96 1 6 74 643 9 9 6 67 5
1736124: 8 894 9 9 6 6 2 6 39 52
7869680: 9 15 44 4 805
447156020: 38 336 5 5 34 1 4 3 7 7
14761454: 1 91 3 13 25 1 1 59 7 7
3227583252: 76 847 1 22 42 6 5
7402326818339: 78 1 937 268 1 8 337 2
180366: 9 7 7 66 7 6 3 24 2 77 1
103360506330: 40 706 575 5 366
259: 50 5 4 6 1
59315037424: 977 44 78 8 8 778
111540286525988: 8 401 9 46 79 3 74 39 9
168954: 3 56 9 5 4
4697629: 6 33 20 8 3 7 3 65 5 8 9 7
21028140: 3 6 9 6 6 41 850 5 9 3 7
2137182330: 77 4 9 660 221 81 27
1270333614966: 9 7 417 5 7 2 2 163 1 8 3
1518169539: 581 937 16 953 9
1226257202: 12 262 57 19 7 2
51632376: 5 509 2 2 7 5 47 8 9 2 1 5
13761434: 8 2 839 7 25 46 8 4 2 2
36652742: 3 2 854 976 8 79 6 2
48788351: 84 702 12 4 12
327773952: 4 316 56 4 648
399669886: 397 2 669 886
6890073: 911 7 6 3 5 8 9 4 5 9 20 4
113214: 7 98 55 8 3
787574304: 787 574 263 4 37
114516889: 426 22 76 6 831 424
490344553: 7 3 709 95 91 3 7 8 65 8
11283196: 4 24 15 50 91 5 95 2 6
392017032: 33 5 2 3 5 2 7 93 9 5 85 7
7736727: 4 73 36 373 351
540982: 540 1 982
79329: 93 853 1
763474860: 9 42 6 822 4 5 2 9 4 6 6
54: 8 5 6 1 8
41329549210760: 738 56 8 7 49 210 758
11664: 3 1 8 3 48
2169144: 9 87 217 9 2 7 3 2 40 2
149623: 95 75 21
220739980: 4 69 480 3 996 3 2 76 4
127746: 2 3 24 65 709 6
31250248161: 5 1 5 5 82 4 5 6 5 74 6 4
2287761: 1 462 165 30 726 135
996: 2 902 95
1422687066: 986 6 71 677 3
157354426236: 7 253 1 74 688 3 2 3 9 4
610084: 1 9 62 94 9 90 87 1 5 61
80898918: 6 7 4 69 3 9 8 59 3 2
10388417: 274 61 7 4 82 37
144427107194: 8 29 5 81 865 549 7
61515: 578 40 99 38 297
34146279: 379 401 2 1 9
9728167914: 8 9 382 1 2 28 4 6 1 5 8
104134517: 5 4 9 752 65 6 35 29
17556093509: 7 6 3 4 2 73 5 67 5 2 404
138: 1 5 23
147849564004: 75 4 84 9 9 6 3 9 3 778 4
8847: 65 8 225 9 8
5661042: 1 942 5 6 37 4
3207509550: 858 63 66 6 14 566
722647: 7 57 8 14 12 47
13280839264: 4 649 53 39 429 494 4
2933: 9 1 6 8 3
2524032: 2 44 77 1 9 829 2 6 2 6 8
801191452: 327 35 581 2 35 782
20879018: 718 6 9 3 1 8 4 2 7 6 46 6
178: 9 65 6 8 93
3374254: 73 2 5 3 8 4 7 641 7 26 4
15093: 958 13 94 96 13
597125887: 3 9 334 15 2 5 9 48 3 6 8
4661394: 465 63 7 8 32 3 96
835995349: 3 7 1 2 864 7 8 5 771 4 8
26987199: 5 526 766 2 9 8 5 6 79 9
520177: 3 304 6 6 5 4 8 3 5 3 7 91
20670045: 212 975 37 5
3424427877418: 8 7 9 74 6 7 980 6 4 9 95
4514904676: 3 145 728 776 9 6 93 7
5168: 7 71 5 9 936 14 354
1014610: 159 8 2 410 91 4 482
118433: 4 67 7 7 87 4 3 3 4 6 76 7
21913289376: 9 1 29 3 9 3 371 9 5 2 6 2
1998: 8 4 72 2 55 901
56185682: 280 8 9 2 21 4 735 2 82
3523211998: 216 94 246 50 924
15800687: 513 11 7 7 4 6
211665306879: 529 1 4 62 3 24 6 687 9
124169195: 5 2 3 9 4 2 6 1 6 8 1 192
6415: 806 770 6 9 4 37 14
63754677: 2 64 965 64 677
241396: 264 2 353 274
38766796: 6 985 370 3 1 3 5
1375304961: 55 710 991 2 93 907
890426953: 10 118 477 88 977
16774347156: 223 503 29 647 4
1705177: 7 8 988 6 438 22
1217609: 25 487 5 5 8
350630: 24 1 10 45 14
12594: 203 6 25 16 6
29996424973: 3 2 9 284 3 7 249 62 6 5
42762313: 4 2 10 38 4 30 87 74
1957877082: 42 6 91 567 706
1535: 1 1 2 27 7 5
6003072855: 2 75 9 4 772 90 8 50 5
42639052854: 47 405 20 8 7 8 4 8 5 3 1
62301: 1 3 692 7 3
216116392: 41 8 147 8 6 1 4 7 9 5
567: 5 55 507
426745: 123 29 701 49 5
9849: 9 1 8 9 4 937
1435267: 88 4 50 78 6 2 3 4 1 4 7
122151: 11 1 89 32 51
18989349: 7 3 8 95 68 3 58 1 8 3 3
57454838427: 820 783 395 9 7 714
1831360: 6 3 31 288 72
55892870: 9 46 89 2 870
723110784: 64 3 1 188 2 814 781
578540160: 1 96 475 1 54 8 8 8 198
965197554: 6 959 19 75 54
5076765233: 5 640 841 9 2 5 9 4 6
358902: 75 1 281 2 90 2
434: 8 5 7 9 15
511: 1 7 3 7
18974676: 4 6 41 34 9 9 2 8 722 1 7
9740211: 304 9 89 6 6 4 3
120617043418: 6 5 768 1 8 629 5 570 6
1792345: 255 1 7 3 41 1 3
10447: 38 8 225 97 1
7032854752: 59 596 2 2 5 2 8 9 4 2 2
32524773: 114 28 60 1 3 773
105636707: 99 957 3 643 4 273
26939: 49 6 4 178 483 7 476 7
18925509213: 4 626 8 5 5 4 61 3 1 1 2 5
53911: 9 657 8 655 9 8 8 48
16540603: 8 15 8 8 99 612 7 5 2 72
635047284121: 9 588 2 1 1 6 1 67 412 1
3498179460048: 6 420 770 6 876 98 21
55940162: 932 27 7 59 6 10
2673431161: 220 1 6 9 9 1 6 2 1 2 56 9
992: 9 86 6
34751772: 5 78 21 1 3 90 5 4 7 6 9 6
11754337: 532 486 2 8 923 8 22 6
399393: 414 104 403 918 9 1
21013231642: 337 29 623 64 642
3335004: 371 16 1 8 9 1 14 5 5 8 4
3363268: 267 407 5 998 8
5822561565: 5 6 7 439 6 46 5 8 1 85 9
242218567: 225 10 1 7 65 1 85 6 7
3936275: 7 1 792 3 2 7
11537194338144: 7 350 404 14 872 2 9
1719584: 3 13 679 516 83 4
1314269: 31 51 61 159 769
647: 48 3 3 31 103
341416031: 7 5 2 11 1 92 3 9 6 9 62
1452753: 21 79 6 50 97 96 81
6804: 3 92 4 8 1 59 16 1 5 9 4
2973255928: 1 6 5 8 45 2 648 5 6 85 5
145350: 1 1 741 3 3 8 5 599 6 51
6276679: 69 74 6 5 15 4
58725315257: 7 6 73 7 5 9 6 7 933 4 7 7
198748813: 29 7 74 1 5 298 826 8
4224050454: 3 2 3 4 8 61 2 1 899 9 7
545644: 4 26 603 771 548
2037239837: 794 8 453 354 2 989
99372320: 75 828 4 30 8 5 8
156820: 736 2 94 2 20
64309027437: 12 95 8 375 49 560
18351: 594 43 79 303 2 9 8 1
879044880: 54 4 859 63 657 3 8 35
13148172: 4 2 7 531 1 1 77 7 3 7 9 9
375445666: 75 5 371 74 16 9 495
33108201: 45 34 93 44 73
2383405: 611 39 6 36 6 2 6
338437376: 87 389 7 3 73
377102966: 9 2 960 4 8 3 6 6 8 7 79
5207: 8 1 483 856 4
421240244: 6 6 8 62 6 9 9 7 9 179 7 1
6833185492: 96 12 12 632 8 6 92
8995831: 6 47 3 33 630 137
64063: 78 2 8 63
189629583557: 1 838 58 2 1 958 355 7
667400891: 71 95 704 139 7 4 891
535715: 707 151 314 72 5
35859722: 3 8 3 6 9 436 1 3 3 7 464
17619000: 4 9 6 518 7 7 7 5 9 5 839
1384137216: 7 6 70 1 2 3 64 329 4 6 1
153820: 5 53 3 955 20
166606210: 85 196 586 35 1
5116097: 56 216 91 28 413
625625: 1 3 992 7 6 6 121 6 1 5
1098088311: 5 3 23 71 604 237
14318248: 1 18 8 61 9 99 967
12041646: 90 475 818 99 87 933
27827184050: 1 902 474 6 308 4 9
22218206396758: 728 4 657 835 305 7 1
29293466: 82 166 4 538 9 427 3 3
2043: 43 4 3 3 4 1 250 3 1 1 3
552330: 70 408 87 423 19
2564011611: 87 2 9 25 34 32 8 723
38646: 37 4 48 597 8 9 584
7137998: 8 5 56 3 417 17 82 1 8
44663: 1 3 2 2 661 2
2277256255: 190 22 7 8 7 256 247 8
1003001: 9 2 8 2 969 3 291 5 500
850006705952: 389 8 66 6 51 5 7 855 5
14221542: 505 88 32 8 734
24228423565: 42 506 57 35 68
246743: 96 239 7 7 707
3160602: 61 5 9 39 6 5 70 8 6 3 3 2
43848294: 8 597 23 40 7 57 6 21 7
862506240: 8 776 819 8 120
4969: 16 289 6 270 69
1433578: 4 9 7 1 6 822 4 6 6
556935795: 370 92 1 35 98 7 3 9 5
438347796: 4 383 254 223 96
101329722098: 30 4 298 966 6 20 98
1077664776293: 58 9 9 88 9 2 388 1 48 2
89178: 12 9 68 501 2
13972204: 12 17 55 876 1 4
169687678: 459 7 69 88 808 6
339338795540: 5 67 836 72 83 8 2 9 4 1
70824884424: 8 4 8 4 1 2 1 19 276 1 3 8
135972749: 520 871 3 8 959 49
407463489597: 407 463 4 89 599
14318725: 894 53 9 3 10 8 7 4 2 79
545272096067: 9 810 543 66 366 798
583: 2 5 7 160 59 315
257321712: 1 56 566 8 997
1725165348: 9 32 8 1 6 594 53 7 4 3 5
1438277: 7 3 3 4 9 9 69 2 9 1 1 77
3771839519: 6 4 16 92 9 1 9 71 800
1758340: 9 39 667 1 5
5275488825: 50 71 978 6 361 2 4 25
26053872450: 6 691 89 7 2 6 447
9450: 6 5 3 7 84 5 6
95311557: 8 27 7 54 34 63 2 9 2 3
804519: 18 41 9 359 3
66106: 3 2 8 5 37 9 8 9 936 65 1
68453598: 4 5 64 90 93 6 44 246
951596: 2 7 9 62 85 7 6 297 2 4 4
98538336263: 438 6 5 9 832 77 8 3 8
911484: 3 303 2 48 4
1640: 3 5 46 9 74 1
103459686: 1 2 661 6 51 3 9 1 8 3 2 6
115965921: 5 85 1 4 42 6 2 97 6 3 9 3
386223718: 8 378 22 3 715 4
19649: 7 8 6 4 97 8 761
5027443270: 26 32 798 90 1 745 46
1920817: 10 48 4 817
23557514: 7 3 76 60 96 8 33
127832584428: 81 6 29 907 4 428
701077: 308 2 5 8 222
5414824290: 2 2 82 941 43 30
345251177859: 639 354 54 1 2 5 859
18396970: 42 2 16 7 6 968
184177: 3 2 365 29 83
508375: 993 232 415
82711: 7 697 552 3 4 185
5249836800: 4 488 8 6 3 2 39 475 2 1
275554044: 13 9 9 6 4 6 693 4 47 18
624: 3 6 51 9 3
576516693: 7 88 260 8 2 1 4 9 9 9 3 1
84680467: 53 8 7 98 75 202 4 4
739388: 671 68 33 5 53
819857339208: 9 8 3 7 83 1 2 566 8 53 8
9710: 4 967 3
66557741426: 976 458 36 7 8 18 517
108308520: 2 3 4 5 86 2 678 32 8 5 8
204651: 3 65 9 1 97 454
2508: 3 4 18 3 5 76
11483: 12 944 96 20 39
2455900: 9 156 646 2 599
1878400: 24 9 9 6 8 936 1 4 8 5 1 4
272387: 894 9 7 299 297
99168: 3 4 2 30 956 210
1572619563: 4 90 8 1 8 316 6 24 3 9
1293: 10 5 6 787
19662: 9 4 7 455 97
9368735930490: 41 815 4 74 492 77 90
17389031: 3 2 43 407 16 2 7
46884: 726 5 2 554 6
522: 46 351 5 59 61
379558743: 8 8 456 67 12 70 7 46
13246734: 79 5 219 469 331 3 31
6531950815: 258 4 4 803 3 11 5 9 9 7
10632348: 9 7 6 9 59 7 77 6 4 3 81
1906238880: 33 40 5 538 468 120
115357: 4 6 753 782 7
527211: 31 6 2 1 8 8 4 7 582 8 1 9
1645989082: 636 5 862 3 82
2396: 572 4 4 61 31
568779: 74 486 2 85 82
643028: 20 38 56 564 2 66
1743917: 4 612 89 8 941
6515470: 33 1 7 5 8 1 1 496 8 1 6 8
6703746465: 26 5 1 6 111 9 9 1 7 7 7 6
5540262: 708 94 32 949 7
277206086: 59 4 8 8 9 327 5 89 7 3 1
980162: 31 2 69 29 4 26 226
3542490: 328 4 27 8 8 2
652680: 9 67 6 1 109 84
3471: 8 7 59 64 96 7
42356: 846 50 18 5 33
19653579138: 42 8 194 2 603 5 4 9 1 4
8832693: 120 763 26 93
4956: 642 3 2 6 963 24 38 73
18061244: 50 17 9 4 41
3844233: 1 9 375 1 139 7 8 8 9 9
10332: 6 4 8 5 708 2
56814705894: 590 4 7 278 1 4 8 9 8 3
56961: 31 8 3 4 8 3 6 8 440 3 7 4
4349305992772: 2 17 465 2 5 992 77 2 1
29479: 1 4 7 245 2 8 6 5 9
786181051: 751 34 526 4 476 410
165789: 1 11 63 34 507 3
118010445: 6 6 411 66 5 4 3 5 6 1 2 5
8316103: 87 3 924 48 53
73226602495: 70 6 73 94 50 3 99 49 5
2011100: 783 4 2 321 356
146136086: 940 2 777 600 86
19534951825: 7 18 5 1 8 89 998 7 9 24
100230: 6 94 2 2 8
3663504: 6 6 4 2 9 54 7 6 6 206 78
7682131090: 2 12 61 6 2 8 9 5 66 37
213463262: 843 3 3 3 4 9 5 7 5 9 46 6
72035028: 2 26 987 32 98 8 117 6
1069: 212 6 1 849 1
50223360920: 928 5 33 328 920
18815: 13 133 96 4 558
95388581922: 5 1 76 5 2 9 6 5 5 7 585
2270164: 2 7 9 293 52
5441524: 3 2 85 1 61 564 34 2 6
1076: 61 3 3 4 4 4
2282157: 319 7 7 1 54
1254937608: 5 6 699 4 724 4 8 1 5 4 2
9735: 8 2 243 2 4 7
79989614: 7 99 896 1 3
527207309: 673 45 3 87 980 54 2
3223380: 9 53 7 14 18 465
99930: 4 7 9 866 64
5470080: 85 454 13 787 80
564252: 24 2 191 26 49
5871813984: 85 6 91 6 189 8 13 98 4
80735566: 77 286 703 52 757
20499203: 8 298 87 668 287
12093339: 2 4 157 29 68 5
16792883: 1 2 836 604 2 73 7 6
977491676593: 9 2 1 5 74 916 76 593
12702104: 1 270 210 4 1
34581205: 836 5 3 4 4 3 3 6 9 57 49
10643489: 435 70 559 347 9 7
406030588798: 8 5 1 3 68 3 698 2 7 7 9
100340500685: 96 237 948 441 5
43203: 4 300 236 80 3
322535925: 616 68 27 81 95
119242816: 18 9 719 33 39 64 1 64
2776175: 58 673 67 71 4
7194: 7 133 59
701907953: 2 83 4 62 8 51 8 953
14629123: 11 9 3 18 8 8 2 5 9 3 4 22
4237: 3 56 7 60 7
334: 186 62 77 9
8716: 7 32 222 57 1
378970: 5 1 5 2 178 211 93 638
2261424: 44 16 2 1 1 5 4 5 2 678 8
3700: 415 7 1 33 761
671175: 22 7 48 83 40 535
1487916050680: 31 331 2 98 725 675 4
1514704135: 249 14 381 639 9 1 1
1715: 232 2 4 432 975 70
52378: 59 443 20 2 64
32: 7 1 4
71295537753: 3 3 86 5 501 31 89 8 99
34542: 18 327 42
2832644: 5 57 113 2 70 3 4 5 9 7 4
546019: 26 1 3 70 17
663752103951: 75 885 2 103 951
39361407117: 9 7 7 5 5 9 6 4 4 7 57 115
1112816: 314 8 443
608225: 3 37 9 18 5
10620: 99 5 48 9 7 94 1
53963240114: 593 91 240 11 2
77831461: 9 54 7 8 94 5 5 5 7 3 2 1
280640: 8 4 4 76 2 659 7 3 353 5
22673927: 249 5 760 89 287
1774013122: 17 740 131 2 4
16021618208: 4 326 68 717 26 42 6 8
130387: 2 5 5 4 6 21 5 2 34 28 75
48101318: 79 1 168 8 3 3 6
1541632303: 1 5 5 2 116 581 6 14 82
154225: 726 79 737 25
1924560677: 3 8 8 2 78 9 99 8 630 47
9573007: 327 287 4 34 3
386463: 4 7 57 6 5 6 6 9 3 5 8 63
61654284961: 139 9 666 74 961
7623216066: 4 4 146 6 5 93 843 24 7
181746: 64 284 520 2 784
466308168: 20 778 5 1 27 831
3829539362: 981 933 16 1 13 3
1289888927: 82 3 6 4 5 8 50 1 55 873
34260323963010: 9 93 6 352 98 6 5 6 968
1960810915502: 15 70 29 95 657 690
331976860905: 331 976 854 6 906
5380055: 4 890 96 11
26233385: 2 2 2 2 639 81 4 1 9 85 1
20269389221: 558 55 9 913 357 221
2282784237833: 9 8 4 8 1 6 79 2 3 6 1 833
56888859: 23 1 82 694 712 50 6
1611982: 3 730 12 366 59 1 2
1759460: 2 4 8 4 4 3 141 7 2 278
222805681: 5 906 9 7 1 6 5 7 9 4 4 81
1624808255: 3 5 15 95 4 3 4 224 19
14585438833: 3 73 9 74 3 64 24 33
23412: 2 971 398 7 5
21366575784883: 7 3 3 6 6 575 78 1 4 88 3
712636287: 8 95 5 51 937
1167610: 5 2 417 4 1 10
1780908850: 6 7 7 4 1 37 4 617 50
55250: 4 3 1 1 2 5 2 10 4 836 74
78589: 68 77 3 66 8 437 8
222410760: 4 5 8 564 8 9 5 14 331 8
16554988493568: 361 4 441 966 32 841
1380842766: 17 23 6 1 9 1 66 446 7
481725: 9 308 539 36 6 90 45
31247442135: 31 247 409 33 1 36
1450717: 68 4 267 3 269
923769: 91 21 483 56 698
73630440: 32 62 39 8 780
1529044: 5 729 8 5 418
245940029: 9 7 72 8 2 347 29 5 5 2 9
960620: 7 3 8 1 3 1 286 3 50 6 5 7
82802721: 4 43 8 6 329 52 1
472539559: 9 450 7 4 5 50 7 49
452196: 1 1 44 21 95 1
2383008: 8 74 6 6 58 5 672 6 96
435601: 50 87 6 2 38 1 3 4 5 7 4
1892: 33 5 6 8 68
529904695: 58 9 3 52 7 557 95 786
155303680: 4 76 114 9 4 4 7 2 5 4 1 4
6325771: 8 94 9 375 8 25 68
14435769: 5 3 75 5 233 882 8 4 89
84250: 337 25 3
8388299868: 9 21 5 6 9 285 2 7 5 86 8
5591700: 7 40 48 135 436
42310630: 861 7 156 6 45 799 20
3907126: 4 559 5 145 345
7181817627778: 718 181 762 77 77
114: 7 1 2 97 6
5012536329654: 5 808 4 31 87 2 4 9 6 57
14994272: 9 6 7 2 1 3 1 36 62 14 68
88: 1 2 29
37171659: 2 5 1 1 106 258 716 5 9
125547: 5 7 55 40 149
516724523: 5 4 87 6 7 52 523
8547254016: 4 7 120 1 63 68 4 21 68
6496977509286: 42 8 4 946 17 70 5 3 73
202045216: 92 6 5 9 415 2 3 9 8 54 8
2142699050: 4 3 4 2 24 4 6 7 49 3 3 2
262828: 6 900 4 713 30 8 6 32 7
56968: 477 623 2 322 4 8
7933170: 182 161 80 1 27
284718813594: 823 37 21 935 92
609005: 71 975 6 80 8 852 5 5
7664: 4 9 177 8 7 1 5 8 8 4 1 9
24519673876: 7 2 9 6 4 21 246 3 72 4
4891: 9 152 6 5 61
34731871: 6 9 8 9 88 78 4 72 2 7 99
11940400213: 4 219 6 7 6 3 7 26 8 9 7 7
177088003: 9 89 925 29 239
15730032: 8 857 8 222
48884514: 23 16 5 5 748 13 9 7 7 6
5006910: 64 88 79 1 1 587 795
950: 79 3 621 88 7
1081631943: 5 739 7 6 9 7 2 6 90 3 7 3
114117: 8 7 89 7 94 17
2364516: 67 8 1 77 308
121264948855: 137 910 78 9 977
49509: 7 1 3 72 5 1 6 6
831885228070: 31 996 9 1 692 45 35 2
46568189: 2 291 8 818 9
569680268: 831 34 537 646 629
1544813181: 9 461 92 6 6 8 29 607 3
638078: 637 44 4 633 1
4399562753007: 5 12 6 726 2 75 300 4
13364: 47 30 588 363 13
1064634076: 4 2 5 85 7 3 3 5 3 18 4 2
639290655837: 7 9 4 1 3 117 331 9 80 8
672708: 5 87 1 9 20 333 46 2
1373522976: 4 19 997 97 2 7 2 68 8
30840121: 3 63 9 89 33 1 583 4
2560185: 79 5 9 1 7 396 3 79 3 4
22388150824: 4 5 6 27 319 4 1 753 2
4314628: 1 6 1 52 16 3 4 2 6 47 2 6
9774960642281: 701 71 3 327 71 2 281
2516788936: 459 596 92 99 38
62838: 57 5 8 3 8
1718832: 2 96 895 43 1
559683: 5 1 74 7 5 4 2 1 2 6 9 27
63466: 37 7 4 48 5 4 260 82
995672: 86 87 81 79 46 65 2
193009700410: 5 5 772 969 18 86 11
167097580: 780 1 42 3 51 5
1476176: 9 53 392 607 176
6416866958: 3 558 9 62 33 48 20
2330944: 23 2 9 960 983
2411883980: 9 21 223 73 3 114 38 7
2047338: 2 909 78 580 9
11510262: 9 62 316 892 26 9
2643171379: 5 755 90 5 2 7 7 79
87781: 2 5 9 12 8 15 46 6 4 8 9
10228522: 6 96 2 852 5
11702763: 86 81 7 585 691 3
5144841: 211 1 7 236 41
6088926: 5 2 709 8 926
21656183: 7 3 652 4 186
47638073: 7 9 708 356 3 7 24 970
29882356081: 3 59 21 4 2 980 1 7 4 6 1
49010208: 3 631 1 39 346
1337526446: 47 87 56 994 48
6239232904: 6 93 2 4 81 90 1
1438200579: 3 7 5 36 850 3 1 4 4 9 8
34066: 5 2 5 94 9 5 38 2
1057: 9 128 3 8 1 410 217 8 3
676708124: 901 1 2 555 75 5
33205: 52 7 7 44 8 5 1
66709: 61 7 5 907 413 85
2475718: 6 5 14 82 7 7 4 624 6 1 1
7578683: 748 8 2 16 683
786430: 21 898 949 27 415 5
44135460: 9 23 5 6 7 8 5 8 2 1 6 359
1518946204: 166 6 9 5 4 1 565 3 2 4 2
1147031: 6 2 7 2 1 8 82 5 291 1 9 2
206732821: 8 934 52 5 89 61
36449490: 4 4 96 6 40 4 4 3 7 9 1 20
228783753138: 7 772 448 9 86 1 35 2 3
86: 6 50 16 5 9
1235045568965: 722 3 64 55 8 619 6 43
712856718: 710 93 192 1 5 711 7
5968984: 6 2 87 40 8 891 52 38
517974543: 899 1 2 57 4 8 8 23 3 1 3
74817: 6 6 8 811 6
282697802451: 2 7 221 9 6 7 290 4 90 5
271822863: 3 254 64 243 531 68 3
13512: 19 23 6 7 11
448211577679: 9 7 2 786 5 1 4 1 3 8 6 79
1968308: 98 2 250 580 8
60939986905: 132 91 6 9 2 2 621 41
4774983552: 4 99 7 5 32 8 9 18 174 6
258648: 33 3 887 7 439
5747901413760: 83 2 5 3 7 2 66 120 874
398710669: 9 81 2 645 63 49
4389: 2 55 77
21212: 4 265 6 2
6870: 3 3 7 9 8 3 2 77 3 9 4 930
42565865: 96 301 442 2 87 734
36842511: 491 75 9 8 509
165093115: 5 330 9 311 8
194448: 45 231 9 4 521 5 6 6 8 1
94388: 94 23 8 56 94
149952019: 22 1 43 640 18
5989030: 9 144 8 7 699
921784868160: 30 3 4 42 490 1 1 32 65
124045837347: 886 14 58 37 342 5
140597144622: 28 40 71 80 57 341 6
13288550: 5 9 6 7 56 3 6 1 7 5 407 2
489624800: 65 4 887 8 800
31824: 53 22 47 1 9 1 9
9761568: 16 2 5 610 15 67 3
5400210715: 4 46 2 60 2 332 9 9 754
30660861688: 8 8 7 73 8 5 190 8 22 4 8
10629: 32 8 6 3 771
20252735: 441 7 4 509 9 134
2560350: 6 73 76 38 61
7806036: 218 6 79 84 67
360894478: 3 2 37 14 5 7 7 42 8 8 8 6
27699620: 92 29 3 39 3 18
48933: 39 9 933
439188456: 2 6 3 66 4 303 89 6 97 4
3058662635: 30 582 4 625 6 8 9 61
514470819: 69 46 8 9 162 74 1 9
1362: 160 7 239
8011206990: 84 425 243 762 85
67314: 7 48 4 3 2 28
143: 2 7 10
77330133: 6 45 123 863 4 4 8 9 57
14652470880098: 8 9 27 3 3 960 785 92 6
68484217991: 796 48 907 948 263
8888898: 634 85 14 4 994
12403276: 317 6 96 4 79
1545635: 18 7 72 223 553
66790: 4 3 3 9 506
22531835: 17 2 686 966 851
26907: 8 640 261 5
1810285: 112 2 49 466 79
268104: 7 8 8 5 7 1 6 751
42855: 7 13 9 6 21
445: 44 2 3
8047: 3 60 4 5 381 2 85 1
1021: 23 7 6 256 585
1064: 6 1 1 5 2 74 5 7 1 13 71 6
402479220: 40 194 53 921 9 1
589455408: 66 1 4 4 87 2 2 82 1 6 8
33724689: 3 844 371 586 8
179340: 8 911 46 20 200
1210205016: 7 68 7 3 70 1 3 9 48 54 4
9564: 3 372 5 6 4 3 6 242 4 36
20285637: 25 5 2 4 2 9 9 81 59 8 93
94121829: 98 337 3 551 78 5 9
2922: 15 943 16 3
16854333: 87 9 4 6 3 607 7 5 32 4 6
7846808: 8 34 727 2 5 260 5 6 8
366220: 30 8 93 7 29 56 9 2 998
232546579763: 5 40 4 78 33 770 44 2
1364793638489: 5 30 9 1 562 2 41 31 19
191227442: 1 558 6 6 57 3 6 485 45
31440: 9 38 1 9 953 3 3 3 9 4 2 1
563024: 639 8 8 11 1
968436: 97 1 61 9 9 2
54483: 883 474 5 4 3
35696: 92 5 92 1 4
48802840301: 610 8 2 840 304
4640985990: 94 2 6 4 4 7 2 8 2 6 6 264
65759: 14 58 7 8 745
93478: 93 48 1
1165: 89 22 9 39 7
5626467081: 6 35 7 15 68 31 6 9 62
25705178: 265 97 178
96427474: 2 4 7 926 6 6 865 4 7 2 2
95871699683: 5 9 7 11 3 5 88 3 3 96 8 6
2461274295: 9 1 5 54 82 2 6 77 9 1 2
75444566: 443 96 281 92 4 5 68
1731805708: 91 62 989 189 785
1725: 542 2 3 18 73
3322698: 55 3 6 4 583 80 4 29 2
217862649: 2 323 3 90 4 69 61 9
299653325193: 930 6 92 35 77 5 7
3245407825: 67 78 361 2 575 31
51713982: 1 29 1 348 39 35 529 9
130867: 99 9 4 1 9 42 36 727
393375: 96 7 5 38 7 5
9640088670: 7 38 7 549 8 1 4 67 1 5 6
27977912: 3 14 9 1 8 3 1 1 2 656 9 8
22015896015: 9 7 6 5 5 3 2 965 7 60 7 8
59170: 888 6 8 6 78 6 9
252687: 1 55 349 5 11 676
2688762662709: 233 56 447 969 461
91885664071: 7 38 9 2 84 8 8 639 1 70
70719660: 208 69 284 5 764 33
6090205: 608 95 50 567 89
279814: 5 9 659 842 2 76 2 9 96
13035: 5 6 60 8 165
8830: 629 98 69 8 864
164203534: 3 910 6 1 1 6 1 3 3 45 8 2
1180515208: 3 3 5 12 96 386 91 598
201379689098: 6 3 693 342 63 50 2 96
1081964: 7 7 951 81 964
8349602882: 710 4 2 7 7 3 2 78 9 1 4 9
106930151: 8 1 193 5 3 9 7 4 7 6 3
63797700657: 6 82 9 9 21 5 629 8 2 1 6
19513155835: 272 15 717 8 37
325472: 1 4 53 8 4 7
42251: 61 68 8 69 2
950015391: 1 8 9 5 5 4 999 7 3 6 391
2488834474356: 8 9 3 6 166 1 31 45 3 6
9609639416: 901 7 592 63 8 1 418
452711265134: 8 2 813 94 44 87 4 4
3163159356: 12 345 949 27 3
520669356: 5 78 512 7 9 855 17 9
21850454: 910 50 33 2 22 52
2735378: 7 421 2 52 460 218
31544: 624 49 12 69 887
1785141121: 3 404 263 4 5 317 6 28
3813649: 55 43 545 895 7 7 9 49
125764604056: 85 4 2 6 17 4 6 470 866
5353720042: 6 2 55 1 8 3 1 7 2 888 5 2
2046728: 1 64 6 208 8
12731308: 615 115 18 6 799
75530: 83 1 1 70 13
5585555520: 445 4 2 8 530 74
60290: 7 861 5 3 9
6005643840: 6 565 16 913 3 5 7 5 6 8
13786986: 8 3 846 7 3 97 278
541296749: 737 8 39 641 8 83 9
677: 50 5 514 99 9
5929: 1 41 35 24 970
133575: 3 1 8 970 66 552 2 207
23813165: 25 7 866 61 1 53 5
321: 26 7 48 40 51
7572679: 9 1 4 1 4 6 666 601 7 2 7
21428764753409: 6 3 6 6 566 4 752 5 9 1 2
800864113: 6 3 8 64 682 3 77 377 4
581925765: 2 6 169 20 7 869 576 2
11566767: 5 102 9 836 99
2124521: 59 5 8 9 29 492
44315624521: 39 5 4 88 833 24 519
73836378: 424 347 58 3
6324: 190 54 9 2 21 12
41389305103: 643 190 4 99 44 65
2264807129: 7 4 7 6 5 5 3 98 4 4 9 13
9834346: 1 7 128 4 66 1 344
8041812452: 1 44 89 555 6 411 4 52
359572559043: 2 870 6 87 3 3 5 87 80 3
619646: 61 889 71 4 3
30132: 6 3 818 2 2 18
3867753588: 82 818 955 71 45 395
42019719768251: 2 95 1 614 4 3 8 9 4 2 5 4
67142400: 5 538 4 312 20
4859: 35 78 43
63062582: 76 975 6 2 585
66641931: 66 625 7 9 929
7652445: 19 49 41 7 2 2 365 78
49162643986: 42 153 8 9 5 3 849 8 8
8804602981773: 38 662 7 5 298 1 7 73
4113176424: 892 50 50 2 8 7 329
1117038228: 2 797 7 4 8 3 8 140 2 86
13544236: 281 482 17 19
69460233: 3 1 193 6 465 2 8 8 3 3 1

50
dat/24/re/08.txt Normal file
View File

@@ -0,0 +1,50 @@
...d............................J.................
......e.............................J.............
..........6............7..........................
........................P7........................
..................................................
.........6........................................
e..........................x.................E....
...G...A.......d...........................o......
.....A.e...........................J......8.......
................6....9.....J.............E.8......
..........d.9.........7..K....E...................
...e.....U....9................x..K...............
......A......O...........P................o.......
......................x..................M..E.....
........................x........p................
........A..................O......................
.......r.f....O.......P9..G.........m.............
u...df..r...............7.........................
.....g.............nXu......N.........K...........
..............l..........0..............p.........
.......lu...................p......o..............
....g..........l........0p..G.....F...............
.....................................8......F.....
...................................C..............
....3................G0......................M....
2...f....g..........3........P......O......F......
g......3.....0....H......................F..M.....
.............c................m...h.....M.........
...........2....l.................................
..U...c......2...........................K........
.D....................r.....f.....................
....................N.............................
.U..............h.................................
...a.............u..............C.................
c...Uj....a..6...H...................R............
...3....j................H...............m........
.......................5.......C..........4....m..
......................H.........R......N....X.....
.........h..2.................R................N..
.......................r...........q...n..........
.....c..............5.............................
..a..h....D.................................n.....
......qk..................D............1.....X....
.k..................................q.............
..k..........a.............L................1....4
......k..........RQ..5.L.j..1..................4..
..................................................
..............L.....................oX............
........Q.............L.........n.................
...........Q.D........5..........1............4...

1
dat/24/re/09.txt Normal file

File diff suppressed because one or more lines are too long

40
dat/24/re/10.txt Normal file
View File

@@ -0,0 +1,40 @@
6541001098012789610347890107654656710323
7832102127643898701256521218323465891410
8996543034556789650987434309012534892565
3887689678965876501874345892105621763676
4305678563456903416765676756898760654980
5214107852107812321254382347872108901221
6543236943056921010341291078963457654338
7896545987045430010980012569454968983549
3217830656189899121676101430356879892678
2106921043210778234585232321267898761432
3478854430345665056798743410456901050501
4569763521012552143895654501345012347670
3654012678903443212104309690432167898981
2783656987654874908765218781201254012567
1092347897893965889034765670387063013498
1001298756102456776121874989496122110901
2310891043201307655430923876565434325892
3456780103011218967649810189410145456743
2561078212320989858236702107320236787654
1232569343423874749145893678741199899873
0343454358514565632098704569632087684562
0456789969609034501347612189323456893001
1499876878798123101256543079012548762110
2387905462687678871212344568187659450223
3456012301056549960305650127691098321054
3456732102345832154454781034540107650169
2369847898738981023763692321121256743278
1078456654567670119832103400012349894361
0012387763456543208041076510123412765010
7650196892565454589107889623296503854321
8943256781074303673236908774387654983432
8912965890985210984365219985345015676541
7607834187866789875434308776236723498650
6506543045679012766923105698109894567743
5410432134988703457810014567056210754892
0322345028767845893456723459847349889701
1201276719454936712679801210738256776545
2450989805103221604589752345629145480230
2347823456012120113298943238710076591121
1056910147893012320107654109656789432012

1
dat/24/re/11.txt Normal file
View File

@@ -0,0 +1 @@
112 1110 163902 0 7656027 83039 9 74

140
dat/24/re/12.txt Normal file
View File

@@ -0,0 +1,140 @@
KKKKKKZZZZZZZZDDQQQQXXXXXXXXXXXXTTTTTTTTTTTTDHHHHHHHHHHHHHHHHHGGGGGGPPPGUUGGXXGGGGGGJJJJJJJJJIIIIIIIIIIIIIIIIIIIIDIIIIIIIIIIIKIIIIIIIIIIIIIM
KKKKKKZZZZZZZDDDQQQQXXCXXXXXXXXXTTTTTTTTTTTTTHHHHHHHHHHHHHHHHHGGGGGGGGPGUUGGGGGGGGGJJJJJJJJIIIIIIIIIIIIIIIIIIVVVIDDIIIIIIIKKKKIIIIIIIIIIIIMM
KKKKKZZZZZZZZZZQQQQQQXCCCXXXXXXTTTTTTTTTTTTTTTHHHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGJJJJJJJJJJIIIIIIIIIIIIIIIIIIVIIIIDIHIIIIIIIKKIIIIIIIIIIIIMM
KKKKKZZZZZZZZEEHQQQYQQZCCCCXXXTTTTTTTTTTTTTTHHHIIIIHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGJJJJJJJJIIIIIIIIKKKKKKIIIIIVIIIIDHHIIIIIIIIKIIIIIIIIIIIIIM
KKKKKKOOEZEEEEHHQQQYYCCCCCCTTTTTTTTTTTTTTTTTVVVIIIIHHHHHHBBBBGGGGGGGGGGGGGGGGGGGGJJJJJJJJJIIIIIIIBCKKKKKIIIIIIIIHHHHHIIIIIIIIIIIIIIIIIIIMMMM
KKKKKOOEEEEEEEHHHQQYYCCCCCCCCCTTTTTTTTTTTOOTTIIIIIHHHHHHHHHBBBGGGGGGGGGGGGGGGGGGGJJJJJJJJJIIIIIBBBCKKKKKKKIIIIIHHHHHIIIIIIIIIIIIIIIIIIIIIIMM
KKKKKKOGGEEEGHHHHQDDYYCCCCCCCOOTTTTTTTTTTTIDIIIIIIIHHHHHHBBBBBGGGGGGGGGGGGGGGGGGGGJJJJJJJJIIIIBBBBKKKKKKKKIKIIIBHHHHHIIIIIIIIIIIIIIIIIIIIIIM
KKKKTKOOGEGGGHGHDDDDDYYYCCCCCOOTTTTTTTTTTIIIIIIIIIIHHHHHBBBBBBGGGGGJGGGQGGLGGGGGGJJJJJJRRJJJBBBBKKKKKKKKKKKKKKFHHHHHHHIHHIIIIIRIIIIIIIIIIMMM
KRRRVOOGGGGGGGGGDDDDPDDYDSSCCCOOOTTOTTTTTIIIIIIIIIIHHHBHBBBBBBGGGGGJGJJGGGGGGGGGGJJJJJRRRRRWBBBBBBVKKKKKKKKKKTHHHHHHHHHHIIIIIIIIIIIIIIGIIMMM
YVRVVOOGGGGGGGDDDDDDDDDDDSSCCOOOOOOOTOOOIIIIIIIIIIIHHBBBBBBBBBGGGGGJJJJJGGGCGGFFGFFJRRRRRRRWWBBBBBBKKKKKKKKKKKHHHHHHHHHFFIIIIIIIIIIIIIGIVVMM
YVRVVVVGGGGGGGDDDDDDDDDDDDDCCOOOOOOOOOOOIIIIIIIIIIIHHHBBBBBBBBBBGGJJJJJJJJJGGGFFFFRRRRRRRRRRRBBBBBKKKKKKKKKKKKKHHHHHHHHFIIIIIIIIIIIIIIIIVVVM
YVVVVVVVVGGGGGGDDDDDDDDDDDDOOOOOOOOOOOOOOIIIIIIEEIIHHHOBBBBBBBBBBGJJJJJJJJJFFFFFFFFFRRRRRRRRRRBBBBKBKKKKKKKKKKKHHHHHHFFFFIIFIIIIZIIAIIIIVVMM
VVVVVVVVVGGGGGGDDDDDDDDDDDOOOOOOOOOOOOOOOOOOOIOOEJJHHHOBBBBBBBBBBEEJEEEEEFFFFFFFFFFFRRRRRRRNBBBBBBBBKKKKKKKKKKRHHHHHHFFFFFFFIIIIIIIIBBIIVMMM
VVVVVVVVVGGGGGDDDDDDDDDDDDEOOOOOOOOOOOOOOOOOOOOOEEJHHOOOBBBBGGGGBEEEHEEXFFFFFFFFFFFFRRRRRRBNBBBBBBBBKKKKKKKKKKHHHHHHHFFFFFFFIIIIIIIIBBVVVMMM
VVVVVVVVGGGGGDPDDDDDDDDDDDEEOOOOOOOOOOOOOOOOOOOOEEJEOOOOBGGGGGGGHEEEEEEFFFLFFFFFFFFRRRRRRRBBBBBBBBBBBKKKKKKKKFHHHHHFFFFFFFFIIIIIIIIIIVVVVVMM
VVVVVVVVGGGGGDDDDDDDDDDDDDDEOOOOOOOOGOOOOOEOIIOOEEEEOOOOOGGGGGGGEEEEEEEFFFFFFFFFFFFFRDRRXXBBBBBBBBBBBKKKKKKKKKBBHHHHFFFFFFFIIIIIIIIIVVVVVVLM
VVVVVVVVWGGGGDDDDDDDDDDDDEEEOOOOOOGGGOOOOOOIIIIIEEOOOOBOOGGGGGGGUEEEEEGUFFFFFFFFFFFFDDDDMMSBBBBBBBBBBBBBKKKKKKBBBHHFFFFFFFFIIIIINNWIVVVVVVLL
VVVVVVZZZFGGGRDDDDDDDDDDDEOOOOOOOFFFGOGOOIIIBIBBBEOBBBBBBGGGGGGGEEEEEGGUUFFFFFFFFFFFDDDDDMMMBBBBBBBBBBBKKKKKKBBBBHHFFFFFFFFFIINNNNNPPVVVVLLL
VVVZZZZZZZIGRRADADDDDDDDDEOEEOYYGFFGGOGGGIIIBBBBBEBBBBBBBGGGGGGGFEEEGGGGUUFFFFFFFFFHDVVVVVVMBBBBBBBBBBBKKKKBBBBBBBBBFFFFFFFRRRRNNNNPPVVLLLLL
VVZZZZZZZZZRRRADAADEEEDDDEEEEOYYGGGGGGGGGGIBBBBBBBBBBBBBBGGGGGGGEEEEBGGGUUFFFFFFFFFHHVVVVVVMBBBBBBBBBPBKKBBBBBBBBBBFFFFFFFFFRBRNNNNNNNVLLLLL
VZZZZZBZZZNAAAAAAAAEEEEEEEEEGGYYGGGGGGGGGIIBBBBBBBBBBBBBBGGGGGFFFEEBBGGGGCFFFFFFFFFHHVVVVVVMBBBBBBBMMMMMBBBBBBBGBBBFFFFFFFGGBBBNNNNNLLLLLLLL
BBBBBBBZZNNNAAAAAAEEEEEEGEEEEGYYGGGGGGGIIIIBBBBBBBBBBBBBBGGGGGFFCCCBGGGCCCFCCWWWWWWWHVVVVVVMMBBBMMMMMMMMBBBBBBBGBGGTTFFFFFFFFBBNNNNNLLLLLLLL
JBBBBBBBZZNAAAAAAAAAAGGGGGGEGGGGGGGGGGGGGIHDBBBBBBBBBBBBBBFFFFFCCCCCGGGCCKCCCWHHHHHHHVVVVVVMMVVVVVVMMMMMBBBBBBGGBGGTFFFFTFFFFBBBBBBBBBLLLLLL
JJJBBBBBBAAAAAAAAAAAGGGGGGGEGGGGGGGGGGGGIIHDBBBBBBBBBBBBBBBBFFFCZCCCCCCCCCCCCHHHHHHHHVVVVVVMMVVVVVVMMMMMBBBBBBGGGGGTTFFTTFFFBBBBBBBBBBLLLLLL
JJJBBBBAAAAAAAAAAAAAGGGGGGGGGGGGGGGGGGGGIHHDHHHHBBBBBBSSSSFFFFFCCCCCCCCCCCCCCHHHHHHHHVVVVVVHHVVVVVVMMMMMBBBBBBGGGGGTTTTTTFHFBBBBBBBBBBBLBBLV
JJJJJJAAAAAAAAAAAAAAGGGGGGGGGGGGGGGGGGGHHHHHHHHHHIJJJJJSSSSFFFCCFFCCCCCCCCCCCHHHHHHHHVVVVVVVVVVVVVVMMMMMMBBBBGGGGGGGGGTTTLLBBBBBBBBBBBBBBBBV
JJJJJJAAAAAAAAAAAAAAGAAGGGGGGGGGGGGGGGGHHHHHHHHHHJJJHJSSSSSFFFFFFCCCCCCCCCCCCHRHHHHHHVVVVVVVVVVVVVVGMMMMMBBBBGGGGGGGGGTTLLLLLLBBBBBBBBBBBBBB
JJJJJJAAAAAAAAAAAAAAAAGGGGGGGGHGGGGGGGGHHHHHHHHHHJJJJJJJSJSFFFFFCCCCCCCCCCCCCCHHHHHHHVVVVVVVVVVVVVVGGMMCMBBBGGGGGGGGPGGGLLZLLLBBBBBBBBBBBBBB
JJJJJJAAAAAAAAAAAAAAGAGGGGGGGGGGGGZZGHGHHHHHHHHHJJJJJJJJJJSFFFFFCCCCCCCCCCCCCCHHHHHHHHHOHHOOMVVVVVVGGJGGIBBBTGGGGGGTGGGLLLLLLLLBBBBBBBBBBBBB
JJJJJAAAAXAAAAAAAAAAGGGGGGGGGGGGGGZEEEEEEEHHHHHHJJJJJJJJJJFFFFRFFFFCCCCCCCCCCCCHHHHHHHHOOOOOMVVVVVVGGGGGGKKKGGGGGGGTGGGLLLLLLLLLBBBBBBZBZBBB
JJJJJJJJXXAAAAAAAAAAGGGGGGGGGGGGGGZEEEEEEEHHHHHHJJJJJJJJJJJFFFRRFFFCCCCCCCCCICCHHHHHHIIOOOOOOGGGGGGGGGGGKKKKKGGFGGGGGGGLLLLLLLLLLBBBBZZBZZZE
JJJJJJJJJJAAAAAAAARGGGGGGGGGGGGGZZZEEEEEEEHHHHHJJJJJJJJJJJJFRRRRRRFFIICCCCIIIICHCCHYYIIOOOOOGGGGGGGGGGGGGGKKKGGGGGDDDDDPLLLLLLLBBBBBBZZZZZZZ
JJJJJJJJJJAARRRRRRRRGGGGGGGGGGGGZZZEEEEEEEHHHHHJJJJJJJJJJJJJRRRRRRFFFIIIIIIICICCCCCIIIIOOOOOGGGGGGGGGOJJJKKKYRGYLLLLLLLPPLLLLILBBBBBBZZZZZZZ
JJJJJJJJJJJRRRRRRRRRRGGGGGGGGGGGZRZEEEEEEEHHHHHHHJJJJJJJJJJWRRRRRRFRFIIIIISSSSSSSSSCIIIIIIIOOOGGGGGGGGJJJKYYYRYYLLLLLLLPLLLRLLLLBBBBBZZZZZGU
JJJJJJJJJJRRRRRRRRRRGGGGGGGGGGGRRRREEEEEEEHHHHHHHHHJJTJJJWWWRRRRRRRRRIIIIISSSSSSSSSIIIIIIIIOOOGGGGGYYGJJYYYYYYYLLLLLLLLPPRRRLLPYBBBBBZZZZZZU
IJJJJJJJJJRRRRRRRRRRRRRGGGGGGGGGRRREEEEEEEHHHHHHHHHJJTJTJWWRRRRRRRQQQIIIISSSSSSSSSSIIIIIIOOOOOOOJYYYGGJJJYYYYYLLLLLLLLLPPPPRLYYYYBBBBZZZZZZU
IJJJCCCJJRRRPRRRRRRRRRGGGGGGGRRRRRREEEEEEEHHHHHHHHHHJTTTAWAAAARRRRRIIIIIISSSSSSSSSSIIIIIIIIIOOJJJJJJGJJJJLLLLLLLLLLLLLLPPPPPYYYYBBBBUZZZZUUU
IJJJCCCPPPPPPPPRRRDDDRGGRGGRRRRRRRCEEEEEEEHHHHHHHHHHJJTTAAAAAARRRRRIIIIIISSSSSSSSSSIIIDDDDDXFOJJJJJJJJJJYLLLLLLLLLLLLLLPPYYYYYYYYYUUUUZUUUUU
IJIJCPPPPPPPPPDRRDDDDRRRRRRRRRRRRRGGGGGCCHHHHHHHHHIIJJAAAAAAAAAARRIIIIIIISSSSSSSSSSIIIDDDDDIFOJJJJJJJJJJJLLLLLLLLLLLLLLPYYYYYYYYYYUUUUUUUUUU
IIIIPPPPPPPPPPDDRRDDDDRRRRRRRRRRRRWWGGGGCHHHHHHHHHHIIIAIIAAIIIIIIIIIIISSSSSSSIIIIIIIIIDDDDDFFJJJJJJJJJJJJJHYYYYLLLLLLLLYYYYYYYYYYUUFUUUUUUUU
IIIIIIPPYPPPPPPDDDDDDDRRRNRRRRRRRWWWUUPPHHHHHHHHHHHIIIIIIAAIIIIIIIIIIISSSSSSSIIIRRIIIIDDDDDFFJJJJJJJJJJJJJHHCYYLLLLLLLLYYYYYYXXYKKTTTUTTUUUU
IIIIIIIXPPPPPPPDDDDDDDDDRNNRRRRRRWWUUUUPHHHHHHHHHHIIIIICIIIIIIIIISSSSSSSSSSSSIISUUIIIIDDDDDFFJJJJJJJJJJJJJJHCCCLLLLLLLLLLYYYXXXXKKTTTTTTUUUU
IIIIIIIXPPPPPPPPDDDDDDDDNNNNGUBBBUWWUUUPUHHHHHHHHHIIIICCIIIIIIIIISSSSSSSSSSSSIUUUUDDDDDDDDDDEJJJJJJJJJJJHHHHCCCLLLLLLLLQLYYYXXXXTTTTTTTTUUUU
IIIIIIIXPPPPPPPPDWWWWWDNNNNNGUUUUUUUUUUUUDHHHHHHHHHIICCCCCIIIIIIISSSSSSSSSSSSIIHUVDDDDDDDDDDFVVRRRRRRJJHHHHHHCCCCCLLLLLLLLYLXXXTTTTTTTTTUUUU
IIIIIIXXXPPPPPPPPPWWWWNNNNNNNUUUUUUUUUUUUUPPHHHHHHHLLLCCCCCCIIIIISSSSSSSSXIIIIIHHIDDDDDDDDDDVVVRRRRRRJHHHHHCHCCCCLLLLLLLLLLLLXXXXXTTTTTTUUUU
IIIXXXXXXOXPPPPPPPPPNNNNNNNNNUUUUUUUUUUUUBPPPHPPHLLLLLLCCCCCIIIIISSSSSSSSXXIXIIHHHDDDDDDDDDDKKVRRRRRRRRHHHHCCCCCCLLLLLLLLLLLLLXXXXTTTTTTTUUU
IIIXXXXXXXXPPPPPPPNNNNNNNNNNNNUUUUUUUUUPPPPPPHPPHLLLLLLCCCCIIIIIISSSSSSSSXFFXHHHHHDDDDDDDDDDKKKKKKKKRRRHRRRRRRRRCLLLLLLLLLLLLXXXXTTTTTUUUUUU
IIIXXXXXXTTPPPPPPPPNNNNNNNNNNNNUUUUUUUPPPPPPPPPPPTLLLLLCCCCCRIIIISSSSSSSSXFXXXHHHHDDDDDIIIIIKRKKKKKKRRRCRRRRRRRRCCLLLLLLLLLLLXXXXXTTTUUUUUUU
IIIIXXXXXXTTTPPTTTTTXNNNNNNNNNNNUUUUUDPPPPPPTTPPTTLLLLLCLLCRRRIRRSSSSSSSSXXXOXXHWHDDDDDHINNNKKKKKKKKRRRCRRRRRRRRCCCLLLLLLLLLLXXXXXXTLLLLUUUU
IIIIXXXXXXTTTTTTTTTTXNNNNNNNNNNNNUUUUUHHHHPPPTTTTTTLLLLLLCCRRRIRRSSSSSSSSXXXWWWWWWDDDDDHDNNNKKKKKKKKRRRCRRRRRRRRRRRRRLLLLLLLXXXXXXXXLLLUUUUU
IIIIXXXXXXTTTTTTTTTTTNNNNNNNNNNNNNNHHHHHHHHTTTTTTTLLLLLLLRHRRRRRRSSSSSSSSXXWWWWWWWDDDDDDDNKKKKKKKKKKKHHCCCRRRRRRRRRRRMLVVLLLXXXXXXXXXXLLLUUU
IIIIXXXXXXTTTTTTTTTTTTTNNNNNNNNNNNNNNNHHHTTTTTTTLLLLLLLLLRRRRRRRRRRRRQQXWXXWWWWWWWDDDDDDDDDDKKKKKKKKKHHCCCRRRRRRRRRRRMLTTXXXXXXXXXXXXXLLLLUU
IIIIXXXXXTTTTTTTTTTTTNNNNNNNNNNNNNNNHHHHHTTTTTTTLLLLLLLLLRRRRRRRRRRRRRWWWXXWWWWWWWWWHHDDDDDDDDDDDDKKKKHCCXRRRRRRRRRRRLLTTXXXXXXXXXLLLLLLLLUU
UUUUURXXXXTTTTTTTTTTTTCNNNNNNNNNSNNNHHHHHTTTTTTTTTTTLLLLLRRRRRRRRRRRRRWWWWWWWWWWWWWHHHFDDDDDDDDDXXXXKKHHXXRRRRRRRRRRRTTTTXXXXXXLXLLLLLLLLLUU
UUUUURXXQHHTTTTTTTTTTTCCNNNNNNBNENNHHHHHHTTTTTTTTTLTLLLLRRRRRRRRRRRRRRRWWWWWWWWWWWWHFFFDDDDDDDDXXXXXKXHHXXXXXCCRRRRRRTTTTTXXXOOLLLLLLLLLLLLU
UUUUUUXSHHHHTTTTTTTTTTCNNNNNNNNNENHHHHHHTTTTTTTTTTLLLLLLLLRRRRRRRRRRRRWWWWWWWWWFWWFFFFFDDDDDDDDXXXXXXXXXXXXXXCCRRRRRRTTTTTXOOOOLLLLLLLLLLLLU
UUUUUUUSSHHHHTTTTTATCCCKKKKKKKEEEHHEHHTHTTTTTTTTTTLLLLWLWLRRRWWRRRRRRRRWWWWWWWWFWFFFFFFDDDDDDDDDXXXXXXXXXXXXJJJRRRRRRTTTTTOOOOLLLLLLLLLLLLLU
UUUUUUUSHHHHHHTTTTTCCCCCCKKKKEEEEEHEEHTTTTTTTTTTTLLWLLWWWWMWWWWWRRRRRRRWWWWWWFFFFFFFFFDDDDDDDDDDXXXXXXXXXXXXJJJRRRRRRRTTTTTOOOOOFLLLLLLLLLUU
UUUUUUUHKHHHHHHHTHTZCCCCCKKEEEEEEEEEHHHTTTHHHHTTTLLWWWMWWWWWWWWWRRRRRWWWWWWWFKFFFFFFFFFDDDDDDDDDDXXXXXXXXXXXJJJTTTTRRRTOOOOOOOOOLLLLLLLLLLUU
UUUUUUUHHHHHHHHHHHTZCCZZNNEEEEEEEEEENNHHHHHHHHTTTLLWWWWWWWWWWWWWRRRRRWWWWWFFFFFFFFFFFFFDDDDDDDDDXXXXXXXXXXXXXJJTTWTRRROOOOOOOOOOOORLLLRLLUUU
UUUUUUUUUHHHHHHHHHTZZZZZNXXXXXXXXEEEENNHHNNUUUUUUWWWWWWWWWWWWWWWWIRRWWWWWWWFFFFFFFFFFUUXDDDWWDWDDXXXXXXXXXXXJJJTTTTRRROOOOOOOOOOORRRLLRUUUUU
UUUUUUUUHHHHHHHHHHTHHZNZZXXXXXXXXEEHHNNNNNNNUUUUUUWWWWWWWWWWWWWWWIIWWWZWWWWWFQQFFFFFFFUUDDDWWWWXXXXXXXXXXXXJJJTTTTTRRROOOOOOOOOOORRRRLRUUUUU
UUUUUUUUGHHHHHHHHHHHHHNNNXXXXXXXXEEEENNNNNNUUUUUUUUWWWWWWWWWWWWRDDZZZWZZWWWWQQQQFJFLFFUDDDXWWXXXXXXXXXXXXXXJJJRRRRRRRROOOOOOOOOOORRRRRRUUUUU
UUUUUUUUHHHHHHHHHCHHHHHHNXXXXXXXXENEEEENNNNUUUUUUUUUUWWWWWWWWWWWDGZZZZZZWZWWQQQQQFFFRFUUXXXXXXXXXXXXXXXXXRXXJJRRRRRRTTOOOOOOOOOOORRRRRRUUUUU
UUUUUUUUUHHHHHHHCCHHHHHHHXXXXXXXXNNEENNNNNNNUUUUUUUUUWWWWWWWWWWWDGDZZZZZZZZWZQQQQFFRRUUUXXXXXXXXXXXXXXXXXXXJJJRRRRRRTTTOOOOOOOOXGRRRRRUHUUUU
UUUUUUUUUHHHHHCCCHHHHHHHHXXXXXXXXNNNNNNNNNNNUUUUUUUUWWWWWWWWWWDDDDDZZZZZZZZZZQQQQQFRXXXXXXXXXXXXNXSSSSXXXYYGGTRRRRRRTOOOOOOOOHGGGGGRRRUUUUUU
UUUUUUUUUHHHEHQCCHHHHHHHHXXXXXXXXNNNNNNNNNNNUUUUUUUUWWWWWWWWWWDDDDDZZZZZZZZZZQQQQQQXXXXXXXXXXXXXXSSSSSXXYYYYGGRRRRRRWWOOOOOOOOGGGGGRRRUUUUUU
UUUUUUUUIHEEEQQQCHHHHHHHHXXXXXXXXNNNNNNNNNNNUUUUUUUUUWWWWWWWEEZDDDZZZZZZZZZZIZQQQQQXXXXXXXXXXXXXXSSSSSXYYYYSGGGGTWWTTWOODOOOGGGGGGGRRRRRUUUU
UUUUUUQKQQQQEQQCCCHHHHHHHXXXXXXXXXXXXXXXNNYYUUYUUUUUUUUWWWWEEEZZZZZZZZZZZZZZIZQQQQQXXXXXXXXXXXXXSSSSSSSSSSSSSGGOTWWWWWWVDDDOIGGGGGGGRRRRRUUU
VUUUUQQKQQLQEQQQCCHHHHHHHXXXXXXXXXXXXXXXNNBYYUYUUYUUUUWWWCWEEEEEZZZZZZZZZZZZZZZQQQQXXXXXXXXXXXXXSSSSSSSSSSSSSSOOSWWWWWVVVDGGGGGGGGGGGRRRRUUR
VUUVQQQQQQQQQQQQQCHHHHHHHHHNNNXXXXXXXXXXNXYYYYYUYYUUUUWWWWWWEEEEZZEZZZZZZZZZZZZQQQQQXXXXXXXXXXXSSXSSSSSSSSSSSOOOSWWWWWVVVVRRRRGGGGGRRRRRRRRR
VVVVQQQQQQQQQQQQQQXHHHHHHHHNHNXXXXXXXXXXXXXYYYYYYYUUUUEEEEEEEEEEEZEEZFZZZZZZZZZQQQQQXXXXXXXXXXXXXXSSSSSSSSSSSSSSSWWWWVVVVVVRRGGGGGGRRRRGGRRR
VVVVQQQQQQQQQQQQQQQHHHOHHHHHHNXXXXXXXXXXXXXYYYYYYYUUUUUEEEIIIIEEEEEEEFFZZZZZZQQQQQQQXXXXXXXXXXXXXXSXXSSSSSSSSSSSSWWVVVVVVVVVVGGGGGPGRRGGGRRR
VVQQQQQQQQQQQQQQQQQKHFOHHHHHNNXXXXXXXXXXXXBYYYYYYYTUUUUEEIIIIIEEETTTEEFFVZZZQQQQQQXXXXXXXXXXXXXXXXXXSSSSSSSSSSSSPVVVVVVVVVTTVTGGGGGGGGGGGGRR
VVQQQQQQQQQQQQQQQKKKOOOOOHHNNNXXXXXXXXXXXBBYYYYYYYYUUUUEEEIIIEEETTTEEFFFFFCCQQQQQQQXIXOXXXXXXXXXXXXXSSSSSSSSSSSSSVVVVVVVVVTTTTGGGGGGGGGGGRRR
VQQQQQQQQQQQQQQQQKQOOOOOONNNNNNNBBBBBBBBBBBYYYYYYYYEEEEEEEIIIIIETTTEFFFFCCCCQQQNNNNIINOXXXXXXXXXXXXXSSFSSSSSSQSSOQVVVVVVVVGGGGGGGGGGGGGRRRRR
VVQQQQQQKFQQQQQQQQQOOOOOOONNNNNNBBBBBBBBBBBYYYYYYYYYYEEEEEIIIIEETTTTFFFJFCCQQQQNNNNNNNNVVXXXXXXXXXSSSSFSSSSSQQQQQQQQVVVVVVVGGGGGGGGGGGGGGGRR
VVQQIIIQFFQQQQQQQQOOOOOOOONNNNNBBBBBBBBBBYYYYYYYYYYJJEEEEEIEIITTTTTTFFFFFFFQNNNNNNNNNNNAVXXXXXXXXXSSSFFFSSSSQQQXQQQQQVVVVVGGGGGGGGGGGGGGGGRR
VVVIIFFFFFFFQQQQQOOOOOOOOOOONNBBBBBBBBBBBYYYYYYYUYYYEEEEEEEEETTTTTTFFFFFFFQQNNNNNNNNNNNAXXXXXIXXXXSSFFFFSSFFQQQQQQQVVVVVVVGGGGGGGGGGUGGGURRR
VVVIIFFFFFFFFQQOOOOOOOOOOOOOOOEEEBBBBBBBYYYYYYYYYYUEEEEEEEETETTTTTCCFFFBFFNNNNNNNNNNNANAXXXXXIXXXSSSFFFFFFFFFQQQQQQSVVXVVVWGGGGGGGGGUGGUUURR
VVIIIFFFFFFFFQQOOOOOOOOOOOOOOOEEEEEBBBBBYYYYYYYYUUUEEEEEEETTTTTTTTCCFFFFFFNENNNNNNNNAAAAXXXXXXXXHAAFFFFFFFFFFQQQQQQQQLVVVVWWGGGGGGGGUHHHUUUU
VFFNIFFFFFFFFQQOOOOOOOOOOOOOOOEEEEEEEEEBBYSYYYYUUUUUHHEETTTTTTTTTTTFFFFTDTKNNNNNNNNNAAAAAUUUUUUUUAAAFFFFFFFFQQQQQQQQMMMQVVVURGGGGGGUUUUUUUUU
VFFFFFFFFFFFFFQOOOOOOOOOOOOOOEEEEEEEEEEEEUUUUYUUUUUUUHEEETTTVVVVVVVTFFFTTTKKKNNNNNNBAAAAAUUUUUUUUAAAFFFFFFFFQQQQQQQMMMMMVVUUUGGDDDDUUUUUUMUU
VVVFFFFFFFFNNNNNNNOOOOOOOOOOEEEEEEEEEEEEUUUUUUUUUUUUUUEEVVVVVVVVVVVVTTTTTKKYNNNNNNSAAAAAAUUUUUUUUAAFFFFFFFFFQQQQQQQSMMMMMRUUUUGGGDUUUUUUUUWW
VVVFNNNNNNNNNNNNNNOOOOOOOOOOOEEEEEEEEEEEKUUUUUUUUUUUUUKKVVVVVVVVVVVVVSTTTKYYYNYNNFAAAAAAAUUUUUUUUAAAFFFFFFFFQQQQQQQQMMMMMRRUUUGUUUUUUUUUUUUU
IIIINNNNNNNNNNNNNNOOOOONOOOOOEEEEEEEEEEEUUUUUUUUUUUUUUUUVVVVVVVVVVVVVPPTTTTYYYYYYAAAAUUUUUUUUUUUUAAHZFFFFFFFZQQQQQJMMMMMMMUUUUUUUUUUUUUUUUUH
IIIFNNNNNNNNNNNNNNOOONNNOOOEEEEEEEEEEEEEGUUUUUOUUUUUUKUUVVVVVVVVVVVVVPPYYYYYYYYYYJAAQUUUUUUUUAAAAAHHHHFFFFFFQQQQQQMMMMMMMMMUUUUUUUUUUUUUUUUU
IIIINNNNNNNNNNNNNNZNNNNNNNONEEEEEEEEEEEEGGEEUUOUUUIIIVVVVVVVVVVVVVVVVYYYYYYYYYYYJJCBBUUUUUUUUHHAAAHHHFFFFFFFFFQQQQCMMMMMMMUUUUUUUUUUUUUUUUUU
IIIINNNNNNNNNNNNNNNNNNNNNNNNNNEEEEEEEEEGGGEEUOOOIIIIIVVVVVVVVVVTTTTTYYYYYYYYYYYYYJJJBUUUUUUUUHHAHHHHHFFFFFFFFFQQQQCMMMMMMMUUUUUUUUUUUUUUUUUH
IIINNNNNNNNNNNNNNNNNNNNNNNNNNNNNEZZEEEEEGGEEEOOOKKIIIVVVVVVVVVVTTDDQYYYYYYYYYYYYYJJJJUUUUUUUUHHHHHHHHFFFFFFFNQQQQQMMMMMMMRMMUUUNUUUUUUUUUUHH
IIINNNNNNNNNNNNNNNBNNNNNNNNNNNNNZZZZZEEVGGGEEOOOKKKKKVVVVVSGGGTTTDQQYYYYYYYYYYYYJJJJJUUUUUUUUHHHHHHHVFFFFFFFFQQQQQQMMMMMMMMSUSUUUUUUUUUUUHHH
IIINNNNNNNNNNNNNNNNNNNNNNNNNNNNNZMZZEEEEOOEEEOOOOOKKKVVVVVSSSGGGQQQQQYYYYYYYYYYYYAAAAUUUUUUUUUUUUUUHHHFFFFFGGGQQQQQQMMMMMMMSMSUUKKKUUUUUHHHH
IIINNNNNNNNNNNNNNNBNNNNNNNNNNNNNZMMZZZOOOSOOOOOOOOKKKVVVVVSSSGSSSQQQQQQYYYYYYYYAAAAAAAAAAAAHUUUUUUUHGGFFFGGGGGGGQQGGMMMMMMMSMMEEEEEUUUUUHHHH
IIINNNNNNNNNNBBBBBBNNNWNNNNNNNNNMMMMOOOOOOOOOOOOOOOOKKKKSSSSSGSKQQQQQQQQYYYYYYYYAAAAAAAAAAAFUUUUUUUGGGGFGGGGGGGGQQGGMMMMMMMMMMEEEEEUUUUHHHHH
IIINNNIEJENNNBBBBBNNNNNNNNNNNNNMMMMMOOOOOOOOOOOOOOOKKKKSSSSSSSSSSSQQQQRQYYYYYYYYYYAAAAAAAAFUUUUUUUUGGGGGGGGAAAGGGGGMMMMMMMMMMMMEEEEUUHHHHHHH
IIINNNYYYYYPBBBBBBBNNFNNNNNNMMMMMMMMOOOOOOOOOOOOOOORRRSSSDRSSSSSSQQQQQQQQYYYYYYYYAAAAAAAAAFUUUUUUUUGGGGGGAAAAHAGGAAMMMMMZZMMMEEEEEEUUHHHHHAA
IIINNNYYYYYYYLBBBBNNHHHHNNMMMMMMMMMMMOOOOOOOOOOORRRRRRRRSSRRSSSSHQQQQQQQQYYYYYYYYYYAAAAAAAFUUUUUUUCGGGAAAAAAAAAAGAAMMMMZZZMEEEEEEEEUAAHHAAAA
IIIIYYYYYYYLLLBBBBBBHHHHHNNGMMMMMMMMMOOOOOOOOOOORRRRRRRRRRRRZRSRROQQQQQQQYYYYYYYYYAAAAAATTTUUUUUUUCCGAAAAAAAAAAAAAAMMMMMMMEEEEEEEEEEAAAAAAAA
IIIIIYYYYQQQLBBBBBBBHHHHHHHHHHMMMMMMMOOOOOOOOOORRRRRRRRRRRRRRRRRROQQQQQQQYYYYHYYYAAAATTTTTTUUUUUUUUCAAAAAAAAAAAAAMMMMMMMMMMEEEEEEEEEAAAAAAAA
IIYIIYYYYYQLLLBBCCBHHHHHHHMMHHMMMMMMMOOOOOOORRRRRRRRRRRRRRRRRRRROOOOOOQQQYYYHHHYYAAAAAATTTTTTTUUUUUCCCAAAAAAAAAAAMMMMMMMMVVVEEWWEEEEAAAAAAAA
YYYIIYYYYYQYYYCCCBBHHHHHHHHMMMMMMMMMMOOOOOOOOGRLYRRRRRRRRRRRRRRBOOOOOOONNNNYHHHHHAAAATTTTTTTTTUUUUUCCCAAAAAAAAAAAMMMMMMMVVVVVWWWWEEEAGGAAAAA
YYYYIYYYYYYYYYYCHIHHHHHHHHHMMMMMMMMMMMOOOOOOOGRRYYRRRRRRRRRRRROOOOOOOOOOHNHHHHHHHHHAAAAATNTTTTUUUUUCCCCCAAAAAAAAAAAMMMMMMMVVWWWWWEWWWWGAAAAA
YYYYYYYYYYYYYCCCHHHHHHHHHHMMMMPMMMMAMMMMOOOOOYYYYYRRURRRRRRRQQQOOOOOOOOOHHHKHHHHHHAAAAAATNTTTTUUUUUCCNCCAAAAAAAAAAAMMMMMMMMVWWWWWEWWWWGAAAAA
YYYYYYYYYYYYYCCCCHHHHHHHHMMMMMPMMMMAAMMMMOOOSYYYYYYYURRRRRRRQOOOOOOOOOOOOOHHHHHHHHHAAAAANNETTTTTWWWWWNNXAAAAAAAAAAAMMMMMMLWWWWWWWWWWWGGAAAAA
GYYYYYYYYYYYYCCCCHHHHHHHPMMMPPPPPMMAHMMMMSSSSSYDYYWWUURZZRVQQOOOOOOOOOOOOOHHHHHHHHHAAAAANNNNCTNTTWWNNNNXAAAAAAAAZZZZMMMZWWWWWWWWWWWWWGAARAAA
YYYYYYYYYYYYYYCCCHHHHPPZPPPPPPPPMMAAAAATMASSSYYYWWWWWRRRZVVVQOOOOOOOOOOOOOOOOHHHHHHJNNNNNNNNNENWWWWNNNNXNAAAAAAAAZZZZMMZZWWWWWWWWWWWWGAAAAAA
YYYYYYYYYYYYYCCCNHHHPPPPPPPPPPPPMMAAAAATTASSWPYYWWWVWZRZZVVQQOOOOOOOOOOOUOOUUUHHHHHJNNNNNNNNNNNNFWWNNNNNNNNAAAAAAZZZZZZZZWWWWWWWWWWWGGAAAAAA
OYYYYYYYYYYCCCCCNNNNNNPPPPPPPPPPMMMAAAAAAAAAWWYWWWWWWZZZPQCCCCCCCCCOOOOOUUUUUUJHJJJJJNNNNNNNNNNZFFFFNNNNNNZAAAAAZZZZZZZWWWWWNNDWDGGGGGAAAAAA
OYYYYYYYYYXNNNNNNNNNSSPPPPPPPPPPMJAAAAAAAAAAWWWWWWWWZZZPPQCCCCCCCCCOOOOBBUUUUUJJJJJJJNNNNNNNNNZZZZZZZNNNNNZZAAZZZZZZDDDDDWDDDDDDDGGGGGGAAAAA
OYYYYYXXXXXOONNNNNNNSSSSPHPPPPPJPJJJAAAAAAAAWWWWWWWWZZZPPPCCCCCCCCCOOOBBUUUUUUJJJJJJJNNNNNNNNNNZZZZZZNNNZZZZAZZZZZZZZDDDDDDDDDDDDGGGGGAAAOOA
OOYYYIXXXMXOXXXNNNNNSSSSSPPPPPJJJJJJAAAAAAAAWWWWWWWWZZZPPPCCCCCCCCCOOOOBUUUUUUJJJJJJNNNNNNNNNNNZZZZZZZNNZZZZZZZZZZZZZDDDDDDDDDDDDDDGGFHHAOOO
OYYOOXXXXMXXXXNNNNNNNSSSSPPPJJJJJJJJAAAAAAAAWWWWWWWWWZZPPPCCCCCCCCCKKOBBKUUUUUJJJJJJNNNNNNNNNZZZZZZZZZZZZZZZTZZZZZZZZDDDDDDDDDDDDDGGFFHHAOFF
OOOOOXXXXXXXXXXNNNNNNSSSSSSPPJJJJJJJJAAAAIIWWWWWWZZZZZZPPPCCCCCCCCCKPBBKKKUUUJJJIINNNNNNNNNNNNZZZZZZZZZZZZZZTZZZUUUUUDDDDDDDDDDDDDFGFFHHFFFF
OOOOXXXXXXXXXXNNNNNNNSSSSSSPJJJJJJJJJAAAVDWWDWWWWWZZZZZPPPCCCCCCCCCPPKKKKKUUJJJJIIJNNZZZNNNNNNZZZZZZZZZTTTZTTTTUUUUUUWDDDDDDDDDDDKFFFFFHFFFF
XXXXXXXXXXXXNNNNNNNHDHHHHSSPJJJJJJJJJJADDDDDDWWWWWWZZZZPPPPPPPPPPPPPXKKKKKUJJHHHHIIINZZNNNNNNZZZZZZZZZZTTTTJTTTTUUSUWWDDDDDDDDDDDFFFFFFFFFFF
XXXXXXXXXXXXNNNNNNNHHHHHHHHHJJJJJJJJJJDDDDDDDWWWWWLZZZZZZPPPPPPPPPPPPKAKKKUUUHHIIIIINNZZZNNNNZZZZZZZZZZZBTTTTTTTUUUWWWWDDDDDDDDDDIFFFFFFFFFF
XXXXXXXXXXXXKKKNNNNHHHHHHHHHJJJJJJJJJDDDDDDDDDDLLLLZZZPPPPPPPPPPPPPPPPAAAKUUEHHIIIIIIIZZZZNNNNSZZZZZZZZZZTTTTTTTUUUWWWWWDDDDDDDDDFFFFFFFFFFF
XXXXXXXXXXXKKKNNNNNHHHHHHHHHHHJJJJJJDDDDDDDDDDDLLOOZZZZZZPPPPPPPPPPPUPAAAEUDEEEEMMMIIIIZZZNNNSSZZZZZZZZZZTTTTTTTTTWWWWOWDDDDDDIDFFFFIFFFFFFF
XXXXXXXXXXKKKNNNNNNNHHHHHHHHHHZJJJJJJTDDDDDDDDDLOOOOOPPPPPPPXXXXGXXXUUEEEEDDEEEEMMMMMMIMZZZZZZZZZZZZZZZZLLTTTTTTTTWWWOODDDDDDDIIIIIFFFFFFFFF
XXXXXXXXXXKKKNNNNNNNHHHHHHHHHHHHHHLLLLLLLLLLDDDDOOOOOOOPPPPPXXXXXXXEUUUEEEEEEEEEMMMMMMMMMZZZZZZZZZZZZZLLLTTTTOOTTWWOOOOKKDDDDDIIIIIFFFFFFFFF
XXXXXXXXXKKKKKNOOHHHHHHHHHHHHHHHRRLLLLLLLLLLDDDDOOOOOOPPPXXXXXXXXXXEEUUEEEEEEEEMMMMMMMMMGMZZZZZZZZZZZZZLLLTTTOOOOOOOOOOOKQQQQIIIIIIFFFFFFFFF
XXXXXXXXXXKPKKKOOHHHHHHHHHHHHEHRRRLLLLLLLLLLBSDDOOOOOOOPPIXXXXXXXXEEEEEEEEEEEEEEEMMMMMMMMMMMZZZZZZZZZZZLLLTETOOOOOOOOOOQQQQQIIIIIIIIFFFFFFFF
XXXXXXWXXXKPPPKOPYHHHHHHHHHHHHRRHRLLLLLLLLLLBSQDOOOOWPPPXIXXXXXXXXXEEEEEEEEEEEEEMMMMMMMMMMMMZZZZZZZZZZZZLLOOOOOXOOOQQQQQQQQQQQQSSSSSSFFFFFFF
SSSSSSXXSSKPPPPPPYHHHHHHHHHHHHHHHHLLLLLLLLLLSSQOOOOOOPPPXXXXXXXXXXXXEEEEEEEEEEEMMMMMMMMMMMMMZZZZZZZZZZZLLLLOOOOXOXOOQQQQQQQQQQQSSSSSSFFZFZZZ
SSSSSSSSSSKKPPPPPPYHHYYHHHHHHHHXHHHHTHHTDDSSSSOOOOOOOOPPXKKKKKKKKXXXXEEEEEEEEEEMMMMMMMMMMZZZZZZZZZZZIZZLLLLXXXXXXXQQQQQQQQQQGGGGSSSSSZZZZZZZ
SSSSSSSSPPPPPPPPPYYHHYHHYYYHHOHHHHHHHHHSSSSSSSSSOOTTONYVXKKKKKKKKXXXEEEEEEEEEEEMMMMMMMMMMMMZZZZZZZZZZZLLLLLLXXXXXXQQQQQQQQQQQGGSSSZSZZZZZZZZ
SSSSSSSSSBPPPPPPYYYYYYHYYYYHHHHHHHHHHHHSSSSSSSSSUTTOONYYYKKKKKKKKXXEEEEEEEEEEMMMMMMMMMMMMMMMZZZZZZZZZZLXXXXXXXXXXQQQQQQQQQQQSSSSZZZZZZZZZZZZ
SSSSSSSSSSBPPPPPYYYFYYYYYYYYYOOHHHHHHHHHHSSSSSSUUUUUYYYYYKKKKKKKKXXAAEEEEEEEEEEMMMMMMMMMMMMZZZZZZZZZZZXXXXXXXXXXXQQQQQQQQQQNNNSSZZZZZZZZZZZZ
SSQQSSSSSSPPPPPPFYFFFYYYYYOYOOOHHHHHHHHHSSSSSSSLUUUUYYYYYKKKKKKKKXXAAEAPEEEEEEEMMMMMMMMMMMZZZZZZZZPZZXXXXXXXXXXXXXQQQQQQTZZZZZZOZZZZZZZZZZZZ
SSQQQQQQSSQQQPFFFFFFYYYYYYOOOOOHHHHHHHHHSSSSSSUUUUYYYYYYYKKKKKKKKAXAAAAAESEEEEMMMMMMMMMMMMMMZZZZZPPPXXXXXXXXXXXXXXQQQTTTTZZZZZZZZZZZZZZZZZZZ
SSQQQQQQQQQQQZZFFFFYYYYYYYOOOOOOHHHHHHHHSSSSSUUUUUUYYYYYYKKKKKKKKAAAAAAAEEEEEEEMMMDMMZMMDSSSWZWWPPWWBXXXXXXXXXXXXQQQQTTTTTZZZTTZZZZZZLZZZZZZ
SSQQQQQQQQQQQQZIFFFFYYYYYOOOOOOOHHHHHOSSSSSSSSSUUUZZYYYYYKKKKKKKKAAAAAAEEEEEEEEDMDDDDDDDDSWWWWWWWWWWWXXXXXXXXXXXXXQQQTTTTTTZTTTTZZZLLLZZZZZZ
QSQQQQQQQQQQQQZFFFFFYYYYYYOOOOOOOOHHHOOSSSSSSSUUUZKKKKKKKKKKKKKKKKAAAAAAACEDDEEDDDDDDDDDDDWWWXWWWWWWWXXXXXXXXXXXXXQQQTTTTTTTTTTZZZZZLZZZZZZZ
QQQQQQQQQQQQQQZZFFFFYYYYYYYOOOOOOOHOOOOOOOSSSSWWUZKKKKKKKKKKKKKKKKAAAAAAAAADDDDDDDDDDDDNNDNWWWWWWWWWWWWXXXXXXXXXXXQQQTTTTTTTTZZZZZZZZZZZZZZZ
QQQQQQQQQQQQQFZZFFFFYYYYYYYOOOOOOHHHOOOOOOOOYSWWUZKKKKKKKKKKKKKKKKQQQAAAAAADDDDDDDDDDDDNNNNWWWWWWWWWWWWXXXXXTXXXXQQQQTTTTTTTTTZZZZZZZZZZZZZZ
QQQQQQQQQQQQQQFFFFFFFYYYYYYOOOOOOOOOOOOOOOOOYWWWWWKKKKKKKKKKKKKKKKQNNDNAAAADDDDDDDDDDDNNWWWWWWWWWWWWWWWWWWTTTTXXXXTTQZZTTTTTTTZZZZZZZZZZZZZZ
QQQQQQQQQQFQFFFFFFFFFYYYYYYOOOOOOOOOOOOOOOOOOWWWWWZZZZYOOKKKKKKKKQNNNNNQAAADDDDDDDDDDDDYYWWWWWWWWWWWWWWWWTTYYXXXXTTTTTTTTTTTTTTTTZZZZZZZZZZZ
QQQQQQQQQFFFFFFFFFFFFYYYYYYOOOOOOOOOOOOOOOOWWWWWWWWWWWIOOKKKKKKKKQNNFNNQQQDDDDDDDDDDDDDYYWWWWWWWWWWWWWWWWTTYYYYXTTTTTTTTTTTTTTTTTZZZZZZZZZZZ
QQQQQQQQQFFFFFFFFFFFFYYYYYYOOOOOOOOOOOOOOOOOOWWWWWWWWWIOOKKKKKKKKQQNNNNQQQDDDDDDDDDDDDDYYYYOWWWWWWWWWWMWTTTYYYYYTTTTTTTTTTTTTTTTTZZZZZZZZZZZ
QQQQQQQQQFFFFFFFFFFFFYYYYYYOOOOOOOOOOOOOOOOOWWWWWWDWIIIIOKKKKKKKKQQQNQQQQDDDDDDEDDDDDDDYYYYOWWWWWWWWWWMWWTTTTTTTTTTTTTTTTTTTTTTTTZZZZZZZZZZZ

500
dat/24/re/14.txt Normal file
View File

@@ -0,0 +1,500 @@
p=40,73 v=-96,64
p=74,78 v=91,-65
p=100,86 v=98,62
p=61,29 v=95,-68
p=50,53 v=-50,-63
p=43,77 v=-42,-37
p=47,44 v=34,66
p=11,21 v=72,66
p=9,61 v=-26,77
p=46,100 v=-10,-82
p=64,15 v=-5,-44
p=50,97 v=-56,37
p=37,35 v=-95,80
p=33,8 v=60,39
p=56,81 v=38,7
p=60,22 v=-11,69
p=47,36 v=-55,33
p=29,51 v=-39,-69
p=93,89 v=-96,-14
p=67,51 v=-80,-78
p=68,102 v=-46,46
p=66,51 v=-9,40
p=95,28 v=73,-1
p=41,86 v=-97,81
p=15,54 v=16,-33
p=68,47 v=-7,-20
p=75,34 v=40,23
p=4,38 v=27,73
p=14,78 v=-82,-49
p=23,68 v=63,87
p=82,69 v=83,24
p=4,38 v=62,14
p=60,65 v=46,71
p=12,14 v=13,-31
p=14,17 v=20,-67
p=65,64 v=-4,-42
p=2,19 v=-68,89
p=4,12 v=-22,-81
p=17,95 v=20,-20
p=68,49 v=37,91
p=37,1 v=-92,-68
p=25,81 v=16,81
p=96,60 v=-75,57
p=57,37 v=-1,3
p=21,65 v=49,71
p=38,58 v=-93,-16
p=98,52 v=77,-70
p=66,85 v=91,54
p=16,57 v=-79,80
p=6,87 v=-27,-2
p=27,60 v=56,34
p=66,55 v=-52,-63
p=57,59 v=31,39
p=75,74 v=-10,34
p=31,83 v=-32,-49
p=95,34 v=-19,-7
p=81,68 v=-63,-99
p=43,68 v=63,14
p=43,78 v=84,-90
p=78,60 v=38,-86
p=77,58 v=37,-23
p=44,83 v=12,-39
p=50,61 v=-99,-3
p=91,51 v=24,73
p=0,23 v=-67,19
p=52,6 v=-50,42
p=79,29 v=-66,96
p=66,82 v=46,41
p=21,27 v=-85,-34
p=33,60 v=-95,7
p=60,53 v=-58,30
p=58,91 v=-34,-28
p=49,16 v=1,-84
p=7,2 v=-68,46
p=99,97 v=75,-55
p=95,39 v=37,46
p=17,37 v=-55,59
p=90,7 v=-19,85
p=4,95 v=-88,23
p=66,26 v=-6,-4
p=33,19 v=-39,-4
p=59,60 v=46,-13
p=31,67 v=13,80
p=70,102 v=-9,-18
p=95,32 v=-72,-87
p=73,40 v=-11,93
p=8,17 v=-80,-34
p=47,79 v=-48,51
p=74,59 v=-73,79
p=50,5 v=-51,72
p=44,25 v=-89,86
p=0,89 v=-67,-25
p=12,81 v=43,59
p=49,7 v=3,2
p=25,99 v=-39,25
p=42,91 v=-88,-48
p=6,28 v=83,44
p=53,57 v=-52,-23
p=45,30 v=53,53
p=98,4 v=26,65
p=69,1 v=82,-48
p=50,8 v=-99,-98
p=2,11 v=86,-33
p=58,29 v=-10,23
p=25,97 v=72,42
p=67,96 v=95,85
p=61,97 v=97,38
p=33,25 v=83,-50
p=45,1 v=-45,95
p=67,98 v=42,-78
p=30,28 v=7,-45
p=74,48 v=98,-30
p=12,6 v=74,75
p=53,5 v=48,-93
p=13,97 v=78,-45
p=96,10 v=-72,-41
p=23,13 v=14,-21
p=1,46 v=-24,10
p=40,39 v=96,40
p=14,98 v=21,55
p=22,102 v=-99,-39
p=78,98 v=-63,-48
p=65,88 v=62,-74
p=89,29 v=-64,89
p=41,74 v=89,67
p=81,51 v=90,69
p=7,96 v=-27,35
p=83,3 v=-64,-21
p=72,52 v=94,-83
p=43,54 v=-15,-31
p=10,92 v=-27,48
p=30,0 v=-87,28
p=15,18 v=-9,63
p=11,65 v=-30,84
p=13,27 v=62,-47
p=63,63 v=53,-9
p=67,80 v=-14,15
p=15,9 v=-98,64
p=58,24 v=96,-34
p=37,21 v=6,9
p=57,56 v=50,84
p=75,9 v=35,84
p=48,1 v=-60,58
p=70,51 v=47,34
p=5,69 v=76,-9
p=63,4 v=50,79
p=25,17 v=-36,3
p=87,42 v=16,2
p=69,27 v=42,66
p=8,42 v=70,-30
p=0,52 v=87,2
p=3,3 v=-23,75
p=45,27 v=47,-77
p=23,100 v=-13,-99
p=69,19 v=-7,-4
p=38,70 v=6,-89
p=4,22 v=-28,49
p=86,91 v=89,-2
p=90,100 v=-32,56
p=2,38 v=-81,99
p=44,32 v=-96,-40
p=96,77 v=51,-22
p=5,71 v=93,-89
p=90,89 v=24,30
p=27,65 v=-89,-29
p=33,56 v=10,67
p=34,71 v=18,-47
p=66,68 v=44,11
p=55,37 v=-91,15
p=73,6 v=-14,-91
p=45,97 v=-54,-21
p=34,88 v=34,-27
p=65,14 v=67,-2
p=40,5 v=-85,-14
p=8,95 v=15,91
p=5,35 v=-29,-57
p=71,83 v=-11,34
p=79,40 v=-6,-26
p=62,78 v=-3,51
p=12,15 v=-16,-25
p=64,12 v=77,-99
p=33,91 v=68,-45
p=86,77 v=-24,-6
p=55,27 v=83,-91
p=85,63 v=38,40
p=4,4 v=-74,-22
p=50,19 v=-89,20
p=45,20 v=-98,29
p=11,50 v=19,-23
p=43,82 v=5,-82
p=72,14 v=40,65
p=68,35 v=47,-7
p=7,91 v=-78,45
p=28,32 v=-87,41
p=47,48 v=-51,4
p=12,45 v=71,30
p=12,76 v=83,-3
p=74,21 v=-11,-27
p=43,32 v=59,16
p=21,12 v=-39,32
p=76,88 v=92,68
p=42,56 v=-44,-30
p=27,76 v=65,-9
p=61,2 v=-57,95
p=42,77 v=-90,88
p=27,74 v=-39,51
p=55,36 v=-59,50
p=3,9 v=82,-37
p=64,78 v=-57,-62
p=71,83 v=-51,94
p=91,63 v=8,-29
p=43,68 v=-46,25
p=88,38 v=87,-96
p=31,65 v=-35,-74
p=13,86 v=-30,-95
p=7,43 v=-31,-20
p=65,89 v=-60,81
p=10,55 v=69,48
p=66,85 v=-34,14
p=64,95 v=-99,62
p=53,46 v=39,2
p=79,3 v=-61,55
p=56,50 v=-82,-21
p=31,76 v=73,-92
p=13,102 v=-34,-88
p=31,100 v=-43,-98
p=17,4 v=-82,-24
p=45,53 v=55,-33
p=61,24 v=8,-95
p=75,96 v=-12,-78
p=64,7 v=-55,-1
p=82,27 v=-66,36
p=50,63 v=-99,47
p=38,63 v=44,-64
p=62,27 v=3,-4
p=78,40 v=67,20
p=7,24 v=84,-67
p=5,25 v=-28,-97
p=33,101 v=-40,-45
p=38,9 v=-94,-94
p=76,13 v=-55,55
p=48,47 v=21,-61
p=95,6 v=-65,99
p=12,51 v=69,-53
p=88,4 v=82,-71
p=41,76 v=-37,-12
p=51,45 v=-11,4
p=66,77 v=96,25
p=92,100 v=33,5
p=96,64 v=-29,78
p=57,54 v=-60,-20
p=22,33 v=71,49
p=12,35 v=-27,-57
p=88,17 v=97,-1
p=38,61 v=61,20
p=14,39 v=17,45
p=73,70 v=68,4
p=57,41 v=-45,-77
p=73,35 v=-68,66
p=95,70 v=-72,54
p=51,44 v=-57,-73
p=47,2 v=46,-68
p=55,65 v=-59,-82
p=71,15 v=-78,67
p=5,96 v=72,-88
p=10,30 v=73,-17
p=89,84 v=-66,-82
p=21,4 v=-36,-18
p=15,44 v=67,43
p=67,48 v=44,50
p=70,16 v=7,-21
p=62,5 v=-74,49
p=60,52 v=96,90
p=81,80 v=-57,-42
p=2,86 v=-25,-98
p=48,31 v=49,-97
p=25,69 v=17,24
p=68,7 v=-52,-5
p=20,1 v=-30,-54
p=95,25 v=55,68
p=76,101 v=-8,98
p=35,5 v=12,-28
p=80,90 v=37,-91
p=8,51 v=25,-53
p=71,58 v=-51,-33
p=36,19 v=-46,-80
p=80,8 v=37,-38
p=26,96 v=-80,14
p=19,56 v=-34,-33
p=58,93 v=12,66
p=23,65 v=-28,70
p=5,89 v=-77,-98
p=99,67 v=-66,-29
p=33,94 v=-94,52
p=71,10 v=-7,-21
p=67,38 v=45,30
p=30,27 v=-92,-86
p=40,55 v=-99,40
p=25,78 v=-46,9
p=98,0 v=-14,29
p=21,51 v=70,60
p=64,56 v=46,50
p=83,80 v=20,-87
p=32,60 v=-89,-86
p=52,61 v=-52,-46
p=49,20 v=-98,99
p=19,61 v=19,17
p=9,99 v=71,12
p=9,63 v=-80,24
p=16,0 v=18,-38
p=7,18 v=24,-5
p=89,46 v=-89,-11
p=31,64 v=-86,-51
p=60,13 v=54,-37
p=83,46 v=-70,-16
p=4,3 v=-25,-18
p=45,67 v=79,56
p=68,61 v=-15,-13
p=13,64 v=-23,-56
p=81,78 v=-92,-18
p=1,71 v=-17,-49
p=9,95 v=-64,28
p=69,21 v=44,69
p=25,74 v=-86,94
p=71,1 v=34,2
p=58,37 v=-10,-4
p=32,81 v=-46,25
p=21,87 v=-2,-92
p=78,70 v=35,-96
p=86,70 v=32,84
p=42,68 v=72,-68
p=76,69 v=36,-99
p=72,79 v=69,-6
p=92,22 v=-72,99
p=74,9 v=-12,-94
p=52,33 v=-43,45
p=34,79 v=-41,-59
p=26,56 v=10,50
p=59,46 v=-22,23
p=9,49 v=68,-59
p=78,11 v=62,40
p=88,25 v=43,34
p=61,64 v=-53,27
p=17,13 v=-32,-81
p=100,45 v=26,70
p=30,52 v=13,20
p=9,93 v=-81,18
p=68,3 v=93,15
p=77,56 v=93,60
p=48,5 v=-42,-77
p=30,55 v=-87,-33
p=42,87 v=6,78
p=7,3 v=51,-8
p=69,79 v=-61,30
p=51,45 v=-49,35
p=20,85 v=11,65
p=25,58 v=17,-66
p=45,2 v=-39,-5
p=88,38 v=69,-98
p=10,2 v=-81,32
p=26,31 v=44,-25
p=29,15 v=-67,52
p=59,73 v=-54,21
p=99,43 v=32,-48
p=99,36 v=-71,13
p=54,35 v=52,63
p=44,77 v=-3,54
p=32,82 v=-65,-50
p=40,1 v=-46,85
p=12,71 v=20,-69
p=90,78 v=78,87
p=18,52 v=62,-70
p=40,23 v=30,63
p=76,27 v=-75,76
p=88,62 v=91,97
p=31,88 v=64,-8
p=95,33 v=96,-26
p=21,63 v=16,-46
p=35,15 v=6,-54
p=73,22 v=-10,46
p=43,11 v=63,95
p=99,18 v=-66,-67
p=0,71 v=74,44
p=72,66 v=-8,14
p=100,30 v=30,-7
p=57,17 v=-41,73
p=5,3 v=80,58
p=77,100 v=84,78
p=61,78 v=99,8
p=59,51 v=45,-53
p=85,6 v=78,-17
p=49,56 v=-99,34
p=25,7 v=64,2
p=81,1 v=44,-1
p=19,50 v=-80,13
p=1,67 v=75,91
p=22,63 v=65,64
p=25,73 v=75,60
p=73,64 v=-11,84
p=27,13 v=14,49
p=4,27 v=-77,3
p=52,41 v=-7,30
p=34,83 v=-84,35
p=15,62 v=-81,87
p=49,101 v=13,77
p=60,52 v=98,-56
p=95,61 v=-22,-96
p=37,79 v=11,-98
p=82,48 v=20,70
p=28,57 v=63,70
p=28,48 v=-43,4
p=41,60 v=58,-89
p=94,12 v=-27,-58
p=22,66 v=-33,14
p=14,47 v=19,86
p=100,58 v=-70,-13
p=1,17 v=1,76
p=11,33 v=-54,93
p=10,46 v=67,76
p=69,11 v=50,-87
p=37,12 v=-96,32
p=1,23 v=69,33
p=31,22 v=54,-44
p=60,5 v=95,89
p=6,84 v=25,-59
p=2,22 v=76,89
p=63,14 v=71,25
p=54,33 v=-42,55
p=89,34 v=-76,-50
p=35,88 v=41,-34
p=84,63 v=-12,67
p=25,27 v=13,-70
p=47,60 v=-95,17
p=70,27 v=-5,24
p=88,97 v=84,28
p=47,52 v=50,-12
p=24,99 v=66,-71
p=35,67 v=7,64
p=41,31 v=7,-79
p=60,73 v=47,-82
p=83,37 v=54,12
p=14,45 v=19,-10
p=81,80 v=12,-53
p=92,51 v=38,-55
p=14,26 v=-75,82
p=89,38 v=-33,34
p=34,74 v=56,47
p=9,31 v=-35,-63
p=62,98 v=-74,-62
p=14,54 v=-68,29
p=70,41 v=66,-55
p=51,52 v=-57,34
p=0,35 v=61,-49
p=99,54 v=76,-26
p=75,3 v=-82,-26
p=43,95 v=7,28
p=1,51 v=27,-66
p=18,15 v=25,92
p=5,53 v=78,-53
p=58,95 v=49,-18
p=34,49 v=-39,90
p=19,75 v=60,91
p=61,43 v=39,3
p=74,51 v=-13,23
p=32,26 v=3,66
p=30,6 v=-33,99
p=66,86 v=61,1
p=25,87 v=45,-81
p=22,76 v=-86,71
p=90,12 v=32,99
p=74,98 v=93,25
p=16,94 v=68,58
p=12,64 v=-4,-96
p=87,8 v=-75,-4
p=28,33 v=-81,40
p=6,34 v=74,-44
p=65,85 v=-56,41
p=71,67 v=46,80
p=73,85 v=-9,-12
p=11,64 v=64,50
p=73,46 v=48,-23
p=62,22 v=4,31
p=10,22 v=21,92
p=73,67 v=-1,95
p=97,2 v=30,-58
p=96,42 v=-29,80
p=26,53 v=63,20
p=30,7 v=61,-11
p=4,90 v=-77,-48
p=23,55 v=58,14
p=42,68 v=58,77
p=65,68 v=60,-28
p=77,87 v=-15,71
p=40,14 v=-41,-21
p=78,42 v=-20,-20
p=29,95 v=71,76
p=38,62 v=-40,67
p=98,86 v=-25,38
p=3,37 v=27,63
p=41,70 v=39,21

141
dat/24/re/16.txt Normal file
View File

@@ -0,0 +1,141 @@
#############################################################################################################################################
#.................#.....#.....#.............#...#.......#.....#.......#.#.........#...........#...#...............#........................E#
###########.#######.#.#.#.###.#.###########.#.#.#.###.###.#.#.#.#.#.#.#.#.#####.#.###.#######.#.#.###.#########.#.###.###########.#.#####.#.#
#.........#.#.......#...#.#...#...#...#...#.#.#.....#.#...#.#.#...#.#...#.#.#...#...#.#...#.....#...#.......#.........#.....#...#.#...#.#...#
#.#######.#.#.#########.#.#.#####.#.#.###.#.#.#######.#.###.###.#.#.###.#.#.#.#####.#.#.#.#########.#.#####.#.#.#########.#.###.#.###.#.###.#
#.......#.#.#.......#.#.#.#.#...#...#.........................#.#...#.#.#...#.#...#...#.#.....#...#.#.....#.#...#.........#.....#.#...#.#...#
#.#####.#.#.#######.#.#.#.#.#.#.#######.#.#######.#.#.#######.#.#.###.#.###.#.#.#.#####.#.###.#.###.#####.#.#.#.#.#####.#####.###.#.#.#.#.#.#
#.#.....#.........#...#...#...#.#.......................#.............................#.#.#...#.....#.....#.......................#.....#.#.#
#.#.#######.###.#####.#.#######.#.#############.###.#####.#.#.#.#.#.#.###.###.#.#####.#.#.#.###.#########.#.###.#########.###.#.#.#####.#.###
#.#.#.......#.........#...#.....#...#...........#.#.#...#.#.....................#...#.....#.#.#.....#...#.#.....#.......#...#...#.#.#...#...#
#.#.#########.#.#######.#.#.#######.#.#######.#.#.#.#.#.#.#####.#.#######.#.###.#.#######.#.#.#####.#.#.###.###.#.#####.###.#.###.#.#.#####.#
#.#.......#...#...........#.....#...#.#...#...#...#...#.#.......#.........#.....#.#.....#...#.....#...#.........#.#...#.#...#.....#.....#...#
#.#######.#.###.###.#.#.#.#####.#####.#.#.#.#.#########.###.#####.#############.#.#.###.#.###.#####.###########.#.#.#.#.#####.#.###.#####.#.#
#...#.....#.#.............#...#...........#.#.........#...#.#.......#...#.....#...#.#.#...#.#.......#.......#...#...#.#.......#.#...#.....#.#
#####.#####.#.#.#.###.#.#.###.#############.#########.###.#.#.###.#.#.#.#.###.#####.#.###.#.#.###.###.#####.#.#.#####.#######.#.#####.#####.#
#...#.....#.#.#.#.#...#.#...#...#...#...#...#.....#...#...#.#.#.#...#.#.#...#...#...#.#.........#.....#...#.....#.....#.....#.#.......#...#.#
#.#.#####.#.###.#.#.###.###.#.###.#.#.#.#.###.###.#.###.###.#.#.#.###.#####.###.#.###.#.#########.#####.#.#.###.#.#########.#.#####.###.#.#.#
#.#.......#.....#...#...#.....#...#...#.....#...#.#...#.#...#.#...#...#.....#.#...#...#.#.#.....#...#...#.#...#.#.#.......#.#...#...#...#.#.#
#.#######.#######.###.###.#####.#####.#####.#.#.#####.#.#.###.#.###.###.#####.#####.#.#.#.#.###.#.#.#.###.#.#.#.#.#.#####.#.###.#####.###.###
#...#...#.#.........#.....#.#...#.....#...#...#.....#...#.....#.......#.#.......#...#.#...#...#.#.#...#...#.#.#.#...#.#.......#.#...#.#.#...#
#.#.#.#.#.#.###.###.#.#####.#.#####.###.#.#########.###########.#####.#.#.#####.#.###.#.###.#.#.#.#####.###.#.#######.#.#######.#.#.#.#.###.#
#.#.#.#...#...#.#.#.#...#...#.#...#...#.#.#.......#...........#...#...#.#.....#...#...#.#...#...#.......#...#.......#...#.....#...#.#.....#.#
#.#.#.#######.#.#.#.###.#.###.#.#.#####.#.#.#####.#########.#####.#.#.#.###.#.#.#######.#.###.#.#######.#.#.###.#####.###.###.#####.#####.#.#
#.#.#.....#...#.#...#.#.#...#...#...#...#...#...#.....#...#.....#...#.#...#.#.#.#.......#.....#.#...#...#.#...#.#.....#.#...#.........#...#.#
#.#.#####.###.#.#.###.#.###.#######.#.#####.###.#####.#.#.#####.###.#####.#.#.###.#.#####.###.#.#.#.###.#.###.#.#.#####.###.#####.#####.###.#
#.#...#.#...#.#.#.....#...#.....#...#.....#.....#.......#.....#.....#.....#.#.....#.......#...#...#...#.#.....#...#...#...#.....#.#.....#.#.#
#####.#.###.###.#.#.#.###.###.#.#.#.#####.###.#.###.#########.#.###.#.#####.#.#####.#######.#.#######.#######.#####.#.#.#.#####.#.#.#####.#.#
#.....#...#.#...#...#...#.....#.#.#...#.#...#.#...#.......#...#.....#...#...#.#...#.#.....#.#...............#.#.#...#...#.#...............#.#
#.#######.#.#.#########.#######.#.###.#.###.#.###.###.###.#.#######.###.#.###.#.#.#.#.#.#.#.#.#.###.#####.#.#.#.#.#.#####.#.#.###.###.#.###.#
#.....#...#.........#.....#...#.#.#.......#...#.#.....#.#.#.......#.#...#.#.#...#.#.#.#.#...#.#...#.....#.....#.#.#.#.......#.#.....#.#.#...#
#.#.#.#.###.#.#.#####.#####.#.#.#.#######.#####.#######.#.###.#.###.#.###.#.#.###.#.###.#.###.###.#.#.#########.#.#.#######.#.#######.#.#.#.#
#...#.#...#.#.#.#.....#.....#...#...#.........#...#.....#...#.#.....#.#.#.#...#...#...#.#.#...#.#...#.......#...#.#.....#.#.#.#.......#.#.#.#
###.#.###.#.#.#.#.#####.###########.###.#####.#.#.#.###.###.#.#.#####.#.#.#.###.#.###.#.###.###.###.###.#.#.###.#.#####.#.#.#.#.#######.#.###
#...#...#...#.#.#.#.#...#...#...#...#...#.......#.#...#...#.#.#.....#.#.........#.#.#.#.#.........#.....#.......#.#.#...#.#.#.#.#.......#...#
#.#.###.#.###.#.#.#.#.###.#.#.#.#.###.#.#.#######.#####.###.#.#######.###########.#.#.#.#.#######.#.###.#.#.#####.#.#.###.#.#.#.#.###.#####.#
#.#.#...#...........#.#...#.#.#...#...#.#.#.#...#.......#...#...#.....#...#...#.....#.#...#...#...#...#.#.#.#.......#.#.....#.#...#...#.....#
#.#.#.#####.#.#####.#.#.###.#.#####.#####.#.#.#.#########.#####.#.#####.#.#.#.#######.###.#.#.#.#####.###.#.#.#######.#######.#####.###.#####
#...#.#...#.#...#.#.#.#...#.#.#...#.......#.#.#...........#...#.#.......#...#.#.........#.#.#.#.#.....#...#.#.#.#.....#.......#.....#...#...#
###.#.#.#.#.###.#.#.#.###.#.#.###.#.#######.#.#############.###.#.###########.#.###.###.#.#.#.#.#.###.#.#####.#.#.###.#.#######.#####.###.#.#
#...#...#.#.....#...#.....#.#...#.#...#.....#.........#.....#...#.#...#.....#.#...#...#.#.#.#.#...#...#...#.....#.#.#.#...#.....#...#.....#.#
#.#.###.#.###.#####.#.#########.#.###.#.#############.#.###.#.#.#.#.#.#####.#.###.#.#.#.###.#.#.#########.#.#####.#.#.###.#.#.###.#.#######.#
#.#.......#...#.....#.#.....#...#...............#...#.#.#...#.#.#.#.#.....#.#.#...#.#.#.....#.#.#.......#...#.....#...#...#.#.....#.........#
###.###.###.###.###.#.#.###.#.###.#######.###.###.#.#.#.#####.#.#.#.#####.#.#.#.###.###.#.###.###.#####.#####.#####.###.###.#####.#####.#.###
#...#.....#.#.....#.#.#.#...#.#...#...#...#...#...#...#.#.....#...#...#...#.#...#.#.....#.........#...#.......#.......#.....#...#.....#.#...#
#.#.###.###.#.#####.#.#.#.###.#.###.###.###.###.#######.#.#####.#####.#.###.#####.#######.#.#######.#.###.#######.#####.#####.#.#####.#####.#
#.#...#.....#.#.....#.#.#.....#.#...#...#.#...#...#.....#...#.#.......#.#.........#.#.....#.......#.#.#...#.....#.#...#.#.....#.....#.....#.#
#.#.#.#.###.#.#.#####.#.###.#.#.#.###.###.###.#.#.###.#.###.#.#########.###.#####.#.#.###########.#.###.###.###.###.#.#.#####.#####.#.###.#.#
#...#.....#.#.#.......#.#...#.#...#...#...#.#...#.#...#.#...#.........#...#.....#.#.#.#...#.....#.#.....#...#...#...#.#.....#.#.....#.#...#.#
#.#.###.#.###.#########.#.#.#.###.#.###.#.#.#.###.#.#.###.###.#######.###.#####.#.#.#.#.#.###.#.#.#.#####.###.###.###.#####.#.###.#.#.#.###.#
#...#...............#...#.#...#...#...#.#...#...#...#.#...#.....#...#...#.......#...#...#...#.....#...#...#.#.#.....#...#.#.#...#.#...#.#...#
###.###.#########.###.###.#.###.#####.#.###.###.#####.#.###.###.#.#.#.###.#####.###########.#.#########.###.#.#####.###.#.#.#.#.#.#.###.#.###
#.#.....#.....#.....#.#.#.#.#.#.........#.#...#.#.....#.#.#...#...#...#...#...#.#.........#.#.#.......#.#...........#...#...#.....#.....#...#
#.#####.#.###.#.###.#.#.#.#.#.#####.#####.###.#.#.#####.#.###.#######.#.###.#.###.#######.#.#.#####.#.#.#############.###.#####.#.#.###.###.#
#.....#.#.#...#.#.#...#.#...#.....#.#.#.......#.#.#...#.#...#.#.....#...#...#...#.....#...#.#.......#...#.........#.............#.#...#.#...#
#.###.#.#.#.###.#.#####.#####.#####.#.#.#######.#.#.#.#.#.#.#.###.#.#####.#.###.#.###.#.###.#.#########.#.###.#.###.#####.#####.#.#.#.###.#.#
#...#.#.#.#.....#.....#...............#.#.......#...#.#.#.#.#.....#...#.........#.#...#.#...#.#.....#...#...#.#.........#.#.....#.....#...#.#
###.#.#.#.#######.#####.###############.###.#.#######.#.###.#.###.#####.###.#####.#.###.###.#.#.###.###.###.#.#.#.###.#.###.###.#####.#.###.#
#.#.#...#.#...........#.....#...#.#.....#...#.......#.#...#.......#...#...#.#.#...#...#.....#.#.#...#...#...#.........#.#...#.#...#...#...#.#
#.#.###.#.#####.#####.#####.#.#.#.#.#####.#########.#.###.#########.#.###.#.#.#.#####.#########.#.###.#.#.###.#########.#.###.#.#.###.###.###
#.#...#.#.#...#.....#...#.#...#...#...#.....#.....#...#.#...........#.......#.......#...#...#...#...#.#.....#.#.....#.....#.....#...#.#.#...#
#.###.#.#.#.#.#######.#.#.#####.#####.#.###.#.#.#.#####.###################.#######.###.#.#.#.#.###.#.#######.#.###.#####.#.###.###.#.#.###.#
#.......#...#.....#...#...#.....#...#.#...#...#.#.#.............#.........#...#...#.#.#...#.....#...#...#...#.....#.....#...#...#...#...#...#
#.#####.#########.#.#######.#####.#.#.###.#####.#.#########.#.###.#.#####.###.###.#.#.###########.###.#.#.#.###########.#.###.#.#.###.###.#.#
#.....#.#.......#.#.........#.....#.#...#.#.....#...........#.#...#.#...#...#...#.#...#.......#...#.....#.#.....#.......#...#...............#
#.#.###.#.#.###.#.###########.#####.###.#.#.###################.###.#.#.###.###.#.###.###.###.#.#.#.#####.#.#.#.#.#########.#.#####.#.#.#####
#.#.....#.......#.....#...........#.....#.#.....#.....#.......#.#...#.#...#...#.#.....#...#...#.#.#.#...#.#.#.#...#.........#.#.....#.......#
#.#####.###.#.#######.#.###########.#.#########.#.###.#.#.#.#.#.#####.#.#.###.#.#.#####.#.###.#.###.#.#.#.#.#.#####.#.#######.#.#####.###.#.#
#...#.......#.#.....#.........#.....#.#.....#.....#.#...#...#...#...#.#.#...#.#.#.......#.#.........#.#...#...#.....#...#.....#.#.......#.#.#
###.#.#######.#.#########.#.###.###.#.###.#.#.#.#.#.#.#########.#.#.#.#.###.#.#.#####.#.###.#.###.###.#########.#######.#.#####.#.###.#.#.#.#
#.#...#...#...#.......#...#...#...#.#.....#.....#.#...#.......#.#.#.#.#.....#...#.....#...#.#.#...#.#.#.................#.#.....#.#...#.#.#.#
#.#####.#.#.#########.#.#####.#.#.#.###.#######.#.#####.#####.###.#.#.###.#######.###.#.#.#.###.###.#.#######.#####.###.#.#.#####.#.#.#.#.#.#
#.......#.#.#.......#.#.#.....#.#.#.#...#.....#.#.....#.....#...#.#...#.#.#.....#.#.#...#...#.......#.......#.#...#.....#.#.....#.#...#...#.#
#.#####.#.#.#.#####.#.#.#.###.#.#.#.#.###.###.#.#####.#.#.#.###.#.###.#.#.###.#.#.#.#.###.###.#.#.#.#######.###.#.#.#.###.#####.#.###.###.#.#
#.#.......#...#.#...#...#.#...#.#.....#...#.#.#...#...#.#.#.#.....#...#.#...#...#.#.#.#...#...#...#.......#...#.#.#.#.......#...#...#...#.#.#
#.#####.#######.#.###.#.#.#.#.#.#.###.#.###.#.#####.#.#.###.#.#########.###.#.###.#.#.#####.#####.#.#.#.#.###.#.#.#########.#.#####.#.#.#.#.#
#...........#.#...#...#...#...#...#.....#...#...#...#.#...#.....#.......#.#.#.....#.#.......#.....#.#.#.....#.........#...#.#.....#...#...#.#
#####.#.#.#.#.#.#######.#####.#.#.#.#######.###.#.#.#####.#######.#######.#.###.###.###########.###.#.#####.#########.#.#.#.#####.###.#.#.#.#
#...#...#.#...#.....#...#...#.#.#.#.#.........#.....#...#.......#.....#...#...#.#...........#...#.#.#...#...........#...#.#.#.......#...#...#
#.#.###.#.#########.#.###.#.#.#.#.#.###.#####.#.###.#.#.#######.#####.#.#####.#.#.###.#####.#.###.#.#####.#########.#####.#.#.#######.###.#.#
#.#...#.#.........#.#...#.#.#.#...#...#.....#.......#.#.#.....#.....#.#.#.....#.#.#...#...#...#...........#.......#.#.....#...............#.#
#.###.#.#########.#.###.#.###.#.#####.#####.#.#####.#.#.#.#.#####.#.#.#.#.#####.###.###.#.#.###############.#####.#.#.#########.###.###.#.###
#...#.#.....#.....#.....#.#.........#.....#.#.#...#.#.#.#.#.......#...#...#.#...#...#...#.#.#.............#.....#...#.........#...#.....#...#
#.#.#.#.###.#.###.#######.#.###.###.#####.#.#.#.#.###.#.#.#######.#####.###.#.###.#####.###.#.###########.#.#####.###########.#.#######.#.#.#
#.#.#.#.....#.#.#.#.......#.#.....#...#...#...#.#.....#...#.....#.....#.#...#.........#...#.#.#.....#.#...#.#...#.......#...#...#.....#...#.#
###.#.#.#####.#.#.###.#.#.#.#########.#.#######.###########.#.#######.#.###.#####.#.#.###.#.#.#.#.#.#.#.#####.#.#####.###.#.###.#.###.###.#.#
#...#.......#.#.#.#...#.#.#.......#...#.........#.........#.#.......#.....#.......#.....#...#.#.#.#.#.#.#.....#...#...#...#...#.#.#.#.....#.#
#.#########.#.#.#.#.#.#.#.#######.#.#############.#####.###.#####.###.###.#########.###.#####.###.#.#.#.###.#####.###.#.#####.###.#.#####.#.#
#...#.....#.#.#...#.#...#.....#...#.#...........#.#.....#...#...#...#...#...#.......#.........#...#...#.#...#.......#.#.#...#.....#.....#.#.#
#.#.#####.#.#.#.###.###.#####.#.###.#.#######.#.#.#.#####.###.#.###.###.###.#.#################.###.###.#.#.#######.#.#.#.###.#####.###.#.#.#
#.#.....#...#.#...#...#.#...#.........#.......#.#.#.....#...#.....#...#...#.................#.....#.#...#.#.#.....#.#.#.#.....#...#...#.#.#.#
#####.#.###.#.###.###.#.#.###.###.#####.#######.###.###.###.#.#######.#.#.#.#.#############.#####.#.#.###.###.###.#.###.###.###.#.###.#.#.#.#
#...#.#...#...#.......#.#.#.....#...#...#.....#...#.#.#...#.#.#.....#.#.#.#.#...#.....#...#.#.....#.#.#.#.....#...#...#...#.#.#.#.#...#.#.#.#
#.#.#####.###.#########.#.#.###.###.#.###.###.###.#.#.#.#.#.#.#.###.#.#.###.###.#.#.#.#.###.#.#####.#.#.#.#####.#####.###.#.#.#.#.#.#.#.#.#.#
#.#.......#...#.........#.#.....#.#...#.....#.#...#...#...#.#.#.#.#...#...#...#.#...#...#...#.#...#.#.#...#...#.#...#...#.#...#.#...#.#.#.#.#
#.#######.#####.#########.#.#.###.#####.###.###.#######.###.#.#.#.###.###.###.#.###.###.#.###.#.#.###.#####.#.#.#.#.###.#.#####.###.###.#.#.#
#.#...#...#.....#.........#.#.....#...#...#.#...#.....#...#.#.#.......#.....#.#.........#.#.....#...#.......#.#.#.#.#...#.#.....#.#...#.....#
#.#.#.#####.#####.#.#.#####.#####.#.###.###.#.###.###.#.#.#.#.#.#.#####.#.#.#.#####.#####.#########.#########.#.###.#.###.#.###.#.###.###.#.#
#.#.#.#.....#...#...#.#.....#.....#.#...#...#.#...#.#.#.#.....#.#.#.....#.#.#.#.#...#...#.#.......#.........#.#.......#...#...#.....#...#...#
#.#.#.#.#####.#.#.#.#.#.#####.#####.#.###.###.#.###.#.###.#####.#.#.###.#.###.#.#.###.#.#.#.#####.#######.#.#.#.#.###.#.#.###.#.#.#####.#.###
#...#.#.......#.#.#.#.#.#.........#.....#...#.#...#.#...#...#.....#...#.#.....#.....#.#.#.....#...#.......#.#.#.#...#.#.#.......#.#.....#.#.#
#.###.#.#######.#.#.###.#########.#.#######.#.###.#.###.#####.###.###.#.#######.#####.#.#.#####.###.#########.#####.#.#.###.###.#.#.#####.#.#
#.#.#.............#...#...#.....#.#...#...#.#.....#...#.......#...#...#.#...#...#.....#.#.#.....#.............#.....#...#.....#...#...#.#.#.#
#.#.#########.#.#.###.###.#.###.#.###.#.#.#.#########.#########.###.###.#.#.#.###.#####.###.#####.###########.#.###############.#.###.#.#.#.#
#.....#...#...#.#...#...#...#.#.#...#.#.#.......#.......#.#.....#.#.#...#.#...#...#...#...#.......#...........#...#.............#...........#
#####.#.#.#.###.#####.#######.#.###.###.#######.###.###.#.#.#####.#.#.###.###.#.#####.#.#.#.#####.#.#######.#.###.#.#########.#.#.#.#.#.#.#.#
#.....#...#.#.......#.........#...#.....#.....#...#.#...#.#.....#...#.........#.....#...#.#.....#.#.#.......#...#.#.#.......#.......#.#...#.#
#.#######.#.#.#####.###.###.#####.#######.#.#####.#.###.#.#####.#.#########.#####.#.###.#.###.#.###.#.#########.#.#.#.#####.#.#######.#.#.#.#
#.#.....#.#...#...#...#.#...#.....#...#...#.#.....#...#...#.....#.#.......#.....#.#.#...#...#.#.....#.....#...#...#...#...#.................#
#.#.###.#.#####.#.#.#.#.#.###.###.#.###.#.#.#.#####.#.#####.#####.###.#.###.###.###.#.###.#.#.#######.###.#.#.#.#######.#.#.###.#.#######.#.#
#...#.....#...#.#...#...#.......#.....#.#.#.#.#.....#.#...#.#...#...#...#...#.#...#.#.....#.#.#.....#.#.#.#.#...#.......#.#.........#.......#
#.#######.#.#.#.###.###.#####.#.#####.#.#.###.#######.#.#.#.#.#.###.###.#.###.###.#.#.###.#.###.###.#.#.#.#.#####.#.#########.#.#.#.#.#######
#.#.....#.#.#.#.#.#...#.#...#.#.....#...#.....#.......#.....#.#.#...........#...#...#.#...#.....#.#.#...#.#.....#.#.........#.#.#.#.#.#.....#
#.#.###.#.#.#.#.#.###.#.#.#.#######.#.#######.#.###.###.#####.#.#######.###.###.#####.#.#########.#.###.#.#######.#######.###.#.#.#.#.#.###.#
#.#.#.......#...#...#.....#.......#.#...#...#...#...#...#.....#.....#...#...#.......#.#.........#...#...#.....#...#.....#.#...#.#.#.#.#.#...#
###.#####.#########.#############.#.#####.#.#####.###.###.#.#######.#####.###.#####.#.#####.###.#.#####.#####.#.#######.#.#.###.#.#.#.###.#.#
#...#.............#.....#.........#...#...#...#.....#...#.#.#.............#.....#...#.#.#...#...#.....#.....#.......#...#...#...#.#.......#.#
#.###.###########.###.#.#.###########.#.###.#.#########.#.#.#.###.###.#####.###.#####.#.#.###.#######.#############.#.#.#####.#.#.#.#######.#
#...#.#.....#...#...#.#...............#.#...#.........#.#.#...#...#.....#.#...#...#...#.#.#.........#...........#.#.#.#...#...#.#.#.#...#.#.#
#.#.#.#.#.#.###.###.#.#####.#####.###.#.#.#.#########.#.#######.#.#.###.#.###.###.#.###.#.#####.#.#.#####.#####.#.#.#.###.#####.#.###.#.#.#.#
#.....#.#.#...#.#...#...#.........#.....#.#.......#.#...........#.#.#.#.#.......#...#...#.....#.#.#.#.....#.....#.#...#.#.#...#.#.#...#.#.#.#
#.#######.###.#.#.###.#.###.#####.#.###########.#.#.#####.###.#.###.#.#.#.#.###.#####.#.#####.#.#.#.###.#.#.#####.#####.#.#.#.#.#.#.###.#.#.#
#.........#.#...#...#.......#.....#.#.........#.#.......#...#.........#.#.#...#...#...#...#...#.#.#.....#.#.....#...........#...#...#.#.#.#.#
###########.#.#.###.#.#########.###.#.#.#####.#.#######.###.#.#########.#.###.###.###.#####.#.#.#.#######.#####.###############.#####.#.#.#.#
#.....#.......#...#.#...#.......#...#.#.#...#...#.....#.....#.#.........#.......#.....#.....#.#.#.....#.#.....#...........#...#...#...#.#.#.#
#.#.#.#.#.###.###.#.###.#.#####.#.#####.#.#######.###.#######.#.###############.#####.#.#######.#####.#.###.#############.###.#.#.#.###.#.#.#
#.#.#.#.#.........#.#...#...#...#.#.....#.......#...#.#.....#.#.....#.....#.......#...#...#.....#.#...#.....#.........#...#.....#...#...#...#
#.#.#.#.#####.#####.#####.###.#.#.#.#####.###.###.#.#.#####.#.#####.#.###.#.#.#####.#####.#.###.#.#.###.#####.#.#######.#.#.#######.#.#####.#
#.#...#.#.#.....#...#.....#...#.#...#.......#.....#.#.......#.......#...#...#.#.....#...#...#.....#.#...#...#.#.........#.#.........#.#...#.#
#.###.#.#.#.#.#.#.#.#.#####.#############.#########.#.#####.###########.#####.#.#######.#########.#.###.#.#.#.###########.#.#########.#.#.#.#
#...#.#...#...#...#.#...#.#.............#.#.........#.#...#.#...#.......#.#...#.#.....#.........#.#...#.#.#...#.......#...#...#.....#.#.#.#.#
###.#.#.#.###.#########.#.#######.#####.###.#########.#.#.#.#.#.#.#######.#.###.#.###.#.#######.#.###.#.#.#####.#####.#.#.###.#####.#.#.#.###
#.#.#...#...#...........#...#.....#...#...#.#.#.....#.#.#.#.#.#.#...#.........#...#...#.......#.....#.#.#...#...#...#.......................#
#.#.#.#.###.#.#.###########.#.###.#.#.###.#.#.#.###.#.#.#.#.#.#.###.#########.#####.#####.###.#####.#.#####.#.#####.#.#.#.#.#.#.###.#.#.###.#
#.#.#.....#...#.....................#...#...#.....#...#.#.#...#.....#.....#.#...#.#.#...#...#.....#.#.....#...#.....#.#.#.#.#.#.#.#.#.#.#.#.#
#.#.#.#####.#.#.#######.#####.#.###.###.###.#######.###.#.#######.###.###.#.###.#.#.#.#.###.#.###.#.#####.#####.#.###.#.#.#.#.#.#.#.#.#.#.#.#
#.#.#.#...#...#.#...#...#.....#.#.#.#.#...#.#.....#.#...#.#...#...#...#...#.......#...#.#.......#.#...#...#...#.#.....#...#.....#...#.....#.#
#.#.#.#.#.#.#.###.#.#.#.#.#####.#.#.#.###.###.###.###.###.#.#.#.###.###.#######.#######.#.###.###.#.###.###.#.#.#############.###########.#.#
#.#.#...#...#.....#...#.#.#...#.............#.#.#...#.#.#.#.#.....#.#.#.......#.#.....#.#...............#...#.#.#.....#.....#.#.........#.#.#
#.#.#.###.#.#.#########.#.#.#.#####.#.#.###.#.#.###.#.#.#.#########.#.#######.###.###.#.#####.#.#.#.#.###.###.#.#.###.#.###.###.#######.###.#
#S............#.........#...#.........#...#.......#.....#.....................................#...#.#.......#.....#.....#.......#...........#
#############################################################################################################################################

5
dat/24/re/17.txt Normal file
View File

@@ -0,0 +1,5 @@
Register A: 22817223
Register B: 0
Register C: 0
Program: 2,4,1,2,7,5,4,5,0,3,1,7,5,5,3,0

View File

@@ -1,19 +0,0 @@
project(
'aoc',
['cpp', 'c++']
version: '0.0.0',
default_options: [
'c_std=c2x',
'cpp_std=c++23'
]
)
executable(
'aoc',
[
'aoc.cpp'
],
include_directories: [
include_directories('.')
]
)

30
sol/24/CMakeLists.txt Normal file
View File

@@ -0,0 +1,30 @@
set(HEADERS
aoc.hpp
)
set(SOURCES
"aoc.cpp"
"day01.cpp"
# "day02.cpp"
"day03.cpp"
# "day04.cpp"
"day05.cpp"
"day06.cpp"
# "day07.cpp"
"day08.cpp"
"day09.cpp"
"day10.cpp"
# "day11.cpp"
"day14.cpp"
"day16.cpp"
"day17.cpp"
)
add_library(aoc24 STATIC ${HEADERS} ${SOURCES})
target_include_directories(aoc24
PRIVATE
${PROJECT_SOURCE_DIR}
)
target_compile_features(aoc24 PRIVATE cxx_std_23)
target_compile_options(aoc24 PRIVATE ${BASE_OPTIONS})
target_compile_definitions(aoc24 PRIVATE ${BASE_DEFINITIONS})
target_link_libraries(aoc24 PRIVATE aoclib)
source_group(TREE "${CMAKE_CURRENT_LIST_DIR}" FILES ${HEADERS} ${SOURCES})

274
sol/24/README.md Normal file
View File

@@ -0,0 +1,274 @@
# Advent of Code 2024
## 01
--- Day 1: Historian Hysteria ---
The Chief Historian is always present for the big Christmas sleigh launch, but nobody has seen him in months! Last anyone heard, he was visiting locations that are historically significant to the North Pole; a group of Senior Historians has asked you to accompany them as they check the places they think he was most likely to visit.
As each location is checked, they will mark it on their list with a star. They figure the Chief Historian must be in one of the first fifty places they'll look, so in order to save Christmas, you need to help them get fifty stars on their list before Santa takes off on December 25th.
Collect stars by solving puzzles. Two puzzles will be made available on each day in the Advent calendar; the second puzzle is unlocked when you complete the first. Each puzzle grants one star. Good luck!
You haven't even left yet and the group of Elvish Senior Historians has already hit a problem: their list of locations to check is currently empty. Eventually, someone decides that the best place to check first would be the Chief Historian's office.
Upon pouring into the office, everyone confirms that the Chief Historian is indeed nowhere to be found. Instead, the Elves discover an assortment of notes and lists of historically significant locations! This seems to be the planning the Chief Historian was doing before he left. Perhaps these notes can be used to determine which locations to search?
Throughout the Chief's office, the historically significant locations are listed not by name but by a unique number called the location ID. To make sure they don't miss anything, The Historians split into two groups, each searching the office and trying to create their own complete list of location IDs.
There's just one problem: by holding the two lists up side by side (your puzzle input), it quickly becomes clear that the lists aren't very similar. Maybe you can help The Historians reconcile their lists?
For example:
```
3 4
4 3
2 5
1 3
3 9
3 3
```
Maybe the lists are only off by a small amount! To find out, pair up the numbers and measure how far apart they are. Pair up the smallest number in the left list with the smallest number in the right list, then the second-smallest left number with the second-smallest right number, and so on.
Within each pair, figure out how far apart the two numbers are; you'll need to add up all of those distances. For example, if you pair up a 3 from the left list with a 7 from the right list, the distance apart is 4; if you pair up a 9 with a 3, the distance apart is 6.
In the example list above, the pairs and distances would be as follows:
The smallest number in the left list is 1, and the smallest number in the right list is 3. The distance between them is 2.
The second-smallest number in the left list is 2, and the second-smallest number in the right list is another 3. The distance between them is 1.
The third-smallest number in both lists is 3, so the distance between them is 0.
The next numbers to pair up are 3 and 4, a distance of 1.
The fifth-smallest numbers in each list are 3 and 5, a distance of 2.
Finally, the largest number in the left list is 4, while the largest number in the right list is 9; these are a distance 5 apart.
To find the total distance between the left list and the right list, add up the distances between all of the pairs you found. In the example above, this is 2 + 1 + 0 + 1 + 2 + 5, a total distance of 11!
Your actual left and right lists contain many location IDs. What is the total distance between your lists?
Your puzzle answer was `1506483`.
--- Part Two ---
Your analysis only confirmed what everyone feared: the two lists of location IDs are indeed very different.
Or are they?
The Historians can't agree on which group made the mistakes or how to read most of the Chief's handwriting, but in the commotion you notice an interesting detail: a lot of location IDs appear in both lists! Maybe the other numbers aren't location IDs at all but rather misinterpreted handwriting.
This time, you'll need to figure out exactly how often each number from the left list appears in the right list. Calculate a total similarity score by adding up each number in the left list after multiplying it by the number of times that number appears in the right list.
Here are the same example lists again:
```
3 4
4 3
2 5
1 3
3 9
3 3
```
For these example lists, here is the process of finding the similarity score:
The first number in the left list is 3. It appears in the right list three times, so the similarity score increases by 3 * 3 = 9.
The second number in the left list is 4. It appears in the right list once, so the similarity score increases by 4 * 1 = 4.
The third number in the left list is 2. It does not appear in the right list, so the similarity score does not increase (2 * 0 = 0).
The fourth number, 1, also does not appear in the right list.
The fifth number, 3, appears in the right list three times; the similarity score increases by 9.
The last number, 3, appears in the right list three times; the similarity score again increases by 9.
So, for these example lists, the similarity score at the end of this process is 31 (9 + 4 + 0 + 0 + 9 + 9).
Once again consider your left and right lists. What is their similarity score?
Your puzzle answer was 23126924.
Both parts of this puzzle are complete! They provide two gold stars: **
## 02
--- Day 2: Red-Nosed Reports ---
Fortunately, the first location The Historians want to search isn't a long walk from the Chief Historian's office.
While the Red-Nosed Reindeer nuclear fusion/fission plant appears to contain no sign of the Chief Historian, the engineers there run up to you as soon as they see you. Apparently, they still talk about the time Rudolph was saved through molecular synthesis from a single electron.
They're quick to add that - since you're already here - they'd really appreciate your help analyzing some unusual data from the Red-Nosed reactor. You turn to check if The Historians are waiting for you, but they seem to have already divided into groups that are currently searching every corner of the facility. You offer to help with the unusual data.
The unusual data (your puzzle input) consists of many reports, one report per line. Each report is a list of numbers called levels that are separated by spaces. For example:
```
7 6 4 2 1
1 2 7 8 9
9 7 6 2 1
1 3 2 4 5
8 6 4 4 1
1 3 6 7 9
```
This example data contains six reports each containing five levels.
The engineers are trying to figure out which reports are safe. The Red-Nosed reactor safety systems can only tolerate levels that are either gradually increasing or gradually decreasing. So, a report only counts as safe if both of the following are true:
The levels are either all increasing or all decreasing.
Any two adjacent levels differ by at least one and at most three.
In the example above, the reports can be found safe or unsafe by checking those rules:
`7 6 4 2 1`: Safe because the levels are all decreasing by 1 or 2.
`1 2 7 8 9`: Unsafe because 2 7 is an increase of 5.
`9 7 6 2 1`: Unsafe because 6 2 is a decrease of 4.
`1 3 2 4 5`: Unsafe because 1 3 is increasing but 3 2 is decreasing.
`8 6 4 4 1`: Unsafe because 4 4 is neither an increase or a decrease.
`1 3 6 7 9`: Safe because the levels are all increasing by 1, 2, or 3.
So, in this example, 2 reports are safe.
Analyze the unusual data from the engineers. How many reports are safe?
Your puzzle answer was 686.
--- Part Two ---
The engineers are surprised by the low number of safe reports until they realize they forgot to tell you about the Problem Dampener.
The Problem Dampener is a reactor-mounted module that lets the reactor safety systems tolerate a single bad level in what would otherwise be a safe report. It's like the bad level never happened!
Now, the same rules apply as before, except if removing a single level from an unsafe report would make it safe, the report instead counts as safe.
More of the above example's reports are now safe:
`7 6 4 2 1`: Safe without removing any level.
`1 2 7 8 9`: Unsafe regardless of which level is removed.
`9 7 6 2 1`: Unsafe regardless of which level is removed.
`1 3 2 4 5`: Safe by removing the second level, 3.
`8 6 4 4 1`: Safe by removing the third level, 4.
`1 3 6 7 9`: Safe without removing any level.
Thanks to the Problem Dampener, 4 reports are actually safe!
Update your analysis by handling situations where the Problem Dampener can remove a single level from unsafe reports. How many reports are now safe?
Your puzzle answer was `717`.
Both parts of this puzzle are complete! They provide two gold stars: **
At this point, you should return to your Advent calendar and try another puzzle.
## 03
--- Day 3: Mull It Over ---
"Our computers are having issues, so I have no idea if we have any Chief Historians in stock! You're welcome to check the warehouse, though," says the mildly flustered shopkeeper at the North Pole Toboggan Rental Shop. The Historians head out to take a look.
The shopkeeper turns to you. "Any chance you can see why our computers are having issues again?"
The computer appears to be trying to run a program, but its memory (your puzzle input) is corrupted. All of the instructions have been jumbled up!
It seems like the goal of the program is just to multiply some numbers. It does that with instructions like mul(X,Y), where X and Y are each 1-3 digit numbers. For instance, mul(44,46) multiplies 44 by 46 to get a result of 2024. Similarly, mul(123,4) would multiply 123 by 4.
However, because the program's memory has been corrupted, there are also many invalid characters that should be ignored, even if they look like part of a mul instruction. Sequences like mul(4*, mul(6,9!, ?(12,34), or mul ( 2 , 4 ) do nothing.
For example, consider the following section of corrupted memory:
`xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))`
Only the four highlighted sections are real mul instructions. Adding up the result of each instruction produces `161 (2*4 + 5*5 + 11*8 + 8*5)`.
Scan the corrupted memory for uncorrupted mul instructions. What do you get if you add up all of the results of the multiplications?
Your puzzle answer was 159833790.
--- Part Two ---
As you scan through the corrupted memory, you notice that some of the conditional statements are also still intact. If you handle some of the uncorrupted conditional statements in the program, you might be able to get an even more accurate result.
There are two new instructions you'll need to handle:
The `do()` instruction enables future mul instructions.
The `don't()` instruction disables future mul instructions.
Only the most recent `do()` or `don't()` instruction applies. At the beginning of the program, `mul` instructions are enabled.
For example:
`xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))`
This corrupted memory is similar to the example from before, but this time the mul(5,5) and mul(11,8) instructions are disabled because there is a don't() instruction before them. The other mul instructions function normally, including the one at the end that gets re-enabled by a do() instruction.
This time, the sum of the results is `48 (2*4 + 8*5)`.
Handle the new instructions; what do you get if you add up all of the results of just the enabled multiplications?
Your puzzle answer was `89349241`.
Both parts of this puzzle are complete! They provide two gold stars: **
At this point, you should return to your Advent calendar and try another puzzle.
## 04
--- Day 4: Ceres Search ---
"Looks like the Chief's not here. Next!" One of The Historians pulls out a device and pushes the only button on it. After a brief flash, you recognize the interior of the Ceres monitoring station!
As the search for the Chief continues, a small Elf who lives on the station tugs on your shirt; she'd like to know if you could help her with her word search (your puzzle input). She only has to find one word: XMAS.
This word search allows words to be horizontal, vertical, diagonal, written backwards, or even overlapping other words. It's a little unusual, though, as you don't merely need to find one instance of XMAS - you need to find all of them. Here are a few ways XMAS might appear, where irrelevant characters have been replaced with .:
```
..X...
.SAMX.
.A..A.
XMAS.S
.X....
```
The actual word search will be full of letters instead. For example:
```
MMMSXXMASM
MSAMXMSMSA
AMXSXMAAMM
MSAMASMSMX
XMASAMXAMM
XXAMMXXAMA
SMSMSASXSS
SAXAMASAAA
MAMMMXMMMM
MXMXAXMASX
```
In this word search, XMAS occurs a total of 18 times; here's the same word search again, but where letters not involved in any XMAS have been replaced with .:
```
....XXMAS.
.SAMXMS...
...S..A...
..A.A.MS.X
XMASAMX.MM
X.....XA.A
S.S.S.S.SS
.A.A.A.A.A
..M.M.M.MM
.X.X.XMASX
```
Take a look at the little Elf's word search. How many times does XMAS appear?
Your puzzle answer was `2378`.
--- Part Two ---
The Elf looks quizzically at you. Did you misunderstand the assignment?
Looking for the instructions, you flip over the word search to find that this isn't actually an XMAS puzzle; it's an X-MAS puzzle in which you're supposed to find two MAS in the shape of an X. One way to achieve that is like this:
```
M.S
.A.
M.S
```
Irrelevant characters have again been replaced with . in the above diagram. Within the X, each MAS can be written forwards or backwards.
Here's the same example from before, but this time all of the X-MASes have been kept instead:
```
.M.S......
..A..MSMS.
.M.S.MAA..
..A.ASMSM.
.M.S.M....
..........
S.S.S.S.S.
.A.A.A.A..
M.M.M.M.M.
..........
```
In this example, an X-MAS appears 9 times.
Flip the word search from the instructions back over to the word search side and try again. How many times does an X-MAS appear?
Your puzzle answer was `1796`.
Both parts of this puzzle are complete! They provide two gold stars: **

41
sol/24/aoc.cpp Normal file
View File

@@ -0,0 +1,41 @@
#include <span>
#include <expected>
#include <string>
#include "aoc.hpp"
#include "ctre.hpp"
namespace aoc24 {
auto entry([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
using namespace aoc::types;
u32 day = 1;
if (args.size() > 1) {
if (ctre::match<"^[0-9]+$">(args[1]))
day = u32(std::stoul(args[1]));
else
fmt::print(stderr, "arg: {} is not a number\n", args[1]);
}
switch (day) {
case 1: return day01(args);
// case 2: return day02(args);
case 3: return day03(args);
// case 4: return day04(args);
case 5: return day05(args);
case 6: return day06(args);
// case 7: return day07(args);
case 8: return day08(args);
case 9: return day09(args);
case 10: return day10(args);
// case 11: return day11(args);
case 14: return day14(args);
case 16: return day16(args);
case 17: return day17(args);
default:
return aoc::make_error(fmt::format("day {}", day), std::errc::not_supported);
}
return {};
}
}

40
sol/24/aoc.hpp Normal file
View File

@@ -0,0 +1,40 @@
#ifndef SOL_24_AOC_HPP
#define SOL_24_AOC_HPP
#include <span>
#include <expected>
#include "aoc/utils.hpp"
#include "fmt/format.h"
namespace aoc24 {
auto entry(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day01(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day02(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day03(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day04(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day05(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day06(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day07(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day08(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day09(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day10(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day11(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day12(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day13(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day14(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day15(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day16(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day17(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day18(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day19(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day20(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day21(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day22(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day23(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day24(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
auto day25(std::span<char const*> const& args) -> std::expected<void, aoc::error>;
}
#endif

68
sol/24/day01.cpp Normal file
View File

@@ -0,0 +1,68 @@
#include <numeric>
#include <algorithm>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
auto aoc24::day01([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
constexpr auto filename = "./dat/24/re/01.txt";
std::ifstream strm{filename, std::ios::in};
if (!strm.is_open()) {
return aoc::make_error(
fmt::format("Error opening file: {}\n", filename),
std::errc::file_exists
);
}
std::vector<std::uint32_t> a{};
std::vector<std::uint32_t> b{};
std::string str{};
while (strm) {
auto const c = char(strm.peek());
if (std::isdigit(c)) {
str += char(strm.get());
continue;
}
if (c == ' ') {
if (!str.empty()) {
a.emplace_back(std::stoi(str));
str.clear();
}
}
if (c == '\n') {
if (!str.empty()) {
b.emplace_back(std::stoi(str));
str.clear();
}
}
[[discard]]strm.get();
}
fmt::print("a: {}, b: {}\n", a.size(), b.size());
std::sort(std::begin(a), std::end(a));
std::sort(std::begin(b), std::end(b));
auto diff_view = std::views::zip(a, b) | std::views::transform([](auto const& p) {
auto const [x, y] = p;
return x > y ? x - y : y - x;
});
auto const sum = std::accumulate(std::begin(diff_view), std::end(diff_view), 0);
fmt::print("Part A: {}\n", std::abs(sum));
auto values = a | std::views::transform([&b](auto v) {
return std::pair{v, b | std::views::filter([v](auto c) {
return v == c; // Filter elements in `b` equal to `v`
}) | std::ranges::to<std::vector>()};
}) | std::ranges::to<std::vector>();
auto const meow = std::accumulate(std::begin(values), std::end(values), 0, [](auto const acc, auto const& pair) {
return acc + std::int32_t(pair.first * pair.second.size());
});
fmt::print("Part B: {}\n", meow);
return {};
}

104
sol/24/day02.cpp Normal file
View File

@@ -0,0 +1,104 @@
#include <fstream>
#include <vector>
#include <algorithm>
#include <ranges>
#include <numeric>
#include <cmath>
#include <utility>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
using namespace std::string_view_literals;
using namespace aoc::types;
auto part_a(std::vector<std::vector<i32>> const& reports) -> void {
auto const diffvec = reports | std::views::transform([](auto const& levels) {
return levels | std::views::adjacent_transform<2>([](auto const& a, auto const& b) {
return b - a;
}) | std::ranges::to<std::vector>();
}) | std::ranges::to<std::vector>();
auto answer = diffvec | std::views::filter([](auto const& levels) {
auto const n = std::ranges::all_of(levels, [](auto v) { return v < 0; });
auto const p = std::ranges::all_of(levels, [](auto v) { return v > 0; });
auto const c = std::ranges::all_of(levels, [](auto v) { return std::abs(v) > 0 && std::abs(v) <= 3; });
return (n || p) && c;
});
auto const sum = std::ranges::distance(answer);
fmt::print("Part A: {}\n", sum);
}
auto part_b(std::vector<std::vector<i32>> const& reports) -> void {
auto const diffvec = reports | std::views::transform([](auto const& levels) {
return levels | std::views::adjacent_transform<2>([](auto const& a, auto const& b) {
return b - a;
}) | std::ranges::to<std::vector>();
}) | std::ranges::to<std::vector>();
auto const test_rule = [](std::vector<i32> const& levels) {
auto const n = std::ranges::all_of(levels, [](auto v) { return v < 0; });
auto const p = std::ranges::all_of(levels, [](auto v) { return v > 0; });
auto const c = std::ranges::all_of(levels, [](auto v) { return std::abs(v) > 0 && std::abs(v) <= 3; });
return (n || p) && c;
};
auto nochange = diffvec | std::views::filter(test_rule);
auto unmet = std::views::zip(reports, diffvec) | std::views::filter([](auto const& vecs) {
auto const& [levels, diffs] = vecs;
auto const n = std::ranges::all_of(diffs, [](auto v) { return v < 0; });
auto const p = std::ranges::all_of(diffs, [](auto v) { return v > 0; });
auto const c = std::ranges::all_of(diffs, [](auto v) { return std::abs(v) > 0 && std::abs(v) <= 3; });
return !(n || p) || !c;
}) | std::views::transform([](auto const& vecs) {
auto const& [levels, diffs] = vecs;
return levels;
});
auto refit = unmet | std::views::filter([&test_rule](auto const& levels) {
std::vector<i32> vec{};
for (std::size_t i = 0; i < levels.size(); ++i) {
vec = levels;
vec.erase(std::begin(vec) + std::ptrdiff_t(i));
vec = vec
| std::views::adjacent_transform<2>([](auto const& a, auto const& b) { return b - a; })
| std::ranges::to<std::vector>();
if (test_rule(vec)) return true;
}
return false;
});
auto const first = std::ranges::distance(nochange);
auto const second = std::ranges::distance(refit);
fmt::print("Part B: {}\n", first + second);
}
auto aoc24::day02([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
auto txtres = aoc::read_text("./dat/24/re/02.txt");
// auto txtres = aoc::read_text("./dat/24/ex/02.txt");
if (!txtres) return std::unexpected(txtres.error());
auto const txt = *txtres;
auto const reports = txt | std::views::split("\n"sv)
| std::views::transform([](auto const& str) { return std::string_view(str); })
| std::views::filter([](auto const& str) { return !str.empty(); })
| std::views::transform([](auto const& str) {
return str | std::views::split(" "sv)
| std::views::filter([](auto str) { return !str.empty(); })
| std::views::transform([](auto const& num_str) {
return std::stoi(std::string(std::begin(num_str), std::end(num_str)));
})
| std::ranges::to<std::vector>();
}) | std::ranges::to<std::vector>();
part_a(reports);
part_b(reports);
return {};
}

445
sol/24/day03.cpp Normal file
View File

@@ -0,0 +1,445 @@
#include <fstream>
#include <expected>
#include <string>
#include <ranges>
#include <numeric>
#include <vector>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
#include "ctre.hpp"
namespace npr {
#define ENUMERATOR_AOC_TOKENS \
ENUMERATOR_AOC_TOKEN(mul , operator_ ) \
ENUMERATOR_AOC_TOKEN(invalid , invalid ) \
ENUMERATOR_AOC_TOKEN(numeric_literal, number ) \
ENUMERATOR_AOC_TOKEN(newline , punctuation) \
ENUMERATOR_AOC_TOKEN(paren_open , punctuation) \
ENUMERATOR_AOC_TOKEN(paren_close , punctuation) \
ENUMERATOR_AOC_TOKEN(comma , punctuation) \
ENUMERATOR_AOC_TOKEN(identifier , identifier )
#define ENUMERATOR_AOC_CATEGORIES \
ENUMERATOR_AOC_CATEGORY(operator_) \
ENUMERATOR_AOC_CATEGORY(invalid) \
ENUMERATOR_AOC_CATEGORY(number) \
ENUMERATOR_AOC_CATEGORY(punctuation) \
ENUMERATOR_AOC_CATEGORY(identifier)
#define ENUMERATOR_AOC_NODE_TYPES \
ENUMERATOR_AOC_NODE_TYPE(numeric_literal) \
ENUMERATOR_AOC_NODE_TYPE(call_expression) \
ENUMERATOR_AOC_NODE_TYPE(binary_expression)
enum class token_type : std::uint32_t {
#define ENUMERATOR_AOC_TOKEN(type, category) type,
ENUMERATOR_AOC_TOKENS
#undef ENUMERATOR_AOC_TOKEN
_count
};
enum class token_category : std::uint32_t {
#define ENUMERATOR_AOC_CATEGORY(type) type,
ENUMERATOR_AOC_CATEGORIES
#undef ENUMERATOR_AOC_CATEGORY
_count
};
enum class node_type : std::uint32_t {
#define ENUMERATOR_AOC_NODE_TYPE(type) type,
ENUMERATOR_AOC_NODE_TYPES
#undef ENUMERATOR_AOC_NODE_TYPE
_count
};
auto token_type_str(token_type type) -> char const* {
switch (type) {
using enum token_type;
#define ENUMERATOR_AOC_TOKEN(type, category) case type: return #type;
ENUMERATOR_AOC_TOKENS
#undef ENUMERATOR_AOC_TOKEN
default: return "invalid";
}
}
auto token_type_category(token_type type) -> token_category {
switch (type) {
using enum token_category;
#define ENUMERATOR_AOC_TOKEN(type, category) case token_type::type: return category;
ENUMERATOR_AOC_TOKENS
#undef ENUMERATOR_AOC_TOKEN
default: return token_category::invalid;
}
}
auto node_type_str(node_type type) -> char const* {
switch (type) {
using enum node_type;
#define ENUMERATOR_AOC_NODE_TYPE(type) case type: return #type;
ENUMERATOR_AOC_NODE_TYPES
#undef ENUMERATOR_AOC_NODE_TYPE
default: return "invalid";
}
}
class token {
public:
token(std::string const& str, token_type type, token_category category, std::size_t row, std::size_t col)
: m_type(type)
, m_category(category)
, m_value(str)
, m_row(row)
, m_column(col) { }
auto type() const -> token_type { return m_type; }
auto category() const -> token_category { return m_category; }
auto value() const -> std::string const& { return m_value; }
auto row() const -> std::size_t { return m_row; }
auto col() const -> std::size_t { return m_column; }
auto str() const -> std::string {
using namespace std::string_literals;
std::string str{"token {"};
str += " value: \""s + m_value + "\","s;
str += " type: "s + token_type_str(m_type) + ","s;
str += " row: "s + std::to_string(m_row) + ","s;
str += " col: "s + std::to_string(m_column);
str += " }";
return str;
}
public:
inline static auto is_identifier(std::string_view const& str) -> bool {
return ctre::match<"^[a-z']+$">(str);
}
inline static auto is_numeric_literal(std::string_view const& str) -> bool {
return ctre::match<"^[0-9]+$">(str);
}
private:
token_type m_type;
token_category m_category;
std::string m_value;
std::size_t m_row;
std::size_t m_column;
};
enum class lexer_error {
eof,
unknown
};
class lexer {
public:
lexer(std::string const& source)
: m_strm(source, std::ios::in | std::ios::binary)
, m_line(1), m_col(1) {
}
auto tokenize() -> std::vector<token> {
std::vector<token> tokens{};
auto tk = next_token();
while (tk) {
tokens.emplace_back(std::move(tk.value()));
tk = next_token();
}
return tokens;
}
private:
auto next_token() -> std::optional<token> {
if (!has_next()) return {};
std::string str{};
auto const col = m_col;
if (peek() == '\n') {
peek_consume();
m_line = m_line + 1;
str += "\\n";
m_col = 1;
auto const& type = token_type::invalid;
return token(str, type, token_type_category(type), m_line, col);
}
// mul, do, don't identifier
if (peek() == 'm' || peek() == 'd') {
auto const is_valid_identifier_char = [](auto const c) {
return (c >= 'a' && c <= 'z') || c == '\'';
};
while (is_valid_identifier_char(peek())) str += peek_consume();
auto const check_type = [](auto const str) {
if (!token::is_identifier(str)) return token_type::invalid;
return token_type::identifier;
};
auto const& type = check_type(str);
return token(str, type, token_type_category(type), m_line, col);
}
if (peek() == '(') {
str += peek_consume();
return token{
str,
token_type::paren_open,
token_type_category(token_type::paren_open),
m_line,
col
};
}
if (peek() == ')') {
str += peek_consume();
return token{
str,
token_type::paren_close,
token_type_category(token_type::paren_close),
m_line,
col
};
}
if (peek() == ',') {
str += peek_consume();
return token{
str,
token_type::comma,
token_type_category(token_type::comma),
m_line,
col
};
}
if (std::isdigit(peek())) {
while(std::isdigit(peek())) str += peek_consume();
auto const& type = token::is_numeric_literal(str) ? token_type::numeric_literal : token_type::invalid;
return token(str, type, token_type_category(type), m_line, col);
}
if (!has_next()) return {};
str += peek_consume();
return token{
str,
token_type::invalid,
token_type_category(token_type::invalid),
m_line,
col
};
}
auto peek() -> char {
return static_cast<char>(m_strm.peek());
}
auto peek_consume() -> char {
++m_col;
return static_cast<char>(m_strm.get());
}
auto has_next() const -> bool {
return !m_strm.eof() && m_strm.good();
}
private:
std::fstream m_strm;
std::size_t m_line;
std::size_t m_col;
};
class node {
public:
node(node_type type,
token const& token,
std::vector<node> const& nodes = {})
: m_type(type)
, m_token(token)
, m_nodes(nodes) { }
auto type() const -> node_type { return m_type; }
auto token() const -> npr::token const& { return m_token; }
auto nodes() const -> std::vector<node> const& { return m_nodes; }
auto value() const -> std::string const& { return m_token.value(); }
auto add_node(npr::node const& node) -> void {
m_nodes.push_back(node);
}
auto str() const -> std::string {
using namespace std::string_literals;
std::string str{node_type_str(m_type) + " {"s};
str += " value: "s + m_token.value();
switch (m_type) {
case node_type::call_expression:
str += call_expression_str();
break;
default: break;
}
str += " }";
return str;
}
private:
auto call_expression_str() const -> std::string {
if (m_nodes.size() == 0) return "";
using namespace std::string_literals;
std::string str{", ["};
for (std::size_t i = 0; i < m_nodes.size(); ++i) {
str += " "s + std::to_string(i) + ": "s + m_nodes[i].str();
if (i < m_nodes.size() - 1) str += ",";
}
str += " ]";
return str;
}
private:
node_type m_type;
npr::token m_token;
std::vector<node> m_nodes;
};
class parser {
public:
parser() : m_cursor(0), m_tokens() { }
auto parse(std::vector<token> const& tokens) -> std::vector<node> {
m_cursor = 0;
m_tokens = tokens;
std::vector<node> nodes{};
do {
auto n = parse_statement();
if (n.has_value()) nodes.push_back(n.value());
} while(has_next());
return nodes;
}
private:
auto parse_statement() -> std::optional<node> {
auto const type = peek().type();
switch (type) {
case token_type::identifier: {
if (!has_next()) return {};
auto next = peek_next();
if (next.type() == token_type::paren_open) {
return parse_call_expression();
}
}
default:
break;
}
consume();
return {};
}
auto parse_call_expression() -> std::optional<node> {
auto const& token_callee = peek();
node callee{node_type::call_expression, token_callee};
consume();
return parse_args(callee);
}
auto parse_args(npr::node callee) -> std::optional<node> {
if (peek().type() != token_type::paren_open) return {};
consume();
while (has_next()) {
auto const& arg_token = peek();
if (arg_token.type() == token_type::numeric_literal) {
callee.add_node({node_type::numeric_literal, arg_token});
consume();
continue;
}
if (arg_token.type() == token_type::comma) {
consume();
continue;
}
if (arg_token.type() == token_type::paren_close) {
consume();
break;
}
return {};
}
return callee;
}
private:
auto peek() const -> token const& {
return m_tokens[m_cursor];
}
auto peek_next() const -> token const& {
return m_tokens[m_cursor + 1];
}
auto consume() -> void {
if (m_cursor >= m_tokens.size()) return;
++m_cursor;
}
auto has_next(std::size_t i = 0) const -> bool {
return m_cursor + i < m_tokens.size();
}
private:
std::size_t m_cursor;
std::vector<token> m_tokens;
};
}
auto aoc24::day03([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
npr::lexer lexer{"./dat/24/re/03.txt"};
npr::parser parser{};
auto const tokens = lexer.tokenize();
auto const nodes = parser.parse(tokens);
// for (auto const& token : tokens) {
// fmt::print("{}\n", token.str());
// }
//
// for (auto const& node : nodes) {
// fmt::print("{}\n", node.str());
// }
auto opa = nodes | std::views::filter([](auto const& node) {
return node.value() == "mul";
}) | std::views::transform([](auto const& node) {
auto const a = std::stoi(node.nodes()[0].value());
auto const b = std::stoi(node.nodes()[1].value());
return a * b;
});
auto const sum = std::accumulate(std::begin(opa), std::end(opa), 0);
fmt::print("Part A: {}\n", sum);
std::vector<npr::node> program{};
bool is_do = true;
for (auto const& node : nodes) {
if (node.value() == "do") {
is_do = true;
continue;
}
if (node.value() == "don't") {
is_do = false;
continue;
}
if (is_do) program.push_back(node);
}
auto opb = program | std::views::filter([](auto const& node) {
return node.value() == "mul";
}) | std::views::transform([](auto const& node) {
auto const a = std::stoi(node.nodes()[0].value());
auto const b = std::stoi(node.nodes()[1].value());
return a * b;
});
auto const sumb = std::accumulate(std::begin(opb), std::end(opb), 0);
fmt::print("Part B: {}\n", sumb);
return {};
}

181
sol/24/day04.cpp Normal file
View File

@@ -0,0 +1,181 @@
#include <fstream>
#include <vector>
#include <algorithm>
#include <ranges>
#include <numeric>
#include <cmath>
#include <utility>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
#include "ctre.hpp"
namespace cms {
using vecn = std::vector<std::uint8_t>;
using matnxn = std::vector<vecn>;
auto read_text_matnxn(std::string const& path) -> matnxn {
std::ifstream strm{path};
if (!strm.is_open())
throw std::runtime_error(fmt::format("Failed to open file {}", path));
matnxn text{};
vecn cols{};
while (!strm.eof()) {
auto const c = static_cast<std::uint8_t>(strm.peek());
if (c == '\n')
text.emplace_back(std::move(cols));
else
cols.push_back(c);
strm.get();
}
return text;
}
}
auto part_a(cms::matnxn const& mat) -> void {
std::vector<aoc::u8> pattern{'X', 'M', 'A', 'S'};
aoc::i32 hc = 0;
aoc::i32 vc = 0;
aoc::i32 xc = 0;
for (std::size_t i = 0; i < mat.size(); ++i) {
auto const& cols = mat[i];
auto hview = cols | std::views::slide(4)
| std::views::filter([&](auto const& str) {
auto const a = std::ranges::all_of(
std::views::zip(pattern, str), [](auto const& z) {
return std::get<0>(z) == std::get<1>(z);
});
auto const b = std::ranges::all_of(
std::views::zip(std::views::reverse(pattern), str),
[](auto const& z) {
return std::get<0>(z) == std::get<1>(z);
});
return a || b;
});
hc += std::ranges::distance(hview);
for (std::size_t j = 0; j < cols.size(); ++j) {
// Vertical pattern
bool is_v_match = true;
bool is_rv_match = true;
for (std::size_t y = 0; y < pattern.size(); ++y) {
if (i + y >= mat.size()) {
is_v_match = false;
is_rv_match = false;
break;
}
if (is_v_match)
is_v_match = mat[i + y][j] == pattern[y];
if (is_rv_match)
is_rv_match = mat[i + y][j] == pattern[pattern.size() - y - 1];
}
vc += is_v_match ? 1 : 0;
vc += is_rv_match ? 1 : 0;
bool is_dr_match = true;
bool is_drr_match = true;
for (std::size_t x = 0; x < pattern.size(); ++x) {
if (i + x >= mat.size() || j + x >= cols.size()) {
is_dr_match = false;
is_drr_match = false;
break;
}
if (is_dr_match)
is_dr_match = mat[i + x][j + x] == pattern[x];
if (is_drr_match)
is_drr_match = mat[i + x][j + x] == pattern[pattern.size() - x - 1];
}
xc += is_dr_match ? 1 : 0;
xc += is_drr_match ? 1 : 0;
bool is_dl_match = true;
bool is_dlr_match = true;
for (std::size_t x = 0; x < pattern.size(); ++x) {
if (i + x >= mat.size() || j + pattern.size() - 1 >= cols.size()) {
is_dl_match = false;
is_dlr_match = false;
break;
}
if (is_dl_match)
is_dl_match = mat[i + x][j + pattern.size() - x - 1] == pattern[x];
if (is_dlr_match)
is_dlr_match = mat[i + x][j + pattern.size() - x - 1] == pattern[pattern.size() - x - 1];
}
xc += is_dl_match ? 1 : 0;
xc += is_dlr_match ? 1 : 0;
}
}
// fmt::print("{}\n", hc);
// fmt::print("{}\n", vc);
// fmt::print("{}\n", xc);
fmt::print("Part A: {}\n", hc + vc + xc);
}
auto part_b(cms::matnxn const& mat) -> void {
std::vector<aoc::u8> pattern{'M', 'A', 'S'};
aoc::i32 xc = 0;
for (std::size_t i = 0; i < mat.size(); ++i) {
auto const& cols = mat[i];
for (std::size_t j = 0; j < cols.size(); ++j) {
bool is_dr_match = true;
bool is_drr_match = true;
for (std::size_t x = 0; x < pattern.size(); ++x) {
if (i + x >= mat.size() || j + x >= cols.size()) {
is_dr_match = false;
is_drr_match = false;
break;
}
if (is_dr_match)
is_dr_match = mat[i + x][j + x] == pattern[x];
if (is_drr_match)
is_drr_match = mat[i + x][j + x] == pattern[pattern.size() - x - 1];
}
bool is_dl_match = true;
bool is_dlr_match = true;
for (std::size_t x = 0; x < pattern.size(); ++x) {
if (i + x >= mat.size() || j + pattern.size() - 1 >= cols.size()) {
is_dl_match = false;
is_dlr_match = false;
break;
}
if (is_dl_match)
is_dl_match = mat[i + x][j + pattern.size() - x - 1] == pattern[x];
if (is_dlr_match)
is_dlr_match = mat[i + x][j + pattern.size() - x - 1] == pattern[pattern.size() - x - 1];
}
if ((is_dr_match || is_drr_match) && (is_dl_match || is_dlr_match)) xc += 1;
}
}
fmt::print("Part B: {}\n", xc);
}
auto aoc24::day04([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
// auto mat = cms::read_text_matnxn("./dat/24/ex/04.txt");
auto mat = cms::read_text_matnxn("./dat/24/re/04.txt");
part_a(mat);
part_b(mat);
return {};
}

162
sol/24/day05.cpp Normal file
View File

@@ -0,0 +1,162 @@
#include <vector>
#include <fstream>
#include <expected>
#include <system_error>
#include <ranges>
#include <string>
#include <algorithm>
#include <numeric>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
using namespace aoc::types;
auto part_a(std::vector<std::vector<i32>> const& rules,
std::vector<std::vector<i32>> const& updates) -> void {
// std::ranges::for_each(order_rules, [](auto const& rule) {
// std::ranges::for_each(rule, [](auto const& page) {
// fmt::print("{} ", page);
// });
// fmt::print("\n");
// });
//
// std::ranges::for_each(updates, [](auto const& update) {
// std::ranges::for_each(update, [](auto const& page) {
// fmt::print("{}, ", page);
// });
// fmt::print("\n");
// });
auto valid_updates = updates | std::views::filter([&](auto const& pages) {
return std::ranges::all_of(rules, [&](auto const& rule) {
auto const a = std::ranges::find(pages, rule[0]);
auto const b = std::ranges::find(pages, rule[1]);
return a < b || a == std::end(pages) || b == std::end(pages) || a == b;
});
});
// std::ranges::for_each(valid_updates, [](auto const& update){
// std::ranges::for_each(update, [](auto const& page) {
// fmt::print("{}, ", page);
// });
// fmt::print("\n");
// });
auto mids = valid_updates | std::views::transform([](auto const& updates) {
return *std::ranges::next(std::begin(updates), updates.size() / 2);
});
// std::ranges::for_each(mids, [](auto const& mid) {
// fmt::print("{}\n", mid);
// });
auto const sum = std::accumulate(std::begin(mids), std::end(mids), 0);
fmt::print("Part A: {}\n", sum);
}
auto part_b(std::vector<std::vector<i32>> const& rules,
std::vector<std::vector<i32>> const& updates) -> void {
auto valids = updates | std::views::filter([&](auto const& pages) {
return std::ranges::all_of(rules, [&](auto const& rule) {
auto const a = std::ranges::find(pages, rule[0]);
auto const b = std::ranges::find(pages, rule[1]);
return a < b || a == std::end(pages) || b == std::end(pages);
});
});
auto valids_mid = valids | std::views::transform([](auto const& updates) {
return *std::ranges::next(std::begin(updates), updates.size() / 2);
});
auto invalids = updates | std::views::filter([&](auto const& pages) {
return !std::ranges::all_of(rules, [&](auto const& rule) {
auto const a = std::ranges::find(pages, rule[0]);
auto const b = std::ranges::find(pages, rule[1]);
return a < b || a == std::end(pages) || b == std::end(pages);
});
});
auto invalid_rules = rules | std::views::filter([&](auto const& rule) {
return !std::ranges::all_of(invalids, [&](auto const& pages) {
auto const a = std::ranges::find(pages, rule[0]);
auto const b = std::ranges::find(pages, rule[1]);
return a < b || a == std::end(pages) || b == std::end(pages);
});
});
auto const a = std::accumulate(std::begin(valids_mid), std::end(valids_mid), 0);
(void)a;
// std::ranges::for_each(valids, [](auto const& update){
// std::ranges::for_each(update, [](auto const& page) {
// fmt::print("{}, ", page);
// });
// fmt::print("\n");
// });
// fmt::print("--------------------------------------------------------------------------------\n");
std::ranges::for_each(invalid_rules, [](auto const& rules){
std::ranges::for_each(rules, [](auto const& rule) {
fmt::print("{} ", rule);
});
fmt::print("\n");
});
std::ranges::for_each(invalids, [](auto const& update){
std::ranges::for_each(update, [](auto const& page) {
fmt::print("{}, ", page);
});
fmt::print("\n");
});
}
auto aoc24::day05([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
using namespace std::string_view_literals;
auto txtres = aoc::read_text("./dat/24/ex/05.txt");
// auto txtres = aoc::read_text("./dat/24/re/05.txt");
if (!txtres) return std::unexpected(txtres.error());
auto const txt = *txtres;
auto const not_empty = [](auto const& str) { return !str.empty(); };
auto lines = txt | std::views::split("\n"sv)
| std::views::transform([](auto const& str) { return std::string_view(str); });
auto rules_str = lines | std::views::take_while(not_empty)
| std::ranges::to<std::vector>();
auto updates_str = lines | std::views::drop_while(not_empty)
| std::views::drop(1)
| std::views::take_while(not_empty)
| std::ranges::to<std::vector>();
// fmt::print("rules:\n");
// std::ranges::for_each(rules_str, [](auto const& str) {
// fmt::print(" \"{}\"\n", str);
// });
// fmt::print("\n");
//
// fmt::print("updates:\n");
// std::ranges::for_each(updates_str, [](auto const& str) {
// fmt::print(" \"{}\"\n", str);
// });
auto order_rules = rules_str | std::views::transform([](auto const& str) {
return str | std::views::split("|"sv)
| std::views::transform([](auto const& num_str) {
return std::stoi(std::string{std::begin(num_str), std::end(num_str)});
}) | std::ranges::to<std::vector>();
}) | std::ranges::to<std::vector>();
auto updates = updates_str | std::views::transform([](auto const& str) {
return str | std::views::split(","sv)
| std::views::transform([](auto const& num_str) {
return std::stoi(std::string{std::begin(num_str), std::end(num_str)});
}) | std::ranges::to<std::vector>();
}) | std::ranges::to<std::vector>();
part_a(order_rules, updates);
part_b(order_rules, updates);
return {};
}

149
sol/24/day06.cpp Normal file
View File

@@ -0,0 +1,149 @@
#include <vector>
#include <algorithm>
#include <ranges>
#include <numeric>
#include <cmath>
#include <utility>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
using namespace std::string_view_literals;
using namespace aoc::types;
namespace lab {
class guard {
public:
guard(i64 x, i64 y) : m_row(y), m_col(x) { }
auto set_direction(i64 x, i64 y) -> void {
m_dx = x;
m_dy = y;
}
auto set_dx(i64 x) -> void { m_dx = x; }
auto set_dy(i64 y) -> void { m_dy = y; }
auto set_x(i64 v) -> void { m_col = v; }
auto set_y(i64 v) -> void { m_row = v; }
auto x() const -> i64 { return m_col; }
auto y() const -> i64 { return m_row; }
auto dx() const -> i64 { return m_dx; }
auto dy() const -> i64 { return m_dy; }
auto move() -> void {
m_row += m_dy;
m_col += m_dx;
}
private:
i64 m_row;
i64 m_col;
i64 m_dx;
i64 m_dy;
};
class lab {
public:
lab(std::string const& map_str) {
auto const lines = map_str
| std::views::split("\n"sv)
| std::views::transform([](auto const& str) {
return std::string_view(std::begin(str), std::end(str));
})
| std::views::filter([](auto const& str) { return !str.empty(); })
| std::views::transform([](auto const& str) {
return str | std::views::filter([](auto const& ch) { return ch != '\n'; })
| std::ranges::to<std::vector>();
}) | std::ranges::to<std::vector>();
m_rows = lines.size();
m_cols = lines[0].size();
std::ranges::for_each(lines, [&](auto const& str) {
std::ranges::for_each(str, [&](auto const& ch) {
m_data.emplace_back(ch);
});
});
auto it = std::find_if(std::begin(m_data), std::end(m_data), [](auto const ch) { return ch == '^'; });
if (it != std::end(m_data)) m_start.set_direction(0, -1);
auto const dist = usize(it - std::begin(m_data));
m_start.set_x(i64(dist - (dist / m_cols * m_rows)));
m_start.set_y(i64(dist / m_cols));
}
auto start() const -> guard { return m_start; }
auto rows() const -> usize { return m_rows; }
auto cols() const -> usize { return m_cols; }
auto is_obstruction(usize x, usize y) const -> bool {
if (x >= m_cols || y >= m_rows) return false;
return m_data[y * m_cols + x] == '#';
}
auto is_obstruction(guard const& g) const -> bool {
return is_obstruction(usize(g.x()), usize(g.y()));
}
auto is_outside(usize x, usize y) const -> bool {
return x >= m_cols || y >= m_rows;
}
auto is_outside(guard const& g) const -> bool {
return is_outside(usize(g.x()), usize(g.y()));
}
private:
usize m_rows{};
usize m_cols{};
std::vector<u8> m_data{};
guard m_start{0, 0};
};
}
auto part_a(lab::lab const& map) -> void {
// for (usize i = 0; i < map.rows; ++i) {
// for (usize j = 0; j < map.cols; ++j) {
// fmt::print("{} ", c8(map.data[i * map.cols + j]));
// }
// fmt::print("\n");
// }
std::vector<u8> cpy{};
cpy.resize(map.rows() * map.cols());
std::fill(std::begin(cpy), std::end(cpy), 0);
auto guard = map.start();
while (!map.is_outside(guard)) {
cpy[usize(guard.y()) * map.cols() + usize(guard.x())] = 1;
lab::guard guard_cpy = guard;
guard_cpy.move();
if (map.is_obstruction(guard_cpy)) {
if (guard_cpy.dy() == -1)
guard.set_direction(1, 0);
else if (guard_cpy.dy() == 1)
guard.set_direction(-1, 0);
else if (guard_cpy.dx() == -1)
guard.set_direction(0, -1);
else if (guard_cpy.dx() == 1)
guard.set_direction(0, 1);
}
guard.move();
}
auto const sum = std::accumulate(std::begin(cpy), std::end(cpy), 0);
fmt::print("Part A: {}\n", sum);
}
auto aoc24::day06([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
auto res = aoc::read_text("./dat/24/re/06.txt");
if (!res) return std::unexpected(res.error());
auto const map_txt = *res;
lab::lab map{map_txt};
part_a(map);
return {};
}

163
sol/24/day07.cpp Normal file
View File

@@ -0,0 +1,163 @@
#include <vector>
#include <ranges>
#include <numeric>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
using namespace aoc::types;
using namespace std::string_view_literals;
namespace rbr {
enum class op {
add,
mul,
cat,
};
auto op_to_str(rbr::op value) -> char const* {
switch(value) {
case op::add: return "+";
case op::mul: return "*";
case op::cat: return "||";
default: return "none";
}
}
class expr {
public:
expr(u64 eres, std::vector<u64> const& operands)
: m_eres(eres), m_operands(operands) {
find_res();
}
auto find_res() -> bool {
auto const max = u64(std::pow(3, m_operands.size()));
for (u64 t = 0; t < max; ++t) {
m_ops = t;
m_res = 0;
compute();
if (m_res == m_eres) break;
}
return m_res == m_eres;
}
auto compute() -> void {
std::vector<u64> ops{};
for (usize i = 0; i < m_operands.size() - 1; ++i) {
auto const mode = op((m_ops >> (i * 2)) & 0x03);
if (mode == op::mul) {
ops.push_back(std::stoull(fmt::format("{}{}", m_operands[i + 0], m_operands[i + 1])));
++i;
m_ops = m_ops | ((m_ops & ~u64(mode)) >> 2);
continue;
}
ops.push_back(m_operands[i]);
}
for (usize i = 0; i < ops.size(); ++i) {
if (i == 0) {
m_res = ops[0];
continue;
}
auto const a = m_res;
auto const b = ops[i];
auto const am = op((m_ops >> (i * 2)) & 0x03);
if (am == op::add)
m_res = a + b;
else if (am == op::mul)
m_res = a * b;
}
}
auto res() const -> u64 { return m_eres; }
auto eres() const -> u64 { return m_eres; }
auto operands() const -> std::vector<u64> const& { return m_operands; }
auto ops() const -> u64 const& { return m_ops; }
auto valid() const -> bool { return m_res == m_eres; };
auto str() const -> std::string {
using namespace std::string_literals;
std::string str{"expr {"};
str += " expect: "s + std::to_string(m_eres) + ",";
str += " expr: "s;
str += std::to_string(m_res) + " = ";
for (usize i = 0; i < m_operands.size(); ++i) {
auto const& operand = m_operands[i + 0];
str += std::to_string(operand);
if (i == m_operands.size() - 1) break;
auto const mode = op((m_ops >> (i * 2)) & 0x03);
if (mode == op::add)
str += " + ";
else if (mode == op::mul)
str += " * ";
else
str += " || ";
}
str += " }";
return str;
}
private:
u64 m_eres;
std::vector<u64> m_operands;
u64 m_res{0x00};
u64 m_ops{0x00};
};
auto str_to_op(std::string const& str) -> expr {
auto const splitc = str | std::views::split(": "sv)
| std::views::transform([](auto const& str){
return std::string(std::begin(str), std::end(str));
})
| std::views::filter([](auto const& str) { return !str.empty(); })
| std::ranges::to<std::vector>();
u64 const a = std::stoull(splitc[0]);
auto const b = splitc[1] | std::views::split(" "sv)
| std::views::transform([](auto const& str){
return std::string(std::begin(str), std::end(str));
})
| std::views::filter([](auto const& str) { return !str.empty(); })
| std::views::transform([](auto const& str) { return std::stoull(str); })
| std::ranges::to<std::vector>();
return {a, b};
}
}
auto aoc24::day07([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
auto res = aoc::read_text("./dat/24/ex/07.txt");
// auto res = aoc::read_text("./dat/24/re/07.txt");
if (!res) return std::unexpected(res.error());
auto const txt = *res;
u64 test = 0b1100'1100;
fmt::print("{:b}\n", test);
test = (test & ~0b1100u) >> 2;
fmt::print("{:b}\n", test);
// fmt::print("{}\n", rbr::op_to_str(rbr::op(test >> 2)));
// auto exprs = txt | std::views::split("\n"sv)
// | std::views::transform([](auto const& str){
// return std::string(std::begin(str), std::end(str));
// })
// | std::views::filter([](auto const& str) { return !str.empty(); })
// | std::views::transform(rbr::str_to_op);
// auto const valids = exprs | std::views::filter([](auto const expr) { return expr.valid(); })
// | std::views::transform([](auto const& e) { return f64(e.eres()); })
// | std::ranges::to<std::vector>();
//
// auto const sum = std::accumulate(std::begin(valids), std::end(valids), 0.0);
// fmt::print("{}\n", sum);
// auto const validsex = exprs | std::views::filter([](auto const expr) { return !expr.valid(); })
// | std::ranges::to<std::vector>();
//
// for (auto const& exp : exprs) {
// fmt::print("{}\n", exp.str());
// }
return {};
}

7
sol/24/day08.cpp Normal file
View File

@@ -0,0 +1,7 @@
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
auto aoc24::day08([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
return aoc::make_error("", std::errc::not_supported);
}

243
sol/24/day09.cpp Normal file
View File

@@ -0,0 +1,243 @@
#include <utility>
#include <vector>
#include <algorithm>
#include <numeric>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
using namespace aoc::types;
namespace dsk {
enum class format : u8 {
file,
free,
};
class block {
public:
block(u32 id, dsk::format format) : m_id(id), m_format(format) {}
auto id() const -> u32 { return m_id; }
auto format() const -> dsk::format { return m_format; }
auto str() const -> std::string {
using namespace std::string_literals;
std::string str{"{"};
auto const id = m_id == aoc::lim<u32>::max() ? "na" : std::to_string(m_id);
str += " id: "s + id + ",";
str += " type: "s + std::to_string(u32(m_format)) + ",";
str += " }";
return str;
}
private:
u32 m_id;
dsk::format m_format;
};
class page_block {
public:
page_block(u32 id, dsk::format format, u32 size)
: m_format(format), m_size(size) {
for (u32 i = 0; i < m_size; ++i) {
m_blocks.emplace_back(id, format);
}
}
auto format() const -> dsk::format { return m_format; }
auto size() const -> u32 { return m_size; }
auto blocks() const -> std::vector<block> const& { return m_blocks; }
auto str() const -> std::string {
using namespace std::string_literals;
std::string str{"page_block {"};
str += " size: "s + std::to_string(u32(m_size)) + ",";
str += " data: [ "s;
for (usize i = 0; i < m_blocks.size(); ++i) {
str += fmt::format("{}: ", i);
str += m_blocks[i].str();
if (i < m_blocks.size() - 1) str += ", ";
else if (i == m_blocks.size() - 1) str += " ";
}
str += "]";
str += " }";
return str;
}
private:
dsk::format m_format;
u32 m_size;
std::vector<block> m_blocks{};
};
class disk_map {
public:
disk_map(std::string const& input_str) {
m_pages = input_str | std::views::filter([](auto const& c) { return c != '\n'; })
| std::views::transform(
[i = 0u, id = 0u](auto const& size_char) mutable {
auto const f = format(i++ % 2);
auto curr_id = id;
if (f == format::file)
++id;
else
curr_id = aoc::lim<u32>::max();
return page_block(curr_id, f, u32(size_char - '0'));
}
) | std::ranges::to<std::vector>();
}
auto pages() const -> std::vector<page_block> {
return m_pages;
}
auto to_blocks(std::vector<page_block> const& pages) const -> std::vector<block> {
std::vector<block> tmp{};
for (usize i = 0; i < pages.size(); ++i) {
auto const& blocks = pages[i].blocks();
for (usize j = 0; j < blocks.size(); ++j) {
tmp.push_back(blocks[j]);
}
}
return tmp;
}
auto defrag_block(std::vector<block> const& blocks) -> std::vector<block> {
if (blocks.size() == 0) return {};
std::vector<block> cpy = blocks;
usize free_index = 0;
usize file_index = cpy.size() - 1;
while (free_index < cpy.size()) {
free_index = next_free(cpy, free_index);
if (free_index >= cpy.size() - 1) break;
file_index = next_file(cpy, file_index);
if (file_index == 0) break;
if (free_index >= file_index) break;
std::swap(cpy[free_index], cpy[file_index]);
}
return cpy;
}
// auto defrag_page(std::vector<page_block> const& pages) -> std::vector<page_block> {
// if (pages.size() == 0) return {};
//
// std::vector<page_block> cpy = pages;
// usize free_index = 0;
// usize file_index = cpy.size() - 1;
// while (free_index < cpy.size()) {
// free_index = next_page_free(cpy, free_index);
// if (free_index >= cpy.size() - 1) break;
// auto const& tmp = cpy[free_index];
//
// file_index = next_page_file(cpy, file_index, tmp.size());
// if (file_index == 0) break;
//
// if (free_index >= file_index) break;
//
// fmt::print("{}, {}\n", file_index, free_index);
// std::swap(cpy[free_index], cpy[file_index]);
// }
//
// return cpy;
// }
auto checksum(std::vector<block> const& blocks) const -> u64 {
u64 sum = 0;
for (usize i = 0; i < blocks.size(); ++i) {
auto const& block = blocks[i];
if (block.format() == format::free) break;
sum += i * block.id();
}
return sum;
}
auto debug_str(std::vector<block> const& blocks) const -> std::string {
using namespace std::string_literals;
std::string str{};
for (usize i = 0; i < blocks.size(); ++i) {
auto const& b = blocks[i];
if (b.format() == format::file) {
str += fmt::format("{}", b.id());
if (b.id() > 9) str += "'";
} else {
str += ".";
}
}
return str;
}
auto str() const -> std::string {
using namespace std::string_literals;
std::string str{"disk_map [\n"};
auto const blocks = to_blocks(m_pages);
for (usize i = 0; i < blocks.size(); ++i) {
str += " "s + blocks[i].str();
if (i < blocks.size() - 1)
str += ",\n";
}
str += "\n]";
return str;
}
private:
auto next_free(std::vector<block> const& blocks, usize start) const -> usize {
while (start < blocks.size()) {
if (blocks[start].format() == format::free)
break;
++start;
}
return start;
}
auto next_file(std::vector<block> const& blocks, usize start) const -> usize {
while (start >= 0) {
if (blocks[start].format() == format::file)
break;
--start;
}
return start;
}
auto next_page_free(std::vector<page_block> const& pages, usize start) const -> usize {
while (start < pages.size()) {
if (pages[start].format() == format::free)
break;
++start;
}
return start;
}
auto next_page_file(std::vector<page_block> const& pages, usize start, u32 size) const -> usize {
while (start >= 0) {
if (pages[start].format() == format::file && pages[start].size() <= size)
break;
--start;
}
return start;
}
private:
std::vector<page_block> m_pages{};
};
}
auto aoc24::day09([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
auto res = aoc::read_text("./dat/24/ex/09.txt");
// auto res = aoc::read_text("./dat/24/re/09.txt");
if (!res) return std::unexpected(res.error());
auto const txt = *res;
dsk::disk_map dsk{txt};
fmt::print("{}\n", dsk.debug_str(dsk.to_blocks(dsk.pages())));
auto const bl = dsk.defrag_block(dsk.to_blocks(dsk.pages()));
fmt::print("{}\n", dsk.debug_str(bl));
fmt::print("{}\n", dsk.checksum(bl));
return {};
}

91
sol/24/day10.cpp Normal file
View File

@@ -0,0 +1,91 @@
#include <utility>
#include <vector>
#include <algorithm>
#include <numeric>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
using namespace aoc::types;
using namespace std::string_view_literals;
namespace lpf {
using edge_t = std::pair<class node, class node>;
using edges_t = std::vector<edge_t>;
class trail {
public:
trail(std::string const& str) {
auto lines = str | std::views::split("\n"sv)
| std::views::transform(
[](auto const& c_str) {
return std::string_view(
std::begin(c_str),
std::end(c_str)
);
})
| std::views::filter([](auto const& strv) { return !strv.empty(); })
| std::ranges::to<std::vector>();
m_rows = lines.size();
m_cols = std::begin(lines)->size();
std::ranges::for_each(lines, [&](auto const& str) {
std::ranges::for_each(str, [&](auto const& ch) {
if (std::isdigit(ch)) m_data.emplace_back(ch - '0');
else m_data.emplace_back(0xFF);
});
});
}
auto at(usize row, usize col) const -> u8 {
if (row >= m_rows || col >= m_cols) return 0;
return m_data[row * m_cols + col];
}
auto rows() const -> usize { return m_rows; }
auto cols() const -> usize { return m_cols; }
auto data() const -> std::vector<u8> const& { return m_data; }
private:
usize m_rows;
usize m_cols;
std::vector<u8> m_data;
};
class node {
public:
node(i32 id, i32 value, edges_t const& edges)
: m_id(id), m_value(value), m_edges(edges) {}
auto operator==(node const& other) const -> bool {
return m_id == other.m_id && m_value == other.m_value;
}
auto id() const -> i32 { return m_id; }
auto value() const -> i32 { return m_value; }
auto edges() const -> edges_t const& { return m_edges; }
private:
i32 m_id;
i32 m_value;
edges_t m_edges;
};
class graph {
public:
private:
};
}
auto aoc24::day10([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
auto res = aoc::read_text("./dat/24/ex/10a.txt");
if (!res) return std::unexpected(res.error());
auto const txt = *res;
lpf::trail trail{txt};
return {};
}

142
sol/24/day11.cpp Normal file
View File

@@ -0,0 +1,142 @@
#include <utility>
#include <vector>
#include <algorithm>
#include <numeric>
#include <thread>
#include <functional>
#include <mutex>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
using namespace aoc::types;
using namespace std::string_view_literals;
namespace ms {
class magic {
public:
magic(std::string const& str) {
m_stones = str | std::views::filter([](auto const& c) { return c != '\n'; })
| std::views::split(" "sv)
| std::views::transform([](auto const& c_str) {
return i64(std::stoll(std::string(std::begin(c_str), std::end(c_str))));
}) | std::ranges::to<std::vector>();
}
auto blink() -> void {
std::vector<i64> stones{};
for (usize i = 0; i < m_stones.size(); ++i) {
auto const stone = m_stones[i];
auto const str = std::to_string(stone);
if (stone == 0) stones.emplace_back(1);
else if (str.length() % 2 == 0) {
auto const a = std::stoll(str.substr(0, str.length() / 2));
auto const b = std::stoll(str.substr(str.length() / 2));
stones.emplace_back(a);
stones.emplace_back(b);
} else {
stones.emplace_back(stone * 2024);
}
}
m_stones = stones;
}
auto blink(usize order, std::span<i64> const& stones) -> void {
std::vector<i64> compute{};
for (usize i = 0; i < stones.size(); ++i) {
auto const stone = stones[i];
auto const str = std::to_string(stone);
if (stone == 0) compute.emplace_back(1);
else if (str.length() % 2 == 0) {
fmt::print("{}\n", str);
auto const a = std::stoll(str.substr(0, str.length() / 2));
auto const b = std::stoll(str.substr(str.length() / 2));
compute.emplace_back(a);
compute.emplace_back(b);
} else {
compute.emplace_back(stone * 2024);
}
}
m_mutex.lock();
m_tmp.push_back({order, compute});
m_mutex.unlock();
}
auto size() const -> usize { return m_stones.size(); }
auto join(i32 current) -> void {
std::sort(std::begin(m_tmp), std::end(m_tmp), [](auto const& a, auto const& b) {
return a.first < b.first;
});
m_stones = {};
for (usize i = 0; i < m_tmp.size(); ++i) {
for (usize j = 0; j < m_tmp[i].second.size(); ++j) {
m_stones.push_back(m_tmp[i].second[j]);
}
}
m_tmp = {};
(void)current;
// fmt::print("join... {}, {}\n", current, m_stones.size());
}
auto data() const -> std::vector<i64> const& { return m_stones; }
auto str() const -> std::string {
std::string str{};
for (usize i = 0; i < m_stones.size(); ++i) {
str += std::to_string(m_stones[i]);
if (i < m_stones.size() - 1) str += " ";
}
return str;
}
private:
std::vector<i64> m_stones{};
std::vector<std::pair<usize, std::vector<i64>>> m_tmp{};
std::mutex m_mutex{};
};
}
auto aoc24::day11([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
auto res = aoc::read_text("./dat/24/re/11.txt");
// auto res = aoc::read_text("./dat/24/ex/11b.txt");
if (!res) return std::unexpected(res.error());
auto const txt = *res;
ms::magic magic{txt};
fmt::print("{}\n", magic.str());
auto const max_threads = std::thread::hardware_concurrency();
for (i32 i = 0; i < 75; ++i) {
auto stones = magic.data();
auto chunk_size = stones.size() / max_threads;
if (chunk_size == 0) chunk_size = stones.size();
std::vector<std::thread> threads{};
for (usize k = 0; k < max_threads; ++k) {
auto start_index = k * chunk_size;
auto end_index = std::min((k + 1) * chunk_size, stones.size());
if (start_index >= stones.size()) break;
std::span<i64> sp{stones};
std::span<i64> split = sp.subspan(start_index, end_index);
threads.emplace_back([&]{ magic.blink(k, split); });
}
for (usize k = 0; k < threads.size(); ++k) {
threads[k].join();
}
magic.join(i);
}
fmt::print("stones: {}\n", magic.size());
return {};
}

27
sol/24/day12.cpp Normal file
View File

@@ -0,0 +1,27 @@
#include <utility>
#include <vector>
#include <algorithm>
#include <numeric>
#include <thread>
#include <functional>
#include <mutex>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
using namespace aoc::types;
using namespace std::string_view_literals;
namespace gmf {}
auto aoc24::day11([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
auto res = aoc::read_text("./dat/24/re/12.txt");
// auto res = aoc::read_text("./dat/24/ex/12a.txt");
if (!res) return std::unexpected(res.error());
auto const txt = *res;
fmt::print("{}\n", txt);
return {};
}

21
sol/24/day14.cpp Normal file
View File

@@ -0,0 +1,21 @@
#include <vector>
#include <ranges>
#include <numeric>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
using namespace aoc::types;
using namespace std::string_view_literals;
namespace ebh {
}
auto aoc24::day14([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
// auto res = aoc::read_text("./dat/24/ex/07.txt");
auto res = aoc::read_text("./dat/24/re/07.txt");
if (!res) return std::unexpected(res.error());
auto const txt = *res;
return {};
}

139
sol/24/day16.cpp Normal file
View File

@@ -0,0 +1,139 @@
#include <vector>
#include <ranges>
#include <numeric>
#include <memory>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
#include "stb_image_write.h"
using namespace aoc::types;
using namespace std::string_view_literals;
namespace rme {
struct edge {
u64 a{0x00};
u64 b{0x00};
auto str() const -> std::string {
if (b == 0) return "nil";
return fmt::format("{},{}", (b >> 32), b & 0xFFFFFFFF);
}
};
struct node {
u64 id;
edge n;
edge s;
edge e;
edge w;
auto str() const -> std::string {
std::string str{"node {"};
str += " id: " + fmt::format("{},{}", (id >> 32) & 0xFFFFFFFF, id & 0xFFFFFFFF) + ",";
if (n.b != 0)
str += " n -> " + n.str() + ",";
if (s.b != 0)
str += " s -> " + s.str() + ",";
if (e.b != 0)
str += " e -> " + e.str() + ",";
if (w.b != 0)
str += " w -> " + w.str();
str += " }";
return str;
}
};
class graph {
public:
graph(std::string const& maze_str) : m_start(0), m_exit(0) {
build(maze_str);
for (auto const& node : m_nodes) {
fmt::print("{}\n", node.str());
}
}
private:
auto build(std::string const& maze) -> void {
auto const lines = maze | aoc::split("\n"sv)
| aoc::map_to_sv
| aoc::filter_non_empty
| std::ranges::to<std::vector>();
m_rows = lines.size();
for (usize i = 0; i < lines.size(); ++i) {
auto const& str = lines[i];
m_cols = str.size();
for (usize j = 0; j < m_cols; ++j) {
auto const c = str[j];
node n{};
auto const id = u64((u64(i + 1) << 32) | (j + 1));
if (c == '#' || c == '\n') continue;
if (c == 'S') m_start = id;
if (c == 'E') m_exit = id;
n.id = id;
auto const n_e = lines[i - 1][j];
auto const s_e = lines[i + 1][j];
auto const e_e = lines[i][j - 1];
auto const w_e = lines[i][j + 1];
if (n_e != '#') {
n.n = {
.a = n.id,
.b = u64((u64(i - 2) << 32) | (j + 1))
};
m_edges.emplace_back(n.n);
}
if (s_e != '#') {
n.s = {
.a = n.id,
.b = u64((u64(i + 2) << 32) | (j + 1))
};
m_edges.emplace_back(n.s);
}
if (e_e != '#') {
n.e = {
.a = n.id,
.b = u64((u64(i + 1) << 32) | (j - 2))
};
m_edges.emplace_back(n.e);
}
if (w_e != '#') {
n.w = {
.a = n.id,
.b = u64((u64(i + 1) << 32) | (j + 2))
};
m_edges.emplace_back(n.w);
}
m_nodes.emplace_back(std::move(n));
}
}
}
private:
u64 m_start;
u64 m_exit;
std::vector<node> m_nodes{};
std::vector<edge> m_edges{};
u64 m_rows{};
u64 m_cols{};
};
}
auto aoc24::day16([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
auto res = aoc::read_text("./dat/24/ex/16.txt");
// auto res = aoc::read_text("./dat/24/re/16.txt");
if (!res) return std::unexpected(res.error());
auto const txt = *res;
rme::graph g{txt};
fmt::print("----------------------------------------\n");
fmt::print("{}", txt);
return {};
}

183
sol/24/day17.cpp Normal file
View File

@@ -0,0 +1,183 @@
#include <vector>
#include <ranges>
#include <numeric>
#include <memory>
#include "aoc.hpp"
#include "aoc/utils.hpp"
#include "fmt/format.h"
#include "stb_image_write.h"
#include "ctre.hpp"
using namespace aoc::types;
using namespace std::string_view_literals;
namespace uec {
enum class opcode : u16 {
adv,
bxl,
bst,
jnz,
bxc,
out,
bdv,
cdv,
nop,
};
auto opcode_to_str(opcode op) -> char const* {
switch (op) {
case opcode::adv: return "adv";
case opcode::bxl: return "bxl";
case opcode::bst: return "bst";
case opcode::jnz: return "jnz";
case opcode::bxc: return "bxc";
case opcode::out: return "out";
case opcode::bdv: return "bdv";
case opcode::cdv: return "cdv";
default: return "nop";
}
}
struct regs {
u64 a;
u64 b;
u64 c;
};
class cpu {
public:
cpu() {}
auto load(uec::regs const& regs, std::vector<opcode> const& program) -> void {
m_regs = regs;
m_program = program;
}
auto registers() const -> uec::regs const& { return m_regs; }
auto program() const -> std::vector<opcode> const& { return m_program; }
auto clock() -> void {
auto const op = read();
switch (op) {
case opcode::adv: adv();
case opcode::bxl: bxl();
case opcode::bst: bst();
case opcode::jnz: jnz();
case opcode::bxc: bxc();
case opcode::out: out();
case opcode::bdv: bdv();
case opcode::cdv: cdv();
default: nop();
}
}
auto str() const -> std::string {
using namespace std::string_literals;
std::string str{};
str += "PC: " + fmt::format("{:#04x}", m_pc) + "\n";
str += "\n";
str += "A: " + fmt::format("{:#010x}", m_regs.a) + "\n";
str += "B: " + fmt::format("{:#010x}", m_regs.b) + "\n";
str += "C: " + fmt::format("{:#010x}", m_regs.c) + "\n";
str += "\n";
for (usize i = 0; i < m_program.size(); ++i) {
str += fmt::format("{:02x}: ", i);
str += fmt::format("{}\n", opcode_to_str(m_program[i]));
}
return str;
}
private:
auto read() const -> opcode {
if (m_pc < m_program.size())
return m_program[m_pc];
return opcode::nop;
}
auto peek() const -> opcode {
if (m_pc + 1 < m_program.size())
return m_program[m_pc + 1];
return opcode::nop;
}
auto combo() const -> u64 {
return 0;
}
private:
auto adv(u64 x) -> void {
m_regs.a >>= x;
}
auto bxl() -> void {
m_regs.b = m_regs.b ^ u64(opcode::bxl);
}
auto bst(u64 x) -> void {
m_regs.b = x % 8;
}
auto jnz() -> void {
if (m_regs.a == 0) return;
m_pc = u64(opcode::jnz);
}
auto bxc() -> void {
m_regs.b = m_regs.b ^ m_regs.c;
}
auto out(u64 x) -> void {
}
auto bdv() -> void {}
auto cdv() -> void {}
auto nop() -> void {}
private:
u64 m_pc{};
uec::regs m_regs{};
std::vector<opcode> m_program{};
};
}
auto aoc24::day17([[maybe_unused]]std::span<char const*> const& args) -> std::expected<void, aoc::error> {
auto res = aoc::read_text("./dat/24/ex/17.txt");
// auto res = aoc::read_text("./dat/24/re/17.txt");
if (!res) return std::unexpected(res.error());
auto const txt = *res;
auto const lines = txt | aoc::split("\n"sv)
| aoc::map_to_sv
| aoc::filter_non_empty
| std::ranges::to<std::vector>();
uec::regs regs{};
std::vector<uec::opcode> program{};
for (auto const& line : lines) {
if (auto reg = ctre::match<"Register ([A-Z]): ([0-9]+)">(line)) {
if (reg.get<1>().view() == "A"sv) {
regs.a = std::stoul(reg.get<2>().to_string());
} else if (reg.get<1>().view() == "A"sv) {
regs.b = std::stoul(reg.get<2>().to_string());
} else if (reg.get<1>().view() == "A"sv) {
regs.c = std::stoul(reg.get<2>().to_string());
} else {
// fmt::print("unknown register\n");
}
continue;
}
if (auto prog = ctre::match<"Program: ([0-9,]+)">(line)) {
program = prog.get<1>().to_string() | aoc::split(","sv)
| aoc::map_to_str
| aoc::filter_non_empty
| std::views::transform([](auto const& str) {
return uec::opcode(std::stoul(str));
}) | std::ranges::to<std::vector>();
}
}
uec::cpu cpu{};
cpu.load(regs, program);
fmt::print("{}", cpu.str());
return {};
}