Advent 2023 Day 7, 8 & 9
This commit is contained in:
parent
57429c49e9
commit
582af3d9f3
9 changed files with 2364 additions and 0 deletions
1000
advent_of_code_2023/day7/input.txt
Normal file
1000
advent_of_code_2023/day7/input.txt
Normal file
File diff suppressed because it is too large
Load diff
124
advent_of_code_2023/day7/main1.rs
Normal file
124
advent_of_code_2023/day7/main1.rs
Normal file
|
|
@ -0,0 +1,124 @@
|
||||||
|
use std::{fs::read_to_string, collections::{HashMap, btree_map::Values}};
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone)]
|
||||||
|
#[derive(PartialEq, PartialOrd, Eq, Ord)]
|
||||||
|
enum Rank {
|
||||||
|
HighCard,
|
||||||
|
OnePair,
|
||||||
|
TwoPair,
|
||||||
|
ThreeOfAKind,
|
||||||
|
FullHouse,
|
||||||
|
FourOfAKind,
|
||||||
|
FiveOfAKind,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Rank {
|
||||||
|
|
||||||
|
fn signature(&self) -> Vec<i32> {
|
||||||
|
match self {
|
||||||
|
Rank::HighCard => vec![1, 1, 1, 1, 1],
|
||||||
|
Rank::OnePair => vec![2, 1, 1, 1],
|
||||||
|
Rank::TwoPair => vec![2, 2, 1],
|
||||||
|
Rank::ThreeOfAKind => vec![3, 1, 1],
|
||||||
|
Rank::FullHouse => vec![3, 2],
|
||||||
|
Rank::FourOfAKind => vec![4, 1],
|
||||||
|
Rank::FiveOfAKind => vec![5]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn matches(&self, hand: &Vec<i32>) -> bool {
|
||||||
|
let signature = self.signature();
|
||||||
|
if hand.len() != signature.len() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
signature.iter().zip(hand.iter()).filter(|&(lhs, rhs)| lhs == rhs).count() == signature.len()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn mapping() -> HashMap<Vec<i32>, Rank> {
|
||||||
|
HashMap::from([
|
||||||
|
(Rank::HighCard{}.signature(), Rank::HighCard),
|
||||||
|
(Rank::OnePair{}.signature(), Rank::OnePair),
|
||||||
|
(Rank::TwoPair{}.signature(), Rank::TwoPair),
|
||||||
|
(Rank::ThreeOfAKind{}.signature(), Rank::ThreeOfAKind),
|
||||||
|
(Rank::FullHouse{}.signature(), Rank::FullHouse),
|
||||||
|
(Rank::FourOfAKind{}.signature(), Rank::FourOfAKind),
|
||||||
|
(Rank::FiveOfAKind{}.signature(), Rank::FiveOfAKind),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn card_values() -> HashMap<u8, i32> {
|
||||||
|
HashMap::from([
|
||||||
|
(b'2', 0),
|
||||||
|
(b'3', 1),
|
||||||
|
(b'4', 2),
|
||||||
|
(b'5', 3),
|
||||||
|
(b'6', 4),
|
||||||
|
(b'7', 5),
|
||||||
|
(b'8', 6),
|
||||||
|
(b'9', 7),
|
||||||
|
(b'T', 8),
|
||||||
|
(b'J', 9),
|
||||||
|
(b'Q', 10),
|
||||||
|
(b'K', 11),
|
||||||
|
(b'A', 12),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse(line: &str, mapping: &HashMap<Vec<i32>, Rank>, values: &HashMap<u8, i32>) -> (Rank, u64) {
|
||||||
|
let mut counts = HashMap::<u8, i32>::new();
|
||||||
|
let mut tiebreaker: u64 = 0;
|
||||||
|
|
||||||
|
for idx in 0..line.len() {
|
||||||
|
*counts.entry(line.as_bytes()[idx]).or_insert(0) += 1;
|
||||||
|
tiebreaker = tiebreaker * 100 + values[&line.as_bytes()[idx]] as u64;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut signature = counts.values().map(|a| *a).collect::<Vec<_>>();
|
||||||
|
signature.sort_by(|a, b| b.cmp(a));
|
||||||
|
|
||||||
|
(mapping[&signature], tiebreaker)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Hand {
|
||||||
|
cards: String,
|
||||||
|
score: u64,
|
||||||
|
rank: Rank,
|
||||||
|
tiebreaker: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Hand {
|
||||||
|
|
||||||
|
fn parse(line: &str, mapping: &HashMap<Vec<i32>, Rank>, values: &HashMap<u8, i32>) -> Hand {
|
||||||
|
let (cards, score) = line.split_once(' ').unwrap();
|
||||||
|
let (rank, tiebreaker) = Rank::parse(cards, mapping, values);
|
||||||
|
Hand{cards: String::from(cards), score: score.parse::<u64>().unwrap(), rank, tiebreaker}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mapping = Rank::mapping();
|
||||||
|
let card_values = Rank::card_values();
|
||||||
|
|
||||||
|
let mut hands = read_to_string("input.txt").unwrap().lines().map(|line| {
|
||||||
|
Hand::parse(line, &mapping, &card_values)
|
||||||
|
}).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
hands.sort_by(|lhs, rhs| {
|
||||||
|
if lhs.rank == rhs.rank {
|
||||||
|
return lhs.tiebreaker.cmp(&rhs.tiebreaker);
|
||||||
|
}
|
||||||
|
lhs.rank.cmp(&rhs.rank)
|
||||||
|
});
|
||||||
|
|
||||||
|
let mut score_base = 1;
|
||||||
|
let mut points = 0;
|
||||||
|
for hand in &hands {
|
||||||
|
points += score_base * hand.score;
|
||||||
|
score_base += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Total points: {}", points);
|
||||||
|
}
|
||||||
135
advent_of_code_2023/day7/main2.rs
Normal file
135
advent_of_code_2023/day7/main2.rs
Normal file
|
|
@ -0,0 +1,135 @@
|
||||||
|
use std::{fs::read_to_string, collections::{HashMap, btree_map::Values}};
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone)]
|
||||||
|
#[derive(PartialEq, PartialOrd, Eq, Ord)]
|
||||||
|
enum Rank {
|
||||||
|
HighCard,
|
||||||
|
OnePair,
|
||||||
|
TwoPair,
|
||||||
|
ThreeOfAKind,
|
||||||
|
FullHouse,
|
||||||
|
FourOfAKind,
|
||||||
|
FiveOfAKind,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Rank {
|
||||||
|
|
||||||
|
fn signature(&self) -> Vec<i32> {
|
||||||
|
match self {
|
||||||
|
Rank::HighCard => vec![1, 1, 1, 1, 1],
|
||||||
|
Rank::OnePair => vec![2, 1, 1, 1],
|
||||||
|
Rank::TwoPair => vec![2, 2, 1],
|
||||||
|
Rank::ThreeOfAKind => vec![3, 1, 1],
|
||||||
|
Rank::FullHouse => vec![3, 2],
|
||||||
|
Rank::FourOfAKind => vec![4, 1],
|
||||||
|
Rank::FiveOfAKind => vec![5]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn matches(&self, hand: &Vec<i32>) -> bool {
|
||||||
|
let signature = self.signature();
|
||||||
|
if hand.len() != signature.len() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
signature.iter().zip(hand.iter()).filter(|&(lhs, rhs)| lhs == rhs).count() == signature.len()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn mapping() -> HashMap<Vec<i32>, Rank> {
|
||||||
|
HashMap::from([
|
||||||
|
(Rank::HighCard{}.signature(), Rank::HighCard),
|
||||||
|
(Rank::OnePair{}.signature(), Rank::OnePair),
|
||||||
|
(Rank::TwoPair{}.signature(), Rank::TwoPair),
|
||||||
|
(Rank::ThreeOfAKind{}.signature(), Rank::ThreeOfAKind),
|
||||||
|
(Rank::FullHouse{}.signature(), Rank::FullHouse),
|
||||||
|
(Rank::FourOfAKind{}.signature(), Rank::FourOfAKind),
|
||||||
|
(Rank::FiveOfAKind{}.signature(), Rank::FiveOfAKind),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn card_values() -> HashMap<u8, i32> {
|
||||||
|
HashMap::from([
|
||||||
|
(b'J', 0),
|
||||||
|
(b'2', 1),
|
||||||
|
(b'3', 2),
|
||||||
|
(b'4', 3),
|
||||||
|
(b'5', 4),
|
||||||
|
(b'6', 5),
|
||||||
|
(b'7', 6),
|
||||||
|
(b'8', 7),
|
||||||
|
(b'9', 8),
|
||||||
|
(b'T', 9),
|
||||||
|
(b'Q', 10),
|
||||||
|
(b'K', 11),
|
||||||
|
(b'A', 12),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse(line: &str, mapping: &HashMap<Vec<i32>, Rank>, values: &HashMap<u8, i32>) -> (Rank, u64) {
|
||||||
|
if line == "JJJJJ" {
|
||||||
|
return (Rank::FiveOfAKind, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut counts = HashMap::<u8, i32>::new();
|
||||||
|
let mut tiebreaker: u64 = 0;
|
||||||
|
let mut jokers = 0;
|
||||||
|
|
||||||
|
for idx in 0..line.len() {
|
||||||
|
if line.as_bytes()[idx] == b'J' {
|
||||||
|
jokers += 1;
|
||||||
|
} else {
|
||||||
|
*counts.entry(line.as_bytes()[idx]).or_insert(0) += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
tiebreaker = tiebreaker * 100 + values[&line.as_bytes()[idx]] as u64;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut signature = counts.values().map(|a| *a).collect::<Vec<_>>();
|
||||||
|
signature.sort_by(|a, b| b.cmp(a));
|
||||||
|
signature[0] += jokers;
|
||||||
|
|
||||||
|
(mapping[&signature], tiebreaker)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Hand {
|
||||||
|
cards: String,
|
||||||
|
score: u64,
|
||||||
|
rank: Rank,
|
||||||
|
tiebreaker: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Hand {
|
||||||
|
|
||||||
|
fn parse(line: &str, mapping: &HashMap<Vec<i32>, Rank>, values: &HashMap<u8, i32>) -> Hand {
|
||||||
|
let (cards, score) = line.split_once(' ').unwrap();
|
||||||
|
let (rank, tiebreaker) = Rank::parse(cards, mapping, values);
|
||||||
|
Hand{cards: String::from(cards), score: score.parse::<u64>().unwrap(), rank, tiebreaker}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mapping = Rank::mapping();
|
||||||
|
let card_values = Rank::card_values();
|
||||||
|
|
||||||
|
let mut hands = read_to_string("input.txt").unwrap().lines().map(|line| {
|
||||||
|
Hand::parse(line, &mapping, &card_values)
|
||||||
|
}).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
hands.sort_by(|lhs, rhs| {
|
||||||
|
if lhs.rank == rhs.rank {
|
||||||
|
return lhs.tiebreaker.cmp(&rhs.tiebreaker);
|
||||||
|
}
|
||||||
|
lhs.rank.cmp(&rhs.rank)
|
||||||
|
});
|
||||||
|
|
||||||
|
let mut score_base = 1;
|
||||||
|
let mut points = 0;
|
||||||
|
for hand in &hands {
|
||||||
|
points += score_base * hand.score;
|
||||||
|
score_base += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Total points: {}", points);
|
||||||
|
}
|
||||||
728
advent_of_code_2023/day8/input.txt
Normal file
728
advent_of_code_2023/day8/input.txt
Normal file
|
|
@ -0,0 +1,728 @@
|
||||||
|
LRRLRRRLRRRLLRRLRRLRLRLRRLLRRLRRLRRRLLLRRRLRRRLRRRLLRRRLRRLLRRLRRLRLRRRLRRLRLRRLRRRLLRRLLRLRRRLLRRLRRLLLRLRRRLRLRLRLLRRRLRLLRRRLRLRRRLRRRLLRRLRRRLLRRLRLLRLRRLLLRRLRRLLLRLLRLRRRLRLRLRRRLRRLLRRRLRLRLRRLRRRLRLRRLRRLRRRLRRRLRRRLRRRLRRLLRRLRLLRRLLRRRLRLLRLRLRRLRRLRLRLRRRLRLRLRRLRLRRLRRRR
|
||||||
|
|
||||||
|
FPF = (PTN, MPT)
|
||||||
|
DGM = (KXM, PRM)
|
||||||
|
FKB = (JLC, MBX)
|
||||||
|
XCJ = (DCJ, TSH)
|
||||||
|
JVH = (VCH, SMV)
|
||||||
|
BXL = (HLB, NVF)
|
||||||
|
GVD = (FSQ, MFD)
|
||||||
|
CDJ = (SMM, HHS)
|
||||||
|
BGM = (FHB, LKH)
|
||||||
|
FBP = (HHS, SMM)
|
||||||
|
LTK = (TCV, GQX)
|
||||||
|
LDM = (MRM, JKJ)
|
||||||
|
RDK = (KBL, GHP)
|
||||||
|
BJB = (XBN, BXG)
|
||||||
|
KST = (BGX, VFS)
|
||||||
|
VKM = (MFR, CJP)
|
||||||
|
CSG = (GGJ, JHH)
|
||||||
|
JFS = (QCG, XFR)
|
||||||
|
MDV = (FPQ, NRX)
|
||||||
|
QHF = (PJP, QHX)
|
||||||
|
DHM = (LJC, PDS)
|
||||||
|
MMV = (CHS, FXX)
|
||||||
|
CQP = (LFN, GSD)
|
||||||
|
RDT = (NVG, NVG)
|
||||||
|
XFN = (HFM, LTK)
|
||||||
|
MFD = (RKJ, XGN)
|
||||||
|
DTD = (JBV, JBV)
|
||||||
|
KJG = (PCC, PPR)
|
||||||
|
GLH = (JRN, BLK)
|
||||||
|
KBV = (MCQ, MCS)
|
||||||
|
LQF = (KDR, GFC)
|
||||||
|
GGB = (JGL, RRM)
|
||||||
|
BQX = (QKQ, NSG)
|
||||||
|
SVS = (SQL, FXL)
|
||||||
|
GMC = (BHG, GPC)
|
||||||
|
KPZ = (HLV, RVH)
|
||||||
|
RQB = (TDV, XPN)
|
||||||
|
GVR = (SXD, QRB)
|
||||||
|
MNX = (DLT, CMJ)
|
||||||
|
QDM = (TKN, VDH)
|
||||||
|
CCB = (KPR, QCK)
|
||||||
|
BVF = (QJX, FKK)
|
||||||
|
TJB = (HKV, BCP)
|
||||||
|
BHC = (SSN, HHH)
|
||||||
|
NTN = (RPT, PVF)
|
||||||
|
NDP = (BJQ, MGH)
|
||||||
|
PJP = (NTN, FSR)
|
||||||
|
BLL = (MTQ, SNQ)
|
||||||
|
RNP = (RTD, PGM)
|
||||||
|
PVF = (BMP, LPM)
|
||||||
|
QFL = (NNS, GLR)
|
||||||
|
VRG = (GGV, DMG)
|
||||||
|
XRX = (TTR, LXS)
|
||||||
|
MBH = (RHX, GKF)
|
||||||
|
CXD = (LFN, GSD)
|
||||||
|
FFK = (LDG, VHS)
|
||||||
|
NHM = (BLM, XQD)
|
||||||
|
TNB = (KSS, FSB)
|
||||||
|
VLX = (KCF, VXL)
|
||||||
|
DDF = (TNK, FBS)
|
||||||
|
GQR = (BGM, MGR)
|
||||||
|
BPQ = (FHD, MJT)
|
||||||
|
KPR = (SDL, NMQ)
|
||||||
|
CNL = (QFP, XPV)
|
||||||
|
HVA = (BRQ, XPL)
|
||||||
|
PHF = (LHF, HVR)
|
||||||
|
TNZ = (XCM, BFL)
|
||||||
|
NDJ = (GCQ, RTL)
|
||||||
|
HCT = (PQT, VVB)
|
||||||
|
JNH = (GVV, JMC)
|
||||||
|
CNV = (SDP, NQR)
|
||||||
|
GGV = (RHT, SLG)
|
||||||
|
PRX = (FSD, KST)
|
||||||
|
BLM = (KKQ, CSG)
|
||||||
|
JRN = (GGK, GBF)
|
||||||
|
DJK = (GQJ, JKB)
|
||||||
|
RVH = (FXJ, JVN)
|
||||||
|
RXF = (CHG, GDT)
|
||||||
|
MBX = (KJM, XFN)
|
||||||
|
HLV = (JVN, FXJ)
|
||||||
|
XDG = (HJM, KCT)
|
||||||
|
LPM = (RCG, RHG)
|
||||||
|
GLP = (XDM, XNC)
|
||||||
|
HQP = (JXQ, XPT)
|
||||||
|
CXF = (SCV, PHF)
|
||||||
|
QJT = (FJN, GHV)
|
||||||
|
MPL = (HSQ, FKN)
|
||||||
|
SDP = (LCQ, GRV)
|
||||||
|
CDQ = (JLV, LLD)
|
||||||
|
HHA = (BFL, XCM)
|
||||||
|
GPS = (VLX, CPL)
|
||||||
|
BXZ = (KSN, VKP)
|
||||||
|
PGM = (LJV, CDQ)
|
||||||
|
PKG = (VQF, FXC)
|
||||||
|
XPL = (LBN, DMV)
|
||||||
|
BJJ = (TVV, MNX)
|
||||||
|
HLB = (SNN, HNH)
|
||||||
|
CDV = (TNB, FSN)
|
||||||
|
FXC = (CLF, HSC)
|
||||||
|
JFM = (LSR, CNL)
|
||||||
|
CMV = (DHQ, DJR)
|
||||||
|
LDN = (BCQ, JMS)
|
||||||
|
XNC = (JLS, KXS)
|
||||||
|
SNN = (NGM, MFJ)
|
||||||
|
CND = (RDL, GJJ)
|
||||||
|
SKT = (FCM, MRC)
|
||||||
|
QRB = (BCG, HRR)
|
||||||
|
XNK = (LJC, PDS)
|
||||||
|
DGK = (KBF, SRB)
|
||||||
|
LNL = (FSD, KST)
|
||||||
|
PCM = (PDL, JFS)
|
||||||
|
BSV = (LSR, CNL)
|
||||||
|
SMX = (TKL, QPF)
|
||||||
|
XMS = (MDB, PKP)
|
||||||
|
XPT = (LDM, PKV)
|
||||||
|
RLB = (XFT, PKM)
|
||||||
|
VVV = (NRX, FPQ)
|
||||||
|
MGB = (LNN, NKR)
|
||||||
|
SFJ = (LFT, QDM)
|
||||||
|
MFX = (GLP, RPN)
|
||||||
|
DLX = (SQQ, NHM)
|
||||||
|
XQC = (HQJ, NPC)
|
||||||
|
GHF = (VNG, TGQ)
|
||||||
|
LRX = (GDT, CHG)
|
||||||
|
SHV = (SRM, DVJ)
|
||||||
|
TQS = (PRD, HGV)
|
||||||
|
SQK = (QNB, PSJ)
|
||||||
|
CHS = (MXK, GCR)
|
||||||
|
VDH = (FMX, XMR)
|
||||||
|
DGN = (LGT, PNQ)
|
||||||
|
RMM = (CFK, RQD)
|
||||||
|
RQK = (FSN, TNB)
|
||||||
|
SLH = (BDS, BBP)
|
||||||
|
HVR = (NTS, NQG)
|
||||||
|
PSJ = (JFK, XXM)
|
||||||
|
GBD = (VMR, KJG)
|
||||||
|
FRH = (MNX, TVV)
|
||||||
|
THH = (GHF, MNF)
|
||||||
|
XTP = (VPC, BQQ)
|
||||||
|
VMR = (PCC, PPR)
|
||||||
|
PPQ = (GJJ, RDL)
|
||||||
|
VHK = (TXT, DDN)
|
||||||
|
JCG = (CCD, BXL)
|
||||||
|
LCQ = (MPF, NDP)
|
||||||
|
KCR = (PFH, DJK)
|
||||||
|
LHL = (LGL, KCR)
|
||||||
|
JMC = (RBG, CGH)
|
||||||
|
JPM = (XMS, CVR)
|
||||||
|
CLF = (HDT, DHR)
|
||||||
|
FSQ = (XGN, RKJ)
|
||||||
|
DVJ = (VHD, XNM)
|
||||||
|
KCT = (SKT, QLK)
|
||||||
|
XFD = (HXR, JVH)
|
||||||
|
BVA = (GPT, RSD)
|
||||||
|
MGR = (FHB, LKH)
|
||||||
|
PXV = (MJJ, VBK)
|
||||||
|
FNG = (TQS, HHM)
|
||||||
|
GFD = (XRG, JCS)
|
||||||
|
SST = (PHP, JGC)
|
||||||
|
KJV = (DMG, GGV)
|
||||||
|
PQM = (TTX, RMM)
|
||||||
|
XRT = (KBL, GHP)
|
||||||
|
JLV = (NKV, BLL)
|
||||||
|
FKS = (CBR, RLJ)
|
||||||
|
HMD = (JNH, GXG)
|
||||||
|
FRL = (KQX, DDB)
|
||||||
|
TRP = (LXT, HMC)
|
||||||
|
TNK = (FRN, FRN)
|
||||||
|
KDR = (PRX, LNL)
|
||||||
|
XTS = (NDJ, HFB)
|
||||||
|
HVM = (FMG, FHN)
|
||||||
|
CHH = (TMD, MNM)
|
||||||
|
HHM = (PRD, HGV)
|
||||||
|
PJC = (FCC, VJD)
|
||||||
|
TSH = (RPR, CVJ)
|
||||||
|
GGJ = (NFK, NXD)
|
||||||
|
DMG = (RHT, SLG)
|
||||||
|
QPT = (QFL, PFN)
|
||||||
|
DDN = (RHP, NSS)
|
||||||
|
XHJ = (BPQ, CSM)
|
||||||
|
NNM = (KHG, SRF)
|
||||||
|
LFL = (TMN, JCG)
|
||||||
|
NKV = (SNQ, MTQ)
|
||||||
|
TMH = (LGT, PNQ)
|
||||||
|
CCD = (HLB, NVF)
|
||||||
|
GSD = (MRB, TFS)
|
||||||
|
RHG = (VXH, MXS)
|
||||||
|
LFT = (TKN, VDH)
|
||||||
|
BJV = (DST, PTK)
|
||||||
|
CGD = (PKG, ZZZ)
|
||||||
|
VNG = (BJV, HDX)
|
||||||
|
HJS = (GPC, BHG)
|
||||||
|
FRN = (VKP, KSN)
|
||||||
|
MRC = (JKK, CMV)
|
||||||
|
BQQ = (NBF, PJC)
|
||||||
|
KSN = (FNJ, GVR)
|
||||||
|
QNB = (XXM, JFK)
|
||||||
|
RSC = (JCB, JCB)
|
||||||
|
GCQ = (XGH, FKB)
|
||||||
|
SHS = (JBV, DDF)
|
||||||
|
LLR = (XHJ, PGB)
|
||||||
|
RSA = (RVH, HLV)
|
||||||
|
DMX = (GSH, SST)
|
||||||
|
HRD = (HLK, DJG)
|
||||||
|
LHF = (NTS, NQG)
|
||||||
|
JMS = (FKS, HPB)
|
||||||
|
SRB = (SRG, GSF)
|
||||||
|
LHN = (HLK, DJG)
|
||||||
|
DTM = (RXM, VHK)
|
||||||
|
PNP = (SNC, LPF)
|
||||||
|
MPF = (BJQ, BJQ)
|
||||||
|
SCV = (LHF, HVR)
|
||||||
|
BTV = (GLH, PNN)
|
||||||
|
NJG = (RXK, NXB)
|
||||||
|
NGM = (THG, TXQ)
|
||||||
|
FXL = (XRX, MBV)
|
||||||
|
NHJ = (DSX, NNM)
|
||||||
|
RBG = (DGK, LFQ)
|
||||||
|
HGV = (HTS, RNP)
|
||||||
|
LDF = (KRB, NXC)
|
||||||
|
PMR = (GNH, CHQ)
|
||||||
|
DVM = (MNM, TMD)
|
||||||
|
FBS = (FRN, BXZ)
|
||||||
|
BMM = (XSK, DDK)
|
||||||
|
GGK = (MXH, JNG)
|
||||||
|
NXB = (LHN, HRD)
|
||||||
|
PNN = (JRN, BLK)
|
||||||
|
PSV = (LLR, KXX)
|
||||||
|
KGK = (TJP, QMM)
|
||||||
|
CVG = (VLX, CPL)
|
||||||
|
QNF = (XPB, PCM)
|
||||||
|
HTS = (PGM, RTD)
|
||||||
|
FJN = (DTD, SHS)
|
||||||
|
JXB = (CLX, KPZ)
|
||||||
|
DLT = (JGH, SFD)
|
||||||
|
SFV = (HJM, KCT)
|
||||||
|
GSF = (DLX, CHL)
|
||||||
|
TKN = (XMR, FMX)
|
||||||
|
LJB = (QJT, FVJ)
|
||||||
|
QFP = (NXL, DGP)
|
||||||
|
PKV = (JKJ, MRM)
|
||||||
|
RHX = (RDK, XRT)
|
||||||
|
KDP = (FKN, HSQ)
|
||||||
|
RLJ = (BGF, JRP)
|
||||||
|
VQR = (FDK, RLB)
|
||||||
|
XNX = (HGQ, HGQ)
|
||||||
|
DSX = (KHG, SRF)
|
||||||
|
PDS = (VQK, KNJ)
|
||||||
|
GKX = (TKL, QPF)
|
||||||
|
CHQ = (XSM, HMD)
|
||||||
|
KXX = (XHJ, PGB)
|
||||||
|
MDB = (VVV, MDV)
|
||||||
|
BCG = (XJX, SQK)
|
||||||
|
KJM = (LTK, HFM)
|
||||||
|
HRR = (SQK, XJX)
|
||||||
|
GXD = (JFM, BSV)
|
||||||
|
SCR = (JDN, QRS)
|
||||||
|
GMK = (FPF, CTM)
|
||||||
|
KXM = (PDJ, MFX)
|
||||||
|
DKQ = (GCL, QFN)
|
||||||
|
DJR = (FGV, PSV)
|
||||||
|
GQX = (DFL, LQF)
|
||||||
|
PTK = (TRS, TMC)
|
||||||
|
BLK = (GGK, GBF)
|
||||||
|
RSD = (XDG, SFV)
|
||||||
|
SVT = (PXV, XCL)
|
||||||
|
XFT = (BJJ, FRH)
|
||||||
|
LSR = (XPV, QFP)
|
||||||
|
BCP = (NMB, NXM)
|
||||||
|
KGP = (RDT, FNB)
|
||||||
|
DHF = (PNN, GLH)
|
||||||
|
JHH = (NXD, NFK)
|
||||||
|
DGP = (GKX, SMX)
|
||||||
|
KSK = (DKP, RXT)
|
||||||
|
KRM = (PQM, DCK)
|
||||||
|
XJX = (QNB, PSJ)
|
||||||
|
JKK = (DJR, DHQ)
|
||||||
|
CFK = (DGN, TMH)
|
||||||
|
PSS = (HNP, STL)
|
||||||
|
MFR = (PMR, RJS)
|
||||||
|
JNG = (TQQ, HXB)
|
||||||
|
MDG = (VCC, HTF)
|
||||||
|
VCC = (DGM, MKH)
|
||||||
|
TQQ = (FCQ, SCR)
|
||||||
|
DMK = (GXD, GFF)
|
||||||
|
GHV = (DTD, SHS)
|
||||||
|
HLP = (NNH, TQN)
|
||||||
|
BGK = (QHJ, BQX)
|
||||||
|
VKN = (DPT, FNG)
|
||||||
|
STL = (DPP, NMX)
|
||||||
|
QFS = (MGR, BGM)
|
||||||
|
HSC = (DHR, HDT)
|
||||||
|
FPQ = (NSL, RQN)
|
||||||
|
QMM = (CDJ, FBP)
|
||||||
|
PDL = (XFR, QCG)
|
||||||
|
PDJ = (GLP, RPN)
|
||||||
|
FSD = (VFS, BGX)
|
||||||
|
MPT = (DKQ, RSQ)
|
||||||
|
MHQ = (NTL, TKG)
|
||||||
|
MPC = (NQJ, NQJ)
|
||||||
|
DST = (TRS, TMC)
|
||||||
|
KHD = (CLX, CLX)
|
||||||
|
BNT = (MFR, CJP)
|
||||||
|
VJD = (GPS, CVG)
|
||||||
|
DLG = (JCS, XRG)
|
||||||
|
MCD = (CHH, DVM)
|
||||||
|
VSG = (XPR, TVQ)
|
||||||
|
MSX = (VQR, KXQ)
|
||||||
|
VMV = (VQR, KXQ)
|
||||||
|
QCG = (NHJ, NMH)
|
||||||
|
RPN = (XNC, XDM)
|
||||||
|
NVG = (RSC, RSC)
|
||||||
|
GDT = (LDC, QPT)
|
||||||
|
GMX = (RJX, VRM)
|
||||||
|
RDL = (MBH, NTF)
|
||||||
|
XXM = (JSC, MHQ)
|
||||||
|
SRF = (BGK, NQF)
|
||||||
|
XNM = (SGJ, XCJ)
|
||||||
|
RPT = (LPM, BMP)
|
||||||
|
GPT = (SFV, XDG)
|
||||||
|
JCB = (BFL, XCM)
|
||||||
|
QKQ = (FRL, GGT)
|
||||||
|
MTQ = (LQB, XPG)
|
||||||
|
CHG = (QPT, LDC)
|
||||||
|
FMS = (FJX, GMX)
|
||||||
|
MBV = (LXS, TTR)
|
||||||
|
JFP = (XPN, TDV)
|
||||||
|
JFJ = (HNP, STL)
|
||||||
|
GKF = (RDK, XRT)
|
||||||
|
LDK = (QCT, TVX)
|
||||||
|
CLX = (RVH, HLV)
|
||||||
|
TXQ = (DFR, KQF)
|
||||||
|
XGH = (MBX, JLC)
|
||||||
|
KFB = (SHV, MRV)
|
||||||
|
RSV = (GSX, TPK)
|
||||||
|
NKR = (KFB, TFN)
|
||||||
|
FCQ = (JDN, QRS)
|
||||||
|
RQN = (TLC, GFQ)
|
||||||
|
FSN = (FSB, KSS)
|
||||||
|
QDQ = (VBQ, GSM)
|
||||||
|
FFC = (DKC, DMK)
|
||||||
|
KBC = (BHQ, TRP)
|
||||||
|
PHB = (VCC, HTF)
|
||||||
|
GBH = (FFC, CGL)
|
||||||
|
TTR = (KBV, LJP)
|
||||||
|
MRB = (DHG, QNF)
|
||||||
|
SDL = (PSS, JFJ)
|
||||||
|
TMC = (BXK, RSV)
|
||||||
|
LXT = (GGB, MDT)
|
||||||
|
LQB = (BNT, VKM)
|
||||||
|
RXT = (GBH, SSD)
|
||||||
|
SSN = (CRH, XTP)
|
||||||
|
MRV = (SRM, DVJ)
|
||||||
|
FJX = (RJX, VRM)
|
||||||
|
FQB = (MNF, GHF)
|
||||||
|
DKC = (GFF, GXD)
|
||||||
|
MGQ = (LDK, RVG)
|
||||||
|
DLK = (FPF, CTM)
|
||||||
|
FHN = (HKK, BVF)
|
||||||
|
BFL = (LJG, XQM)
|
||||||
|
PKP = (VVV, MDV)
|
||||||
|
QHJ = (QKQ, NSG)
|
||||||
|
BCQ = (HPB, FKS)
|
||||||
|
LDG = (VMV, MSX)
|
||||||
|
BFH = (RXT, DKP)
|
||||||
|
XPB = (JFS, PDL)
|
||||||
|
HDX = (PTK, DST)
|
||||||
|
NQF = (BQX, QHJ)
|
||||||
|
DPT = (TQS, HHM)
|
||||||
|
DCK = (TTX, RMM)
|
||||||
|
NPC = (KGP, QJG)
|
||||||
|
BCD = (NXB, RXK)
|
||||||
|
HDT = (HPM, FTQ)
|
||||||
|
FHD = (XNK, DHM)
|
||||||
|
NNS = (XFD, MBT)
|
||||||
|
GSX = (VRG, KJV)
|
||||||
|
BXG = (BFH, KSK)
|
||||||
|
VVB = (QDQ, JXC)
|
||||||
|
NVF = (HNH, SNN)
|
||||||
|
KRB = (JBH, JNJ)
|
||||||
|
FXX = (GCR, MXK)
|
||||||
|
JXQ = (LDM, PKV)
|
||||||
|
MTT = (DLG, GFD)
|
||||||
|
HXR = (VCH, SMV)
|
||||||
|
MNM = (SPQ, PNP)
|
||||||
|
QJG = (RDT, FNB)
|
||||||
|
JLS = (KRM, LBQ)
|
||||||
|
CJK = (TJB, VDD)
|
||||||
|
TXT = (RHP, NSS)
|
||||||
|
FXT = (JMS, BCQ)
|
||||||
|
NSS = (LRX, RXF)
|
||||||
|
VJQ = (RSC, MXR)
|
||||||
|
XXH = (LNN, NKR)
|
||||||
|
NSL = (GFQ, TLC)
|
||||||
|
XSM = (GXG, JNH)
|
||||||
|
HFM = (TCV, GQX)
|
||||||
|
JGC = (NDL, JPM)
|
||||||
|
HGQ = (GPT, RSD)
|
||||||
|
CHL = (SQQ, NHM)
|
||||||
|
VBK = (GKG, XTS)
|
||||||
|
MBT = (HXR, JVH)
|
||||||
|
FNJ = (SXD, QRB)
|
||||||
|
JBH = (HCT, SGG)
|
||||||
|
JRP = (FXP, VKN)
|
||||||
|
VRM = (MPC, GQP)
|
||||||
|
BBP = (JCL, LDF)
|
||||||
|
GXH = (RXM, VHK)
|
||||||
|
MXR = (JCB, TNZ)
|
||||||
|
BSD = (CCP, GBD)
|
||||||
|
QFN = (MPL, KDP)
|
||||||
|
LNN = (TFN, KFB)
|
||||||
|
SQQ = (BLM, XQD)
|
||||||
|
MJT = (XNK, DHM)
|
||||||
|
GSH = (JGC, PHP)
|
||||||
|
PQT = (JXC, QDQ)
|
||||||
|
RVG = (QCT, TVX)
|
||||||
|
DHG = (PCM, XPB)
|
||||||
|
LKJ = (HQP, HHG)
|
||||||
|
XHB = (SJL, DMX)
|
||||||
|
GKG = (HFB, NDJ)
|
||||||
|
PGB = (BPQ, CSM)
|
||||||
|
VBQ = (CVS, QHF)
|
||||||
|
JXC = (GSM, VBQ)
|
||||||
|
QCK = (SDL, NMQ)
|
||||||
|
PFN = (NNS, GLR)
|
||||||
|
RXK = (LHN, HRD)
|
||||||
|
BVX = (GMK, DLK)
|
||||||
|
LPF = (MMV, LQK)
|
||||||
|
SMM = (SFJ, KGR)
|
||||||
|
SJL = (SST, GSH)
|
||||||
|
HMC = (MDT, GGB)
|
||||||
|
VQF = (CLF, HSC)
|
||||||
|
NRX = (RQN, NSL)
|
||||||
|
CBR = (JRP, BGF)
|
||||||
|
JLC = (KJM, XFN)
|
||||||
|
TMD = (SPQ, PNP)
|
||||||
|
HXB = (FCQ, SCR)
|
||||||
|
SBQ = (SQV, NCH)
|
||||||
|
LGT = (MGB, XXH)
|
||||||
|
HSF = (TJB, VDD)
|
||||||
|
JBS = (MGQ, NVQ)
|
||||||
|
DKP = (SSD, GBH)
|
||||||
|
HSQ = (SVT, LKV)
|
||||||
|
GPC = (HVM, TGC)
|
||||||
|
TVV = (DLT, CMJ)
|
||||||
|
BHG = (TGC, HVM)
|
||||||
|
CGR = (LDN, FXT)
|
||||||
|
PFH = (GQJ, GQJ)
|
||||||
|
FCM = (JKK, CMV)
|
||||||
|
RRM = (KJP, BMM)
|
||||||
|
FCG = (MDG, PHB)
|
||||||
|
MCS = (HLP, DNV)
|
||||||
|
BXK = (GSX, TPK)
|
||||||
|
VQK = (HJS, GMC)
|
||||||
|
LDH = (XPR, TVQ)
|
||||||
|
DXN = (GMK, DLK)
|
||||||
|
GFQ = (RQB, JFP)
|
||||||
|
PKK = (BBP, BDS)
|
||||||
|
BBR = (FXT, LDN)
|
||||||
|
BJQ = (KHD, KHD)
|
||||||
|
RCG = (MXS, VXH)
|
||||||
|
HPM = (KJF, CXF)
|
||||||
|
QJX = (CDV, RQK)
|
||||||
|
NMB = (RKC, GVD)
|
||||||
|
JCL = (KRB, NXC)
|
||||||
|
GXM = (BBR, CGR)
|
||||||
|
NMX = (XNX, SQP)
|
||||||
|
NXM = (RKC, GVD)
|
||||||
|
QMT = (MDG, PHB)
|
||||||
|
DMV = (LTG, SBQ)
|
||||||
|
FTQ = (KJF, CXF)
|
||||||
|
TCV = (DFL, LQF)
|
||||||
|
MFJ = (TXQ, THG)
|
||||||
|
VKP = (FNJ, GVR)
|
||||||
|
XQD = (CSG, KKQ)
|
||||||
|
SRM = (VHD, XNM)
|
||||||
|
SLG = (LRJ, JFL)
|
||||||
|
JCS = (CQP, CXD)
|
||||||
|
LJP = (MCQ, MCS)
|
||||||
|
NBF = (FCC, VJD)
|
||||||
|
DFL = (KDR, GFC)
|
||||||
|
NFM = (XBN, BXG)
|
||||||
|
CMR = (PKG, PKG)
|
||||||
|
JVN = (XHB, MCC)
|
||||||
|
RKC = (FSQ, MFD)
|
||||||
|
JKJ = (BSQ, LJB)
|
||||||
|
BGX = (MMD, FMS)
|
||||||
|
THG = (KQF, DFR)
|
||||||
|
RKJ = (CVN, FFK)
|
||||||
|
LQK = (CHS, FXX)
|
||||||
|
CPL = (VXL, KCF)
|
||||||
|
JSC = (TKG, NTL)
|
||||||
|
DNV = (TQN, NNH)
|
||||||
|
LFF = (HQJ, NPC)
|
||||||
|
TVQ = (SSF, GXM)
|
||||||
|
NQR = (LCQ, GRV)
|
||||||
|
TMN = (BXL, CCD)
|
||||||
|
XDM = (KXS, JLS)
|
||||||
|
CJP = (RJS, PMR)
|
||||||
|
HKV = (NMB, NXM)
|
||||||
|
SPQ = (SNC, LPF)
|
||||||
|
HQJ = (KGP, QJG)
|
||||||
|
GXG = (JMC, GVV)
|
||||||
|
KSS = (CND, PPQ)
|
||||||
|
LJG = (DTM, GXH)
|
||||||
|
BHQ = (HMC, LXT)
|
||||||
|
FGV = (KXX, LLR)
|
||||||
|
KCF = (LKJ, NTJ)
|
||||||
|
PRM = (MFX, PDJ)
|
||||||
|
QKD = (FXL, SQL)
|
||||||
|
DDB = (CSB, MCD)
|
||||||
|
VHH = (CMR, CGD)
|
||||||
|
LLM = (BVX, DXN)
|
||||||
|
PTN = (RSQ, DKQ)
|
||||||
|
GSM = (CVS, QHF)
|
||||||
|
CVN = (VHS, LDG)
|
||||||
|
RHT = (LRJ, JFL)
|
||||||
|
JFK = (JSC, MHQ)
|
||||||
|
NTS = (QFS, GQR)
|
||||||
|
TQN = (DHF, BTV)
|
||||||
|
KHG = (BGK, NQF)
|
||||||
|
ZZZ = (FXC, VQF)
|
||||||
|
VXL = (NTJ, LKJ)
|
||||||
|
VFS = (MMD, FMS)
|
||||||
|
LBQ = (PQM, DCK)
|
||||||
|
KQX = (CSB, MCD)
|
||||||
|
FDK = (XFT, PKM)
|
||||||
|
NQG = (GQR, QFS)
|
||||||
|
KXS = (LBQ, KRM)
|
||||||
|
JDN = (HDL, CCB)
|
||||||
|
TKL = (HSF, CJK)
|
||||||
|
XRG = (CQP, CXD)
|
||||||
|
BMP = (RCG, RHG)
|
||||||
|
KQF = (KGK, LGN)
|
||||||
|
HLK = (MTT, PFT)
|
||||||
|
NFK = (MRS, CNV)
|
||||||
|
HNH = (MFJ, NGM)
|
||||||
|
FKN = (SVT, LKV)
|
||||||
|
VPC = (PJC, NBF)
|
||||||
|
DDK = (SVS, QKD)
|
||||||
|
DCJ = (RPR, CVJ)
|
||||||
|
NQJ = (CMR, CMR)
|
||||||
|
LGL = (PFH, PFH)
|
||||||
|
RTD = (CDQ, LJV)
|
||||||
|
FVJ = (FJN, GHV)
|
||||||
|
BDS = (LDF, JCL)
|
||||||
|
NSG = (GGT, FRL)
|
||||||
|
RXM = (DDN, TXT)
|
||||||
|
JNJ = (SGG, HCT)
|
||||||
|
SRG = (DLX, CHL)
|
||||||
|
TGC = (FMG, FHN)
|
||||||
|
FMG = (BVF, HKK)
|
||||||
|
NTJ = (HHG, HQP)
|
||||||
|
KNJ = (HJS, GMC)
|
||||||
|
QJB = (CCP, GBD)
|
||||||
|
NXL = (SMX, GKX)
|
||||||
|
VHS = (MSX, VMV)
|
||||||
|
CRH = (BQQ, VPC)
|
||||||
|
GFF = (JFM, BSV)
|
||||||
|
GLR = (XFD, MBT)
|
||||||
|
XPR = (GXM, SSF)
|
||||||
|
LLD = (BLL, NKV)
|
||||||
|
KXQ = (FDK, RLB)
|
||||||
|
MXH = (TQQ, HXB)
|
||||||
|
RQD = (DGN, TMH)
|
||||||
|
FNB = (NVG, VJQ)
|
||||||
|
MGH = (KHD, JXB)
|
||||||
|
JGL = (BMM, KJP)
|
||||||
|
KJF = (SCV, PHF)
|
||||||
|
SXD = (BCG, HRR)
|
||||||
|
TPK = (KJV, VRG)
|
||||||
|
TJP = (FBP, CDJ)
|
||||||
|
MKH = (KXM, PRM)
|
||||||
|
HJM = (SKT, QLK)
|
||||||
|
GHP = (RFL, KBC)
|
||||||
|
LGN = (TJP, QMM)
|
||||||
|
LJV = (JLV, LLD)
|
||||||
|
NXD = (CNV, MRS)
|
||||||
|
LKH = (LLM, BNK)
|
||||||
|
CTM = (MPT, PTN)
|
||||||
|
SNC = (LQK, MMV)
|
||||||
|
PNQ = (XXH, MGB)
|
||||||
|
FMX = (BSD, QJB)
|
||||||
|
QQL = (HHH, SSN)
|
||||||
|
QLK = (FCM, MRC)
|
||||||
|
CMJ = (JGH, SFD)
|
||||||
|
FHB = (BNK, LLM)
|
||||||
|
TKG = (FQB, THH)
|
||||||
|
XPV = (DGP, NXL)
|
||||||
|
RHP = (LRX, RXF)
|
||||||
|
BRQ = (LBN, DMV)
|
||||||
|
NDL = (XMS, CVR)
|
||||||
|
LDC = (PFN, QFL)
|
||||||
|
DPP = (XNX, XNX)
|
||||||
|
NMQ = (PSS, JFJ)
|
||||||
|
SGG = (PQT, VVB)
|
||||||
|
FSR = (RPT, PVF)
|
||||||
|
AAA = (VQF, FXC)
|
||||||
|
JFL = (BJB, NFM)
|
||||||
|
XFR = (NHJ, NMH)
|
||||||
|
HHS = (SFJ, KGR)
|
||||||
|
MLZ = (RSD, GPT)
|
||||||
|
MNF = (VNG, TGQ)
|
||||||
|
FXP = (DPT, FNG)
|
||||||
|
MRS = (SDP, NQR)
|
||||||
|
MDT = (JGL, RRM)
|
||||||
|
MJJ = (GKG, XTS)
|
||||||
|
PFT = (GFD, DLG)
|
||||||
|
TVX = (BCD, NJG)
|
||||||
|
NPA = (VKP, KSN)
|
||||||
|
TDV = (LDH, VSG)
|
||||||
|
GQJ = (PDM, PDM)
|
||||||
|
NTF = (GKF, RHX)
|
||||||
|
GGT = (KQX, DDB)
|
||||||
|
LFN = (TFS, MRB)
|
||||||
|
CSM = (MJT, FHD)
|
||||||
|
NVQ = (RVG, LDK)
|
||||||
|
PKM = (FRH, BJJ)
|
||||||
|
PDM = (BRQ, XPL)
|
||||||
|
JGH = (BHC, QQL)
|
||||||
|
SSF = (CGR, BBR)
|
||||||
|
GVV = (CGH, RBG)
|
||||||
|
FSB = (PPQ, CND)
|
||||||
|
LKV = (XCL, PXV)
|
||||||
|
MXK = (SLH, PKK)
|
||||||
|
SQL = (XRX, MBV)
|
||||||
|
LRJ = (BJB, NFM)
|
||||||
|
VXH = (LFF, XQC)
|
||||||
|
HTF = (MKH, DGM)
|
||||||
|
CTB = (LGL, KCR)
|
||||||
|
HFB = (RTL, GCQ)
|
||||||
|
NTL = (FQB, THH)
|
||||||
|
SFD = (QQL, BHC)
|
||||||
|
HNP = (DPP, DPP)
|
||||||
|
TTX = (RQD, CFK)
|
||||||
|
MCQ = (HLP, DNV)
|
||||||
|
CCP = (VMR, KJG)
|
||||||
|
TFN = (MRV, SHV)
|
||||||
|
JKB = (PDM, RFZ)
|
||||||
|
TGQ = (BJV, HDX)
|
||||||
|
PHP = (JPM, NDL)
|
||||||
|
RJX = (MPC, GQP)
|
||||||
|
CVJ = (LFL, KLG)
|
||||||
|
KJP = (DDK, XSK)
|
||||||
|
QPF = (HSF, CJK)
|
||||||
|
SNQ = (XPG, LQB)
|
||||||
|
BGF = (VKN, FXP)
|
||||||
|
KLG = (TMN, JCG)
|
||||||
|
CGL = (DMK, DKC)
|
||||||
|
XCM = (XQM, LJG)
|
||||||
|
RPR = (LFL, KLG)
|
||||||
|
LFQ = (KBF, SRB)
|
||||||
|
RJS = (CHQ, GNH)
|
||||||
|
HDL = (KPR, QCK)
|
||||||
|
FXJ = (MCC, XHB)
|
||||||
|
XPG = (VKM, BNT)
|
||||||
|
DHQ = (FGV, PSV)
|
||||||
|
SQV = (QMT, FCG)
|
||||||
|
DHR = (FTQ, HPM)
|
||||||
|
FCC = (GPS, CVG)
|
||||||
|
NCH = (FCG, QMT)
|
||||||
|
QRS = (HDL, CCB)
|
||||||
|
XQM = (GXH, DTM)
|
||||||
|
SGJ = (TSH, DCJ)
|
||||||
|
KBL = (RFL, KBC)
|
||||||
|
NXC = (JBH, JNJ)
|
||||||
|
BSQ = (QJT, FVJ)
|
||||||
|
LTG = (NCH, SQV)
|
||||||
|
SMV = (JBS, MDQ)
|
||||||
|
GJJ = (MBH, NTF)
|
||||||
|
GRV = (MPF, NDP)
|
||||||
|
HPB = (RLJ, CBR)
|
||||||
|
TRS = (BXK, RSV)
|
||||||
|
GCR = (SLH, PKK)
|
||||||
|
HHH = (CRH, XTP)
|
||||||
|
GNH = (XSM, HMD)
|
||||||
|
RSQ = (QFN, GCL)
|
||||||
|
HKK = (QJX, FKK)
|
||||||
|
JBV = (TNK, TNK)
|
||||||
|
TFS = (DHG, QNF)
|
||||||
|
RTL = (FKB, XGH)
|
||||||
|
HHG = (XPT, JXQ)
|
||||||
|
PPR = (LHL, CTB)
|
||||||
|
SQP = (HGQ, MLZ)
|
||||||
|
XBN = (BFH, KSK)
|
||||||
|
CVR = (MDB, PKP)
|
||||||
|
RFL = (BHQ, TRP)
|
||||||
|
QHX = (FSR, NTN)
|
||||||
|
VCH = (MDQ, JBS)
|
||||||
|
GCL = (MPL, KDP)
|
||||||
|
KKQ = (GGJ, JHH)
|
||||||
|
GFC = (PRX, LNL)
|
||||||
|
PRD = (HTS, RNP)
|
||||||
|
GQP = (NQJ, VHH)
|
||||||
|
LJC = (VQK, KNJ)
|
||||||
|
QCT = (BCD, NJG)
|
||||||
|
KBF = (SRG, GSF)
|
||||||
|
NNH = (BTV, DHF)
|
||||||
|
SSD = (CGL, FFC)
|
||||||
|
VDD = (HKV, BCP)
|
||||||
|
VHD = (XCJ, SGJ)
|
||||||
|
RFZ = (XPL, BRQ)
|
||||||
|
KGR = (LFT, QDM)
|
||||||
|
MDQ = (NVQ, MGQ)
|
||||||
|
MXS = (LFF, XQC)
|
||||||
|
PCC = (LHL, CTB)
|
||||||
|
TLC = (RQB, JFP)
|
||||||
|
CVS = (PJP, QHX)
|
||||||
|
BNK = (DXN, BVX)
|
||||||
|
CSB = (CHH, DVM)
|
||||||
|
XPN = (VSG, LDH)
|
||||||
|
XSK = (SVS, QKD)
|
||||||
|
LBN = (LTG, SBQ)
|
||||||
|
FKK = (RQK, CDV)
|
||||||
|
MCC = (SJL, DMX)
|
||||||
|
NMH = (DSX, NNM)
|
||||||
|
MMD = (GMX, FJX)
|
||||||
|
LXS = (LJP, KBV)
|
||||||
|
XMR = (QJB, BSD)
|
||||||
|
DFR = (KGK, LGN)
|
||||||
|
DJG = (PFT, MTT)
|
||||||
|
CGH = (DGK, LFQ)
|
||||||
|
MRM = (BSQ, LJB)
|
||||||
|
XCL = (MJJ, VBK)
|
||||||
|
GBF = (JNG, MXH)
|
||||||
|
XGN = (FFK, CVN)
|
||||||
39
advent_of_code_2023/day8/main1.rs
Normal file
39
advent_of_code_2023/day8/main1.rs
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
use std::{fs::read_to_string, collections::HashMap};
|
||||||
|
|
||||||
|
fn parse_input() -> (String, HashMap<String, (String, String)>) {
|
||||||
|
let lines = read_to_string("input.txt").unwrap().lines().map(|line| {
|
||||||
|
String::from(line)
|
||||||
|
}).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let instr = lines[0].trim();
|
||||||
|
let mut mapping: HashMap<String, (String, String)> = HashMap::new();
|
||||||
|
|
||||||
|
for line in &lines[2..] {
|
||||||
|
let (key, instructions) = line.split_once('=').unwrap();
|
||||||
|
let (left, right) = instructions.trim().split_once(' ').unwrap();
|
||||||
|
mapping.insert(String::from(key.trim()), (String::from(&left[1..4]), String::from(&right[..3])));
|
||||||
|
}
|
||||||
|
|
||||||
|
(String::from(instr), mapping)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let (instructions, mapping) = parse_input();
|
||||||
|
|
||||||
|
let mut position = String::from("AAA");
|
||||||
|
let mut steps = 0;
|
||||||
|
let mut caret = 0;
|
||||||
|
|
||||||
|
loop {
|
||||||
|
if position == "ZZZ" {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
position = if instructions.as_bytes()[caret] == b'L' { mapping[&position].0.clone() } else {mapping[&position].1.clone() };
|
||||||
|
caret = if caret + 1 == instructions.len() { 0 } else { caret + 1 };
|
||||||
|
steps += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Number of steps taken: {}", steps);
|
||||||
|
|
||||||
|
}
|
||||||
86
advent_of_code_2023/day8/main2.rs
Normal file
86
advent_of_code_2023/day8/main2.rs
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
use std::{fs::read_to_string, collections::HashMap};
|
||||||
|
|
||||||
|
struct Route {
|
||||||
|
offset: usize,
|
||||||
|
loop_length: usize,
|
||||||
|
current: usize
|
||||||
|
}
|
||||||
|
|
||||||
|
// copied from https://www.hackertouch.com/least-common-multiple-in-rust.html
|
||||||
|
fn lcm(first: usize, second: usize) -> usize {
|
||||||
|
first * second / gcd(first, second)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn gcd(first: usize, second: usize) -> usize {
|
||||||
|
let mut max = first;
|
||||||
|
let mut min = second;
|
||||||
|
if min > max {
|
||||||
|
let val = max;
|
||||||
|
max = min;
|
||||||
|
min = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
loop {
|
||||||
|
let res = max % min;
|
||||||
|
if res == 0 {
|
||||||
|
return min;
|
||||||
|
}
|
||||||
|
|
||||||
|
max = min;
|
||||||
|
min = res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_input() -> (String, HashMap<String, (String, String)>) {
|
||||||
|
let lines = read_to_string("input.txt").unwrap().lines().map(|line| {
|
||||||
|
String::from(line)
|
||||||
|
}).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let instr = lines[0].trim();
|
||||||
|
let mut mapping: HashMap<String, (String, String)> = HashMap::new();
|
||||||
|
|
||||||
|
for line in &lines[2..] {
|
||||||
|
let (key, instructions) = line.split_once('=').unwrap();
|
||||||
|
let (left, right) = instructions.trim().split_once(' ').unwrap();
|
||||||
|
mapping.insert(String::from(key.trim()), (String::from(&left[1..4]), String::from(&right[..3])));
|
||||||
|
}
|
||||||
|
|
||||||
|
(String::from(instr), mapping)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn find_route(start: String, instructions: &String, mapping: &HashMap<String, (String, String)>) -> usize {
|
||||||
|
let mut caret = 0;
|
||||||
|
let mut step = 0;
|
||||||
|
let mut position = start.clone();
|
||||||
|
loop {
|
||||||
|
position = if instructions.as_bytes()[caret] == b'L' { mapping[&position].0.clone() } else { mapping[&position].1.clone() };
|
||||||
|
step += 1;
|
||||||
|
caret = if caret + 1 == instructions.len() { 0 } else { caret + 1 };
|
||||||
|
|
||||||
|
if position.ends_with('Z') {
|
||||||
|
return step;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let (instructions, mapping) = parse_input();
|
||||||
|
|
||||||
|
let positions = mapping.keys().filter(|key| {
|
||||||
|
key.ends_with('A')
|
||||||
|
}).map(|string| String::from(string)).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
println!("{:?}", positions);
|
||||||
|
|
||||||
|
let routes = positions.iter().map(|start| {
|
||||||
|
find_route(start.clone(), &instructions, &mapping)
|
||||||
|
}).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let mut steps = 1;
|
||||||
|
for route in routes {
|
||||||
|
steps = lcm(steps, route);
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Number of steps taken: {}", steps);
|
||||||
|
|
||||||
|
}
|
||||||
200
advent_of_code_2023/day9/input.txt
Normal file
200
advent_of_code_2023/day9/input.txt
Normal file
|
|
@ -0,0 +1,200 @@
|
||||||
|
23 34 50 94 210 482 1077 2327 4864 9829 19209 36438 67557 123497 224466 408029 743317 1354940 2461668 4436846 7899892
|
||||||
|
7 9 15 26 43 67 99 140 191 253 327 414 515 631 763 912 1079 1265 1471 1698 1947
|
||||||
|
12 32 74 154 291 503 814 1298 2210 4286 9343 21393 48633 106944 226041 460406 909128 1752848 3324280 6245160 11693791
|
||||||
|
5 18 46 106 235 508 1066 2167 4287 8327 16052 31043 60763 120970 244922 502099 1035401 2133556 4369562 8861092 17752611
|
||||||
|
27 50 81 131 223 400 743 1399 2619 4806 8573 14811 24767 40132 63139 96671 144379 210810 301545 423347 584319
|
||||||
|
7 20 53 118 222 367 553 793 1158 1879 3542 7421 16003 33768 68296 131782 243049 430158 733723 1211048 1941212
|
||||||
|
7 5 12 34 74 135 240 495 1245 3405 9085 22675 52646 114551 236281 467922 901195 1708405 3219482 6070032 11475986
|
||||||
|
5 13 33 65 109 165 233 313 405 509 625 753 893 1045 1209 1385 1573 1773 1985 2209 2445
|
||||||
|
8 -2 -17 -37 -52 -23 148 661 1876 4388 9121 17443 31304 53399 87358 137965 211408 315562 460307 657883 923284
|
||||||
|
15 21 44 102 223 460 922 1844 3736 7677 15877 32763 67136 136539 276119 556377 1117965 2238201 4454922 8791220 17153221
|
||||||
|
3 16 34 67 142 305 618 1152 1977 3157 4788 7200 11632 22063 49558 121622 300847 719834 1643270 3573485 7423202
|
||||||
|
11 17 36 88 213 494 1087 2251 4375 8024 14095 24327 42724 79084 157087 331858 726650 1607251 3529578 7627561 16167592
|
||||||
|
-1 0 21 78 198 427 846 1608 3017 5678 10763 20486 39010 74316 142220 275028 539771 1075368 2165681 4378150 8818318
|
||||||
|
18 22 38 82 181 381 753 1405 2517 4425 7789 13889 25102 45622 82494 147042 256780 437904 728472 1182388 1874315
|
||||||
|
0 1 21 81 210 445 831 1421 2276 3465 5065 7161 9846 13221 17395 22485 28616 35921 44541 54625 66330
|
||||||
|
9 27 58 113 216 424 873 1870 4069 8807 18742 39037 79480 158128 307321 583238 1080569 1954363 3451690 5956433 10051312
|
||||||
|
0 15 43 82 139 256 556 1322 3137 7150 15616 33032 68536 140880 288411 588317 1192156 2388619 4709831 9104648 17212191
|
||||||
|
4 2 12 55 158 353 677 1181 1958 3197 5262 8782 14720 24366 39171 60306 87792 119004 146304 153505 110810
|
||||||
|
6 21 45 69 80 61 -9 -155 -406 -795 -1359 -2139 -3180 -4531 -6245 -8379 -10994 -14155 -17931 -22395 -27624
|
||||||
|
19 32 45 58 71 84 97 110 123 136 149 162 175 188 201 214 227 240 253 266 279
|
||||||
|
10 13 24 50 101 199 404 873 1976 4501 9988 21240 43067 83327 154336 274727 471846 784781 1268128 1996606 3070641
|
||||||
|
0 3 7 18 51 129 282 546 962 1575 2433 3586 5085 6981 9324 12162 15540 19499 24075 29298 35191
|
||||||
|
17 31 45 59 73 87 101 115 129 143 157 171 185 199 213 227 241 255 269 283 297
|
||||||
|
8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48
|
||||||
|
1 10 39 114 273 568 1066 1847 3012 4748 7561 12914 24758 52917 120106 275652 620853 1353401 2841486 5742580 11189623
|
||||||
|
14 17 17 14 8 -1 -13 -28 -46 -67 -91 -118 -148 -181 -217 -256 -298 -343 -391 -442 -496
|
||||||
|
10 18 23 25 24 20 13 3 -10 -26 -45 -67 -92 -120 -151 -185 -222 -262 -305 -351 -400
|
||||||
|
7 21 35 40 27 5 46 380 1577 4877 12782 30145 66241 138771 281571 559245 1094594 2119788 4072116 7774237 14774706
|
||||||
|
16 23 49 115 254 527 1061 2136 4362 9015 18660 38309 77606 155029 306115 599783 1171024 2286635 4477211 8800303 17358594
|
||||||
|
6 12 17 21 24 26 27 27 26 24 21 17 12 6 -1 -9 -18 -28 -39 -51 -64
|
||||||
|
8 13 38 102 241 526 1092 2186 4257 8134 15369 28861 53924 100017 183417 331187 586870 1018427 1729032 2871440 4666755
|
||||||
|
18 30 55 98 178 340 676 1361 2711 5278 10014 18564 33789 60676 107865 190115 332144 574414 981593 1654614 2747468
|
||||||
|
18 20 21 22 34 89 257 674 1586 3414 6845 12954 23362 40435 67529 109286 171986 263960 396069 582254 840162
|
||||||
|
20 35 60 100 175 341 727 1591 3407 7019 13956 27133 52437 102235 202842 409760 837515 1715946 3493279 7021299 13886128
|
||||||
|
15 25 44 79 155 343 810 1895 4220 8855 17578 33324 61032 109319 193790 343400 612197 1100085 1988056 3595765 6472489
|
||||||
|
19 38 71 118 179 254 343 446 563 694 839 998 1171 1358 1559 1774 2003 2246 2503 2774 3059
|
||||||
|
10 24 49 99 199 402 824 1713 3579 7433 15232 30745 61319 121575 241175 481021 966676 1956580 3979811 8111053 16511955
|
||||||
|
19 31 57 103 175 279 421 607 843 1135 1489 1911 2407 2983 3645 4399 5251 6207 7273 8455 9759
|
||||||
|
0 -1 4 24 87 253 640 1478 3206 6627 13136 25036 45957 81393 139372 231274 372812 585191 896460 1343072 1971667
|
||||||
|
10 36 75 127 192 270 361 465 582 712 855 1011 1180 1362 1557 1765 1986 2220 2467 2727 3000
|
||||||
|
-6 -5 -2 12 69 245 687 1656 3603 7306 14121 26447 48580 88239 159197 285682 509691 903614 1594019 2811443 5002638
|
||||||
|
-1 -1 0 4 21 82 254 660 1510 3152 6155 11439 20470 35541 60163 99593 161529 257005 401522 616454 930771
|
||||||
|
14 21 40 91 194 361 591 871 1192 1618 2508 5092 12744 33476 84391 199070 439114 911299 1792008 3360753 6044662
|
||||||
|
11 22 47 97 194 371 672 1152 1877 2924 4381 6347 8932 12257 16454 21666 28047 35762 44987 55909 68726
|
||||||
|
1 -6 -20 -31 -5 141 579 1630 3858 8230 16404 31252 57788 104755 187233 330765 577663 996354 1694860 2839779 4682449
|
||||||
|
7 8 10 20 45 88 156 295 667 1684 4214 9874 21425 43284 82168 147885 254287 420400 671746 1041872 1574101
|
||||||
|
20 40 65 95 130 170 215 265 320 380 445 515 590 670 755 845 940 1040 1145 1255 1370
|
||||||
|
21 31 40 48 53 57 85 218 635 1647 3701 7367 13449 23654 42799 84428 183024 417769 955047 2119794 4510308
|
||||||
|
6 25 58 105 166 241 330 433 550 681 826 985 1158 1345 1546 1761 1990 2233 2490 2761 3046
|
||||||
|
19 34 70 153 321 623 1112 1827 2763 3834 4847 5535 5753 6022 8685 19939 52788 130387 288488 576099 1059512
|
||||||
|
0 -7 -16 -22 -9 59 247 658 1442 2805 5018 8426 13457 20631 30569 44002 61780 84881 114420 151658 198011
|
||||||
|
8 10 17 34 73 164 376 847 1827 3757 7444 14462 28051 55078 110200 224438 462238 954184 1957407 3963142 7881761
|
||||||
|
20 34 57 89 130 180 239 307 384 470 565 669 782 904 1035 1175 1324 1482 1649 1825 2010
|
||||||
|
3 4 9 17 27 38 49 59 67 72 73 69 59 42 17 -17 -61 -116 -183 -263 -357
|
||||||
|
-3 -3 4 30 91 219 486 1046 2204 4519 8951 17097 31687 57858 106570 203428 410155 873797 1933322 4339084 9684335
|
||||||
|
10 25 40 55 70 85 100 115 130 145 160 175 190 205 220 235 250 265 280 295 310
|
||||||
|
-4 7 33 80 157 272 422 571 607 266 -992 -4173 -11026 -24431 -48925 -91396 -161978 -275183 -451309 -718166 -1113165
|
||||||
|
8 16 39 93 198 378 661 1079 1668 2468 3523 4881 6594 8718 11313 14443 18176 22584 27743 33733 40638
|
||||||
|
3 7 20 59 156 383 906 2082 4613 9771 19708 37865 69494 122307 207266 339528 539559 834431 1259316 1859191 2690768
|
||||||
|
9 30 55 79 102 142 254 566 1367 3319 7914 18366 41259 89580 188492 386780 780041 1557464 3094013 6126141 12074720
|
||||||
|
11 22 51 109 212 373 595 886 1342 2384 5301 13362 33956 82595 190387 418201 884049 1816682 3660479 7278227 14335104
|
||||||
|
19 22 26 35 62 136 318 749 1775 4227 9978 22954 50842 107815 218682 424970 793555 1428580 2487530 4202477 6907662
|
||||||
|
21 31 45 68 100 139 194 325 737 1960 5143 12466 27624 56293 106580 190008 325237 550617 959681 1788700 3611684
|
||||||
|
-4 5 32 90 203 415 814 1586 3126 6256 12634 25483 50825 99472 190104 353853 640912 1129799 1940028 3249072 5314647
|
||||||
|
13 34 66 106 155 238 434 929 2114 4764 10362 21685 43875 86463 167418 321730 620219 1210847 2407738 4877617 10018867
|
||||||
|
15 40 88 175 333 636 1247 2495 4992 9801 18667 34324 60892 104379 173304 279458 438821 672654 1008786 1483117 2141359
|
||||||
|
9 15 37 84 164 289 479 771 1250 2130 3924 7753 15855 32366 64456 123914 229287 408689 703407 1172442 1898134
|
||||||
|
9 26 55 117 251 530 1096 2234 4517 9074 18070 35550 68900 131341 246150 453809 824268 1478552 2628474 4653755 8260732
|
||||||
|
17 18 15 4 -13 -10 90 449 1359 3325 7268 15036 30585 62440 128345 263285 532179 1048390 1998963 3678322 6537405
|
||||||
|
21 28 35 42 49 56 63 70 77 84 91 98 105 112 119 126 133 140 147 154 161
|
||||||
|
22 41 69 120 231 472 954 1844 3416 6207 11424 21894 44129 92630 198667 428027 916737 1942612 4067342 8415103 17210070
|
||||||
|
10 4 9 47 159 425 996 2137 4282 8113 14703 25819 44590 76974 134963 243555 455734 883874 1763329 3576095 7281317
|
||||||
|
0 9 28 57 96 145 204 273 352 441 540 649 768 897 1036 1185 1344 1513 1692 1881 2080
|
||||||
|
4 4 10 27 72 179 400 804 1476 2512 3989 5857 7651 7858 2727 -15596 -61125 -153822 -309483 -500209 -540831
|
||||||
|
2 11 36 92 206 423 812 1472 2538 4187 6644 10188 15158 21959 31068 43040 58514 78219 102980 133724 171486
|
||||||
|
7 13 27 73 191 453 991 2042 4034 7776 14888 28737 56364 112236 225186 450672 891561 1732103 3291689 6107481 11058165
|
||||||
|
12 40 92 177 299 453 621 768 838 750 394 -373 -1731 -3901 -7149 -11790 -18192 -26780 -38040 -52523 -70849
|
||||||
|
2 10 36 91 202 431 909 1893 3855 7616 14545 26853 48025 83449 141320 233919 379392 604182 946298 1459639 2219628
|
||||||
|
16 29 65 143 282 494 787 1185 1768 2732 4467 7650 13350 23143 39237 64610 103168 159935 241293 355297 512098
|
||||||
|
10 5 12 38 96 220 487 1059 2282 4931 10788 23917 53323 118277 258683 554867 1164838 2393797 4822956 9546940 18608510
|
||||||
|
11 24 50 99 183 327 594 1138 2302 4788 9954 20347 40665 79456 152009 285077 524313 945636 1672246 2899791 4933431
|
||||||
|
1 7 33 99 232 470 883 1622 3013 5733 11152 22022 43880 87868 176248 352827 701969 1382067 2682539 5117917 9578800
|
||||||
|
8 4 -2 -3 27 147 473 1223 2795 5897 11776 22662 42674 79652 148739 279218 527591 1003263 1920647 3706984 7225286
|
||||||
|
8 9 11 16 45 163 513 1361 3153 6581 12649 22723 38542 62161 95793 141516 200814 273929 359015 451106 540939
|
||||||
|
13 16 14 10 9 14 23 34 84 384 1667 5941 17938 47682 114784 255368 533109 1057155 2012660 3716109 6720753
|
||||||
|
13 23 42 77 147 297 614 1246 2441 4667 8966 17865 37461 81790 181409 399474 860801 1802863 3662826 7221761 13835595
|
||||||
|
24 33 39 50 87 186 405 841 1671 3258 6416 13015 27236 57965 123052 256464 519738 1019599 1934157 3550744 6319205
|
||||||
|
12 25 46 90 192 414 860 1709 3277 6126 11266 20576 37758 70530 135517 268659 546296 1125970 2322222 4742431 9522654
|
||||||
|
0 1 -3 -14 -33 -60 -94 -133 -174 -213 -245 -264 -263 -234 -168 -55 116 357 681 1102 1635
|
||||||
|
-4 7 26 50 83 141 270 590 1387 3309 7796 18018 40870 91096 199609 429975 910670 1897655 3894826 7883742 15756517
|
||||||
|
21 24 37 69 127 230 435 875 1809 3684 7209 13441 23883 40594 66311 104583 159917 237936 345549 491133 684727
|
||||||
|
6 4 -1 1 34 148 444 1112 2482 5088 9745 17639 30430 50368 80422 124422 187214 274828 394659 555661 768554
|
||||||
|
23 40 66 101 145 198 260 331 411 500 598 705 821 946 1080 1223 1375 1536 1706 1885 2073
|
||||||
|
14 16 29 70 165 350 675 1231 2244 4314 8934 19546 43664 97163 212917 457876 965814 1997888 4050487 8040434 15612411
|
||||||
|
4 13 43 102 195 328 530 917 1841 4196 9996 23406 52516 112337 229827 452313 861586 1597375 2896065 5153678 9026609
|
||||||
|
-8 -1 25 77 164 297 492 782 1244 2047 3527 6295 11384 20441 35970 61632 102608 166031 261493 401633 602812
|
||||||
|
24 37 55 79 115 180 314 604 1234 2601 5588 12166 26609 57758 123022 255360 515860 1017797 1975233 3803805 7328983
|
||||||
|
12 14 23 61 175 445 998 2039 3924 7327 13593 25419 48056 91256 172164 319258 577398 1014674 1734881 2909539 4869847
|
||||||
|
12 10 19 51 124 273 579 1231 2648 5714 12236 25864 54002 111875 231267 479212 997404 2083634 4356277 9078801 18785272
|
||||||
|
-2 -11 -17 -13 5 49 169 507 1380 3397 7615 15739 30371 55313 95929 159571 256074 398325 602911 890851 1288417
|
||||||
|
3 1 -4 -3 32 153 441 1011 2017 3657 6178 9881 15126 22337 32007 44703 61071 81841 107832 139957 179228
|
||||||
|
3 5 24 76 193 433 900 1791 3497 6802 13259 25907 50693 99390 195638 387278 770904 1539404 3071735 6098927 12005782
|
||||||
|
7 15 42 95 182 316 512 779 1116 1541 2240 4056 9795 27268 75688 198084 483877 1107795 2394006 4917853 9662028
|
||||||
|
3 15 33 60 99 152 224 335 555 1095 2507 6064 14403 32516 69162 138743 263635 476887 825093 1371100 2196035
|
||||||
|
14 19 29 53 108 219 416 728 1174 1751 2419 3083 3572 3615 2814 614 -3730 -11189 -22999 -40703 -66196
|
||||||
|
19 47 96 171 270 385 522 756 1339 2881 6626 14847 31386 62367 117112 209292 358347 591211 944380 1466363 2220558
|
||||||
|
13 17 32 67 148 344 820 1942 4475 9944 21289 44066 88659 174301 336168 637393 1188485 2177203 3912210 6883485 11841026
|
||||||
|
11 22 46 93 177 329 615 1155 2138 3825 6522 10483 15664 21188 24293 18415 -10099 -87352 -260282 -609319 -1266917
|
||||||
|
5 16 42 93 188 369 722 1418 2810 5668 11714 24759 53000 113516 240922 503944 1037329 2104085 4218930 8396808 16657278
|
||||||
|
13 22 30 34 33 26 4 -57 -179 -287 81 2511 11446 38112 109202 285643 702073 1647364 3723532 8148980 17318427
|
||||||
|
-10 -16 -15 9 80 230 499 935 1594 2540 3845 5589 7860 10754 14375 18835 24254 30760 38489 47585 58200
|
||||||
|
25 48 79 118 165 220 283 354 433 520 615 718 829 948 1075 1210 1353 1504 1663 1830 2005
|
||||||
|
17 33 66 114 169 221 276 393 742 1698 4035 9394 21409 48259 108122 240351 527839 1141439 2428576 5091846 10552481
|
||||||
|
17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 89 93 97
|
||||||
|
24 31 39 48 54 49 21 -46 -172 -381 -701 -1164 -1806 -2667 -3791 -5226 -7024 -9241 -11937 -15176 -19026
|
||||||
|
24 32 35 33 26 14 -3 -25 -52 -84 -121 -163 -210 -262 -319 -381 -448 -520 -597 -679 -766
|
||||||
|
-4 -11 -26 -48 -57 -1 217 752 1830 3761 6952 11920 19305 29883 44579 64480 90848 125133 168986 224272 293083
|
||||||
|
25 49 86 151 280 550 1119 2294 4635 9103 17260 31529 55522 94444 155581 248880 387629 589245 876178 1276939 1827260
|
||||||
|
21 40 80 166 333 631 1135 1960 3281 5358 8566 13430 20665 31221 46333 67576 96925 136820 190236 260758 352661
|
||||||
|
1 14 42 90 162 255 349 393 287 -140 -1156 -3156 -6696 -12531 -21657 -35357 -55251 -83350 -122114 -174514 -244098
|
||||||
|
11 36 72 123 194 294 458 797 1583 3374 7182 14685 28482 52388 91764 153875 248267 387152 585788 862839 1240698
|
||||||
|
0 0 15 55 130 250 425 665 980 1380 1875 2475 3190 4030 5005 6125 7400 8840 10455 12255 14250
|
||||||
|
8 18 36 57 73 67 16 -82 -125 294 2321 8719 25582 65633 154559 343189 730803 1509265 3045463 6033724 11776940
|
||||||
|
-6 8 45 117 255 527 1073 2181 4453 9156 18932 39171 80556 163599 326438 637799 1217892 2271160 4136295 7360841 12810093
|
||||||
|
-5 -7 6 61 210 541 1199 2438 4747 9126 17628 34331 66985 129775 248135 467680 871677 1616059 2999641 5603532 10565076
|
||||||
|
16 20 26 45 102 241 537 1116 2189 4114 7509 13460 23936 42715 77591 145645 285394 583456 1230208 2630623 5615774
|
||||||
|
16 27 47 76 114 161 217 282 356 439 531 632 742 861 989 1126 1272 1427 1591 1764 1946
|
||||||
|
26 44 80 156 300 550 965 1643 2746 4532 7394 11906 18876 29406 44959 67433 99242 143404 203636 284456 391292
|
||||||
|
3 3 17 56 143 329 710 1445 2775 5043 8715 14402 22883 35129 52328 75911 107579 149331 203493 272748 360167
|
||||||
|
8 25 61 139 309 661 1334 2526 4517 7724 12814 20908 33916 55050 89569 145817 236622 381131 607163 954169 1476895
|
||||||
|
17 30 42 44 27 -8 -27 76 541 1851 4949 11704 25947 55791 118750 252688 538313 1143420 2406244 4986244 10126859
|
||||||
|
27 41 55 69 83 97 111 125 139 153 167 181 195 209 223 237 251 265 279 293 307
|
||||||
|
19 38 72 139 263 485 903 1751 3536 7282 15003 30691 62449 127086 259832 534432 1103901 2281810 4701898 9626407 19531031
|
||||||
|
7 14 32 58 84 97 79 7 -147 -416 -838 -1456 -2318 -3477 -4991 -6923 -9341 -12318 -15932 -20266 -25408
|
||||||
|
-1 13 36 65 99 139 188 251 335 449 604 813 1091 1455 1924 2519 3263 4181 5300 6649 8259
|
||||||
|
19 29 31 27 21 19 30 75 231 764 2438 7135 19006 46526 106073 227986 466399 914279 1724577 3136463 5501023
|
||||||
|
8 14 38 95 203 383 659 1058 1610 2348 3308 4529 6053 7925 10193 12908 16124 19898 24290 29363 35183
|
||||||
|
-9 -18 -19 -2 42 134 336 799 1827 3947 7969 15027 26651 45129 74986 127739 234931 480152 1071709 2497940 5843812
|
||||||
|
1 2 6 20 57 149 367 848 1829 3688 6992 12552 21485 35283 55889 85780 128057 186542 265882 371660 510513
|
||||||
|
19 26 49 115 277 640 1410 2974 6028 11792 22384 41477 75463 135555 241668 429671 764877 1366666 2452191 4411515 7932621
|
||||||
|
18 18 12 -2 -26 -62 -112 -178 -262 -366 -492 -642 -818 -1022 -1256 -1522 -1822 -2158 -2532 -2946 -3402
|
||||||
|
20 47 92 163 281 493 889 1625 2954 5267 9146 15431 25303 40385 62863 95629 142448 208151 298856 422219 587717
|
||||||
|
8 25 63 142 290 541 933 1506 2300 3353 4699 6366 8374 10733 13441 16482 19824 23417 27191 31054 34890
|
||||||
|
-3 10 33 61 89 112 125 123 101 54 -23 -135 -287 -484 -731 -1033 -1395 -1822 -2319 -2891 -3543
|
||||||
|
0 6 34 97 214 418 769 1377 2440 4302 7536 13057 22270 37258 61015 97729 153120 234838 352926 520353 753622
|
||||||
|
3 6 21 61 161 390 865 1780 3476 6607 12522 24112 47605 96194 197051 404364 822757 1648136 3237095 6222123 11698781
|
||||||
|
-3 6 24 52 102 210 465 1062 2386 5146 10618 21150 41290 80351 158174 317705 651388 1354197 2825776 5860072 11987885
|
||||||
|
-6 1 25 68 128 196 258 321 490 1123 3092 8203 19921 44787 95443 197247 402536 820630 1679579 3451173 7100776
|
||||||
|
16 28 52 87 138 238 491 1150 2759 6421 14320 30749 64118 130805 262403 519191 1015136 1964740 3772294 7204873 13731480
|
||||||
|
17 29 45 63 93 169 357 759 1519 2853 5169 9451 18313 38575 86999 202117 467101 1051637 2285101 4779391 9628013
|
||||||
|
17 24 30 38 66 166 448 1107 2455 4974 9440 17236 31101 56807 106721 207074 412313 832592 1684894 3385342 6711128
|
||||||
|
5 12 21 37 65 110 177 271 397 560 765 1017 1321 1682 2105 2595 3157 3796 4517 5325 6225
|
||||||
|
15 33 67 137 276 542 1055 2084 4236 8841 18684 39306 81179 163152 317662 598301 1090421 1925537 3300345 5501199 8934878
|
||||||
|
17 33 56 88 146 275 564 1183 2471 5124 10576 21774 44787 92171 189935 391680 806673 1654423 3368668 6791624 13529572
|
||||||
|
14 20 29 41 57 85 155 359 952 2587 6822 17155 41070 94032 207286 443115 924585 1892777 3814446 7578544 14842554
|
||||||
|
19 33 47 61 75 89 103 117 131 145 159 173 187 201 215 229 243 257 271 285 299
|
||||||
|
9 35 74 126 191 269 360 464 581 711 854 1010 1179 1361 1556 1764 1985 2219 2466 2726 2999
|
||||||
|
4 1 -3 -8 -14 -21 -29 -38 -48 -59 -71 -84 -98 -113 -129 -146 -164 -183 -203 -224 -246
|
||||||
|
8 22 49 111 240 488 962 1896 3776 7544 14922 28916 54583 100178 178876 311485 531164 892610 1491347 2505101 4281102
|
||||||
|
19 25 35 58 109 213 416 814 1624 3340 7055 15121 32534 69903 149820 320260 681865 1441415 3012595 6198864 12513843
|
||||||
|
16 24 31 39 50 66 89 121 164 220 291 379 486 614 765 941 1144 1376 1639 1935 2266
|
||||||
|
-3 2 26 80 175 322 532 816 1185 1650 2222 2912 3731 4690 5800 7072 8517 10146 11970 14000 16247
|
||||||
|
3 23 67 152 306 588 1137 2277 4718 9906 20588 41671 81467 153429 278496 488178 828525 1365137 2189385 3426026 5242408
|
||||||
|
4 14 34 69 135 276 589 1253 2558 4930 8948 15349 25017 38952 58215 83845 116744 157526 206326 262565 324667
|
||||||
|
-2 5 32 87 178 313 500 747 1062 1453 1928 2495 3162 3937 4828 5843 6990 8277 9712 11303 13058
|
||||||
|
10 14 18 22 26 30 34 38 42 46 50 54 58 62 66 70 74 78 82 86 90
|
||||||
|
-4 7 31 65 109 181 344 747 1693 3774 8172 17357 36698 78069 167555 361054 774146 1636229 3383653 6812237 13315587
|
||||||
|
4 3 -1 0 27 122 368 939 2212 4999 11017 23842 50835 106942 221926 453569 910780 1792467 3450595 6489188 11915283
|
||||||
|
-5 4 19 33 35 10 -61 -201 -437 -800 -1325 -2051 -3021 -4282 -5885 -7885 -10341 -13316 -16877 -21095 -26045
|
||||||
|
-1 -2 3 28 89 197 347 503 579 416 -245 -1794 -4787 -9985 -18397 -31327 -50425 -77742 -115789 -167600 -236799
|
||||||
|
4 16 37 72 137 274 567 1154 2230 4036 6829 10828 16131 22598 29695 36294 40424 38968 27301 -1136 -55331
|
||||||
|
2 13 42 101 214 443 933 1986 4193 8694 17720 35731 71758 144096 289487 580743 1159992 2300323 4517950 8772093 16813322
|
||||||
|
19 28 42 73 149 325 716 1577 3466 7551 16174 33877 69240 138092 268946 511891 952661 1734206 3088826 5384809 9192551
|
||||||
|
2 12 44 108 210 343 470 500 267 -468 -1961 -4318 -7079 -8198 -1557 28951 123080 374933 1000696 2486171 5904680
|
||||||
|
12 21 55 131 278 562 1132 2306 4725 9607 19136 37035 69422 126176 223308 387327 663438 1130801 1930337 3314239 5732378
|
||||||
|
3 25 68 152 326 684 1385 2692 5067 9394 17455 32857 62708 120511 231130 439616 827811 1547071 2883854 5389714 10131642
|
||||||
|
2 15 40 71 109 177 336 710 1539 3290 6867 13972 27680 53302 99621 180597 317648 542625 901610 1459677 2306767
|
||||||
|
2 0 9 39 112 282 671 1538 3403 7244 14765 28683 52886 92176 151206 232390 333580 449312 586517 820327 1443696
|
||||||
|
3 -2 -7 -12 -17 -22 -27 -32 -37 -42 -47 -52 -57 -62 -67 -72 -77 -82 -87 -92 -97
|
||||||
|
-4 3 32 100 230 468 924 1844 3714 7393 14277 26519 47387 81978 138840 233850 399463 706075 1309191 2548656 5147939
|
||||||
|
10 12 8 -1 -4 25 132 388 894 1786 3240 5477 8768 13439 19876 28530 39922 54648 73384 96891 126020
|
||||||
|
-1 -2 -1 15 76 237 590 1278 2507 4563 7879 13270 22570 40087 75597 150131 306718 629679 1278058 2541040 4924779
|
||||||
|
6 11 37 93 189 349 636 1199 2368 4855 10167 21409 44779 92290 186698 370476 722452 1389717 2651819 5056495 9717067
|
||||||
|
18 24 33 47 67 97 163 363 978 2701 7081 17332 39723 85844 176135 345170 649306 1177438 2065745 3517469 5828939
|
||||||
|
18 35 65 129 273 595 1288 2705 5466 10653 20177 37451 68565 124233 222868 395239 691274 1189695 2011305 3336893 5430881
|
||||||
|
8 16 22 39 105 300 779 1846 4105 8744 18060 36461 72466 142823 281093 555533 1106071 2219890 4483805 9086663 18409344
|
||||||
|
-2 -6 -10 -14 -18 -22 -26 -30 -34 -38 -42 -46 -50 -54 -58 -62 -66 -70 -74 -78 -82
|
||||||
|
17 32 61 125 265 555 1131 2256 4457 8803 17454 34711 68956 136139 265959 512819 975397 1831886 3403551 6268573 11463055
|
||||||
|
4 20 45 80 138 264 573 1311 2944 6280 12629 24006 43382 74988 124677 200349 312444 474508 703837 1022204 1456674
|
||||||
|
19 35 60 97 147 205 256 271 203 -17 -484 -1323 -2693 -4791 -7856 -12173 -18077 -25957 -36260 -49495 -66237
|
||||||
|
15 26 56 115 223 439 909 1947 4181 8823 18169 36525 71936 139470 267591 510765 974681 1866797 3596898 6974250 13586527
|
||||||
|
15 20 22 31 65 150 327 680 1422 3125 7280 17566 42555 101170 233169 518440 1111279 2299649 4605667 8953841 16950205
|
||||||
|
6 10 13 20 47 146 449 1238 3054 6878 14462 28969 56209 106944 200990 374179 689670 1255626 2251915 3969258 6865147
|
||||||
|
12 20 28 45 98 239 551 1158 2254 4193 7746 14769 29806 63702 141370 317903 711064 1565202 3374044 7111009 14650730
|
||||||
|
7 27 74 167 335 632 1161 2107 3779 6661 11472 19235 31355 49706 76727 115527 169999 244943 346198 480783 657047
|
||||||
|
7 14 30 80 206 479 1019 2029 3848 7028 12452 21545 36696 62115 105534 181588 318906 576315 1082463 2134847 4443259
|
||||||
|
22 30 37 42 55 117 328 891 2183 4871 10104 19841 37454 68967 125892 232163 441415 879483 1845822 4046547 9108744
|
||||||
|
11 29 62 129 272 570 1155 2238 4162 7508 13289 23276 40509 70055 120084 203343 339117 555775 894008 1410875 2184782
|
||||||
|
7 20 48 97 183 345 664 1311 2667 5589 11946 25630 54378 112952 228561 449940 862323 1611794 2944352 5267719 9247757
|
||||||
|
11 10 20 57 143 310 603 1080 1820 2985 5049 9416 19824 45236 105488 242048 538249 1156912 2409250 4878527 9636677
|
||||||
26
advent_of_code_2023/day9/main1.rs
Normal file
26
advent_of_code_2023/day9/main1.rs
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
use std::fs::read_to_string;
|
||||||
|
|
||||||
|
fn extrapolate(sequence: &Vec<i64>) -> i64 {
|
||||||
|
if sequence.iter().all(|num| { *num == 0 }) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut deltas: Vec<i64> = Vec::new();
|
||||||
|
for idx in 1..sequence.len() {
|
||||||
|
deltas.push(sequence[idx] - sequence[idx - 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
sequence.last().unwrap() + extrapolate(&deltas)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let sequences = read_to_string("input.txt").unwrap().lines().map(|line| {
|
||||||
|
line.split(' ').map(|num| {
|
||||||
|
num.parse::<i64>().unwrap()
|
||||||
|
}).collect::<Vec<_>>()
|
||||||
|
}).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
println!("Sum of extrapolations: {}", sequences.iter().map(|sequence| {
|
||||||
|
extrapolate(sequence)
|
||||||
|
}).sum::<i64>());
|
||||||
|
}
|
||||||
26
advent_of_code_2023/day9/main2.rs
Normal file
26
advent_of_code_2023/day9/main2.rs
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
use std::fs::read_to_string;
|
||||||
|
|
||||||
|
fn extrapolate_backwards(sequence: &Vec<i64>) -> i64 {
|
||||||
|
if sequence.iter().all(|num| { *num == 0 }) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut deltas: Vec<i64> = Vec::new();
|
||||||
|
for idx in 1..sequence.len() {
|
||||||
|
deltas.push(sequence[idx - 1] - sequence[idx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
sequence.first().unwrap() + extrapolate_backwards(&deltas)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let sequences = read_to_string("input.txt").unwrap().lines().map(|line| {
|
||||||
|
line.split(' ').map(|num| {
|
||||||
|
num.parse::<i64>().unwrap()
|
||||||
|
}).collect::<Vec<_>>()
|
||||||
|
}).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
println!("Sum of extrapolations: {}", sequences.iter().map(|sequence| {
|
||||||
|
extrapolate_backwards(sequence)
|
||||||
|
}).sum::<i64>());
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue