Add 2024 Quest 6

This commit is contained in:
Chris Alge 2024-11-12 19:56:45 +01:00
parent 22d0b8bea7
commit 332e386213
9 changed files with 4331 additions and 0 deletions

View file

@ -0,0 +1,6 @@
[package]
name = "day06_the_tree_of_titans"
version = "0.1.0"
edition = "2021"
[dependencies]

View file

@ -0,0 +1,48 @@
Part I
On this beautiful taksunny day, the tournament participants are directed to the royal gardens, specifically to the orchards where the trees cultivated for magical potions are meticulously tended to.
Among these trees are the apples of superhuman strength, which transform anyone who consumes them into a titan of power. The cultivation of these remarkable fruits requires a specific approach, as the potency of each apple depends on whether it shares resources with other apples.
Fruits with paths of the same length to the root share resources. If all branches were cut to ensure that the final paths have unique lengths, the harvest would be drastically reduced. Therefore, it was decided that each tree would maintain exactly one path to a fruit with a unique length.
Each knight approaches a tree and takes a moment to observe its branches. The root is marked with RR and the fruits are represented by @ . The remaining letters denote the branches. The notes are organised as a list of lines, each beginning with a branch name followed by a colon as a separator. After that, there is a list of branches or fruits they connect to, separated by commas.
The challenge for each knight is to identify the path from the root that leads to the most powerful fruit on that tree.
Example based on the following notes:
RR:A,B,C
A:D,E
B:F,@
C:G,H
D:@
E:@
F:@
G:@
H:@
Based on the connections from the notes, the following tree can be reconstructed:
RR
A
B
C
D
E
F
@
G
H
@
@
@
@
@
All the fruits, except for one, are located on branches with the same path length relative to the root. The path to this singular, most powerful fruit is: RRB@.
What is the path to the most powerful fruit on your tree?
Part II
Each participant quickly locates the finest fruit on their tree and then ventures deeper into the garden where the trees stand much taller and more majestic. Once again, everyone finds themselves in front of a tree adorned with fruits that provide superhuman strength, with each participant diligently attempting to uncover the path to the most potent fruit among the trees vibrant branches.
Confident in your understanding of the rules, you carefully jot down the intricate connections of your tree and set to work. The root is still marked with RR ; however, there are many more branches to analyse.
Given the tree's impressive size, describe the final path using only the first letters of each branch. For example a path with branches: RR,ABAB,CDCD,EFEF,ROLO,@ becomes a RACER@.
What is the path to the most powerful fruit on your tree?
Part III
The final challenge takes place at the most ancient tree in the orchard, a magnificent giant adorned with countless branches and fruits of extraordinary power. Unfortunately, this majestic tree has come under attack from relentless pests: bugs and ants, which resemble actual tree branches. You make note of them along with other connections so the gardeners can easily find them later.
As in Part II, the root is marked with RR , and you should describe the final path using only the first letters of each branch.
What is the path to the most powerful fruit on the tree?

View file

