Compare commits
10 Commits
a237849141
...
75f80aefc2
Author | SHA1 | Date |
---|---|---|
idylls | 75f80aefc2 | 1 year ago |
idylls | 7ebb51835c | 1 year ago |
idylls | 515eff8ef0 | 1 year ago |
idylls | 5b177f1453 | 1 year ago |
idylls | 129e510c80 | 1 year ago |
idylls | e33e0c772b | 1 year ago |
idylls | 7479e8adbd | 1 year ago |
idylls | 9719b895ce | 1 year ago |
idylls | 76dfcb47a1 | 1 year ago |
idylls | b7e687e685 | 1 year ago |
@ -0,0 +1 @@
|
||||
/target
|
@ -0,0 +1,16 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "aoc2022"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"seahash",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "seahash"
|
||||
version = "4.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
|
@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "aoc2022"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
seahash = { version = "4.1.0", features = [], default-features = false }
|
@ -0,0 +1,9 @@
|
||||
unstable_features = true
|
||||
hard_tabs = true
|
||||
max_width = 80
|
||||
imports_granularity = 'Crate'
|
||||
group_imports = 'StdExternalCrate'
|
||||
format_strings = true
|
||||
wrap_comments = true
|
||||
blank_lines_lower_bound = 0
|
||||
blank_lines_upper_bound = 2
|
@ -0,0 +1,44 @@
|
||||
pub mod a {
|
||||
static INPUT: &str = include_str!("inputs/day1a.txt");
|
||||
|
||||
pub fn go() {
|
||||
let input = INPUT;
|
||||
let max = input
|
||||
.split("\n\n")
|
||||
.map(|elf_cals_str| {
|
||||
elf_cals_str
|
||||
.split('\n')
|
||||
.filter(|s| !s.is_empty())
|
||||
.map(|cal_str| cal_str.parse::<u32>().unwrap())
|
||||
.sum::<u32>()
|
||||
})
|
||||
.max()
|
||||
.unwrap();
|
||||
|
||||
println!("{}", max);
|
||||
}
|
||||
}
|
||||
|
||||
pub mod b {
|
||||
static INPUT: &str = include_str!("inputs/day1a.txt");
|
||||
|
||||
pub fn go() {
|
||||
let input = INPUT;
|
||||
let mut cals: Vec<_> = input
|
||||
.split("\n\n")
|
||||
.map(|elf_cals_str| {
|
||||
elf_cals_str
|
||||
.split('\n')
|
||||
.filter(|s| !s.is_empty())
|
||||
.map(|cal_str| cal_str.parse::<u32>().unwrap())
|
||||
.sum::<u32>()
|
||||
})
|
||||
.collect();
|
||||
|
||||
cals.sort_by(|a, b| a.cmp(b).reverse());
|
||||
|
||||
let total = cals.iter().take(3).sum::<u32>();
|
||||
|
||||
println!("{}", total);
|
||||
}
|
||||
}
|
@ -0,0 +1,148 @@
|
||||
pub mod a {
|
||||
static INPUT: &str = include_str!("inputs/day2a.txt");
|
||||
|
||||
#[derive(Copy, Clone, Eq, PartialEq)]
|
||||
pub enum Rps {
|
||||
Rock,
|
||||
Paper,
|
||||
Scissors,
|
||||
}
|
||||
impl Rps {
|
||||
pub fn score(&self) -> u64 {
|
||||
use Rps::*;
|
||||
|
||||
match self {
|
||||
Rock => 1,
|
||||
Paper => 2,
|
||||
Scissors => 3,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub enum Outcome {
|
||||
ElfWin,
|
||||
MeWin,
|
||||
Draw,
|
||||
}
|
||||
impl Outcome {
|
||||
pub fn score(&self) -> u64 {
|
||||
use Outcome::*;
|
||||
|
||||
match self {
|
||||
ElfWin => 0,
|
||||
Draw => 3,
|
||||
MeWin => 6,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_outcome(elf: &Rps, me: &Rps) -> Outcome {
|
||||
use Rps::*;
|
||||
|
||||
match (elf, me) {
|
||||
(Paper, Rock) | (Rock, Scissors) | (Scissors, Paper) => {
|
||||
Outcome::ElfWin
|
||||
}
|
||||
_ if elf == me => Outcome::Draw,
|
||||
_ => Outcome::MeWin,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn elf_to_rps(i: &str) -> Rps {
|
||||
match i {
|
||||
"A" => Rps::Rock,
|
||||
"B" => Rps::Paper,
|
||||
"C" => Rps::Scissors,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn me_to_rps(i: &str) -> Rps {
|
||||
match i {
|
||||
"X" => Rps::Rock,
|
||||
"Y" => Rps::Paper,
|
||||
"Z" => Rps::Scissors,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn go() {
|
||||
let input = INPUT;
|
||||
let score = input
|
||||
.split('\n')
|
||||
.filter(|line| !line.is_empty())
|
||||
.map(|line| {
|
||||
let mut it = line.split(' ');
|
||||
let elf = it.next().unwrap();
|
||||
let me = it.next().unwrap();
|
||||
|
||||
let elf = elf_to_rps(elf);
|
||||
let me = me_to_rps(me);
|
||||
|
||||
let me_score = me.score() + get_outcome(&elf, &me).score();
|
||||
|
||||
me_score
|
||||
})
|
||||
.sum::<u64>();
|
||||
|
||||
println!("{}", score);
|
||||
}
|
||||
}
|
||||
|
||||
pub mod b {
|
||||
use super::a::*;
|
||||
|
||||
static INPUT: &str = include_str!("inputs/day2a.txt");
|
||||
|
||||
fn to_outcome(me: &str) -> Outcome {
|
||||
use Outcome::*;
|
||||
match me {
|
||||
"X" => ElfWin,
|
||||
"Y" => Draw,
|
||||
"Z" => MeWin,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
|
||||
fn get_move(elf: &Rps, outcome: &Outcome) -> Rps {
|
||||
use Outcome::*;
|
||||
use Rps::*;
|
||||
|
||||
match outcome {
|
||||
Draw => *elf,
|
||||
ElfWin => match elf {
|
||||
Rock => Scissors,
|
||||
Scissors => Paper,
|
||||
Paper => Rock,
|
||||
},
|
||||
MeWin => match elf {
|
||||
Rock => Paper,
|
||||
Paper => Scissors,
|
||||
Scissors => Rock,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
pub fn go() {
|
||||
let input = INPUT;
|
||||
let score = input
|
||||
.split('\n')
|
||||
.filter(|line| !line.is_empty())
|
||||
.map(|line| {
|
||||
let mut it = line.split(' ');
|
||||
let elf = it.next().unwrap();
|
||||
let outcome = it.next().unwrap();
|
||||
|
||||
let elf = super::a::elf_to_rps(elf);
|
||||
let outcome = to_outcome(outcome);
|
||||
let me = get_move(&elf, &outcome);
|
||||
|
||||
let me_score = me.score() + outcome.score();
|
||||
|
||||
me_score
|
||||
})
|
||||
.sum::<u64>();
|
||||
|
||||
println!("{}", score);
|
||||
}
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
use crate::util::prelude::*;
|
||||
|
||||
static INPUT: &str = include_str!("inputs/day3.txt");
|
||||
|
||||
type Item = char;
|
||||
|
||||
pub fn item_prio(item: &Item) -> uint {
|
||||
if ('a'..='z').contains(&item) {
|
||||
return (*item as uint - 'a' as uint) + 1;
|
||||
}
|
||||
|
||||
if ('A'..='Z').contains(&item) {
|
||||
return (*item as uint - 'A' as uint) + 27;
|
||||
}
|
||||
|
||||
panic!()
|
||||
}
|
||||
|
||||
pub fn part1() {
|
||||
let sum = INPUT
|
||||
.split('\n')
|
||||
.filter(|s| !s.is_empty())
|
||||
.map(|line| {
|
||||
let len = line.len();
|
||||
|
||||
let (fst_ruck_str, snd_ruck_str) = line.split_at(len / 2);
|
||||
|
||||
let fst_ruck = fst_ruck_str.chars().collect::<HashSet<_>>();
|
||||
let snd_ruck = snd_ruck_str.chars().collect::<HashSet<_>>();
|
||||
|
||||
let both = fst_ruck.intersection(&snd_ruck).collect::<HashSet<_>>();
|
||||
assert!(both.len() == 1);
|
||||
|
||||
let both = both.iter().next().unwrap();
|
||||
|
||||
item_prio(*both)
|
||||
})
|
||||
.sum::<uint>();
|
||||
|
||||
println!("{}", sum);
|
||||
}
|
||||
|
||||
pub fn part2() {
|
||||
let lines: Vec<_> = INPUT.split('\n').filter(|s| !s.is_empty()).collect();
|
||||
let elf_groups = lines.chunks_exact(3);
|
||||
let sum: uint = elf_groups
|
||||
.flat_map(|lines| {
|
||||
let item_counts = lines
|
||||
.iter()
|
||||
.map(|line| line.chars().collect::<HashSet<_>>())
|
||||
.fold(HashMap::default(), |mut map, set| {
|
||||
for v in set.iter() {
|
||||
let ct = map.entry(*v).or_insert(0);
|
||||
*ct += 1;
|
||||
}
|
||||
|
||||
map
|
||||
});
|
||||
|
||||
item_counts
|
||||
.iter()
|
||||
.max_by(|a, b| a.1.cmp(b.1))
|
||||
.map(|v| item_prio(v.0))
|
||||
})
|
||||
.sum();
|
||||
|
||||
println!("{}", sum);
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
use crate::util::prelude::*;
|
||||
|
||||
static INPUT: &str = include_str!("inputs/day4.txt");
|
||||
|
||||
fn parse_range(s: &str) -> core::ops::RangeInclusive<uint> {
|
||||
let mut parts = s.split('-');
|
||||
let lo = parts.next().unwrap();
|
||||
let hi = parts.next().unwrap();
|
||||
|
||||
let lo = lo.parse().unwrap();
|
||||
let hi = hi.parse().unwrap();
|
||||
|
||||
lo..=hi
|
||||
}
|
||||
|
||||
fn fully_contains<U: PartialOrd>(
|
||||
haystack: &core::ops::RangeInclusive<U>,
|
||||
needle: &core::ops::RangeInclusive<U>,
|
||||
) -> bool {
|
||||
haystack.contains(needle.start()) && haystack.contains(needle.end())
|
||||
}
|
||||
|
||||
fn has_overlap<U: PartialOrd>(
|
||||
a: &core::ops::RangeInclusive<U>,
|
||||
b: &core::ops::RangeInclusive<U>,
|
||||
) -> bool {
|
||||
a.contains(b.start())
|
||||
|| a.contains(b.end())
|
||||
|| b.contains(a.start())
|
||||
|| b.contains(a.end())
|
||||
}
|
||||
|
||||
pub fn part1() {
|
||||
let sum = INPUT
|
||||
.split('\n')
|
||||
.filter(|s| !s.is_empty())
|
||||
.map(|line| {
|
||||
let mut elves = line.split(',');
|
||||
let fst = elves.next().unwrap();
|
||||
let fst = parse_range(fst);
|
||||
|
||||
let snd = elves.next().unwrap();
|
||||
let snd = parse_range(snd);
|
||||
|
||||
u64::from(fully_contains(&fst, &snd) || fully_contains(&snd, &fst))
|
||||
})
|
||||
.sum::<uint>();
|
||||
|
||||
println!("{}", sum);
|
||||
}
|
||||
|
||||
pub fn part2() {
|
||||
let sum = INPUT
|
||||
.split('\n')
|
||||
.filter(|s| !s.is_empty())
|
||||
.map(|line| {
|
||||
let mut elves = line.split(',');
|
||||
let fst = elves.next().unwrap();
|
||||
let fst = parse_range(fst);
|
||||
|
||||
let snd = elves.next().unwrap();
|
||||
let snd = parse_range(snd);
|
||||
|
||||
u64::from(has_overlap(&fst, &snd))
|
||||
})
|
||||
.sum::<uint>();
|
||||
|
||||
println!("{}", sum);
|
||||
}
|
@ -0,0 +1,154 @@
|
||||
static INPUT: &str = include_str!("inputs/day5.txt");
|
||||
|
||||
type CrateID = char;
|
||||
#[derive(Debug)]
|
||||
struct Stacks(Vec<Vec<CrateID>>);
|
||||
impl Stacks {
|
||||
fn apply_move_part_1(&mut self, mv: &Move) {
|
||||
let from = mv.from - 1;
|
||||
let to = mv.to - 1;
|
||||
|
||||
for _ in 0..mv.count {
|
||||
let c = self.0[from].pop().unwrap();
|
||||
|
||||
self.0[to].push(c)
|
||||
}
|
||||
}
|
||||
|
||||
fn apply_move_part_2(&mut self, mv: &Move) {
|
||||
let from = mv.from - 1;
|
||||
let to = mv.to - 1;
|
||||
|
||||
// SAFETY: should be safe, borrowing from disjoint sub-vectors and
|
||||
// not modifying the length of the primary vector. Technically it
|
||||
// is possible that this could alias if to and from are the same,
|
||||
// but even if that happened this should be safe (although the
|
||||
// answer given would be incorrect)
|
||||
unsafe {
|
||||
let from: &'static mut Vec<_> =
|
||||
core::mem::transmute(&mut self.0[from]);
|
||||
|
||||
let new_len = from.len() - mv.count;
|
||||
let picked_up = &from[new_len..];
|
||||
self.0[to].extend_from_slice(picked_up);
|
||||
from.truncate(new_len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_stacks(s: &str) -> Stacks {
|
||||
let mut lines = s.split('\n').filter(|s| !s.is_empty()).map(|line| {
|
||||
let mut chars = line.chars();
|
||||
|
||||
core::iter::from_fn(move || {
|
||||
match chars.next() {
|
||||
None => return None,
|
||||
Some(_) => (),
|
||||
};
|
||||
|
||||
let id = chars.next().unwrap();
|
||||
chars.next();
|
||||
chars.next();
|
||||
|
||||
if id == ' ' {
|
||||
return Some(None);
|
||||
}
|
||||
|
||||
Some(Some(id))
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
let mut crates = Vec::new();
|
||||
let first_line = lines.next().unwrap();
|
||||
for id in first_line {
|
||||
let mut stack = Vec::new();
|
||||
if let Some(id) = id {
|
||||
stack.push(id);
|
||||
}
|
||||
|
||||
crates.push(stack);
|
||||
}
|
||||
|
||||
for ids in lines {
|
||||
for (idx, id) in ids.enumerate() {
|
||||
if let Some(id) = id {
|
||||
crates[idx].push(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for stack in &mut crates {
|
||||
stack.pop();
|
||||
stack.reverse();
|
||||
}
|
||||
|
||||
Stacks(crates)
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Move {
|
||||
count: usize,
|
||||
from: usize,
|
||||
to: usize,
|
||||
}
|
||||
fn parse_moves(s: &str) -> impl Iterator<Item = Move> + '_ {
|
||||
s.split('\n').filter(|s| !s.is_empty()).map(|line| {
|
||||
let mut words = line.split(' ');
|
||||
let count = {
|
||||
words.next();
|
||||
words.next().unwrap()
|
||||
};
|
||||
let from = {
|
||||
words.next();
|
||||
words.next().unwrap()
|
||||
};
|
||||
let to = {
|
||||
words.next();
|
||||
words.next().unwrap()
|
||||
};
|
||||
|
||||
Move {
|
||||
count: count.parse().unwrap(),
|
||||
from: from.parse().unwrap(),
|
||||
to: to.parse().unwrap(),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fn parse(s: &str) -> (Stacks, impl Iterator<Item = Move> + '_) {
|
||||
let mut parts = s.split("\n\n");
|
||||
let crates_str = parts.next().unwrap();
|
||||
let stacks = parse_stacks(crates_str);
|
||||
|
||||
let moves_str = parts.next().unwrap();
|
||||
let moves = parse_moves(moves_str);
|
||||
|
||||
(stacks, moves)
|
||||
}
|
||||
|
||||
pub fn part1() {
|
||||
let (mut stacks, moves) = parse(INPUT);
|
||||
|
||||
for mv in moves {
|
||||
stacks.apply_move_part_1(&mv);
|
||||
}
|
||||
|
||||
for stack in &stacks.0 {
|
||||
print!("{}", stack.last().unwrap());
|
||||
}
|
||||
println!();
|
||||
}
|
||||
|
||||
pub fn part2() {
|
||||
let (mut stacks, moves) = parse(INPUT);
|
||||
|
||||
for mv in moves {
|
||||
stacks.apply_move_part_2(&mv);
|
||||
}
|
||||
|
||||
for stack in &stacks.0 {
|
||||
print!("{}", stack.last().unwrap());
|
||||
}
|
||||
println!();
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
use crate::util::prelude::*;
|
||||
|
||||
static INPUT: &str = include_str!("inputs/day6.txt");
|
||||
|
||||
fn find_start(s: &str, win_size: usize) -> usize {
|
||||
let chars: Vec<_> = s.chars().collect();
|
||||
|
||||
chars
|
||||
.windows(win_size)
|
||||
.find(|chars| {
|
||||
let char_counts =
|
||||
chars.iter().fold(HashMap::default(), |mut counts, char| {
|
||||
*counts.entry(char).or_insert(0) += 1;
|
||||
|
||||
counts
|
||||
});
|
||||
|
||||
if *char_counts.values().max().unwrap() == 1 {
|
||||
return true;
|
||||
}
|
||||
|
||||
false
|
||||
})
|
||||
.map(|s| {
|
||||
(unsafe { s.as_ptr().offset_from(chars.as_ptr()) } as usize)
|
||||
+ s.len()
|
||||
})
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
pub fn part1() {
|
||||
println!("{}", find_start(INPUT, 4));
|
||||
}
|
||||
|
||||
pub fn part2() {
|
||||
println!("{}", find_start(INPUT, 14));
|
||||
}
|
@ -0,0 +1,188 @@
|
||||
static INPUT: &str = include_str!("inputs/day7.txt");
|
||||
|
||||
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
|
||||
struct FileID(usize);
|
||||
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
|
||||
struct DirID(usize);
|
||||
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
|
||||
enum DirEntryKind {
|
||||
File(FileID),
|
||||
Dir(DirID),
|
||||
}
|
||||
#[derive(Debug)]
|
||||
struct DirEntry {
|
||||
name: String,
|
||||
kind: DirEntryKind,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct File {
|
||||
size: usize,
|
||||
}
|
||||
#[derive(Debug)]
|
||||
struct Dir {
|
||||
parent: DirID,
|
||||
children: Vec<DirEntry>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Fs {
|
||||
files: Vec<File>,
|
||||
dirs: Vec<Dir>,
|
||||
}
|
||||
impl Fs {
|
||||
fn new() -> Self {
|
||||
Self {
|
||||
files: vec![],
|
||||
dirs: vec![Dir {
|
||||
parent: DirID(0),
|
||||
children: vec![],
|
||||
}],
|
||||
}
|
||||
}
|
||||
|
||||
fn root(&self) -> DirID {
|
||||
DirID(0)
|
||||
}
|
||||
|
||||
fn mkdir(&mut self, target: DirID, name: &str) -> DirID {
|
||||
let new_id = DirID(self.dirs.len());
|
||||
self.dirs.push(Dir {
|
||||
parent: target,
|
||||
children: vec![],
|
||||
});
|
||||
self.dirs[target.0].children.push(DirEntry {
|
||||
name: name.to_string(),
|
||||
kind: DirEntryKind::Dir(new_id),
|
||||
});
|
||||
|
||||
new_id
|
||||
}
|
||||
|
||||
fn mkfile(&mut self, target: DirID, name: &str, size: usize) -> FileID {
|
||||
let new_id = FileID(self.files.len());
|
||||
self.files.push(File { size });
|
||||
self.dirs[target.0].children.push(DirEntry {
|
||||
name: name.to_string(),
|
||||
kind: DirEntryKind::File(new_id),
|
||||
});
|
||||
|
||||
new_id
|
||||
}
|
||||
|
||||
fn entry(&self, target: DirID, name: &str) -> DirEntryKind {
|
||||
let dir = &self.dirs[target.0];
|
||||
|
||||
dir.children
|
||||
.iter()
|
||||
.find(|e| e.name == name)
|
||||
.map(|e| e.kind)
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
fn parent(&self, target: DirID) -> DirID {
|
||||
self.dirs[target.0].parent
|
||||
}
|
||||
|
||||
fn dirsz(&self, target: DirID) -> usize {
|
||||
let dir = &self.dirs[target.0];
|
||||
|
||||
dir.children
|
||||
.iter()
|
||||
.map(|c| match c.kind {
|
||||
DirEntryKind::File(fid) => self.files[fid.0].size,
|
||||
DirEntryKind::Dir(did) => self.dirsz(did),
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
}
|
||||
|
||||
fn make_fs(s: &str) -> Fs {
|
||||
let mut lines = s.split('\n').filter(|s| !s.is_empty()).peekable();
|
||||
|
||||
let mut fs = Fs::new();
|
||||
let mut current_dir = fs.root();
|
||||
|
||||
while let Some(line) = lines.next() {
|
||||
assert!(line.starts_with('$'));
|
||||
let mut parts = line.split(' ').skip(1);
|
||||
|
||||
match parts.next().unwrap() {
|
||||
"cd" => {
|
||||
let arg = parts.next().unwrap();
|
||||
|
||||
current_dir = match arg {
|
||||
"/" => fs.root(),
|
||||
".." => fs.parent(current_dir),
|
||||
_ => {
|
||||
let entry = fs.entry(current_dir, arg);
|
||||
match entry {
|
||||
DirEntryKind::Dir(d) => d,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
"ls" => {
|
||||
while let Some(data_line) = lines.peek() {
|
||||
if data_line.starts_with('$') {
|
||||
break;
|
||||
}
|
||||
|
||||
let mut parts = data_line.split(' ');
|
||||
let ty = parts.next().unwrap();
|
||||
let name = parts.next().unwrap();
|
||||
|
||||
match ty {
|
||||
"dir" => {
|
||||
fs.mkdir(current_dir, name);
|
||||
}
|
||||
_ => {
|
||||
let sz: usize = ty.parse().unwrap();
|
||||
fs.mkfile(current_dir, name, sz);
|
||||
}
|
||||
}
|
||||
|
||||
lines.next();
|
||||
}
|
||||
}
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
|
||||
fs
|
||||
}
|
||||
|
||||
pub fn part1() {
|
||||
let fs = make_fs(INPUT);
|
||||
|
||||
println!(
|
||||
"{}",
|
||||
fs.dirs
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(did, _)| fs.dirsz(DirID(did)))
|
||||
.filter(|sz| sz <= &100000)
|
||||
.sum::<usize>()
|
||||
);
|
||||
}
|
||||
|
||||
pub fn part2() {
|
||||
let fs = make_fs(INPUT);
|
||||
let total = 70_000_000;
|
||||
let needed_free = 30_000_000;
|
||||
let used = fs.dirsz(fs.root());
|
||||
let free = total - used;
|
||||
let diff = needed_free - free;
|
||||
|
||||
println!(
|
||||
"{}",
|
||||
fs.dirs
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(did, _)| fs.dirsz(DirID(did)))
|
||||
.filter(|sz| sz >= &diff)
|
||||
.min()
|
||||
.unwrap()
|
||||
);
|
||||
}
|
@ -0,0 +1,160 @@
|
||||
use crate::util::prelude::*;
|
||||
|
||||
static INPUT: &str = include_str!("inputs/day8.txt");
|
||||
|
||||
struct Trees {
|
||||
width: usize,
|
||||
height: usize,
|
||||
data: Vec<sint>,
|
||||
}
|
||||
impl Trees {
|
||||
fn from_str(s: &str) -> Self {
|
||||
let mut lines = s.split('\n').filter(|s| !s.is_empty());
|
||||
|
||||
let mut width = 0;
|
||||
let mut height = 0;
|
||||
let mut data = Vec::new();
|
||||
for line in lines {
|
||||
for ch in line.chars() {
|
||||
let h = ch as sint - '0' as sint;
|
||||
data.push(h);
|
||||
}
|
||||
height += 1;
|
||||
width = line.len();
|
||||
}
|
||||
|
||||
Self {
|
||||
width,
|
||||
height,
|
||||
data,
|
||||
}
|
||||
}
|
||||
|
||||
fn get(&self, x: usize, y: usize) -> sint {
|
||||
self.data[x + y * self.width]
|
||||
}
|
||||
|
||||
fn it<'a>(
|
||||
&'a self,
|
||||
start: (usize, usize),
|
||||
next: impl Fn(&mut (usize, usize)) + 'a,
|
||||
) -> impl Iterator<Item = sint> + 'a {
|
||||
let mut n = Some(start);
|
||||
|
||||
core::iter::from_fn(move || {
|
||||
let n_ = match &mut n {
|
||||
None => return None,
|
||||
Some(n) => n,
|
||||
};
|
||||
let r = Some(self.get(n_.0, n_.1));
|
||||
|
||||
if n_.0 == 0
|
||||
|| n_.1 == 0 || n_.0 == self.width - 1
|
||||
|| n_.1 == self.height - 1
|
||||
{
|
||||
n = None;
|
||||
} else {
|
||||
next(n_);
|
||||
}
|
||||
|
||||
r
|
||||
})
|
||||
}
|
||||
|
||||
fn is_visible_(
|
||||
&self,
|
||||
x: usize,
|
||||
y: usize,
|
||||
next: impl Fn(&mut (usize, usize)),
|
||||
) -> bool {
|
||||
let h = self.get(x, y);
|
||||
|
||||
let t = self.it((x, y), next).skip(1).all(|h_| h_ < h);
|
||||
|
||||
t
|
||||
}
|
||||
|
||||
fn is_visible(&self, x: usize, y: usize) -> bool {
|
||||
let visible_left = self.is_visible_(x, y, |(x, _)| *x -= 1);
|
||||
if visible_left {
|
||||
return true;
|
||||
}
|
||||
|
||||
let visible_right = self.is_visible_(x, y, |(x, _)| *x += 1);
|
||||
if visible_right {
|
||||
return true;
|
||||
}
|
||||
|
||||
let visible_up = self.is_visible_(x, y, |(_, y)| *y -= 1);
|
||||
if visible_up {
|
||||
return true;
|
||||
}
|
||||
|
||||
let visible_down = self.is_visible_(x, y, |(_, y)| *y += 1);
|
||||
visible_down
|
||||
}
|
||||
|
||||
fn scenic_score_(
|
||||
&self,
|
||||
x: usize,
|
||||
y: usize,
|
||||
v: uint,
|
||||
next: impl Fn(&mut (usize, usize)),
|
||||
) -> uint {
|
||||
let it = self.it((x, y), next);
|
||||
let h = self.get(x, y);
|
||||
|
||||
it.enumerate()
|
||||
.skip(1)
|
||||
.find(|(_, h_)| *h_ >= h)
|
||||
.map(|(i, _)| i as uint)
|
||||
.unwrap_or(v)
|
||||
}
|
||||
|
||||
fn scenic_score(&self, x: usize, y: usize) -> uint {
|
||||
let scenic_left = self.scenic_score_(x, y, x as uint, |(x, _)| *x -= 1);
|
||||
let scenic_right =
|
||||
self.scenic_score_(x, y, (self.width - x) as uint - 1, |(x, _)| {
|
||||
*x += 1
|
||||
});
|
||||
let scenic_up = self.scenic_score_(x, y, y as uint, |(_, y)| *y -= 1);
|
||||
let scenic_down = self.scenic_score_(
|
||||
x,
|
||||
y,
|
||||
(self.height - y) as uint - 1,
|
||||
|(_, y)| *y += 1,
|
||||
);
|
||||
|
||||
scenic_left * scenic_right * scenic_up * scenic_down
|
||||
}
|
||||
}
|
||||
|
||||
pub fn part1() {
|
||||
let trees = Trees::from_str(INPUT);
|
||||
let trees_ = &trees;
|
||||
|
||||
println!(
|
||||
"{}",
|
||||
(0..trees.height)
|
||||
.flat_map(
|
||||
|y| (0..trees_.width).map(move |x| trees_.is_visible(x, y))
|
||||
)
|
||||
.filter(|x| *x)
|
||||
.count()
|
||||
);
|
||||
}
|
||||
|
||||
pub fn part2() {
|
||||
let trees = Trees::from_str(INPUT);
|
||||
let trees_ = &trees;
|
||||
|
||||
println!(
|
||||
"{}",
|
||||
(0..trees.height)
|
||||
.flat_map(
|
||||
|y| (0..trees_.width).map(move |x| trees_.scenic_score(x, y))
|
||||
)
|
||||
.max()
|
||||
.unwrap()
|
||||
);
|
||||
}
|
@ -0,0 +1,131 @@
|
||||
use crate::util::prelude::*;
|
||||
|
||||
static INPUT: &str = include_str!("inputs/day9.txt");
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
enum Direction {
|
||||
Right,
|
||||
Down,
|
||||
Up,
|
||||
Left,
|
||||
}
|
||||
impl Direction {
|
||||
fn diff(&self) -> (sint, sint) {
|
||||
use Direction::*;
|
||||
|
||||
match self {
|
||||
Right => (1, 0),
|
||||
Up => (0, 1),
|
||||
Down => (0, -1),
|
||||
Left => (-1, 0),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl core::str::FromStr for Direction {
|
||||
type Err = ();
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
Ok(match s {
|
||||
"U" => Direction::Up,
|
||||
"R" => Direction::Right,
|
||||
"L" => Direction::Left,
|
||||
"D" => Direction::Down,
|
||||
_ => return Err(()),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
struct Move {
|
||||
count: uint,
|
||||
direction: Direction,
|
||||
}
|
||||
impl core::str::FromStr for Move {
|
||||
type Err = ();
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
let mut it = s.split(' ');
|
||||
|
||||
let direction = it.next().ok_or(())?.parse()?;
|
||||
let count = it.next().ok_or(())?.parse().map_err(|_| ())?;
|
||||
|
||||
Ok(Self { count, direction })
|
||||
}
|
||||
}
|
||||
|
||||
fn moves(s: &str) -> impl Iterator<Item = Move> + '_ {
|
||||
s.lines()
|
||||
.filter(|s| !s.is_empty())
|
||||
.map(|s| s.parse().unwrap())
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
||||
struct Pos(sint, sint);
|
||||
|
||||
fn move_tail(head: &Pos, tail: &mut Pos) {
|
||||
let diff_x = head.0 - tail.0;
|
||||
let diff_y = head.1 - tail.1;
|
||||
|
||||
let diff_x_abs = diff_x.abs();
|
||||
let diff_y_abs = diff_y.abs();
|
||||
// diag
|
||||
let mv = if diff_x_abs + diff_y_abs == 3 {
|
||||
(diff_x.signum(), diff_y.signum())
|
||||
} else {
|
||||
((diff_x / 2).signum(), (diff_y / 2).signum())
|
||||
};
|
||||
|
||||
tail.0 += mv.0;
|
||||
tail.1 += mv.1;
|
||||
}
|
||||
|
||||
pub fn part1() {
|
||||
let mut head = Pos(0, 0);
|
||||
let mut tail = Pos(0, 0);
|
||||
|
||||
let moves = moves(INPUT);
|
||||
let mut locations = HashSet::default();
|
||||
|
||||
for mv in moves {
|
||||
let dir = mv.direction.diff();
|
||||
let count = mv.count;
|
||||
|
||||
for _ in 0..count {
|
||||
head.0 += dir.0;
|
||||
head.1 += dir.1;
|
||||
|
||||
move_tail(&head, &mut tail);
|
||||
|
||||
locations.insert(tail);
|
||||
}
|
||||
}
|
||||
|
||||
println!("{}", locations.len())
|
||||
}
|
||||
|
||||
pub fn part2() {
|
||||
let mut parts = vec![Pos(0, 0); 10];
|
||||
|
||||
let moves = moves(INPUT);
|
||||
let mut locations = HashSet::default();
|
||||
|
||||
for mv in moves {
|
||||
let dir = mv.direction.diff();
|
||||
let count = mv.count;
|
||||
|
||||
for _ in 0..count {
|
||||
parts[0].0 += dir.0;
|
||||
parts[0].1 += dir.1;
|
||||
|
||||
for i in 0..parts.len() - 1 {
|
||||
let tail: &mut _ =
|
||||
unsafe { core::mem::transmute(&mut parts[i + 1]) };
|
||||
move_tail(&parts[i], tail);
|
||||
}
|
||||
|
||||
locations.insert(*parts.last().unwrap());
|
||||
}
|
||||
}
|
||||
|
||||
println!("{}", locations.len())
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,300 @@
|
||||
vvMQnwwvrwWNfrtZJfppmSfJSmSg
|
||||
BzGqjlBqBBmztHNFzDHg
|
||||
llRCPlTPPqBjPhqhlBRBClhqWcTWrWNcMbQbdrdLccccrnvM
|
||||
wMhwbTWpQjbpWHMQppzTHhjtlCjPSSJCCtlqRlJVFJFt
|
||||
ggdvvnvDgdDmNcBrrcDntFRFqHJJtSJqvlVSRlJq
|
||||
fggNNffGmcBrmBfcDzzzpHbsGTpszwwTbp
|
||||
BPdPPBggrPtrpbtvPBBdgrFmhhQThGGlbbTZnzZQzZfn
|
||||
ccjWRJVNcTGmnWWFmh
|
||||
DMNmsMHwRNBrggdPDPdt
|
||||
TfsfHLQbBtBFQbQsBmPwwlnPGZFwwdwWFZZw
|
||||
MRpcvJMJVSMrVMpVSvhhnclwgWwDZgWgWgWglwcG
|
||||
GCzjRJjVjSSrvfNQtLmQNsQbjB
|
||||
FrSPFjtVvwsqSwcG
|
||||
hDHdWDngpgZTDgHzzHwNNqlwNvZJlGqcQGsl
|
||||
wDzLTDHgFffLtRft
|
||||
CnCJNVqvCBJBNZmfPcPMcFLVcwmd
|
||||
HgzjHFghSFtrLfwPchPM
|
||||
QDpjgDSQlHHlDQQRzRzsBRRvWnWvJvZnqWBJNF
|
||||
mGHcFPFqzPtcfPwDGVVpgLgSlgBl
|
||||
rCvddTrnsbDLVSDwjSjd
|
||||
QWhWQThswssMQMMMvhTzPqJzmzftHccJfHFhFm
|
||||
cPbNpLVFTPbbFrpTLQBzqqmgnnBhgLMM
|
||||
vvSwWCZCRZCDZtGwzdgWdQmzqgnQddJn
|
||||
vCltGltCGmRRmCvDjjtHFpbcFfbbfssbpNPpHFpH
|
||||
WLLQMWZLSPMPWmrwhnjhZZhpHJHljBDB
|
||||
csbtCfFgCftGljHwHcBnpnJR
|
||||
tsvgszNtfMwPzWqPrS
|
||||
NbDZrbrFQQqqQtQqQDtTcBvCLBLswsZhscCGBZ
|
||||
ljmWRzVRpbndMWmmfdsTsCBsGwTVVVCGCGws
|
||||
ffRpnllHRMfdWzdnmRNQNNSFQQFNbrFHHrNH
|
||||
LccGzWNjcvNLGTmHNsNLMlMwMpMPGlMCwFwDDGCw
|
||||
fZZtfrZgrfQSnnnSnJRCglHpCwwHwpglDClFMw
|
||||
SqJQnffJRnfQQVRhrQtrhnThcLhzNzHdTjhsTWzjdmcm
|
||||
QJQwJMSbtbRgMQMQVZpCZsrrhpZBwrLLvs
|
||||
qCNPGWdqhpphsWrB
|
||||
DcNPNnqjdGDqjmPGGJRFMQmgtlQmQJCSgb
|
||||
blTRbDnHRGGBwnGPCtFPWzVCDvFWtL
|
||||
pdSJprqhhZSdqSdZNhVzZWtzLVgVPvzjLzWv
|
||||
rrsqsmrMpPHlwTsRHn
|
||||
mbNhgbRSLmTwswFm
|
||||
vHjHBWMHBzMqWZVZBzHzcwwwdcFLcpLspdzwpwQd
|
||||
HfMWMfvjWtZHqWDlhSnnnJNnbhslDb
|
||||
lwsvPPnqlwwwsPcHTgqcRcSccmgQ
|
||||
CVWBWCFpFzWfFjWjhNSQJJmcVcHRZJNTSc
|
||||
zdhfzBtfLLtfFClbrDvsPvtPbnmv
|
||||
PntVQbDnQHcDVvhtbtDhcbPcFTrrNfjqmmPTTZqMLZZMjFZm
|
||||
lgJCpCFCSCGCpllWMfZqTNNZrMjrJTTM
|
||||
CSzSwgFlzsGBzQcQhsnnDbVdtc
|
||||
THzqvrVrWzhqhWwqhTbNNDRtFRmmpFDDVsFLLsdddF
|
||||
MbZSSScZSGCJCjZlCjdPmpRmFLDtctdmFRsp
|
||||
GfJQlnZjSMnllbJCQbClnZQrhNwwqhBzTNhrffqhqWhTqz
|
||||
BdBdmDZHFFbrHHStPSRtPCzSRNDS
|
||||
JGGpwqLJGMTLpLlMpqLhJtzCCSGQSPzNNczVVPVzSV
|
||||
WwpllfslqfhffLwhfJpJlqlwdBmZnrdFHBFBBmNHFsFmdZmn
|
||||
jZfQZnZfnbRfjCnfbSSmVpqmNmVpCqlhCqqPpP
|
||||
MdJMwMvvLDssLtFMsMtLDsvvDRmmmPhWzWzphpmqDVzPDWNp
|
||||
TsLdMrvRtLJtGdtGRRtFTBjSBrScnSZjnbcgQgHfnB
|
||||
RZfmlRlWJmWLLRscrslJqvvMdVwmddvPddQPVDdDwz
|
||||
GStFbFCbntbjNnjFhFvdHfhzHfzzQdMHwPdD
|
||||
BSGpFbbjbNjnNNFSbRsLlWqgrZrfRgsBlg
|
||||
ztHczmrmcNNzHsPSTwsPHSQPQT
|
||||
CFCRjlvbClCjBdPDFQdwBsqn
|
||||
llbRgjClJCVVMMCssfmNZWszrNgzGL
|
||||
mmFldllVlmtdWFvPPFBcSSBW
|
||||
DZzZGzZswQZHwQZjZzWWTSSvjSdvPvvWjJTS
|
||||
DpQQggwzZGdmbCldgVgf
|
||||
PJJvhqzVGbTFqzqbbGTlLmrtrZMnnZnntlJnrD
|
||||
fNwRcQBCRNddNgLtgDnttqrMMtlr
|
||||
RfRdNWQHcqHscdfRdGPFbFPpvpVWWzPzVS
|
||||
DRgjZRRDggTfjfRvwWzHGGHPWDswvv
|
||||
dhbmpcCmchgCpsGzWPdVGvWHwP
|
||||
hpMMMpCQMnChFgNRQffTRrSN
|
||||
gfqPCHWtPMMjCtffgjQWGLvGdZcdLLGZcLFGZBWG
|
||||
pJTDsnnnvBjnFwvj
|
||||
zJRpTbNrTSppRVblgbljMgMfCfbC
|
||||
fGrGwqggtbVmtzbf
|
||||
CTMjNQcJjJTBNCjMNZFNBcCZHbmWZHVLZDDWVtDzzbVmlV
|
||||
hMvTcNMFMhQjTTBFBNMhwpspwgnGtvtnSgdwrRpG
|
||||
RfFdqPdMMGPVgWmNVN
|
||||
QwrTsbnSsSQpwlSSbNNWDmGLVjjmLWwNVB
|
||||
rpcclTCprmZQSbprSTpRRRfqMfHHCHfhMhvFJM
|
||||
LnJJsMtLbzsPPVPJbrTBlTWlfRfqnTrrlr
|
||||
VDHVQNFGgNTrSjSBjq
|
||||
CHFHGmvDGdZZGCQZVDgDHVbwLLwtMwwmJLJbLPPMbczt
|
||||
qNNNBllFBzFjjzwGqGgLrWgrtQjdmmtQmQpp
|
||||
ZMHJCPhMZRsRCsCPsSJZLmQdQgrtQwQwQZwdWg
|
||||
CnMPbbRbsPhCnbfhMPRPllnFGqwTTFzTzNvBGBGc
|
||||
wZWlBFZQgBzTzpZwBlVpzWBWnNMmnMvMcMJMmLGnVmqLqGMq
|
||||
PdSDfJbCHsHHdJjsRRhjjPjmLqnnrLMLcrnLvdLMNccvGn
|
||||
tSJtSCtbJhDhtzlFQZlTZTFp
|
||||
TNqZDqmMDZNMFSGHjSGBRBdN
|
||||
CrrwVwsPjjBHddPf
|
||||
rpWggQVspQWcgtLwcHZZzDDMLDvvnnMzDM
|
||||
lWrWmPwmGlZwZjdLZLzV
|
||||
cFcDJhJnmqBqDCRpZzVLNsFLjLzdds
|
||||
qJchTDCBHDWglmrfWPHH
|
||||
RgLRnTJWnfHDcQQBfg
|
||||
bZpNwdwbdMvVPsHHJMQfSSfP
|
||||
mVbdNNdrbCzZbdZvbWTGrhqjTJtRWttRjq
|
||||
TMtqqBJLrwqrZPlHHGhGnlBhzv
|
||||
bFgNcpDRnpgggjCzvWDWhQhQWQHHvz
|
||||
jnnVgjcgcTZMJqJVtT
|
||||
dVSjmdHrfGPddrQgstFgzsQfsMFQ
|
||||
hvJJCCJDcCtwBVFQzzBD
|
||||
RWCnTvWTLRnJJLJllWhTLSprVdNZVGHGNGGnrdGSZH
|
||||
gvMSHFZtBBMBMFZHzjnqLsLGMCzRWWMn
|
||||
QJmDrhbNDbJfPQhDmQPRLszRlnjCzzWqrRnlsL
|
||||
PcJVhJbJJNcNDmfDmjJmbhTfBvpwVSdggtgvgSFZwgvtgpdZ
|
||||
PBClRHHClRlFljllZSBBBllppVGDLpZVVVsGpmGcNDpGLL
|
||||
MvNwnbMwccVsswDG
|
||||
MqnNbzMMrQfnqtttqfQWQQnRdCSHgHPglRFBRWlHjWRlCW
|
||||
lldwdfSBWphHBggZghFs
|
||||
DjDbDVRzDmLRzRLGJjPssrLZPhdshFHrssTZ
|
||||
mvddMzvmmDDvvwQqWftCfqWqfM
|
||||
gpTTwNWGWMSMgJjnvpvvJbJppn
|
||||
lQvmLFdfrQzRFctlrLdRLVPnhPPbVDPDfjnVbfhJjV
|
||||
FLFqccvmmtcQtrmQccRFLlRLSSWBSgTWNwsggqMBsqWGHMNG
|
||||
PjPtVQrPVjrVPLLDQVFLTTWWqbSZwRwzqwSbSbbbwFSq
|
||||
lBnGJBnfflRRNZwbqb
|
||||
HJMGgmfpRMHGGdgncJHLDjjtVDQctLCvQCjTtr
|
||||
VvmvjRGwRwvhmhRvvvVCCTTJjfWqfDMMcJlcCD
|
||||
NpNbPfpSnngZbbLMFJWTMlLFqJJDMD
|
||||
bNSfdSHQZgVQzwhhvRmQ
|
||||
MhmHcDhChhcPVMDPDPQdFhQHnbNpZbZnprnrmNnjNbsllbnp
|
||||
WWqGCWSCzsGbbGNgjN
|
||||
LzwqBLSvwJCLPVMVDLdhMP
|
||||
mNVLLffSLVWdZCcFZCZrSbGr
|
||||
glvcwszTlsRDrHQCZFCvGH
|
||||
gTBRlJnwhzgTgsTnggslsJRTpLNmjmNNcdVLdhfpLpdLVmLc
|
||||
pCgfDrDrgccfppmDnhHMGqGbpHHSqzGLlqHS
|
||||
tFtjQRPFFZRVNRcQGbLzLFMSGzSbWLqH
|
||||
QRNTZjvjTTwtwNfmcTgfnCgnnBhm
|
||||
hcPBhqPzqWPccHWHHWqnPdssPVfFFmZDnVDDms
|
||||
NSLNCTRQZndRmDfnRD
|
||||
QSGTGbjTSTJHBlbZZBbh
|
||||
dgcWgVgWdvZSbbRtjLRZZZ
|
||||
MMDPPfTnPTQrFDMpHzmmLztLnsszRtwbtS
|
||||
rDfDqfHTpCSJqlCCGq
|
||||
bjsgllstBbpNpslBpdBgqljgGwzJzDzwLGGrwLQQdJDwGhQh
|
||||
nncmnmHHnmWRWmPfJCnvPRMrzvDhZZLGQwhDLhhMzZZZ
|
||||
mffccVHRRPTTNlpNbNjJVslJ
|
||||
DgPstgPtgPNNcjQQrtPJJCRSZTwSGJZZCZCJGD
|
||||
dHVvpzdBBhVqzWqvhvHdzGSZlTRCSRJrwSSCwJCWGT
|
||||
zpvVVqMBrzqrhFBvjbNPcPLnjcQtMcnj
|
||||
gBcmTCFghhCCBnBhWWwFbwLdwHFMLMdp
|
||||
LVzlZzPPMMzWWrwH
|
||||
ljqjsGlZPPqqlVsPqDVqjQQctNTnRcNLtCNmmnRTRthBGG
|
||||
LPRrrBNNjLBRJNdrGPRBfBrLwFqmDbdbTbTgmmgwmttFwtmH
|
||||
QQcVvnQphlWsCQCCVpnvptTJgbtqwHDwbJtJHFsTHw
|
||||
ppcJVQvpvMVMCvQZQVVZCCSRZPSjNRRZBPPPPzLjSLGf
|
||||
MLtRnjQsRMJcDQJnSrsfqVVvGwbbbqgggg
|
||||
WBFCNlFFFhFBlCHbplFWdpWZfVqPPwqTGdqTGvwrPVvTqvTr
|
||||
HClCHzFzFBhmnjtQzMMSMnbD
|
||||
sVnMCsdlMRcMFBGz
|
||||
JvwwgrJDfgDmmggQrhNfhQQftjFrGRRtZFGBRZFHzjGcjrcj
|
||||
PBJJvgDPNllPddVCPl
|
||||
fmmRSnfnMnFSmMmmzTDSBFHtlJJqHJJqdHQdTCdtCCdt
|
||||
WggGpNVVgWdwwHQtlGlC
|
||||
hjbWppbLbLZLjVPPjPLSRRMvDlmSzDzBSnBFZf
|
||||
nVttMPnPLjnJLjcnPVCjJJLcssfggBNlffgcNsWTcGcgNsBF
|
||||
HQbwhmDrRrgFsWlQGNls
|
||||
pZdbGzGrGpVttPLttv
|
||||
LLbMrMHLDdWhmgbqqt
|
||||
jGSQZQTpQGVVRSlQMQRljZmgmJBSvggvBWhJmJWvddmt
|
||||
VjlQFGMVrFFrDrPw
|
||||
DZVDwGZlJlVlwZVDzNdqfjMDnjqzNnWf
|
||||
pmtpLRQFhSFpmpRgRtHNFznNdqWBjzWfnBjMWf
|
||||
rHRrhStppHdJcGJrrssCsV
|
||||
pgQqHwgPcPCddCjdWtdp
|
||||
VfZGVFfNVhZhzjjjLz
|
||||
fNNBBnGVNfBfRSRjBRQHJQTwJcJTgHPwTngr
|
||||
MZdlzWzthMgrwmGmqZNqNs
|
||||
VvJQJPVDBJQThwwNsRqsvRsHHm
|
||||
BDQQPTnDDBQQBVfTBQPdFctzzdtztMMtnhcWcd
|
||||
LjWjDShflZRRcZzfHH
|
||||
srNwQPBsrVRhNmRGHzmM
|
||||
rBdgQTrhdPndQTrsQQsrPwnTpLLCWDpSCLtCnvtSWpJjDCvl
|
||||
gSlvDwCvcmcTQTFtRMjWHFVVHwtj
|
||||
rbsphZZzBshGZssMffTVRFfFpWpfTH
|
||||
GZNhZBhPBzTPNLDcDlCDCJNmlg
|
||||
smZjGfvjbWWffQtf
|
||||
dwRrdlVdDdgDbNtgcgQSNStQ
|
||||
FdFVwdblFlzVrlwrTlndZHHZGhmLhhssjHhMjnjq
|
||||
QFvQVFLLgVrFLBVgGhTtllPvmHRRGbTm
|
||||
hDCCNCNCJNzWDZnqJDzSNCTnbRttHGRnccbPRtmmlmHc
|
||||
qJshNMCNdVFVfsLB
|
||||
FcLZZPFjdZcZMPcRjcRTgbpJlwbbTlmdTlGlwD
|
||||
nrrNrHWBNSWvBqvvrhBqzStrgGnnmbwsbbJbwwJnmwmgJTlD
|
||||
BCrrNvqWvSQPcCGZZRQQ
|
||||
vPwcJblJzJbJcJFcwBSvJNdWRLtdsddGWWddWRWsMF
|
||||
mDZmmDZDHVhfmjZgjVDfhTZHtsNptRsMntnWdsMnGtRntG
|
||||
mhQrQDDhgqTTNfhmVQVBrPlBczSJbbCbCCPPvb
|
||||
ZjbjLlbZjGqsgJTfHggrVvlB
|
||||
tFDRFRnMFnnWtDdMdDRhzHfTJhJhffHvHTBHTgcfJV
|
||||
nztDtdWzCCMSptSdFRRswZjsLbjwZmwqwGqpQV
|
||||
vnvmmVnmVbrBJlzgWQWVNFzNHV
|
||||
MwSjZhSwPjMwfDRzgWlNpWvHlgNNNP
|
||||
CfSZjSfftwZDChDRSnccnrvBbbGrtBvctr
|
||||
LCBRQRBQwRrCVLVWSrCSwCptzvhthvGGhdHzwppTTddv
|
||||
mFnJJmnmFFFfPLNNmqqNJDpGnGtbHTtHvhnHbzvHvpGv
|
||||
lMMPLqDmNMVSjjgMCS
|
||||
zzPzbLjHLjfQPQHwwjddFNsNSJjDMsdNMFsC
|
||||
BqqtmgDhcqdSFCdsqddF
|
||||
GtcmrvhgcZlvZtBhtVgrvrvtnWzDnQbfnwlfWWRHWbbwzHRL
|
||||
JfWHWZcMMdDLMPjRnCJjRbFgnblF
|
||||
ShtBTSmBhTtqtfmqSTNvmjVjnFbFnnlrlqgCnrFnVg
|
||||
vfzTTthppmdzPLHLWdGZ
|
||||
tdvrvGgGTSScnHcjcg
|
||||
zLLVfzPPcDZnPjSPpD
|
||||
LfffNFLNlNbJwrctthWqNdNq
|
||||
NdjJtfVNZnnFFdtfGfFNcvpbMDbzdcTbbzpvmcDR
|
||||
PHMSHCHHWrRCvzDzDChT
|
||||
BqPWSHwllSQWrLHQHPqlBBNfttZMjFQfjGtZtNjJJjnN
|
||||
CpZtMCMQQpCVWjMDVjPVQsWWqJJhbTcddPlfhTRqchcJblhh
|
||||
NwDSGNmGRccqNJfT
|
||||
SBSSmgrrgGHnvSzwGVWDCzMCpLZtMsstLM
|
||||
sbjHQsBlBQrrGjQjBqCRSnSCpnfngLnFhJngFfSP
|
||||
zHVctHDcZtdJffnPpcSpFn
|
||||
ZdwNMztdvzVdrqblvWsqHvBR
|
||||
jPdjFPSbVDMMbqZzQWzQ
|
||||
hFRrJlpprGhtlJGQzmCRmZBWQCHRQR
|
||||
vThNplJpNhltNNlvcGDvwVFgnPwvSgPSSfjS
|
||||
DhDTPQpTDmQbDQrrrWtWPJNNrrsJ
|
||||
qqGjgwCgVRjMSRwMMGRGqjwvsNJJBZtrstvNBvHWHJvL
|
||||
VqqgfjzfgfFGVjRggCGznhlbTpQchcshpdFlnDbn
|
||||
DpTQTBbCZQVJQZJjrFllGdlvMPlMLqGBGvLl
|
||||
hmnWHWWNzzmHsmWRlGGpdLgLHGlqvgqg
|
||||
RzcWRhRnRnfmswfwtzzRWrDTrrFCQTCpQpcCrjjQCp
|
||||
HLvpHvGcBTDFznvfqT
|
||||
hCPQbPZPbjSbwwjCPChSClJJfzqTggTFDfsJngDg
|
||||
StqmmZbdqrQmhQrrhZWcRcGBpBHWVcLctMWp
|
||||
dNnRNbRdbRJMBMBVVThn
|
||||
rNrsLNscFsCDjpwTMgBGWMGjJjWBVJ
|
||||
wNcLpqHNsCprsfLFsHwRvPSSPRZRtRQSqtQPmP
|
||||
PPhGfbthhBDVsTDtDqRR
|
||||
mCmSNmqpcqjjrCScWRsZDpHsDQRZQDZDss
|
||||
CcWzNmccrjjvqBGzzdPGnv
|
||||
SDRmCSFfcSFFcfDmDBFSCfdVJhpzZjNJTNzRTvjzjhzNjTtZ
|
||||
ngGsltrMWrblNpNTJJplJN
|
||||
PGGnGsWngrGLQHHtHHHgWsHSBLqqfLcqBdVdcCDDBFdCDm
|
||||
VPjGwhwVPhrnqhzJmQvQTQvmzBzw
|
||||
ZBDBRbLLdtfRLlddLlCLCZMgmFJQFDcvzMQmgMzzJJFJ
|
||||
LHLWltHlRZCtBVhVVHPjGSpphp
|
||||
JqhlhdnnmfRVVSpzWLjzVLGpvB
|
||||
stQtFTTrsZQPFQNNDtQgLzzSLvjvLGLBGSZGGWJv
|
||||
DDDFFgDPbTwbTTJMCMcbCqqmmRRCnb
|
||||
JbDWPDPPJJDMDjHPZHGbHGVZTBhrzBpdzszdTTphdNdWdrpv
|
||||
RmRRqllqffwFtqwLCsqTNvpCsqCNqvdN
|
||||
fmfLmStlnnfnRtfcnQbbjPjPPggZGVsMQMbb
|
||||
WJggvGDJSwWgSfgvfSMGqqQHBcPjcHChcQBCssDHCTTQ
|
||||
mlRnbrnbnltblwdnnpbLRdCCjCTHTjPTTsQcTrHHhCcj
|
||||
bFLbdmzRpvSwfFFNWN
|
||||
BHnDnQHnHMWLwzWPzD
|
||||
dmlZCrdqLZzZVZJM
|
||||
tRRtdlLCjLmqCRsrSLrvvRQNFQnbgRTQQNHTBbGQQh
|
||||
ZrQPQWCrJnPdQSNTmBJNTHGHJN
|
||||
zhFRfswjwhhsFttfsfvQftRtLTzmBTHGTBmzMLHHLmGHNTTS
|
||||
hQhwqVjQwsdggrZZCWVl
|
||||
VjfnQgVQjblChfjVJlbzLtrSLlTGtztHTtsTGH
|
||||
DDqWQDQMWmDwWNwcqdWvpSrtLpLsptMprMStstMz
|
||||
vQcddRdRvWcwWRmmmmddZmmfVnnngJJbZnCBnBhhFbhCgJ
|
||||
gVgDnnmJdQVdJJgtgDjBsBhsBSPRSRRSSwccSbSqwPcCPcSC
|
||||
HrQHlHFpQfTHzzWzwScPPCRfLbPSfCSR
|
||||
TTQlZNTzlZNMWvrZMlpnhnVtnDDnVNtVJnjmhg
|
||||
MCmmssFnZJcNNszfpvvrpvJzvwpp
|
||||
BRRRWQWbSRGGRTTtZHWSqTrvDfgfdfrrwrDgfbvfzfrd
|
||||
jRBhWRWTSRttQBZMNchNCsmFMchP
|
||||
GBDncllqcSlNFZWBFWPjHVbw
|
||||
LQphJlJzLCwPjHbpHZvV
|
||||
hzCMJLMzTsrdrszQCCCTCQCDlqqnNmggqfGmgdmGgcmSNt
|
||||
hFVVbqJsqhcnBRTRGBTh
|
||||
lwdDpmzdNznzZBgGRRjR
|
||||
HdmvNvSCmDmwNDFrMJMqJFCRfsbq
|
||||
ctnbTcFTnbwSSfrrMLRhpJLMRdpwdJJR
|
||||
vdGCVBmGVHPLBRWhpRLJJZ
|
||||
VmQPHqvsPdlQsVHDftnlFTbffnbttfTF
|
||||
LBJZHrhLThHddcMLVtcMcL
|
||||
CPMNFDDMpGqFjjSPDPDqdvmdtQgVQQcQWcQgQQsj
|
||||
DzFDFMRSFPSGTJJTJBwwRhBw
|
||||
dpldqlqlRppFTHpbjbnLRLVnnGfjtG
|
||||
NNJTcmhzvJQNgMJBwcGtjtGbttfhtsGGnhnt
|
||||
rzcwmgvcvrBNvvmMgvcBzwHPCTWWprqPHqTFWdPCWDTF
|
||||
BNllDRTNqDNvNDDLBcDvBCLVJrVdJdtrnrCHggtrdd
|
||||
mppFMFjpMFZQZQGjFCdgrCrCdrvVGtJJCC
|
||||
PZsQmfPphvPjSsjmPjfZllBwcNRDNcDqNNWbTclS
|
||||
fjqZBSDSDwwsQwCDND
|
||||
rrdMdjVWtTTPslsslFLTLCsJ
|
||||
rvPWbvcmHjmdPbHvrvBHgqRRgqHGgfZGfHRS
|
||||
ggTQgsgwFrTrggbMTvSdmjfCmmQDcmqjDjmc
|
||||
nLZnRhNZnnNHZhZVStCcDqjcqmjSjH
|
||||
RWGNnhzBnJJRRWNRBNZNLZhFMTFPvrTrTlsggPwSlFMWTw
|
||||
RNmnPRnLGcQmzBQpHHjTltjtlfgspbsq
|
||||
CZvCJwZMMCCMdFVcwJJsgTTHfsTlbfbgbT
|
||||
SSVFhWCZdSCcWCcWdrvhzmnnnLNGDRDNzzLNGz
|
||||
jPwfPwNfFpFNQpDjdMcjcrdddDHD
|
||||
tzsRsGRLzhLhvqvhHMlqqV
|
||||
LRBnRBGSnBSGsGSGmGtBJCmnNWZpPpTNPMwQMPNJFZTTNwWT
|
||||
PCrStRPSPvZQcZPvqvfjSRWFFNFJFLZTTJTTVZFFGLFF
|
||||
DlpBzBntHDzhlpGJVHLwTMFLVLTL
|
||||
gptBBdgzpsBbpQvvPQPRqrdcCC
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,512 @@
|
||||
[F] [L] [M]
|
||||
[T] [H] [V] [G] [V]
|
||||
[N] [T] [D] [R] [N] [D]
|
||||
[Z] [B] [C] [P] [B] [R] [Z]
|
||||
[M] [J] [N] [M] [F] [M] [V] [H]
|
||||
[G] [J] [L] [J] [S] [C] [G] [M] [F]
|
||||
[H] [W] [V] [P] [W] [H] [H] [N] [N]
|
||||
[J] [V] [G] [B] [F] [G] [D] [H] [G]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 6 from 4 to 3
|
||||
move 5 from 8 to 9
|
||||
move 1 from 4 to 5
|
||||
move 1 from 4 to 5
|
||||
move 2 from 2 to 7
|
||||
move 2 from 1 to 6
|
||||
move 9 from 6 to 1
|
||||
move 12 from 3 to 5
|
||||
move 1 from 8 to 4
|
||||
move 3 from 1 to 5
|
||||
move 1 from 6 to 7
|
||||
move 10 from 5 to 2
|
||||
move 14 from 5 to 1
|
||||
move 8 from 7 to 9
|
||||
move 11 from 2 to 9
|
||||
move 1 from 3 to 9
|
||||
move 11 from 1 to 5
|
||||
move 2 from 1 to 9
|
||||
move 1 from 4 to 8
|
||||
move 6 from 1 to 5
|
||||
move 1 from 8 to 3
|
||||
move 16 from 5 to 1
|
||||
move 4 from 1 to 3
|
||||
move 1 from 5 to 6
|
||||
move 4 from 3 to 4
|
||||
move 1 from 6 to 7
|
||||
move 21 from 9 to 6
|
||||
move 2 from 1 to 9
|
||||
move 2 from 4 to 9
|
||||
move 5 from 9 to 4
|
||||
move 9 from 1 to 6
|
||||
move 6 from 4 to 6
|
||||
move 1 from 6 to 2
|
||||
move 1 from 7 to 6
|
||||
move 1 from 3 to 2
|
||||
move 8 from 6 to 9
|
||||
move 3 from 1 to 8
|
||||
move 1 from 2 to 1
|
||||
move 13 from 6 to 3
|
||||
move 1 from 1 to 9
|
||||
move 2 from 1 to 6
|
||||
move 3 from 8 to 4
|
||||
move 4 from 4 to 9
|
||||
move 3 from 1 to 3
|
||||
move 22 from 9 to 8
|
||||
move 1 from 2 to 9
|
||||
move 6 from 8 to 9
|
||||
move 15 from 6 to 5
|
||||
move 5 from 8 to 9
|
||||
move 11 from 9 to 8
|
||||
move 13 from 5 to 1
|
||||
move 1 from 6 to 5
|
||||
move 1 from 9 to 3
|
||||
move 21 from 8 to 3
|
||||
move 3 from 5 to 3
|
||||
move 11 from 1 to 2
|
||||
move 25 from 3 to 1
|
||||
move 5 from 1 to 7
|
||||
move 20 from 1 to 7
|
||||
move 1 from 6 to 7
|
||||
move 16 from 3 to 9
|
||||
move 8 from 9 to 6
|
||||
move 1 from 1 to 5
|
||||
move 5 from 9 to 4
|
||||
move 2 from 2 to 1
|
||||
move 2 from 9 to 4
|
||||
move 1 from 9 to 4
|
||||
move 1 from 8 to 4
|
||||
move 1 from 5 to 2
|
||||
move 3 from 4 to 6
|
||||
move 1 from 4 to 7
|
||||
move 9 from 7 to 6
|
||||
move 5 from 4 to 6
|
||||
move 7 from 7 to 2
|
||||
move 1 from 1 to 6
|
||||
move 11 from 2 to 5
|
||||
move 10 from 5 to 1
|
||||
move 1 from 6 to 8
|
||||
move 1 from 5 to 7
|
||||
move 24 from 6 to 1
|
||||
move 12 from 1 to 4
|
||||
move 12 from 4 to 8
|
||||
move 2 from 2 to 7
|
||||
move 3 from 7 to 2
|
||||
move 5 from 2 to 8
|
||||
move 9 from 8 to 9
|
||||
move 9 from 8 to 5
|
||||
move 1 from 9 to 1
|
||||
move 14 from 1 to 8
|
||||
move 11 from 7 to 9
|
||||
move 4 from 1 to 3
|
||||
move 7 from 1 to 2
|
||||
move 3 from 3 to 7
|
||||
move 12 from 9 to 7
|
||||
move 8 from 7 to 2
|
||||
move 4 from 9 to 2
|
||||
move 1 from 3 to 6
|
||||
move 5 from 5 to 9
|
||||
move 14 from 2 to 1
|
||||
move 8 from 9 to 4
|
||||
move 6 from 4 to 5
|
||||
move 5 from 5 to 7
|
||||
move 1 from 8 to 2
|
||||
move 2 from 4 to 6
|
||||
move 4 from 7 to 3
|
||||
move 10 from 8 to 4
|
||||
move 2 from 3 to 6
|
||||
move 7 from 7 to 6
|
||||
move 10 from 4 to 8
|
||||
move 5 from 1 to 6
|
||||
move 8 from 2 to 1
|
||||
move 7 from 6 to 8
|
||||
move 9 from 6 to 5
|
||||
move 16 from 1 to 6
|
||||
move 2 from 3 to 9
|
||||
move 1 from 7 to 4
|
||||
move 2 from 9 to 1
|
||||
move 14 from 6 to 7
|
||||
move 1 from 6 to 3
|
||||
move 2 from 6 to 3
|
||||
move 9 from 5 to 7
|
||||
move 3 from 1 to 6
|
||||
move 3 from 3 to 7
|
||||
move 5 from 5 to 9
|
||||
move 3 from 6 to 2
|
||||
move 1 from 6 to 2
|
||||
move 12 from 8 to 2
|
||||
move 5 from 2 to 1
|
||||
move 2 from 1 to 3
|
||||
move 25 from 7 to 1
|
||||
move 1 from 4 to 6
|
||||
move 2 from 3 to 9
|
||||
move 26 from 1 to 9
|
||||
move 2 from 1 to 8
|
||||
move 1 from 6 to 8
|
||||
move 1 from 7 to 1
|
||||
move 7 from 8 to 1
|
||||
move 7 from 1 to 5
|
||||
move 1 from 1 to 2
|
||||
move 2 from 8 to 6
|
||||
move 32 from 9 to 8
|
||||
move 1 from 6 to 5
|
||||
move 5 from 2 to 9
|
||||
move 1 from 9 to 7
|
||||
move 24 from 8 to 3
|
||||
move 1 from 6 to 9
|
||||
move 3 from 2 to 5
|
||||
move 1 from 7 to 9
|
||||
move 4 from 9 to 3
|
||||
move 8 from 8 to 7
|
||||
move 18 from 3 to 7
|
||||
move 20 from 7 to 8
|
||||
move 6 from 8 to 9
|
||||
move 6 from 5 to 1
|
||||
move 8 from 9 to 4
|
||||
move 3 from 5 to 4
|
||||
move 8 from 8 to 4
|
||||
move 2 from 5 to 2
|
||||
move 3 from 1 to 5
|
||||
move 4 from 3 to 7
|
||||
move 6 from 2 to 9
|
||||
move 3 from 3 to 6
|
||||
move 6 from 4 to 5
|
||||
move 2 from 6 to 3
|
||||
move 1 from 3 to 1
|
||||
move 4 from 3 to 8
|
||||
move 8 from 4 to 3
|
||||
move 4 from 3 to 7
|
||||
move 4 from 4 to 5
|
||||
move 4 from 9 to 5
|
||||
move 3 from 3 to 4
|
||||
move 3 from 4 to 9
|
||||
move 1 from 1 to 4
|
||||
move 2 from 1 to 5
|
||||
move 7 from 7 to 8
|
||||
move 4 from 7 to 4
|
||||
move 1 from 6 to 7
|
||||
move 1 from 1 to 5
|
||||
move 1 from 3 to 8
|
||||
move 11 from 5 to 9
|
||||
move 17 from 9 to 8
|
||||
move 13 from 8 to 4
|
||||
move 1 from 4 to 8
|
||||
move 4 from 7 to 1
|
||||
move 4 from 8 to 3
|
||||
move 6 from 5 to 4
|
||||
move 3 from 3 to 6
|
||||
move 2 from 1 to 9
|
||||
move 1 from 9 to 5
|
||||
move 1 from 3 to 5
|
||||
move 5 from 5 to 9
|
||||
move 2 from 1 to 8
|
||||
move 21 from 8 to 6
|
||||
move 2 from 8 to 4
|
||||
move 4 from 9 to 6
|
||||
move 1 from 9 to 7
|
||||
move 19 from 4 to 1
|
||||
move 28 from 6 to 5
|
||||
move 7 from 4 to 2
|
||||
move 28 from 5 to 3
|
||||
move 1 from 9 to 4
|
||||
move 1 from 4 to 2
|
||||
move 1 from 7 to 8
|
||||
move 1 from 8 to 9
|
||||
move 13 from 1 to 3
|
||||
move 8 from 2 to 8
|
||||
move 3 from 1 to 2
|
||||
move 5 from 8 to 5
|
||||
move 1 from 2 to 7
|
||||
move 1 from 9 to 7
|
||||
move 1 from 2 to 3
|
||||
move 2 from 7 to 9
|
||||
move 1 from 2 to 6
|
||||
move 1 from 9 to 1
|
||||
move 9 from 3 to 9
|
||||
move 3 from 9 to 1
|
||||
move 1 from 6 to 8
|
||||
move 21 from 3 to 7
|
||||
move 7 from 9 to 4
|
||||
move 2 from 4 to 2
|
||||
move 1 from 8 to 6
|
||||
move 7 from 1 to 4
|
||||
move 7 from 7 to 8
|
||||
move 4 from 5 to 9
|
||||
move 10 from 7 to 1
|
||||
move 7 from 3 to 9
|
||||
move 1 from 7 to 9
|
||||
move 1 from 5 to 3
|
||||
move 3 from 3 to 5
|
||||
move 10 from 4 to 2
|
||||
move 1 from 3 to 7
|
||||
move 2 from 4 to 9
|
||||
move 3 from 9 to 1
|
||||
move 3 from 7 to 1
|
||||
move 1 from 6 to 4
|
||||
move 1 from 1 to 2
|
||||
move 1 from 3 to 4
|
||||
move 2 from 4 to 3
|
||||
move 1 from 7 to 4
|
||||
move 4 from 8 to 9
|
||||
move 1 from 4 to 9
|
||||
move 3 from 1 to 9
|
||||
move 12 from 1 to 7
|
||||
move 2 from 9 to 5
|
||||
move 12 from 9 to 7
|
||||
move 5 from 5 to 1
|
||||
move 1 from 8 to 5
|
||||
move 4 from 1 to 4
|
||||
move 1 from 9 to 6
|
||||
move 1 from 3 to 4
|
||||
move 3 from 8 to 3
|
||||
move 1 from 1 to 7
|
||||
move 8 from 2 to 5
|
||||
move 2 from 8 to 1
|
||||
move 10 from 7 to 1
|
||||
move 4 from 9 to 5
|
||||
move 2 from 5 to 8
|
||||
move 11 from 5 to 4
|
||||
move 6 from 7 to 2
|
||||
move 2 from 2 to 1
|
||||
move 1 from 7 to 5
|
||||
move 1 from 5 to 1
|
||||
move 2 from 4 to 8
|
||||
move 1 from 6 to 9
|
||||
move 8 from 4 to 3
|
||||
move 8 from 1 to 7
|
||||
move 7 from 1 to 2
|
||||
move 4 from 3 to 9
|
||||
move 1 from 9 to 6
|
||||
move 7 from 2 to 1
|
||||
move 5 from 2 to 3
|
||||
move 2 from 7 to 8
|
||||
move 5 from 8 to 4
|
||||
move 2 from 9 to 3
|
||||
move 1 from 8 to 1
|
||||
move 6 from 3 to 5
|
||||
move 10 from 3 to 1
|
||||
move 3 from 5 to 3
|
||||
move 3 from 2 to 1
|
||||
move 1 from 5 to 4
|
||||
move 6 from 4 to 5
|
||||
move 1 from 6 to 2
|
||||
move 3 from 4 to 7
|
||||
move 1 from 9 to 4
|
||||
move 2 from 3 to 1
|
||||
move 1 from 9 to 8
|
||||
move 1 from 3 to 7
|
||||
move 4 from 4 to 8
|
||||
move 2 from 7 to 4
|
||||
move 8 from 5 to 9
|
||||
move 2 from 8 to 6
|
||||
move 2 from 4 to 3
|
||||
move 2 from 3 to 4
|
||||
move 4 from 9 to 7
|
||||
move 1 from 8 to 7
|
||||
move 2 from 6 to 9
|
||||
move 2 from 8 to 9
|
||||
move 1 from 2 to 9
|
||||
move 1 from 7 to 8
|
||||
move 1 from 2 to 7
|
||||
move 19 from 7 to 6
|
||||
move 1 from 8 to 1
|
||||
move 2 from 4 to 8
|
||||
move 5 from 6 to 1
|
||||
move 2 from 7 to 2
|
||||
move 2 from 2 to 8
|
||||
move 2 from 1 to 8
|
||||
move 4 from 8 to 2
|
||||
move 3 from 2 to 8
|
||||
move 6 from 9 to 5
|
||||
move 8 from 6 to 3
|
||||
move 26 from 1 to 6
|
||||
move 1 from 5 to 3
|
||||
move 1 from 1 to 5
|
||||
move 8 from 3 to 1
|
||||
move 1 from 3 to 7
|
||||
move 3 from 9 to 2
|
||||
move 4 from 2 to 6
|
||||
move 26 from 6 to 1
|
||||
move 1 from 7 to 5
|
||||
move 3 from 8 to 4
|
||||
move 2 from 8 to 2
|
||||
move 7 from 1 to 2
|
||||
move 1 from 5 to 9
|
||||
move 2 from 4 to 6
|
||||
move 9 from 6 to 2
|
||||
move 18 from 1 to 7
|
||||
move 6 from 7 to 1
|
||||
move 6 from 5 to 6
|
||||
move 1 from 1 to 2
|
||||
move 19 from 2 to 7
|
||||
move 1 from 4 to 2
|
||||
move 9 from 7 to 1
|
||||
move 3 from 6 to 7
|
||||
move 1 from 9 to 4
|
||||
move 1 from 2 to 3
|
||||
move 8 from 7 to 8
|
||||
move 4 from 6 to 5
|
||||
move 2 from 6 to 3
|
||||
move 1 from 4 to 2
|
||||
move 4 from 5 to 1
|
||||
move 8 from 8 to 7
|
||||
move 17 from 7 to 8
|
||||
move 3 from 3 to 1
|
||||
move 1 from 2 to 8
|
||||
move 8 from 8 to 4
|
||||
move 8 from 8 to 7
|
||||
move 1 from 8 to 2
|
||||
move 7 from 7 to 6
|
||||
move 1 from 2 to 7
|
||||
move 5 from 7 to 8
|
||||
move 7 from 1 to 6
|
||||
move 10 from 6 to 1
|
||||
move 4 from 7 to 9
|
||||
move 3 from 9 to 7
|
||||
move 1 from 7 to 2
|
||||
move 6 from 4 to 2
|
||||
move 7 from 1 to 5
|
||||
move 4 from 2 to 5
|
||||
move 16 from 1 to 9
|
||||
move 3 from 2 to 7
|
||||
move 2 from 4 to 9
|
||||
move 4 from 1 to 6
|
||||
move 5 from 7 to 4
|
||||
move 4 from 6 to 3
|
||||
move 1 from 7 to 4
|
||||
move 1 from 6 to 9
|
||||
move 1 from 8 to 5
|
||||
move 4 from 3 to 2
|
||||
move 2 from 5 to 3
|
||||
move 3 from 6 to 2
|
||||
move 3 from 2 to 1
|
||||
move 9 from 5 to 8
|
||||
move 1 from 3 to 1
|
||||
move 10 from 8 to 1
|
||||
move 1 from 8 to 5
|
||||
move 16 from 9 to 2
|
||||
move 1 from 3 to 2
|
||||
move 12 from 1 to 9
|
||||
move 1 from 9 to 2
|
||||
move 3 from 1 to 6
|
||||
move 2 from 1 to 9
|
||||
move 3 from 6 to 8
|
||||
move 20 from 2 to 7
|
||||
move 16 from 9 to 7
|
||||
move 1 from 7 to 5
|
||||
move 2 from 5 to 9
|
||||
move 2 from 2 to 3
|
||||
move 2 from 8 to 5
|
||||
move 3 from 9 to 7
|
||||
move 2 from 5 to 2
|
||||
move 1 from 4 to 6
|
||||
move 2 from 1 to 4
|
||||
move 23 from 7 to 5
|
||||
move 4 from 8 to 5
|
||||
move 7 from 7 to 1
|
||||
move 16 from 5 to 7
|
||||
move 1 from 6 to 5
|
||||
move 1 from 2 to 4
|
||||
move 2 from 3 to 9
|
||||
move 1 from 2 to 3
|
||||
move 13 from 5 to 1
|
||||
move 1 from 3 to 8
|
||||
move 1 from 9 to 4
|
||||
move 19 from 1 to 9
|
||||
move 2 from 1 to 9
|
||||
move 22 from 9 to 8
|
||||
move 14 from 8 to 5
|
||||
move 12 from 5 to 3
|
||||
move 21 from 7 to 9
|
||||
move 14 from 9 to 7
|
||||
move 1 from 8 to 6
|
||||
move 9 from 3 to 7
|
||||
move 1 from 3 to 2
|
||||
move 4 from 4 to 1
|
||||
move 1 from 2 to 4
|
||||
move 1 from 3 to 9
|
||||
move 6 from 8 to 9
|
||||
move 4 from 1 to 7
|
||||
move 2 from 5 to 9
|
||||
move 6 from 4 to 5
|
||||
move 4 from 7 to 4
|
||||
move 1 from 5 to 3
|
||||
move 5 from 9 to 7
|
||||
move 2 from 3 to 1
|
||||
move 6 from 9 to 6
|
||||
move 1 from 1 to 6
|
||||
move 2 from 4 to 2
|
||||
move 8 from 7 to 5
|
||||
move 20 from 7 to 5
|
||||
move 2 from 5 to 6
|
||||
move 4 from 9 to 5
|
||||
move 1 from 1 to 3
|
||||
move 1 from 3 to 4
|
||||
move 1 from 2 to 7
|
||||
move 1 from 4 to 9
|
||||
move 9 from 6 to 3
|
||||
move 2 from 4 to 3
|
||||
move 28 from 5 to 3
|
||||
move 1 from 8 to 3
|
||||
move 1 from 8 to 1
|
||||
move 1 from 2 to 8
|
||||
move 1 from 6 to 2
|
||||
move 1 from 8 to 1
|
||||
move 6 from 5 to 7
|
||||
move 1 from 5 to 1
|
||||
move 1 from 9 to 2
|
||||
move 1 from 1 to 3
|
||||
move 1 from 9 to 7
|
||||
move 2 from 1 to 2
|
||||
move 11 from 3 to 8
|
||||
move 3 from 8 to 6
|
||||
move 3 from 6 to 9
|
||||
move 25 from 3 to 7
|
||||
move 4 from 3 to 8
|
||||
move 4 from 2 to 3
|
||||
move 9 from 8 to 9
|
||||
move 2 from 3 to 7
|
||||
move 3 from 8 to 2
|
||||
move 11 from 9 to 7
|
||||
move 1 from 9 to 1
|
||||
move 4 from 7 to 3
|
||||
move 1 from 1 to 5
|
||||
move 23 from 7 to 2
|
||||
move 12 from 2 to 3
|
||||
move 2 from 3 to 9
|
||||
move 12 from 2 to 1
|
||||
move 2 from 3 to 9
|
||||
move 1 from 5 to 4
|
||||
move 1 from 2 to 5
|
||||
move 1 from 9 to 4
|
||||
move 1 from 5 to 9
|
||||
move 2 from 4 to 2
|
||||
move 3 from 1 to 4
|
||||
move 1 from 2 to 1
|
||||
move 10 from 3 to 2
|
||||
move 7 from 7 to 3
|
||||
move 11 from 7 to 9
|
||||
move 5 from 3 to 1
|
||||
move 1 from 4 to 5
|
||||
move 11 from 2 to 3
|
||||
move 9 from 9 to 3
|
||||
move 3 from 9 to 4
|
||||
move 2 from 4 to 8
|
||||
move 1 from 5 to 6
|
||||
move 13 from 1 to 5
|
||||
move 3 from 3 to 8
|
||||
move 3 from 7 to 2
|
||||
move 1 from 7 to 4
|
||||
move 3 from 8 to 3
|
||||
move 8 from 3 to 8
|
||||
move 4 from 4 to 5
|
||||
move 2 from 8 to 2
|
||||
move 8 from 8 to 3
|
||||
move 1 from 6 to 3
|
||||
move 2 from 2 to 8
|
||||
move 6 from 5 to 2
|
||||
move 3 from 2 to 8
|
||||
move 1 from 1 to 7
|
||||
move 2 from 9 to 3
|
||||
move 3 from 5 to 4
|
||||
move 2 from 8 to 6
|
@ -0,0 +1 @@
|
||||
pqffvllhrhthvhshhpnhpnpqpvpvrpvpwvwjjdssmcsmccjvjmjjwnjwjwhjwwwzswwhvhwwlvvlbvbtbzbfbzbtbqbgbpbggwzggvjjdpdffbmffntncchtccbcffcjfjnjfnntssvtstzssmnnhrhlhbbwfwjfwjfwwbhhfhmmpsssbnssssfzzfpffdrdpdqqvnncjjgrjjmhhpqqcjqcjjzdzzpvvprrlglrrcmcqqtltdltddswsrrzzwgzzgssczcmzzmgmwgmggwwzttpccmcsmmvfvnvppzlzvzllgclggpfggfnfrfvrvwwvhwwvgwwrbbgfglflblzblzbznzhzffplffnrrcqqsgsvshvhlldhhvnhhmdddnssdvdwdwccggmddsmswwtctdtqqjsshhjzzdpdmpdmppjtjwjswjsjjjsdjjtrtbrbjjwwvnvppqphqhwhcwhwbbpgbbnhbnhhswwdswwlcczdztzbbbnwwtmmpvvgjjqgqdqzzdjdpjjnnffhccscvvchhbmbcbffpdpggvdvttpvpqqhggdtdhtdhhmghmgggzwgwrgwggwlggvpggcfcttzmtmgmvgmmpqmqlmqllsqqjbjwjsszczlzrzgrzzhshlhjjwttwnntbtjtjpplccqrqhrhssbmbttrddfvfwwjcwcvwcwwvpvggqwgwjgwgccvqqcmqqtqnqpnqnffdqfqhhqnhnmhmvhmhwwfrwrggnmmmcnmmgsszmzlmzmddcwwthtssgjsgjjgpgnppdqqcgqggzjgjngnrnggvffgddvtvctcftcftfnnnnhssbgsgwwthtqtltftqtnqttsrtrggwcgwcwmwgmgvmmzrmzrzjzmmcclmmtjmjhmmlhlwlppnpccbbrlrqrcrjrdrlrnngmnmvmcmzczztbblglccvzvppzspsddrzzlsllfzfsspnpdnpnvvvgmmpccmpcpgcpcwcddtmddgwgngqqcpqqlhqqczqqbvqqgdqgqmgmlmmvrrgfgzffbccldcdmmcmcgcngnghngngdngdndcncbbpqbbphbphpccpcwwjswwfttbqbsszccrbbdndsdrdqrqjrjjbmbtbdbbgbvgvcggwdwcccttqccnffjpjqqzpzlzvlljhhschhzlhhfhcfhchvcvtvtgvgzvzrvrdrgrwrjwjljhljlssszsqzsswhhmlhlrhlhzzgghjhzjjcllwrwtrrbdbrbnrnprnrffjvvphhvbbqbbscstsmslmlvmvrmmvvngnlnzzwqzzjqqsqbqrrtmrtmmfgmgrgjjtmjmrrddmrrqmrrjmjqmqnqmmcmlmfmffcgcclplffzvzwvzzjtztftqftqffjjpwjjbpjjggzdgzgwzzfrfvvhfvvwcvvbccfcvffpcpgpbbqhbbhmmzfmfvvnjvnjjhzhqqmffndndmmzhmmqnnlglvvjhjddvggqwgwdgwdggqbqgqrqlrrtptsswlssqwssbdsdrsddjsszjszjjpnjnvnjvnnmznmnddccpwwhshzzcfcqcwcddsjjmnjmjljwwgmglllqlhhctcvvqrvrrhfrrbcrrfbrfbrfrqffbwbqwbbjggsjjjnqqrqsqhhwnhnshnhhdjjqfqpqmmqgqgqggzmmnncrrpgglgqlqclqlsqqwnnfntnzttrnnmtmvvfppbrprzpzzdzvvtctnncpclpccsbbswwcscjssvhvhhqggzmgmqgmgwwgcwgccrllzhzzlzlbljbllmqqpjqqhrhqhjhbbjmjmhmddmwmcmvvmbbmvbmmznnwvwlwtllhwlwgwpgplgpgmgngjgglbglgmllvvlttgrrrlsrllghlggjdjwwfjwfjfvhjmgqnwhwpbdtzrphsqbmmvscslhbdzffsfshgsdjbqbwlgmrtschcnfhdlnndsvpwmwttfglpghhznmgfcjsdlwhnmfqvmpvhgpnnwtjfztbmtprqhsqtjwzhwcqjtjbtqwlcldnvggrwddmpllwnrqwdljwzfzqwcdwgqwvnthnrpcsfwrmqvbzjvzqnmdnfgtbzgtnrvblfwmhdsddgbffnjzvjzfpwglctpqhnqdvtblcchrlmndzhlsczgnsmnbwgnjngnjtlrdpfhqjrwcrqvcpspbtwcvgvvmpnwqjjpdpnslmcrcjnjmhqmrmfbcmrcmpbcbhpcvwqwflljfpgdvqhgdwgcphjqfnqzjjpsqnbtfzhftjtfcbhhcmmlwcfznsflfpphprrgvqwfgjcwfgjfsghzcbqrldwrjlzlbjhpgrbmgdpgzmfsqsphqbbslwwpzspccrhcfrgcjlfwhlcmzdcltbbpcrzglqgqntpwtmgstqlmcsqqbsqgmsmfznwcrfdgvsmnfqmwtsvqvlhwwjlrlhnsvcnrtwwmrjcgfncvlrcqrllndlvmrjpfjpgrrjcwhsqvlbtnlqgwjjqzwcvtvlnfnmqqshbcnqtcbvnwtwbfdgqmvnpmjhlsfdntfwwntvsrrsmspzqmglfnprjtdbmbgnplzzclsjpnzwdhcbhpfnqrgmgqtpfhgnfbqhrpmznbrshjhntzctslwhtgtjvpqhntmchhtncfjmbzcgnpcbpmldrtnpvrzqfftbjjcjlpwwgvmnstjghftcczjzfsftgzpfhbspqmrbfhcdfmqbrgrbsmjvgpbrnvbblwwvqzzpmqrspzvzppjfbgfftdvsdvmrjzhfslptzmgndnqqgmrrfnbbpvbmvpngwjhzvfbwfnzlrgwffvjsfdldfgchfjmnzfnzhwrwttrzlrhmnwvjjdqfmbpfllhrgmddjgnwjnbqwjnslcrdjrmnldcpsgzjpdhrpdfwhbvwhwnhcsmwcwstvqrcrqsnvjrzljfgbljfszchbsqnldgntvcscwqqmpnlwtlfmswtmvrlpzgbrjhtgjgpnhggnprpvwfqpjffqhtfvpnrptgrtwzzlvplgnfjmqphgmnssccrdndqgpljtwtntshrpgsjcdrpmccjnjdgmpmzbfhqjzphcswtwvvqcrwsjhtdqgrhqjmjjcrblpswcblnpzvfztqtbpgjcgngqmwrjtlmhvlsbmrdzwlgqlfqcqnsnjcnddssqbftjvnlgcwwfcgdpdmqrdsjmcnzrfrpnvjmbsltpzwjhjzqqvbgrltczbgvcpwdzqsvhddsbjgjgcmnldrfhnhddlvjcvsnghprjwlghhtghldcqsdcdgnmbcjglvjjvvlbhzczlmjsdqtdpzdtvfztgsdfjsdtfchvzcgvhjnnncmsrfvvmcsjjdftmlpczgvtwngssqmzlmsrrsrbhhhrnwqhmpcdvqmdsvvtsgsqfdcpgsdgzvmbzpbpgtcbshnvdzlmpnwmqrvnmrjprmvppjwfbjhlhzsfhqqzmpbclqvsvfrcqwprrcvqcbbwvnqfwnrgjhlwmgzpfspqrvqrhmqnwvzjrhvvgdgswlvzjjhjtdctlthlpzqhjvwwbpsclpgflcnsdshrqbhmczcwljqlndfnfrcdgmptpsltrcjccnpdchgnswdcpsslcslcjznzpgfhznhbgqhdqvddmqzdnmpshhdcjrsmfjllhfvjvmzzhzrvlbpzqngwmlwcmqnppqzncvjshfrpjlptvnqfrfcrfnbhwhpdqqvjhsqvsmprtgfrddwzjzlwhhqvjpfrwgwvwpszzsfzwjtwngdjfllhjrmqjtmvwsvggnswpqpjbtcrnhhhlzbrvhjdstnpctjlgsffrrbfdvjzhwsgthgfsqnvqdcjffsttlrjnhtqqdpfqpjtdgfwcdwzmwfvqgglsrmmqwbszclpzwldwcswpwfwldrfmmdndcptjbmnvgcpntqcdrcffvgnlpjmcqjpfmbmwjfpqzbzhqtqbzsghbnfvhphfzzhfznttpfrqwpmzjchpzzrdclhdltlqbjmjdfdjqlqbwptsghcnvtdscwgpqnlhhvsvglplhlrwpnzmdbsbrlhmpczzfz
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,99 @@
|
||||
201221222310231210121242440413113300240004414452541255451423433301424221344321231200331000322022002
|
||||
201110223212021301023231110004043440041124554211551214344435531144314002144220404322120300310201221
|
||||
022020021300232232214420211402302113414555244354252313411231531323042333142321430241331131200211211
|
||||
220101300101000212103133214111232525452452133144332223522145134313243143203441411323220330102101001
|
||||
010013203211303344414334400001453124241242341433545332514312432413253552020220000011210222220213011
|
||||
212222232311011011440242233434421552552224125313441224221452233155422331202244211404341301032111221
|
||||
000210330211043141131201411214315555313554234431241423355241553322445342213244404311341411322311202
|
||||
223012310332312111412202422252114251233433231164552322424224355244442532524110421232041401022103023
|
||||
203212231033131211203222534413454122353525263556454546253645235311231121525153501243212023122321022
|
||||
331310310124001323434212433231115432336534526522236536443633424625133244551543134110203434332100312
|
||||
331233200232041103145125233451334566232552254635666656442655453534423322531411521134033421402331113
|
||||
031333212400213344515542322452113324522342242354445452323465365534254431442152141421403144041023001
|
||||
111303221312241302432354252153225363664664442542334456666266653255363425131231313432040341201422111
|
||||
230022101140423311411245143352262322642565656564543663352325633432652452234241222524242132111120233
|
||||
111002202003112133533152425634325552524645656633433542422554263422566342523144454431451112432214030
|
||||
111104231403421133411522455246633653622253675366665655474442525346262352454224513234245423104124211
|
||||
321141142120031135251255344323625365664335656464755544364767363442333262542665522525235523422123233
|
||||
101014313242515522434326534623634543435675343737464477766767446534622342246356341444354234003142123
|
||||
230232022033253314544352254635535575447345373545434435677453676557464324566466565421351335242321112
|
||||
324420241333415323423265626324463475735354336456636435774744665334656336663634352353155433241211310
|
||||
030100032243154112253364662343673653443776356553363473564676474674635776342552423313423224203120400
|
||||
313344442241532454632632336565534536554545477575457734636653646644647334462532342224431251430133234
|
||||
413132014253243413424445624573635374656346678654756887657637545745737634534436636222324125242024402
|
||||
113100413333534433542565454674475563733488675576676868477648876554567666766524232656445322351414434
|
||||
114123223232332232425343334636336773665747648846868678874577587766673644456465643265412421521201133
|
||||
433041012151413325526323343447553567487566866867587566644445775875465754663466453542555421131441103
|
||||
132340522435542462363422743774554376876785448587855877476675458688567373747442443245466552432324421
|
||||
001021233221345225425647476736373858864468748564666587766576444778854633746456543224536224435144343
|
||||
234221341152333442436376347375644678848647767874568458768858755578688754766533335643636425251131120
|
||||
223105335322336464234466337533744687566688488899576587584868474485578476665654335343233341545541334
|
||||
033032325442253263357677467463487786576588697995668587567655778544556877377544477336442225211523122
|
||||
140154353323233625364336546576744454876575996956886776576698948786578676567434555522432665455131440
|
||||
313521251524264253333577755458448688767956867777976656866587658447444445736763345764252422513242253
|
||||
023424511426543544456663343755755748459566799865656687669788797758646748467363475635422256153224140
|
||||
040321314324626545436674534784547758568766757677656858969886995695558567665737443363252565415344150
|
||||
224134232343325522357534768848688787957655668596789999966575677878845446876456535336624424222231455
|
||||
224141351544346645675355675766745888689569556687686779798865896789645846755553675353243252243411351
|
||||
244135535456323653555537764747588998878955767878976797986558678967577874764547747434464533344425143
|
||||
254344551326626563754656664464666866556959896686868789977787865795759658468474457364425643642411212
|
||||
453432354266544435774445865475849765579556687767886876969778786857895575464486457633352542454311531
|
||||
431323446665534437654774645868555875879887996699999976678997889596655848857674674334366422332131423
|
||||
245452135325546335457446744684476967899679886979879698996697897997855964867458477746622265232555354
|
||||
234513546444464376734635746755778769688676799687796696888799766889765865688876373437542642226125433
|
||||
124245215563245676536345888666777599898988777699697986779696866797658566868868473643632652666351533
|
||||
412451132633344473454648745764658888566869867687787987999777797986588975866654457357332433335414444
|
||||
214414333445644664644347747885599757698899697887778998877986788877899565665758765536654545622452534
|
||||
425352443532542334775575668585985767578876979977998988887887686767885597575655766766575354653322551
|
||||
341323343434654663634654547879857799886688998878777779988866688979775597457468777564472225534313232
|
||||
545124425425455546466668554678699967677669899897978998898998899788599766464844645635647324555615353
|
||||
545411452345263737347485844557977699997899687999898887897977788878767859456654535453376264223653425
|
||||
111311152252635334446768747469768968699976777899879777888798889676865859677666767645565466525231355
|
||||
425533525462234753747757456555769688687686979977799979989866679677777588445675575365667543425623154
|
||||
544233366232657335455767466465965566867896878789799899889796686878588976676765454545775533424511523
|
||||
213441153422342646773654455468595778797987868997988897788886776776976696886686865337772632526551333
|
||||
223554452333265577776587466746956965867898778978889799987988779678679598566887477545354665523235112
|
||||
534133436255443447675576556488868877777996999897777877778886976875596896865556547544762534525314442
|
||||
333241456452523646365586568585659757669779697699977988966878999966669897486554437473446232234121511
|
||||
344115333364664776766656745848985588696899986667878779686697767998659797666847675734735245222231442
|
||||
414421116236222746557346445556667785989969776897796778779898766568585677544857777436565343263435252
|
||||
133434525653633667577578654688666889977898699697679686969897867589679554764664774745733424632352344
|
||||
241154136646553346447565458778898578665599967876979878968797678959595958665677755354553525455142314
|
||||
011531545644462635553357575585857967599756967986889968779697795989875787457554556734543454461552353
|
||||
223153424523265457743743788566468566897765797698887987696796969986588488566667533467354346652442154
|
||||
411332541562245264754564457768657877659759856797887977686999867686796487468863345554563554445134255
|
||||
111111152164636664374633647847578898695598559978766698569775899567955786746775465564426263324444553
|
||||
244253125346233646356467546577845849698988799899897579679867669859864645787673574552434344345421543
|
||||
313313115326365453647664377447858465768998667857957855568967559654888565586453466642363553631131144
|
||||
432324453225235235547466334664574786589598875799986676595566576847644447545343753752336234152525251
|
||||
041531521223254566233454745748865445478787699579956555865695776855457447863535643733363343525114551
|
||||
002112312431624652227743444674864555644698975796668758988698776486764464355443457365523254433512513
|
||||
213025425212342232257347333654674566866566856688587995689556785455877476445665737465436243234311522
|
||||
400325152331543653344567555367648447648775847858788668878587576477775557554474774235653624524534330
|
||||
201225132353363462264255647775767565547755475456468556556578565447584737544473643345362433213313114
|
||||
222142313121522636325455676356473784868847684547857878444855687668664767336445622335546145345553221
|
||||
011011355414132665656464753366536557558774677648768857874477547858836463653763553636322355442530410
|
||||
244212055241244343462426355575737537756477456688578557657558758575356557565526346354332122411232214
|
||||
404021325424244446336422545654463737338587564878856584655878477734744566335662344233623132551341343
|
||||
302032133433542245555262253634757534474445887585558485465487664466546477662342245456112345233243001
|
||||
441424231444113525263343236263746464755754467688554485866476655546773473745226654234112252523030440
|
||||
214032432253344413442463234355566734544765733634757753665665764545453673564236526462122422444104001
|
||||
342103203351243333265426433662456366677333473674353645773747465566475564352543445251533541333334403
|
||||
314113332405535512354633565233636736447653775566464363643645335346737346354226636131133352141022333
|
||||
012012343144323112332254436526544236533546573336744457563475465653543325224626354322442521420203000
|
||||
331323010121223544315513423655655344435557476643753446477775656646564342554325132242525131344222321
|
||||
013113443341413122441453332444636352663764575335454747576375673332465664626322345312155532212204401
|
||||
312123312343414451414343535265554646664244743356553546534375452526223246552512452455142313402141233
|
||||
320132042340313215123423434262532632625523522545755533634625565435256525425314114232543100021433302
|
||||
000212022130044034153312322223623326445365426236363246362343634253255362431451512323304432021213110
|
||||
030222303030411241432442515255642524264645245624533655453352455635622223544425452133340032041433101
|
||||
200220034012300142142244252413524255232546323662233533666365435656633125325513144442420012444122130
|
||||
200221323034034213201532144243452523245462263635346324642653556664235141513141232204114310341312231
|
||||
221120311223020030124243451422521115523224253343334243524235546443234444124541441344431230021211032
|
||||
030220111310304344303042424233354533343456536522445363263243421454345411511253231421443333003202211
|
||||
013020231130032133104102131224232231443322543262535624653543133544515143513154040413422013100020311
|
||||
000301113320331113214023402453154244323213425144333413412222543221145125224314432430141213322313322
|
||||
201033303203222202041033403054544522545144223421131541521154253154411423300402404134022222301133211
|
||||
010103100303000230431121021240112315522153244433244415123132432444445242404242411321211032123012202
|
||||
121002102321231001201142232101443245123213423322413515533435542224131011043014003402130011211231220
|
||||
002220132213130200100332200140301325451123154323515145222525421135230113344411313343203012321310011
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,16 @@
|
||||
#![allow(dead_code)]
|
||||
|
||||
mod day1;
|
||||
mod day2;
|
||||
mod day3;
|
||||
mod day4;
|
||||
mod day5;
|
||||
mod day6;
|
||||
mod day7;
|
||||
mod day8;
|
||||
mod day9;
|
||||
mod util;
|
||||
|
||||
fn main() {
|
||||
day9::part2();
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
pub type uint = u64;
|
||||
pub type sint = i64;
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct BuildSeaHash;
|
||||
impl core::hash::BuildHasher for BuildSeaHash {
|
||||
type Hasher = seahash::SeaHasher;
|
||||
|
||||
fn build_hasher(&self) -> Self::Hasher {
|
||||
seahash::SeaHasher::new()
|
||||
}
|
||||
}
|
||||
|
||||
pub type HashMap<K, V> = std::collections::HashMap<K, V, BuildSeaHash>;
|
||||
pub type HashSet<K> = std::collections::HashSet<K, BuildSeaHash>;
|
||||
|
||||
pub mod prelude {
|
||||
pub use super::{sint, uint, HashMap, HashSet};
|
||||
}
|
Loading…
Reference in New Issue