@ -0,0 +1,148 @@
use core::fmt::Display;
use std::collections::HashMap;
#[derive(Debug, PartialEq, Eq)]
pub enum ParseError {
ChildDuplicate(String),
LineMalformed(String),
ParentUnknown(String),
}
impl Display for ParseError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::ChildDuplicate(e) => write!(f, "Trying to add child node {e} for the second time"),
Self::LineMalformed(e) => write!(f, "Unable to parse malformed line: {e}\nShould be of format:\nA:B,C,D"),
Self::ParentUnknown(e) => write!(f, "Trying to add children for unknown parent {e}"),
}
}
}
struct Node {
depth: usize,
is_fruit: bool,
parent: String,
}
fn try_build_tree(input: &str) -> Result<(HashMap<String, usize>, Vec<Node>), ParseError> {
const PESTS: [&str; 2] = ["ANT", "BUG"];
let mut names = HashMap::from([("RR".to_string(), 0)]);
let mut nodes = vec![Node{ depth: 0, is_fruit: false, parent: String::new()}];
let mut parent_unknown = String::new();
for l in input.lines() {
if let Some((parent, children)) = l.split_once(':') {
if !PESTS.contains(&parent) {
if let Some(parent_id) = names.get(parent) {
let children: Vec<_> = children.split(',').filter(|c| !PESTS.contains(c)).map(|c| c.to_string()).collect();
let parent_depth = nodes[*parent_id].depth;
for child in children {
if child != "@" && names.contains_key(&child) {
return Err(ParseError::ChildDuplicate(child.to_string()));
}
let child_id = nodes.len();
names.insert(child.clone(), child_id);
nodes.push(Node { depth: parent_depth+1, is_fruit: child == "@", parent: parent.to_string(), });
}
} else {
parent_unknown += l;
parent_unknown += "\n";
}
}
} else {
return Err(ParseError::LineMalformed(l.to_string()));
}
}
while !parent_unknown.is_empty() {
let mut next_parent_unknown = String::new();
for l in parent_unknown.lines() {
if let Some((parent, children)) = l.split_once(':') {
if !PESTS.contains(&parent) {
if let Some(parent_id) = names.get(parent) {
let children: Vec<_> = children.split(',').filter(|c| !PESTS.contains(c)).map(|c| c.to_string()).collect();
let parent_depth = nodes[*parent_id].depth;
for child in children {
if child != "@" && names.contains_key(&child) {
return Err(ParseError::ChildDuplicate(child.to_string()));
}
let child_id = nodes.len();
names.insert(child.clone(), child_id);
nodes.push(Node { depth: parent_depth+1, is_fruit: child == "@", parent: parent.to_string(), });
}
} else {
next_parent_unknown += l;
next_parent_unknown += "\n";
}
}
} else {
return Err(ParseError::LineMalformed(l.to_string()));
}
}
std::mem::swap(&mut parent_unknown, &mut next_parent_unknown);
}
Ok((names, nodes))
}
fn name(original: &str, full_name: bool) -> String {
if full_name {
original.to_string()
} else {
original[..1].to_string()
}
}
fn find_unique(names: &HashMap<String, usize>,nodes: &[Node], full_name: bool) -> String {
let mut lengths = HashMap::new();
nodes.iter().filter(|n| n.is_fruit).for_each(|n| {
lengths.entry(n.depth).and_modify(|(count, _first)| *count += 1).or_insert((1, n.parent.clone()));
});
eprintln!("{lengths:?}");
if let Some((_length, (_count, parent))) = lengths.iter().find(|(_, (count, _))| *count == 1) {
let mut res = format!("{}@", name(parent, full_name));
let mut parent_id = names.get(parent).unwrap();
let mut parent = nodes[*parent_id].parent.clone();
while !parent.is_empty() {
res = name(&parent, full_name) + &res;
parent_id = names.get(&parent).unwrap();
parent = nodes[*parent_id].parent.clone();
}
return res;
}
String::new()
}
pub fn run(input: &str, part: usize) -> Result<String, ParseError> {
let (names, nodes) = try_build_tree(input)?;
match part {
1 => Ok(find_unique(&names, &nodes, true)),
2 | 3 => Ok(find_unique(&names, &nodes, false)),
_ => panic!("Illegal part number"),
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::fs::read_to_string;
fn read_file(name: &str) -> String {
read_to_string(name).expect(&format!("Unable to read file: {name}")[..]).trim().to_string()
}
#[test]
fn test_sample() {
let expected = ["RRB@", "RB@", "RB@"];
for part in 1..=expected.len() {
let sample_input = read_file(&format!("tests/sample{part}"));
assert_eq!(run(&sample_input, part), Ok(expected[part-1].to_string()));
}
}
#[test]
fn test_challenge() {
let expected = ["RRHXFGVZKRSH@", "RKRJFMNFBN@", "RQSBWPVSQTHJ@"];
for part in 1..=expected.len() {
let challenge_input = read_file(&format!("tests/challenge{part}"));
assert_eq!(run(&challenge_input, part), Ok(expected[part-1].to_string()));
}
}
}

View file

@ -0,0 +1,33 @@
VZ:KR,@
TV:QS,GR
PK:HL,LQ
RR:HX,HR,NB
HQ:TV
FG:VZ,TQ,@
TQ:VB,@
XL:@
ZZ:TP,HF
HX:FG
NX:PM,HJ,@
HG:@
ZC:TN,XK
LQ:ZF,XS
SH:HG,XL,@
GM:HN,KH
QS:LR,FN
CZ:GM,QQ
HJ:CZ
HL:HC,DG
GR:SS,MS
QQ:SF,NQ
NB:TB
XV:ZC
TN:QG,BK
TB:XV,HQ
KR:SH,TD,@
VB:ZZ,RN,@
PM:PK
TD:BR,NL
XK:TC,KB
HR:NX
RN:HZ,XP

View file

@ -0,0 +1,593 @@
QCBM:SRKJ,VWBM,BPVD,QRMR
JKGM:FKQT,NHQC,LSHD,BRTC
SHQF:RXJX,QZSK,HLGP,BHZM
JLNX:CSDZ,HNFW,BLBQ,CWWH
MKVX:KSJC,LFGC,CNFK
PGZH:LSTG,VSLK,WTVK,DDGF
NFJB:JCXH,ZGVK,ZPNR
FWXQ:XCSR,BQQL,SHWC,KTRX
LVSH:STTR,BMRS,RHLT,CSVM
TSRD:PCZD,LPBF,ZVDF,WFWV
BHNR:MMRW,NFMT,WBCR,XZSX
VVWG:XPWR,QXNX,JKWB,GKNP
MSJX:XCXM,ZLMW,DWRP,WLVD
CQQW:BHCJ,PJTJ,FJKC
PFTR:QJMH,TTKF,SFFV
RHHB:ZDCG,BRCJ,KMLQ,DCMX
CMGH:RSHK,LLPX,KXLR,CXRC
CNNX:JRJF,TNCW,FSDQ,PWXK
GFNG:KQPF,MJVC,DQHF,MPWV
GTDB:CVVS,ZQKJ,RGHJ,FTSK
DFPC:@
QHBB:KXGF,VBDG,SSXZ
JCKQ:RBKQ,RDVX,WGPJ,GBSC
DRML:QDPQ,WQPK,JVHN,KWWN
JSNX:PGKD,ZCQL,SPDD,NQKW
BGQC:VBGP,FGNR,MZHC,FSVQ
TNCW:NWTF,KRXK,RLCR,PPBD
FGBM:VHLN,GGCT,QFGH,PTDF
QRPT:KNDT,JBMC,FTHF,JRJP
CRKK:LCNR,MZNN,MSBS,DWFK
DGMJ:PJTG,SHRG,NFJB,DTQW
JVBW:DQXS,NWVV,QSRG,KLQD
XLKS:MLNW,GMCS,QCNN,SNFZ
CSGQ:WJJJ,LBHW,FVLL
SKLS:VPCX,VLQT,JHRW,KHCC
GRXT:MBTV,SQBC,SBCK,PNZQ
FVRN:LLZR,MRJV,KSCV,VLXH
VKVL:NGQN,JSNX,BQZJ,TQKK
WGLH:NBHL,JLNX,WTZV,HCPL
BRLJ:KNRC,WXDD,SRLJ
FRNR:GFXP,GXKL,SNRG
KBTM:KDBX,NQBC,DPLK,QCSB
JMTM:JVFG,LPHX,WZTQ,DTWW
KDGC:JPDM,PZQS,QJMG,WJRJ
JDFC:PNSV,WPCM,SDPG,ZGWT
CSDK:NXDB,WPBJ,RBZC,HDPW
HQFJ:MVTB,WVLD,WTKN,RVSV
KGZS:ZGDH,JMTM,HDJN
QKNG:TTNR,HMJF,XFXV,HXLV
RCHL:MLFJ,MCZK,GTBW,DLDX
LTDC:VSNW,TCKQ,SFVR
JFLF:CNLG,LMPN,THBK,RCTS
NFMT:QZVK,FGSP,FVVM
MHGN:SSBM,PGWH,QKNG
DWFK:JPTW,BTQF,FSVX,PGBR
JBKB:@
JXLK:TLXB,CSVL,TRDX,SDGQ
KZLG:NDKN,GMSC,WRGN,QRJM
SKCN:XHLP,HNGF,XGFX,TWZR
RZZV:HQWK,JZQH,CHMG,FZJQ,@
HPQC:DLXC,MXLQ,ZBTL,XSDV
DHPB:GTTK,GHHV,TGPQ,HSFD
RLHK:LVLL,FNCM,XZXJ
CHPM:GPRG,CQXR,SNSN,TPPF
CRVJ:DBQF,ZMRZ,SFXZ,XMPB
ZZNS:VXLG,RDHC,GFWP,DMMB
SVWH:LWHV,QNFS,VTMX,VSFG
DTWW:XHLL,WRWK,NXKX
SGZN:FPWK,FFSV,PHBX,SSCC
MMRW:ZWVC,XHBV,KTMK
MTVX:MVTG,NPLJ,PGTW,NHCS
XHRV:WMVZ,DGST,BMJX,MMKQ
QLDR:LZGC,TMGQ,BSWJ
NRCP:MQXB,CSXH,QQLN
NCXR:FJGK,SNJM,VCQM,JVRP
PKPR:SPDB,KJZB,JQGN,TCZJ
BBKH:GWPD,JXJN,QFGR,QQRX
LSTQ:TZFR,KGZS,PBCF,KJHN
HJQS:NZHB,LCRQ,SHCJ,PVQD
WPNQ:SVFT,RLDP,FMHS,QWPZ
JZGJ:MKDB,BGJZ,QKPD,MXLX
CKSV:LMRD,PZXS,QDRH,XVFM
DGFK:ZRWW,NTTB,SRRV
FLZF:JFLF,QDKZ,MBBX
FHKX:JVKB,NMTM,CSXN,JNLT
QZDC:HPFB,BRRX,ZGGZ
JLTM:DWTN,FMTG,HDSP
KKXM:ZPSW,BBSK,NCHK,FSBX
JGRK:CXGC,XGNQ,SVHG,HQFJ
RXRH:GVRD,GQVH,KZFT
TWDB:QTLP,MQTH,KWMC,VGTK
WWWX:DZXV,GGTX,ZXLX,MDKH
XQTV:PNXL,VPRB,HWDN,QBMJ
XFQT:FQWV,QKFG,CKTD,PNZP
WGML:JZQZ,LCBB,KDGC
SQBC:LTQM,GVFW,LVGG,CRJT
BGWR:CFWV,ZSHF,JQJL
MWWJ:HDHQ,DBPR,KFNS,VBTJ
GGCT:DZHN,CDZB,VJTF,RQMH
DQDH:WMQL,WSKB,KFPF,VJGL
XHRR:GNSZ,PMJR,GSSB,QJLF
RZPS:WGLH,CMFT,HPQC
WPKQ:GWPV,KWLK,CCFV,BKTD
CDTV:KXJZ,KTQD,NHWB,SQJQ
NBZW:NNBK,NTQZ,DLTH,SWTC
LPWZ:NWFH,NGSS,BWHL
GMJR:BBZB,SNRM,PZCL,DMRJ
HJCQ:TSXW,SPLS,ZLRP,CMLB
DQDS:VZSX,FVMS,XVLG,FSFG
WLQJ:KLPW,XFHR,PXPN,TWKS
TSWJ:QCWP,SHQF,NKHT
MWST:JJMZ,RSBM,BHZR,MWBV
VSKZ:ZRTW,FSDG,PWGG
BWXM:SLJF,QMZD,QJLT
KMPK:RJXK,PJJT,CNPS,GQXW
LPHX:XQTV,MNTG,XJPX
VXMK:WJKT,BSGG,MBDW,LHXF
XTPK:KVWC,QHBB,QZBC,RXVB
XDFJ:RVQQ,MGBR,BHBV,BGBJ
DBJS:CTZD,NDDV,XRQQ,WDHW
SNFZ:XTPK,SZDX,GWHH
NFCP:HMCB,PSDN,ZHPL,BRNH
ZVVV:HPPT,WQRF,RBBV,MPVS
VCQM:QTTQ,SNCJ,BRXM
DSLZ:MXVH,RCHL,LDVZ,PRFN
LCCP:ZPLX,RXPP,KTZW,NKSD
RNPC:RNQD,MSRQ,CNVK,KSRS
BMHH:VGDH,THCW,VGNL
CDWT:QFSH,SBVP,XHQN,VDBT
SVLS:FWTZ,QSZP,DWMZ,MVSP
ZGGZ:KPMP,CGVC,NXDZ,DNMT
TKZJ:BTLB,HJQS,PSRL,NHRW
NKSD:BRNX,JRHV,DLWD,CTBJ
XGTS:DPQZ,JKBZ,PRVZ,PMBW
BRJQ:WCZV,DFJN,XKHL
ZQKJ:DQDH,MNMD,TKZJ
RVNQ:NGQB,NGTZ,LPVW,QGQZ
KJHN:WJHR,CSTN,JNGD
KMGB:DMVJ,RBQW,XDVL,GWWW
BJPL:DPVZ,GDKD,XCGV,XFQT
QJLF:CNBL,GSQN,TJPH,MRCJ
SWMT:FRNR,BHCK,PZPQ,ZFWM
LJPG:FTHV,PKKW,GWVZ,RQLF
ZQDS:DRWF,KNMR,TXJX
KQRC:LJMK,FVRN,LWSG,GMJR
MMSX:ZMNR,LCCG,ZGXC,RRSB
XHBV:LVMQ,LJPG,TKRB,DJXM
CBTW:THKX,QBBL,TFSZ,VNQG
LGNV:HSRP,JJQX,KXCD,MRXP
KJZB:GXQC,TXHC,SVHM,SXWL
QZSK:NZKX,PRKM,SSXV,XZNW
DWZJ:VXWV,VKLB,KLHF,QPSH
DKRB:WNPP,JVBW,MHBT,TPDD
LWCG:NGBM,LVNR,ZPZB
SKRW:HXBG,FPGH,SWQH,QGZJ
FVVM:DHWV,GCJT,ZDXJ,RHPZ
FHLG:ZRSX,ZGHP,GKXJ,GXZZ
XJHB:CKHM,TJXM,RPNR,KDGH
VBSS:QDHJ,LFTB,LVMC,HZVG
XKZW:VCSP,RTLS,ZLRR,MZHX
CGCP:PWBB,XKKF,HSLR,TTCH
KHFQ:RZZV,KWFV,PDDS
DNMT:ZSRM,GZNF,RRLB,LFRJ
VRJF:VPPK,XLKS,TPBM,KKDQ
GSHZ:NKHN,XPMR,BRJD,CJXJ
NLVL:SDQR,LDDZ,QHDS,VTRN
BTHT:SWCX,QHJQ,HXJH
PWLJ:HDWP,PZJZ,GQQS,CSTS
PWJC:VLSN,NQZH,RRQN,NMVM
MNQV:TZWS,XSTV,LRNX,JKVC
TXJX:MKNT,SGXL,QRWL,JCBC
VBDT:FRCW,TDWT,FQFT,VMSZ
RPDX:RGCL,XGTS,LSMT,FHTV
CZSV:RMPF,BGRF,KMHK,TBHD
PPTP:XPSL,BKZV,CWHT,FWJJ
JTKK:NKZC,NCBW,LCNJ,MQHB
DZTM:VHDZ,GQGB,GSWH,BGWR
BZSN:CZMC,WXSR,QWVR,PVWZ
NTQZ:ZBJR,QWSH,RWVQ,GQFZ
SSXZ:DMVL,GSDN,FGWC,LRVZ
MNQH:QMNM,JLTM,RQVG,QZDC
PGTW:GGMM,KBTM,RPZT
KHCC:QBCS,RDNW,TJHJ,BXDV
TQKK:DRDD,PXSM,SJBL,SGLH
JXSR:ZFNV,GJTB,SJRS,BZVC
JBKQ:VJNF,XWNJ,RSLQ,VXBW
GSDN:GKMZ,PRRP,JMPF,ZXRS
GXVS:MLTL,LPHH,ZTSF,DWGW
RXMT:GFFD,NBRX,FSZH,ZSCN
VMSZ:VJND,ZSJM,FPWG,DMWV
ZQCP:FTDS,DKZN,BLKZ,SGBQ
JVRP:XHRR,RBVJ,RGMT
VLTN:XNGD,HTCL,BDJX,BJFR
RXBW:TXVP,PHQB,GMBX
PHCD:NBZP,JTVJ,KQRC
MZHX:GLDV,WSKD,CFXH,DKHJ
VPRB:TCXZ,GSDD,RNQR,BRNV
MGTM:BVKH,WDLT,GCXV,NRRT
TVLB:WZZW,JKXW,FZDK,FNBG
RPVT:JJCC,QSBP,TCSJ,JXKS
WCTF:MSCX,LGSR,SPFW,FHKX
FHTV:BBZR,KFHL,JDVF,MGTT
ZFJM:XSRV,KNPG,TZLX,MHPN
DQKZ:PGXZ,MFHB,XPQM,KWGZ
SFVR:JQTJ,BKJC,SXVX,KKXM
MVMR:STNJ,VTHC,DJPS,LJDG
NLLP:PQTV,BNWR,SRRP
TPDD:LKCV,NXTM,NCKQ,VPDK
NGPN:SFDH,FKHC,QZCW,DZHW
JSVN:WKRN,PFNR,CBJB,QZQG
DRWS:GZST,RWJJ,TFLG,RBJV
HWJH:DMQT,JZCM,CRTX,NRDK
VJGL:RTVR,XNRZ,ZGCD,CDRQ
SQVC:HPGP,JRNH,PPHN
KLJW:PKWK,BSCW,VCNL,JBNK
RKNT:FKPG,NRKK,QVDG,SCSG
LVLL:GTZR,PWZF,JHRM,ZZNS
QZBC:ZGWW,BCXV,GZTD
CPBK:LJZK,NZKN,SQCZ
WSSJ:BZTZ,TVLB,MRCL,GXVS
XGHR:DMWT,WFBM,GRKH,CGKK
MXLQ:ZKHS,DVCL,NXTD,ZPCQ
BSRZ:NNHF,ZLMR,NMNF,CTPD
SDSQ:ZQRM,LJJT,KMQQ,GGJL
RTLS:MWTX,CLRW,QMBQ,QXCW
NHCS:SVGL,ZHQW,JTKK
NMVW:RBST,WLJW,ZMPJ,HQPP
MDKH:LHSQ,HLJQ,WKLG
NMMD:FNLJ,DBBC,BWXM,TVVV,@
CSMQ:DVCN,VFWN,RVDT
CVKD:FWXF,DFRM,XPZD,WMZQ
XQLL:WMQT,XJNN,NHFH,JRQC
QMNM:KMGZ,KBRD,KWGN
WXDD:KBKR,GXMR,NDRV,GSHZ
LDMM:KTBK,NWHN,ZKRX,CNDS
HPGP:WJCP,RLPZ,NLLP,QLDR
QSHL:ZKLH,SGZN,TFFS,KMPK
ZSCN:DJPR,JLFL,VBHX,LPBJ
GDKD:QGCL,DWLB,HGGH,ZRPH
SHRG:SKLS,RJPR,TPRH
PWZF:GLSG,LGHW,GMKP,GFKK
PWSS:NLWM,JSVN,PJBR,LGNV
SXBH:BMBD,JBKQ,BPWW,KZLG
HQWK:@
BWNK:DRHX,WXGZ,TQGW,VGHB
GPXC:FPMZ,QLWR,ZVWS,RBDK
NPZP:SKKK,BCRD,VKRR
PPHN:JNCN,KHKC,BQRT,MKVX
KLWF:BJDM,QTRK,DRDG,XJFD
BHZM:BWGM,NKFS,KTKQ,SHTV
MZSG:FLLM,RHHB,VPHS,BDVD
NHCZ:CWMW,WNMZ,SJJX,SFTN
ZRRT:SNBL,CTVW,PNCC,KWXH
WNGF:QRDL,QQVX,FGBM
SKKK:VQDF,WLQJ,HFZJ,DHTG
RBQW:KNNG,GJJQ,QLHF,CPXF
GDFK:ZFBQ,TMQS,PZNX,JKMT
LBHW:ZZZZ,BGQC,RGBS,DGKG
JKDD:HFLK,WDQX,KVRP,QLCM
KMDH:VZHC,GCNK,MDXD
TNQN:CMSV,MPXZ,HVFR,VLBH
FTZS:ZGJH,HGRD,VCCH,RNTG
RLHS:XJVW,HKRS,RKQV,MVMR
QQMQ:BJCK,XLRB,HKPT,BLNX
KKFB:CGSJ,CMGH,SMHL,HXPV
TWGG:GJBP,ZFJM,WBXV,VGLQ
MPVS:HMXM,WCFG,ZSBG,ZZTQ
SFSF:NBQH,MMSX,ZQPC,NLVL
QXLW:QCHQ,HJMT,HMSD,BKCL
NXKX:KLZT,DBJS,TWQM,XHRV
KHKC:FHTW,TSBB,FRNT
JZQZ:CWFL,NDKM,MJKM,HDGF
BKTD:CJTB,MPGS,HPSN,TZLV
DKKF:GVXW,RTTW,HKNV,RHFV
XKCW:HLTZ,LGNW,RRRZ,STDP
RXVB:PKPR,RKFH,ZJLZ
CDQT:KMHJ,XJFJ,SJBR,VFWZ
LGXM:TRTN,FJTZ,ZVVV
BFQB:RFFN,RBHQ,CFMT,VBJZ
BLKR:NXTW,BHXJ,VBVS,KLJW,@
WJNV:JDCQ,MMBQ,PZLR,RLSR
ZHWX:XHBW,ZFFP,SMHQ,JDXJ
KVWC:GSMP,BKXT,SQPC
NJQP:VPMS,CSDK,CWWM,JZGJ
XQKB:KQGS,GJXZ,MLJL,GHFJ
PQCQ:CVTS,WNRX,HRHZ,CJZC
XKHL:XVSZ,TSRD,DNVV,VPNF
KWXH:PSST,ZRTB,DGBV,PGFM
PTDF:WLCC,QCXC,XGQP,MCJX
XDLB:SGBD,DLSP,RTKS,DGDL
SZKQ:XSRB,GDBB,LCJW,QFZB
HXLV:SBXJ,PJRJ,NZFW,NJCX
MVTG:MPTP,PWSS,LRBV
PMJR:TTQJ,DRGS,QMZJ,QLRP
JRXP:JGGB,HXFC,NXSM,DNKN
QRRJ:VZTZ,ZRRT,WXJZ
ZMQK:HRTF,HRKM,LSSZ,SKCN
CGVC:PCRJ,QMSJ,MGNJ,ZSDX
JVFG:CXRQ,XKZW,KVRD
HDGF:CLTM,MSDR,QWCX,KCDB
NZKN:GFKZ,PCZG,LCDM,CNHM
TVVV:VQSC,RJMX,VKVL
PRFN:TDZR,TQXS,SFKN,JXBL
QCSB:WFFN,SFPF,HRGK,XLTK
NWPK:QCDF,RBPV,VKKM,BWNK
NTSW:XMNW,GCGJ,MBQX,GFPN
ZNGX:WFLK,KRHR,LWWC,FFSZ
MWBV:TRGF,TNQR,CBZL,JDDJ
THCW:ZLKL,QMWZ,MCPK,TWDB
DHVJ:PZKD,BXZD,RCTK,SVMB
SSBM:WTFG,XNKN,LMSR,WMDS
NGSS:WGTP,FHLG,XCWP,BFQB
VGLQ:FPKK,RHJF,DTKC,GFCN
QFKQ:RQXH,WGPN,SJKK,WGHF
XSDV:RBCK,WTWX,DBTN,WSWH
RHSZ:MWXG,HZZH,KCBT,CBWR
DHZC:ZGMS,ZBNN,GZFB,NGPN
HWJD:RGCZ,VLTN,CKPH,PVFP
MQHB:GVDX,PJCC,XCRC,HJFR
QNFS:LMHZ,MRKF,PCPH,PSKT
MZNN:MRGT,RTRF,KMVK,VBJM
DNKN:VMCC,HSWS,QGSW,DGLV
BZQD:ZPKB,NMVW,HGNQ
SNCJ:PFMH,QSSV,CCGB,SNHW
SDNM:KLGL,GTRV,VPWC,JCKQ
RLPZ:QQMQ,LZTN,HRKK
MGBR:NSJR,NQXQ,QQMG,QRQX
QMFK:CGRK,MPQK,VBXV,SSBW
XJPX:BHPG,VVWG,TFTW,VXMK
LRXZ:BPPS,DLJN,QQCD
HXFC:PTHS,XRRJ,RHSG,CWLN
PWXK:HHFK,SFQG,KBSV,MWVP
GXMR:PHKS,HNZF,VDHV,RLFX
LVNR:LBBS,PQCQ,LWMG,XQLL
DGKG:KWMM,LJPF,DXVV,QKCT
NBZP:KKSV,CHPM,NVGV,HJCQ
GBNR:QFMQ,DRWS,KSHZ,DKKF
HQPP:JRPL,TVDV,FPMQ,RSLD
GGTX:LKMF,MNQH,TFNR
CNFK:GXBT,LCXV,PVTV,DHPB
FWQM:VZHZ,WPMC,MWKQ,LVZP
ZFHN:CSMQ,BRJQ,QRRJ,LZTV
JNCN:XNFN,DKRB,TPLC
PZPQ:JGGS,WSSJ,ZHZH
SNHW:MKCF,ZQJW,TGGX,PHLG
WZKK:LRMM,QKNP,RKBZ,DTJJ
BGBJ:QHMK,PFBD,DVRL,JWPT
ZJDH:THKR,TZTB,NSML,DXMX
XNKN:MTGF,TQGQ,VCGB,ZPBR
PJTJ:KRRH,GRWB,VNZH,MWWJ
HKRS:QLCB,SRLV,QZCD,PTFX
LXPN:WKRS,GBNR,MSTJ
NDTT:NJQP,QDGB,TNQN
QRDL:GTNK,QCBM,JLGH,ZPXZ
PVLL:@
WNKM:NMDS,ZPXR,ZHQG,JLXT
NDKM:DNVG,NQRK,FSFL,HXPB
CLFQ:ZWWZ,WGTL,LVVR,NZXJ
GRWB:JKCT,PVHL,RGXS,BDPH
TQLF:DGMJ,QMDJ,MTVX
LCRG:HTZV,GVDM,HDNQ,RMQJ
PHQB:PLJM,WPNQ,ZLJB,RNPC
VLQT:SSHS,HBMD,QZFT,DJXQ
XWNF:DMRM,PPTP,XSLL,BZSN
PKQX:LCWZ,BQKR,THHD,FTFN
DBZG:VLTG,WWWX,RNXN,JXSR
ZKDK:LWCG,VWGQ,XWQD,ZQDS
BKCL:JTTP,PNJM,BFWZ,BQSW
VPNF:KXRV,DMDB,RSZN,RFLV
GJTB:JLXQ,WPQD,KMLJ
ZZKL:LJSN,JLWN,HSMJ,SGPR
QHJQ:RVGK,FTZS,NMQQ,XTNT
DHTG:GBMJ,VLFJ,TGTP,VLJL
TFHS:QNQN,CRKK,VNMD
DNDQ:PQKR,RQCH,XWWQ,WNCR
LGNW:SCRR,BKNN,HNBK,LTCV
CVKV:XFVW,MMFX,MWST
RHPZ:DSKG,BCHK,MVQF,BBTX
XWQD:DSNR,JRXP,HTQF
BCXV:TJMT,XQKB,VBDJ,VGXD
XTFZ:LVKF,KMZW,QQGL,SKMC
PSGX:TKXT,XGCW,CRRN,BQGQ
FJGK:TWWH,SVLS,VJQN
DJXM:GKPP,LGZZ,XGTR,RDBW
KRGT:XQGG,JKDS,CWLQ,RTQN
VSNW:QTJK,PGZH,WGPR,WZKK
FRNT:CDJB,DQKZ,NRVQ,GDFK
KWLK:TQPB,JFNR,PLMW,CMPH
RTVZ:KBVP,KHZX,ZPHB,LNPT
PVVW:NCXR,GNQJ,BHNR
WMDS:SFPJ,SGFF,CMLD,WWXT
BHXJ:FTDZ,DFPC,LZLB,XLBQ
JCBC:JCJK,TPFC,WPKF,TQLN
KWTJ:DQGC,KMDH,DKXP,PVVW
NXTW:@
XHLL:WLHF,CDQT,CVMH,HWJH
RJTG:LLLQ,JQWX,SWNP,XGHR
DQJN:WXZQ,BBQR,HHDH,RGWZ
BDVD:FLHP,XSBH,GNFT,KSWV
LSRK:TFGD,VFPQ,MTMS,PTZF
MQCB:XQMX,NMMD,BJGC,@
VLBH:CFRP,TDSQ,LSXV,FVQM
DLJN:NRCP,RXRH,CSGQ,RHKV
FHTW:DQJS,BSRZ,TRTM,SZKQ
PZQS:CBJP,GDPN,PKSM,RBKM
FTDZ:@
SGLN:MTVK,JXLK,KPQZ,QRPT
TRPG:JWNN,CLCP,ZTXC,DZJJ
SRRV:QMMF,QNFP,DRFJ,KKSR
NPLJ:XDFJ,QMGZ,CNJF
BLNX:JDDP,XTDP,SMHT,THCH
BSWJ:SSFW,HJZT,DPZW,KRGT
KXGF:GXWP,DQDS,JLPG,TCBJ
XMSV:PLBG,SGLN,PNXV
XQMX:@
FTSK:NZSX,FZMH,QXLW
RXPP:SMZG,JHDS,WVZC,TTTG
CNHM:LGRJ,BCWF,CSLL,SDGJ
KTKJ:VZFB,PJPX,WPHX
XTNT:VZZB,BHMV,RFWW,FMLS
QZVK:SWCP,PWLJ,THPJ,ZZKL
GTRV:MLVD,XTCB,HLKD,SWQV
PJPX:XKBV,QNZS,XPPK,RKNT
GXKL:DFMF,XDLB,HDGG,DNDQ
QVXC:MGNL,SWGD,GFGJ,TKFG
QNFP:VCQB,DSCW,RNGN,JDMQ
MZDX:NBZQ,NRGV,CBZW,XCGC
BSXB:RBPK,RRSG,ZVFD,SCQP
ZBNN:CTXR,JJJR,FJQH,XVXZ
GQGB:KHMZ,ZKDK,TFWC
HJZT:XLLS,HGGF,SKWX,PPDN
VWGQ:SFSF,HXWH,HWJD
FTFN:CXPN,JMKJ,VNNR,BDSD
TCBJ:VKXG,DCPJ,WRSH,SBKQ
CNJF:XCDX,JDFC,DPSQ,TPFD
WZHP:KNXT,DGWP,RQJM,CKVT
GMCS:BRSK,ZFHN,JJMM
LGSR:MKBR,RTTF,GWPT,ZXTB
XZSX:HLLT,KNHH,RXMT
XFVW:LHBX,BHKL,VWJC,CGCP
PCZG:CJGZ,PTZZ,NNXD,XVJJ
BKXT:HZQG,PGQQ,FBTH,PSGX
GWWW:CQZF,HJBH,FFXM,DXRT
QCSC:NFSM,QZDP,JKMK,KRJV
LPDL:BNFR,KMGB,WXVH
WJRJ:HCSW,LFBD,ZCLW,CRCS
RCTS:SSVT,ZCGQ,HRWN,TSLV
RGNM:ZJGZ,HNMB,JBLM,WTVM
TVHF:DPXC,GMDT,GTKV,MVLB
WKLG:LXPN,WNGF,VSKZ,WGML
HRKM:SMPH,XHMR,NPKT,PHQS
KBRD:JVBT,DWZJ,HZJQ,MGMP
RHKV:CNNX,WSXG,SDNM
LMPN:GTTL,BNFV,VWTQ,QLNR
KJSD:SVDS,RVNQ,PJJL,VHFT
HDSP:VHSH,RTVZ,XPPZ,VSVD
BQRT:CWPW,HVVR,ZCXM
DWTN:WNWV,JKDD,JFQF,WNPC
BQKR:WMLW,XNPR,BMSK,NCSC
SNJM:PKQX,STMC,NBZW
NBRX:WMZR,HQJS,FGVR,RNSJ
DRWF:HQVV,QFKQ,XQLF,MSJX
XGNQ:HHMK,DVXR,PSBK,NLCB
MGMP:HFXH,NRVD,LTCC,JSLR
WZTQ:GKGS,VXLW,LDMQ
TRTN:QBLR,NFCP,XLDQ,QVXC
GBPS:GSPB,GLMF,CHBK,ZTVR
VSFG:GVFB,DVWV,QWJL,PCKG
QBMJ:RWTJ,PTJV,JSGQ,CBLQ
VHFT:MZLN,VQVV,ZHBQ,GXWJ
CTVW:TCVF,KRFC,HKPW,NRWQ
PNSP:QFMM,KKFB,ZVDW
VDXP:CQDM,FRNC,GCRC,RHPM
JZQH:PVLL,FFWQ,KTQF,DZTM,@
MPCX:ZZVT,CCVC,VDRP,NWNS
GWHH:PFTR,LTDC,CPBK,DGFK
SPTB:FKJW,SQXW,LFPD,HQDH
NQBC:VCCQ,JHBC,PJDQ,PMTV
PDDS:QQRH,DBZG,HGHT,VRJF
HLLT:JXCJ,FWQM,CBJN,GBPS
MZFW:NJBV,FMPN,QXTD,ZGWC
GVRD:VHKP,KLWF,JBXT,CBTW
PTRP:ZRWX,ZWNR,NCSL,ZLJG
QMZD:CBKP,QTTJ,GBVG,CRVJ
BZVC:GTDB,MGQC,SWMT
KKSR:MGQZ,CMFV,GKTN,QZGB
CSXH:JWGK,NHCZ,ZGLF,SDSQ
RGMT:JWWD,KWSX,GVHF,GFNG
KWFV:@
WCZV:BMQZ,MNQV,WMWC,QMFK
MBBX:KPQR,MGTM,SHBN,ZJDH
JQWX:JCHX,BQGJ,JQHH,ZHBP
CVVS:VTKP,VBDT,GCPF
XLRB:HNMH,DJFN,CTRK,HGWT
PNZQ:WJDS,VRFL,FDGK,ZWJL
WNPC:FJSW,CPNX,FSZB,VWDX
HXPV:VCQG,JDCG,HPKV,DSKX
HCPL:SMRH,LMWC,FTKP,CFFC
QZZB:WXQJ,QVGK,MGWD,GQMZ
BNWR:FSLB,GPXC,DCGP,DRML
RZZD:QVLB,FNKS,WCTF
TDWT:DKGR,JSFR,BXCM,DQHS
WLJW:VMFD,CRRT,PWCZ,GLWG
HPFB:DNRN,TVHF,QKTJ,CDTV
FFWQ:JBKB,MQCB,ZVRV,TQLF,@
JWGL:VMWH,SMKF,WLKB,RPVT
WSKB:SFTP,XWNR,FCBS,KNXP
QSZP:ZGRQ,MSSM,WKLM,LGMX
PJTG:DNLW,LCCP,LNPD
FSDG:SJLW,TZPT,GSPM,CLFQ
LRVZ:STQL,LKXL,NWPF,RLGG
PGQQ:FPVR,HQZJ,PBBX,KWFN
QNZS:QWCQ,HCRF,HVKT,GZXN
WBCR:BHFG,BJPL,JVXS
ZJLZ:JWWV,ZFRG,CLDD,JKGM
BHCK:DHZC,CFDL,RPDX
VFWN:PGSZ,LSRK,GKMK,PTRP
GCJT:NKWW,JTNV,TRLG,FZKW
BKJC:MQDK,PWQS,JVVN,GGCX
LFJH:MVHH,ZNGX,LVVT,DQJN
QSSV:LTTB,WTBM,PPTX,JPJK
LWTQ:ZZWX,NKTG,QMVX,WSNT
DBBC:RLHS,BXKS,ZMQK,@
QTTJ:DFJG,JJDX,KHZM,WVMH
TZPT:VTMT,CTCD,TZND,NTKX
JQFD:RJRD,RJTG,ZXJJ
KZFT:QFZW,LVSH,FJZZ,WNKM
RSBM:KLTW,RCCP,KTMW,GTQR
GPDD:SVWH,ZGQK,JWGL
ZRWW:WLVS,VWRB,NRZH,DZXZ
RFFM:KJSD,KRFW,DSLZ
RQVG:QVDH,XWNF,CSZM
WQRF:KCWQ,GFWC,WPJH,QGLG
VZFC:HJVS,PLNV,QGZD,RVKS
KWSX:NZSG,BKSZ,GDDG,BKKW
VWRB:DGGM,PVPP,XBBQ,SHGL
NZSX:WBGQ,CDWT,TCHJ,BBKH
LZGC:HMCM,BSXB,GLLQ,WZHP
CFWV:JQFD,FLZF,KTKJ,LGXM
KKDQ:KMZF,LRXZ,JLMR,SQVC
TFKF:SZQM,TRPG,SMZH,MZFW
BHKL:NHDX,JFQQ,LVGF,PHRM
JNGD:BMHH,HCFJ,XMSV,PHCD
RR:FNST,KHFQ,TZXL
SWTC:CDFN,GRFS,SGQN,HWSP
FNLJ:KKXC,BLKR,KPFS,@
SGXL:LRDQ,MDMJ,CQXK,PFVK
HRKK:PGRL,RGNM,VNWC,ZQCP
KSJC:ZRPC,SKRW,FGQB,CKSV
NCBW:WKHT,KZWF,LHBD,TMZX
KKXC:@
ZGVK:KFPC,MZDX,JPJQ,PWJC
PVFP:RZBM,RLBP,FMKP,QRVK
XZXJ:JPZX,FWXQ,JBNS,RHSZ
MPXZ:NGWH,GJKT,CRJD,XHPF
NHRW:LXLB,TGQL,JSVJ,ZLPP
PCMW:TJPV,DHVJ,FDFG,MPCX
HCFJ:JGRK,GHCX,LFJH
HVVR:BNFJ,CZSV,VGZD,QCSC
HJMT:WZKB,KZCR,LGQB,KFHN
LZTV:MZSG,QPJQ,SXBH
TPFD:CRFG,FLKM,THWX,XNDX
SVGL:DVDW,LWTQ,VBKH,QZZB
VXLW:SNCQ,SPTB,BHSX,VZFC
VKRR:ZKZG,CVKD,NRKH,ZHWX
VGXD:PHDQ,XDSZ,ZTQH,LJVC
VSVD:WLKK,KJXG,PVKK,WXSF
ZFWM:QSHL,GVVX,TFKF
TCZJ:BZGX,SMWP,JJLZ,FNVL
DZXZ:DKVQ,XTMC,DPHV,TFJV
STDP:HPZV,QVNC,HNVZ,PQNQ
JQJL:LPWZ,MHGN,BRLJ,GPDD
WJCP:HMZL,XKCW,VBCJ
WPQD:TSWJ,NDTT,LPDL,XNWW
XNWW:WPKQ,WBLH,GRXT
GCNK:TFHS,RZZD,BTHT,CVKV
SMKF:QPHC,LJWP,QRZM,WPZF
VQSC:SJNX,VDXP,TFVZ,LDMM
TPRH:FWLP,XJHB,DXJG,VBSS
WJHR:RXBW,RLHK,CQQW,RFFM
RBPV:ZWLH,NKPM,JWSC,BKXN
TTKF:TTHW,XTFZ,DLBP,LCRG
QVLB:ZNBD,NTSW,FKBT,WJNV
MVSP:ZBZW,HPJW,MZGV,JPPP
LHSQ:PNSP,NPZP,BZQD,RZPS
FZJQ:FFNK,KWTJ,BQFF,LSTQ
HMJF:DBDV,GZRW,NNWN,HRNF
ZFRG:VSWH,XDRB,QRXS,SNMS
RGHJ:DSZD,TWGG,QZGV
ZPXZ:FHPH,GMJT,WWQZ,JDPK
QMWZ:PCJV,DDHD,LFJK,FXWN
LCXV:MFFZ,QCWB,JWCV,WMTZ
DTQW:NWPK,HJHS,PCMW

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,9 @@
RR:A,B,C
A:D,E
B:F,@
C:G,H
D:@
E:@
F:@
G:@
H:@

View file

@ -0,0 +1,9 @@
RR:A,B,C
A:D,E
B:F,@
C:G,H
D:@
E:@
F:@
G:@
H:@

View file

@ -0,0 +1,9 @@
RR:A,B,C
A:D,E
B:F,@
C:G,H
D:@
E:@
F:@
G:@
H:@