Skip to content

Instantly share code, notes, and snippets.

@Trinitek
Last active December 10, 2020 15:10
Show Gist options
  • Select an option

  • Save Trinitek/34400a9c2f176986c3aea5bc53cf3f14 to your computer and use it in GitHub Desktop.

Select an option

Save Trinitek/34400a9c2f176986c3aea5bc53cf3f14 to your computer and use it in GitHub Desktop.
Advent of Code 2020
void Main()
{
IList<Adapter> GetAdapters(string input)
{
var parsedAdapters = input
.Split("\n", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
.Select(i => new Adapter(int.Parse(i)))
.OrderBy(a => a.Rating);
var adapters = parsedAdapters.Append(new Adapter(parsedAdapters.Last().Max)).ToList();
return adapters;
}
var adapters = GetAdapters(Input);
// Part One
// TestInput1: diff1=7, diff3=5
// TestInput2: diff1=22, diff3=10
// Input: diff1=70, diff3=27
var partOneResult = adapters
.Aggregate(
seed: (diff1: 0, diff3: 0, ad: Adapter.Outlet),
func: (x, nAd) => x.ad.Difference(nAd) switch
{
1 => (x.diff1 + 1, x.diff3, nAd),
3 => (x.diff1, x.diff3 + 1, nAd),
_ => (x.diff1, x.diff3, nAd)
})
.Dump();
(partOneResult.diff1 * partOneResult.diff3).Dump("Diff-1 * Diff-3");
// Part Two
// TestInput1: 8
// TestInput2: 19208
// Input: ???
var ad1 = GetAdapters(TestInput1).Prepend(Adapter.Outlet).ToList();
var ad2 = GetAdapters(TestInput2).Prepend(Adapter.Outlet).ToList();
var ad3 = GetAdapters(Input).Prepend(Adapter.Outlet).ToList();
//Navigate(ad1, 0, ad1.Last(), 0, new HashSet<int>()).Dump();
//Navigate(ad2, 0, ad2.Last(), 0, new HashSet<int>()).Dump();
//Navigate(ad3, 0, ad3.Last(), 0, new HashSet<int>()).Dump();
NavigatePre(ad1);
NavigatePre(ad2);
//NavigatePre(ad3);
Navigate3(ad1);
Navigate3(ad2);
Navigate3(ad3);
}
void Navigate2(IList<Adapter> adapters)
{
var chainCounts = new long[adapters.Count];
long paths = 1;
for (int i = 0; i < adapters.Count; i++)
{
chainCounts[i] = GetChainableIndices(adapters, i).Count();
}
chainCounts.Dump();
//for (int i = 0; i < adapters.Count; i++)
//{
// for (int c = 0; c < chainCounts[i]; c++)
// {
// paths *= chainCounts[c];
// }
//}
chainCounts.Where(c => c != 0).Aggregate((x, y) => x * y).Dump();
paths.Dump();
}
void Navigate3(IList<Adapter> adapters)
{
long[] arrangements = new long[adapters.Count];
arrangements[^1] = adapters[1].Rating;
for (int i = arrangements.Length - 1; i >= 0; i--)
{
for (int j = i + 1; j < arrangements.Length; j++)
{
if (adapters[j].Rating - adapters[i].Rating < 4)
{
arrangements[i] += arrangements[j];
}
}
}
arrangements[0].Dump();
}
void NavigatePre(IList<Adapter> adapters)
{
var prog = new Util.ProgressBar();//.Dump();
//var chains = adapters.Select((a, i) => GetPrevChainableIndices(adapters, i)).ToList();
Navigate(adapters, 0, adapters.Last(), 0, prog).Dump();
}
long Navigate(IList<Adapter> adapters, int index, Adapter target, long navCount, Util.ProgressBar prog)
{
foreach (int innerIndex in GetChainableIndices(adapters, index))
{
var adapter = adapters[innerIndex];
if (adapter == target)
{
long result = navCount + 1;
if (result % 1000000 == 0)
{
prog.Caption = $"Navigations found: {navCount + 1}";
}
return navCount + 1;
}
navCount = Navigate(adapters, innerIndex, target, navCount, prog);
}
return navCount;
}
IEnumerable<int> GetChainableIndices(IList<Adapter> adapters, int index)
{
var subject = adapters[index];
for (int i = index + 1; i < adapters.Count; i++)
{
var target = adapters[i];
if (subject.CanChain(target))
{
yield return i;
}
else
{
break;
}
}
}
record Adapter(int Rating)
{
public static readonly Adapter Outlet = new Adapter(0);
public int Min => Math.Max(0, Rating - 3);
public int Max => Rating + 3;
public int Difference(Adapter other) => other.Rating - Rating;
public bool CanChain(Adapter other) => other.Rating >= Min && other.Rating <= Max;
}
static readonly string TestInput1 = @"
16
10
15
5
1
11
7
19
6
12
4
";
static readonly string TestInput2 = @"
28
33
18
42
31
14
46
20
48
47
24
23
49
45
19
38
39
11
1
32
25
35
8
17
7
9
4
2
34
10
3
";
static readonly string Input = @"
70
102
148
9
99
63
40
52
91
39
55
28
54
22
95
61
118
35
14
21
129
82
137
45
7
87
81
25
3
108
41
11
145
18
65
80
115
29
136
42
97
104
117
141
62
121
23
96
24
128
48
1
112
8
34
144
134
116
58
147
51
84
17
126
64
68
135
10
77
105
127
73
111
90
16
103
109
98
146
123
130
69
133
110
30
122
15
74
33
38
83
92
2
53
140
4
";
void Main()
{
var lines = Input.Trim().Split("\n").Select(i => i.Trim());
int numberValid = 0;
foreach (var line in lines)
{
//string line = "10-14 g: gdcpmgxlgggggtgbgg";
var split = line.Split(':');
//CountRule rule = CountRule.Parse(split[0]);
PositionRule rule = PositionRule.Parse(split[0]);
bool isValid = rule.IsValid(split[1]);
$"{rule} {isValid}".Dump();
if (isValid)
{
numberValid++;
}
}
numberValid.Dump();
}
record PositionRule(char letter, int pos1, int pos2)
{
public static PositionRule Parse(string rule)
{
rule = rule.Trim();
var rawLeastMostChar = rule.Split('-', ' ');
int p1 = int.Parse(rawLeastMostChar[0]);
int p2 = int.Parse(rawLeastMostChar[1]);
char letter = char.Parse(rawLeastMostChar[2]);
return new PositionRule(letter, p1, p2);
}
public bool IsValid(string password)
{
password = password.Trim();
return ((GetChar(password, pos1) == this.letter) ^ (GetChar(password, pos2) == this.letter));
}
private char? GetChar(string input, int index)
{
if (index > input.Length)
{
return null;
}
return input[index - 1];
}
}
record CountRule(char letter, int least, int most)
{
public static CountRule Parse(string rule)
{
rule = rule.Trim();
var rawLeastMostChar = rule.Split('-', ' ');
int least = int.Parse(rawLeastMostChar[0]);
int most = int.Parse(rawLeastMostChar[1]);
char letter = char.Parse(rawLeastMostChar[2]);
return new CountRule(letter, least, most);
}
public bool IsValid(string password)
{
password = password.Trim();
var letters = password.GroupBy(letter => letter).ToDictionary(g => g.Key, g => g.Count());
int letterCount;
if (!letters.TryGetValue(this.letter, out letterCount))
{
return false;
}
return (letterCount <= this.most && letterCount >= this.least);
}
}
public string Input =
@"
13-14 f: ffffffffnfffvv
10-12 w: kwtzpnzspwwwdz
2-3 n: nnjn
2-3 h: hhhh
2-11 c: crccccccccsccc
1-6 b: lcpcbcr
16-20 q: qsqqqqqqqjqqqvqqqqqh
4-5 m: mmfmm
10-13 h: hhhhhhchhkhhphh
10-14 x: xxvxxxxxxvxxxwx
2-7 v: tvvgvrvvv
8-11 j: jjjjrjwljjzjkmc
2-5 t: xtpftb
4-6 m: mmmlmpm
9-14 h: hhhhhhhhhhhhhchh
10-11 x: xxxxxxxxxxx
14-15 z: zzzzzzpzzzzzzzkz
5-6 m: mwjmmw
2-4 r: rrrr
7-11 v: vvkwlmvkvkmbwvvvv
16-17 j: jjjjjjjjjjjjjjjhj
6-12 v: vjvvddtdpvvvldvqvdhv
3-16 z: rktsvbkctznjkjzz
5-6 r: hrrrrr
1-3 d: ddxddd
19-20 s: sssssjssssssssssssss
17-20 b: bbbbbbbbbbbbbbbbbbbb
2-4 m: mslm
2-5 b: bbbbbl
3-4 j: ljjj
2-4 h: nlhbh
4-5 z: zsmwfz
4-5 j: jjzqj
9-10 r: rrrrrrrrrj
7-18 l: lljlgpmlltlzjltplln
1-6 l: zbmljsljdszwl
3-6 h: hhfhhqhhh
10-14 d: vmddcdhsdzkxdddddddd
6-7 s: psssssms
1-10 j: cndjjjjjjjjjjj
4-14 x: xxxdxxxxxxxxxxc
6-7 f: fwfffsff
2-11 v: dmmvlvsvvbbr
7-8 l: dlcllllllll
4-5 m: mmmmc
4-10 m: zmmmlmnmrj
5-6 s: ssshdsvbsk
1-3 p: pppfps
5-6 t: tttttt
6-15 z: zzzzzzzzzzzzzzzzz
7-12 m: bgshdmmkmmmmmfnmmm
10-11 l: gclgllsllll
3-4 d: dpdd
2-9 n: kgngnrcxd
8-10 n: knnsqnnnnrn
8-18 f: qhwqbwnfppkffwhjjxf
2-4 j: zwksc
3-11 s: nkszjxwhcms
8-11 b: tbbbbbbwbmbjk
7-8 z: kvxfrzzzz
2-5 g: hhwgv
1-5 s: lmkxjbbsmnq
2-7 p: spgxbpp
2-8 z: xqzpztbvk
4-7 r: wrtcfqrqcrlr
2-4 g: gzgggg
13-15 q: qqqqnrqqqbgqnqt
7-12 h: dhxhbcqhhhhd
7-8 l: llllflll
5-6 d: ddbdfddwmndc
3-10 j: jjjjjjcjjjj
16-17 x: jhmqjpbpxsttjpcxrz
7-14 j: jqjjjgjhjjmjjfjj
5-7 l: zllllll
9-13 d: dddddddxrdcsjdngbtd
13-14 k: kdwkhqkkkkkknkk
5-12 c: zcxwcbwfclccm
14-16 x: xxfxxxhxxxxmdxxxxx
10-11 x: xxxvxxxxxqxxxxxhx
6-11 d: ddddddddddtddd
1-3 j: bjbcj
8-10 p: pppptppzpp
3-7 z: zwldzgvztmbwwqwb
4-5 h: hhhrm
4-7 v: vvrvjvsz
2-4 w: prsdkgxw
1-4 q: fqqvqqqnm
5-6 k: kzjbpkkkzzktkc
12-15 s: ssvssssnsssdssgss
3-10 w: wwfcwcwwwrjww
6-7 t: thftndnvtztztb
1-6 w: qgzppbcdjbpwmsj
3-16 c: nccccfccrrcqhwcjck
7-10 b: bfscxbdbnb
4-14 x: xxrxsgxxwxptxxxdxdx
1-4 c: jccb
16-17 p: ppkppppppppppppwk
2-10 z: wqtzzbhzkv
9-10 b: bcbbqwcbbdvbzbfbsj
6-11 s: ssssswsssssg
3-7 c: wdcxzgtcrswqj
4-10 c: xszcrmcsxccbwccxwv
6-9 f: pffffffff
7-8 k: wkhkhdkkkkkkrbkk
3-4 q: cqqbqpg
3-15 s: sswvssssswssssh
19-20 k: kkkkkkkkkkkkkkdkkkkx
11-14 d: dddddddddddddnd
3-4 l: llll
3-4 t: bvtvtrr
13-16 b: bbbbbbbbbbbbbbbb
16-20 b: bbbbbbbbbbbbbbbkbbbw
10-11 v: vhvvvvvvvnvv
1-6 v: xsvmvvxvkvv
4-7 t: vttltqg
16-20 b: bbbbgsjbxkbbbbbbrbqb
15-17 c: ccccccchcccccxphcc
1-3 w: cmwbtnzwwlhr
2-16 j: njmqdfdsmrsptrjz
12-13 r: rrrrcrrrrrrdhr
11-14 j: jgjjjjjjjjtpjh
4-5 w: wwstw
5-6 w: mwrgwwmdwhzk
4-7 b: bbdlbbbbc
1-16 b: xbbhfbhbbbdbbdbbbbb
11-14 h: hhjhjhhhhhhzhh
2-3 t: jrtrt
5-6 w: pdwwww
5-16 m: mmhrmsvmxmvjdltm
15-17 b: rbdbbbbtbfbbxbbbbbbb
4-6 t: lzjtttqdpthkzrt
3-4 x: xcxxxxxxxxxx
15-16 z: zzzzzzzzzzzkzrcljz
15-20 b: bbbbbpbbmbbbbbbbbbbb
15-17 z: zzzzzzzzzzzzzcqnzzr
3-13 t: tntttttttttttt
6-10 s: jssmqsslsssddtg
9-10 p: ppppppppjp
9-14 d: sdxnfmpzlgvdcs
5-6 c: cccscvcc
2-4 r: rrrr
11-14 v: vvcvvmvvvpvvvjv
2-6 h: znfjphzqzdczp
5-12 j: msdjjbjbgjjjbl
4-7 h: hhhthkhhh
5-6 q: qqqqqc
18-20 q: pttqsnjcfchtfnqbjlqf
11-12 x: xxxxxxxxxxxq
5-6 j: xqbwjjcxjjljgj
7-14 g: pdkdbzgzjvdvwggpnnt
2-17 j: zhklmfrwspkgqbxjjdp
5-17 b: bbbnbkbbbgbbxvzxhb
6-8 b: bwhbbbbb
6-16 q: lgxlqsqqwwmqrqqfgp
16-20 j: jjjkjjjjjvjjjjjjwjjb
1-2 g: vggg
3-7 v: fvsvvxfvvv
5-8 q: vdqqqqqqcrqqxq
11-16 w: wwwwwwwwwwbwwwwnwww
5-7 s: swwzsss
3-6 d: hqwqcvdnqvh
2-7 h: hsqhthghhhh
4-9 d: dddtddddddd
8-9 d: ddddddddd
2-4 q: qqqsq
4-6 t: ttnlqt
4-6 s: sssszscs
2-7 l: ssfllslplqll
1-3 m: vmmlm
6-13 q: qtqqqrqqqqqqqqqq
2-10 d: zbldzlzssd
4-5 n: nnndq
8-18 b: wbbdgkvgscbdgqvxdj
5-6 r: srrtrrrrr
6-8 m: mmmmwbpm
11-14 h: hhhhhhhthhhhhm
2-4 p: pvpxpp
5-6 g: ggvgng
4-5 x: xxxtp
3-10 v: vbvvzvhvvvvmvbcvvwrv
11-13 d: ddddddddddxdldd
4-5 g: gggggggggggngfggg
7-8 j: jpjjjjhw
2-6 m: jmfrmmhhsgbmmm
6-10 v: vrvvvbvvvsv
8-15 c: cctrcccpccccgcc
14-16 d: ddddxdsdzwdddwdsddh
5-6 m: mmnmmb
2-6 d: dtwlswdnlkn
12-13 x: vldxvmxcnndzx
4-6 k: kkkxkm
1-4 p: pppp
11-16 b: bbbbbbbbbhdbxpbbbpb
1-5 j: jjjjjj
6-8 q: zqwdqszvqwqbrmhfqqm
2-5 q: nqqczhb
12-17 v: vvvvvvvvvvvtvvvvpv
1-3 w: wwlww
9-11 n: nbndcjnzntnvjnk
3-4 q: qqcr
15-17 p: plppppppppbppppplpp
1-2 c: cvdlsccrccldccvfcc
4-5 p: bpppcp
19-20 d: dddddddddsdddddddddd
2-4 t: bwbtmjbgkdlpjkrxt
2-5 l: llxdblrcvnpclt
11-13 b: bpbbbbbmbbbpbtcbbbzm
6-7 p: ppppppp
5-18 m: mqmmqpmmmmmwmpmzchms
3-6 g: ggggmggkgg
11-18 z: wjwlzzptzzzwbmzzgz
5-7 b: bbcxbfbwbbcn
4-5 p: szppp
2-12 b: bbbbbbbbbbbmbb
6-10 m: jmmmmwmtmfcwwxm
4-5 m: mrqzmmmptfkmch
13-15 q: qqqqqqlqqqqqqqqd
1-5 b: kbbbnb
4-5 t: qdtttszwwppbtllp
12-14 c: cccccccccccccm
4-5 g: gggdhg
1-4 b: wbtbb
3-6 d: ddrdgbdvdv
14-15 x: xxxxxxxgxxxxxvdx
13-18 l: lllllllllllllllllll
5-7 p: zjsxppv
4-13 v: vvvpvvvvvvvvf
17-19 q: qqqqqpcqpqqgqqqqqqmq
1-5 r: rlmrrr
8-9 j: jjjjjjjjw
2-4 q: dswq
16-17 z: zzzzzzzzzzzzzzzzzz
4-7 h: hhhzhhw
11-12 l: lllllhhpllllqlllln
11-12 h: hhhhdhhhhhrhh
3-4 j: pkthmjsjqx
15-18 b: bbbbbgbbbbbbbbbbbh
4-5 j: lsxklmdwmhj
1-2 p: pptp
8-10 g: fgggzrnggg
3-7 k: njkdhpkpqtqxhqwkp
10-11 l: llllllllllz
12-14 q: qjqhkqmqqwqgqcg
1-3 m: mmmm
8-19 c: dwzvhvbcpdbhcnrlcncx
3-7 x: xtxjljw
6-18 t: pttgnchttttttttqtt
3-4 p: pppxpp
15-16 k: kkkkkkkkkkkkkkvr
2-3 x: dxxmx
12-20 m: mmmmmjmmcmdmmmmmcmmm
6-13 h: sthvjhlhfhxlhb
4-5 t: pbrlttgmmwztxtrt
3-7 p: dpptmppp
7-9 p: hpppppppp
3-4 q: qdgqqq
1-4 c: cffcrkpdczhbj
1-8 d: cqdwddlrddd
9-10 n: gnkmnxnzmn
3-4 k: kkxx
1-7 d: vnddddn
8-12 l: jllnlcllllllllvllb
1-4 n: nnnnnhnnnn
9-12 s: tssssszsssssbt
8-13 h: nhnhdtkjbsfvbsh
2-4 v: qmvs
3-6 c: chcxccch
1-5 d: ddddd
11-15 l: pklllvllwlmlcklllll
1-3 v: dvkbwsgjzqzzjmznd
5-6 j: zjjjjjs
1-4 f: vbffrwfr
3-5 x: xxxxxrfdxmnbkrjbdzcx
16-19 s: spsssbmrpbwrhqssgft
13-15 v: vvvrvvvvbvvvvvv
6-9 q: lqfqgcwtdqzgrqqp
3-5 w: fwpwx
7-8 h: hnhschhfphjzphwh
2-6 r: rrrrrrr
8-10 h: hhrhzhhttm
9-16 w: wwwwwwwwfwwwwwwh
2-3 n: zbnfnlpcnjqftpv
14-17 k: rqwlkzqczczrlktcl
6-7 f: ffffffff
3-6 k: nndkjtpjzpmkkr
12-17 p: gpppbpmjpptpfnzpb
16-17 n: nnnpnnlnnnnnnmnnnnnn
4-6 r: rrsrwr
4-7 x: cnljrzcj
7-8 s: srgtqlmc
8-10 n: nnnnnnnvnn
2-5 g: ggqggb
7-8 h: hhqhgpxb
4-12 b: bxbchbbbbbbbb
2-4 z: qfzng
6-13 m: pcmmwdkmzlstn
3-4 v: qvdc
2-10 t: tktttttttmt
9-15 t: tttttttttttpttw
8-13 p: pppjpppkppdlv
6-9 g: gggggngqg
2-9 k: lzvkqkkkkk
8-12 h: ldpnjvchhshx
5-14 c: cccccvrccccdbccchjc
14-19 k: kkjksgrrkklhkkkkkkt
5-15 r: hrrrrrwmrlrgrlz
7-17 g: hbjtgsxbgrgggcjlk
4-6 q: lqcbqvzqrqzqxqnqd
5-8 x: xkdxsxxf
12-16 m: vxlfjgzgqhxmlvmmqmm
2-13 c: vccvjvqrgrsrqv
4-6 l: ltlrlpvnl
12-16 p: ppptdppppppcfppzpgsm
18-19 q: qfqpvwpwjqvlnrmvsqq
5-6 m: mmmmmh
6-7 m: mmmmsls
3-4 p: pvcg
6-7 h: hhhhhhj
1-4 g: gkggc
3-10 n: sqsndtgnjbnljnn
5-11 h: tcmlhlnbfnhgt
9-10 t: ttttttttxl
6-8 x: mxvxxxxhxxccbx
9-16 g: rgggthgxggdggjgg
7-20 w: wwnwwhvmtwnvwwpzdxvt
13-14 t: tttmttlttgttlptt
5-6 f: ffffpg
5-7 z: qzzzzzqzz
1-3 b: bfbfdhkwdzttcldtr
5-8 n: nnnnrnnqnnnn
7-18 m: hgnrbdmvmzqmhnhhpww
2-6 h: rjghpwxhn
5-10 m: bjqjmmnbvmlxpvvdds
3-4 v: hvjttv
4-8 n: nnpnnnnnn
1-10 g: gzxghcgkggggtxg
4-6 b: pbgblbbb
4-7 c: ccccccmc
2-4 g: ggwgtzvxqhjqphfg
3-5 t: htdtt
8-9 t: tttttptttttt
4-5 v: dvvvd
6-12 p: skzhnpblmpppcptfpll
15-16 l: llllllllllllllvp
6-11 b: mbbbbjxbbmbbf
2-4 t: mtqwtnt
2-4 h: wfhkh
5-6 w: wwwlwwwkw
7-8 k: kskkkktz
5-6 g: rggqcv
2-4 z: krmw
2-4 q: qqwqlrqcbxlxbpqg
14-18 m: mmzmmmmnmmmmmtmmmm
1-5 p: pqwfpnp
3-7 w: dwwxdwgwwksm
8-11 g: bkmcfcddjvw
7-9 s: srsszspss
3-4 r: rjrsz
12-14 k: kkkkkkkkkkkgkl
13-14 f: fffffffffffffh
7-9 r: qgxpglrlr
4-6 l: xflkll
2-9 d: gdddddddrqdddd
2-3 k: zskkzq
3-4 z: jzrtwgmtl
3-4 b: bnnbbx
1-9 r: rhmrwwrfmsb
7-10 b: btbbbbbbjbbb
7-8 t: lmttpttq
1-4 s: rcls
11-12 k: kkkkklkkkskq
14-15 p: ppppppppppppppp
3-7 l: dcslvkjgjcdk
1-6 l: hllhllpl
6-9 z: zdlqztzzkzz
10-11 r: rrfrrrrrrrqjpkkrmrrh
4-5 v: bvpqvvkvrxnvzmghbhmx
10-11 v: vvvvvjvvfcvvcvpj
10-11 j: jjjsfhdmjtcvbzj
4-5 z: zzzzzz
14-15 l: lllllllllzlllkcnl
3-8 c: dchcjjrccvm
12-14 b: vrwbfbqbbbbkbhgqjjh
8-9 g: stggqgctgpgggctt
15-17 p: pppppppppppkppqpp
7-8 q: qqqjvqhmqq
3-4 x: xxxxx
7-8 g: ffbgglgzpjgqvnglpsgh
14-16 r: rrdrrrrrrrrrrgrrrd
10-13 l: lllllllllllll
6-14 q: qfqzqnqqmhqqsp
2-3 q: qqqqq
17-18 f: ffffffqfffffffffftf
11-13 h: hhhhhhhhhhmhz
3-10 c: cccmcccccfzc
8-12 v: vvvvvvvvvvvvrfwrvv
3-4 v: vrnx
1-12 v: gfvsvkvvvzvcvsv
9-10 b: lbtgbbpcfbgb
6-8 f: fgnffkfshhfbfc
8-10 w: wwwwwwwwgpltzwzk
7-12 b: btbbjbhbbpbbqsbbbvp
11-12 r: vfcvrrrzrhvc
19-20 g: gggggggggggggbggggjh
11-14 s: sfsvsfsswsssscxssm
4-6 c: lcclcc
7-8 g: gggggggr
10-14 g: gdcpmgxlgggggtgbgg
2-3 b: bktb
9-13 k: krkkkgkkkkvkkk
2-12 f: bwtgngzflzcfchx
2-4 m: mmmmmmm
10-12 b: bbbbbbbxbbblcbpb
3-4 c: ccct
6-8 r: kgqvrrrjn
10-12 f: ffffffwfffff
6-7 c: ckcjcjccc
10-12 l: lllltllllllxll
3-6 q: qqgqqlxqqq
4-5 b: nbbbbb
7-11 r: rrrrrrrrrrrrrrr
10-11 s: sssssssssss
1-6 w: wwwwwwwlww
5-7 l: lrlmlll
8-12 c: fbcmjxccqcwc
9-10 b: ljmbxwbbbbbhbbb
2-4 h: shwgvlw
15-17 t: ttptttttktttkttttt
2-5 d: dddgdd
2-14 x: xbbtnzdvbszrlxl
8-10 c: cccccccbcx
10-12 k: kkkkkkkkmkkc
7-17 r: rzbcshqhmrzrktzdr
5-16 k: kvkkdkkkkkkkkkklk
1-7 p: hkplfbjdhsh
1-6 z: pnzzzz
12-18 m: mmmjmxmmmmmmmmmmcd
5-7 k: kskkdbsk
9-10 b: bbbbgbbbbw
4-6 c: cccccjs
19-20 w: wwwwwwwwwwwwwwwwwwwf
7-11 j: drzjhxkjjjkwr
10-15 c: cccfckccccdccxc
1-3 d: ddddc
13-14 j: jbjjknjjjjjjjjjjjzzc
1-4 m: mzmftx
1-4 t: rttt
12-17 t: tltqttzttttjwcttrwtt
6-10 m: rmfmrnmmmdmqp
6-15 p: jpfpppwppppppznpppp
4-8 p: mppxctpb
2-4 z: gwzzrn
3-4 p: ppfpp
3-4 b: bbbh
11-17 l: llllllllllllllllhll
4-6 m: mmmmmmm
4-6 c: ccccjx
11-14 g: gggggggggggggg
3-4 l: llflq
9-13 p: pspvvcpkpcpzpfpk
1-4 n: nhwn
6-10 j: jjjjjjjjmjj
9-12 p: ppgpwxpplgppzpppwpp
10-14 h: hhhhhhfhhhhhmxh
8-10 l: llllllmcwfl
7-8 h: hhjhhhps
8-11 v: grvvvgbvxvvlhvvbdvr
5-6 m: fmjjbmp
1-2 x: xxhd
11-15 n: nnnnnnnnnncnnnm
1-8 g: jgggbggd
13-15 l: lshllllllllllll
5-12 r: crrsrrrrprtrr
10-16 k: hkkkkkkjkgtkkkkkq
5-16 j: prxjxjjdxzjjvjjwfj
7-8 k: pdkkkkkzkzw
3-4 s: sstg
1-5 x: vxxxb
10-16 s: tqmzsfksjzfmlqzsdb
2-5 r: rcrxjr
10-15 v: jcbvvvhvvvkwrgvvvvv
4-6 n: nnxnnpnn
13-18 l: llllllllllllbllllgl
9-11 g: vwqgnrzlclgqtp
2-3 f: fpms
3-5 l: llllllll
7-12 x: xcvxzxxhxxxxxxxxqxxv
6-10 b: fcfpwbmbhbpbbqkkbxb
8-11 z: nrnzzqzzzzck
8-9 g: nggdfgdgggfggg
2-6 d: sdztkkfvpkddggdxd
10-14 g: nhdstmlfxcggcs
10-11 g: ggzfglgggmcxgjh
3-13 x: cxjxxxxxxgxvj
9-10 h: smlxphtmkhf
7-8 v: rhdvgcvrdvvvvvxwvssh
7-14 n: nnnnnnncnnnvnn
3-6 z: zzzgznzz
6-10 l: llwmgllljllll
4-5 v: vwvvpvw
7-8 m: mmmmqvmqmv
13-14 z: zzzzzzzzzzhzrcz
3-8 h: bdmhcxpgbpjvwfmh
3-5 h: nhhjk
11-19 b: zrrmrqbfvwbnmvkvbzbv
3-8 c: ztwqhccmwzvcbxjjrc
4-9 h: hhhhhhhhh
2-15 d: lddzlxhkscrmfbd
3-9 s: kpscwnwzj
10-11 w: zwwlwxwwwwwwww
4-5 v: dpvjr
1-3 d: ddtd
3-6 x: xxdfxxxrbdh
3-6 g: dghwgxg
8-10 z: zzzzzzzpzz
13-15 p: pjpxpppppdcpphlppjp
6-16 j: jjjjjljnjjjjjqjjjwx
11-17 f: fffffffffflfpfffxff
8-10 j: jjjjjjlwjkjrdjjjj
8-9 w: wwwwfwwdkww
4-9 x: qpxbhxwxxkx
5-7 w: wwwwbwl
1-6 m: mmfrmmmm
8-9 l: lllllvlsl
3-4 d: dddd
6-8 c: cqcptcfcgcrzbjcccp
10-11 k: dccpkmkkgkkdzkkkkkk
3-4 j: jjjr
3-9 h: hzhwhchzhjg
7-8 g: bxgnvvzfsbggdgg
2-17 f: ffffffffffffffffffff
7-13 g: ljggdgztggvgtggg
9-13 x: rxlxrxxnwqxpcdxq
10-11 j: jjctjjjjjfjj
8-16 k: zpzskgkkkvsbxhsk
4-5 l: llljl
2-6 b: bbbbbb
1-3 w: swww
6-8 r: rrrrrbrbrr
8-9 t: tttttttth
3-5 s: sssss
3-14 q: qqxqqqqbblqqcqmqsq
7-8 v: dmfvccvvvbvmwjvvvqfv
5-7 v: qvvvvvvvv
4-9 c: cgcgvncctwrtv
3-5 p: ppnpppp
13-15 h: hhhhhhhhhhhhhhhhnhhh
5-8 r: rrrvpgrdbhrc
2-9 q: szlqwzwhqxbxkr
5-6 c: cwrmhxcpxchzccb
4-6 z: zzjczz
12-14 p: pwqkbphzplxhnpm
8-13 t: tkkzjttrstbtwttd
15-16 m: mmpqmxbxdzmqmmmb
4-6 c: ctcpczdd
2-3 j: fdjjj
15-19 k: kkkkkkkkkkkkkkpkkkwk
2-3 c: cccc
1-2 w: wwfqwwgpmv
2-3 h: wfzmhm
3-10 s: wbsbvhfxjgxfqstwqn
15-16 r: sxrzvkqpqmgzgtrr
3-5 m: fmmtmqjxzss
12-13 k: ddsnpkfvknhwq
5-11 z: lzwvzhtzzzz
12-13 t: tttttttttbdgtft
14-19 g: gggggggggggggggglgnv
3-4 r: rrrr
3-7 h: xchhnhh
10-11 n: ndnjnnhnnnk
5-7 l: llllhll
3-5 p: ppppb
11-12 s: rrsjzvswsdtxssv
2-10 z: ztxzzzzzztzp
16-17 m: mmmpmmmmmmmmmmmmmmq
1-6 b: wkbfntzw
10-14 n: nnnngrnnnnnnnnnn
1-3 b: pbdfsbbp
6-13 n: brnwnhnnsnnrwncnmz
2-11 f: mlhpdjflklzmhxt
1-2 f: shzsffl
8-16 k: kkkkkfkxfwnslkkm
13-14 b: bbbbbbbbbbkbqbb
2-7 x: zdxxxxxx
6-10 h: hhthmpvhnlk
6-7 p: tppfpqpcppppxpmpcpp
3-5 m: grmkm
5-11 w: vcwbwwwbwwswnrdwfwx
1-6 s: sssrssssx
13-14 j: jjjjjjjjjjjjgj
14-19 q: sbqqzqnqnlzdrlqqqtkl
3-4 t: btdttvzrvnjst
1-7 s: ssbsssmhssssdsc
3-4 z: vcdzj
6-13 v: vvvvvvvvvvvvvv
2-7 t: ttttgpthqhmth
5-9 z: zzzzwzzzl
10-15 w: wwwwckbzwwwwkwwlrwb
2-7 r: wjrbdzrjxrstrc
1-8 z: dpzzzvcsx
4-6 c: nccxccvcccczcccdc
1-10 c: cccccccccc
3-7 d: zdmdpdntdpzncdbff
5-9 x: xvlvxldrxxmbdcdxxxz
6-7 p: ppplppjcwcpp
2-7 d: pwnhpdd
2-3 q: hqqsdqxs
6-9 t: smttzjmktq
7-9 t: ttttttttp
4-19 w: wwwrwwwwwwwkwwwwwwnw
17-20 s: cssvssssssssssssssss
10-11 s: srssssssssss
5-6 f: ffcfjt
3-4 d: ddgdddddddd
2-15 s: sssssssssssstsssssss
2-4 c: kmccnnt
2-3 f: ffff
10-14 s: vspjssnsssssshvsq
9-10 k: skkkkkkfxkkwk
3-5 g: mgnggjpgspcf
4-15 z: zzzdzzzzzzzzzzzz
3-4 c: cgcc
6-7 s: sssssjs
2-4 z: ztzz
17-18 w: wbqwwnwwwmwvwwhgdnl
13-15 d: dwddddddddddwdddd
4-7 g: gzghgcnq
3-9 n: snnnnnmll
2-7 j: sjhtsxj
2-6 h: khvzdhhr
2-10 t: tttttttttttttttt
4-6 x: xxglxwjrx
3-4 r: rjrc
5-13 b: bbbbbbbdbbbbbb
3-4 q: qqrhqq
8-12 g: ggggkggdgggbg
3-12 j: jjjjjjjjjjjjjj
1-5 c: cbcch
10-11 r: rrnrvrrrrzn
4-16 j: jjjpjjjjhjjjjjrjjjv
8-9 f: fffffzdsvfccfr
14-16 f: ffzfjfftfffffffffff
2-8 n: ngnnnnntnnnnr
6-11 n: nchnnvnnnndn
4-5 w: sfwvm
6-14 s: ssssssvsspssqhsss
3-4 m: sjjb
2-4 d: dnkjd
3-9 s: twsgkmqstq
6-14 f: ffffffffffhfff
10-15 w: wmwlwwwwfgwwjrzwwwww
3-11 f: fffffkxfffffmfff
1-2 l: jlrpl
3-14 p: pbnpkbppxhppmpp
1-14 v: bvvvtvvvvbvvvh
3-4 s: zssvs
3-4 l: llljrlk
8-12 f: ffcfffczlffff
3-13 m: xsmgpvzsrrwmxtbktsrj
5-7 j: qxvjjlqjjjjj
3-4 r: rbdwg
13-14 d: dddddddddddddg
10-12 f: lqvhjnkfrfffv
6-7 n: njnnnhz
11-13 v: vvvvvvvvvvvvs
12-13 v: nvvsfvvvvvnvdvjxvvv
2-19 s: slsssssbsskspssssts
9-11 n: nnnnnnnnnnm
4-5 j: mhngjjrhjcjkjw
12-18 p: pnfwppppprsqrppltppp
9-13 s: wsssfsjsssfssss
6-8 b: bbbbbzbj
9-12 c: lcccccrccctv
7-11 w: wbdwwqwwkbwws
6-19 c: cccrmldccfhtvclcccc
9-14 h: bhhhhdhjkhhhhm
7-15 g: gkgggggvcgggghgggz
4-8 k: kknklwkkkg
10-13 c: ccccccxcccccccc
10-14 c: ccbcfcccptcczbcc
8-9 s: scsssssss
1-7 v: bvvvvvvvk
4-8 s: dspsskkstklsz
9-10 b: blbkkzbvvpbhbbbb
1-2 m: qgntnbccqm
7-14 w: wwwwlftgspwmwr
4-13 n: tnxmnnwwnnlnnnnz
3-5 c: cwzbs
3-6 d: dddddl
6-8 s: qsfssrnsst
1-2 l: llxcx
9-11 g: zhzkcbglvgw
5-11 f: lfzgtbcmzzw
6-19 m: gcbgjbqrdkswqhmxjct
1-3 z: dzzz
9-13 t: wttftcddttmtttgttnvt
14-15 z: zzzzgtzzwzzzzzzzzz
1-11 q: qqqqqqqqqqqq
4-5 j: rxjjjxjwjjj
3-5 v: gqjhjvlvlbmkgssd
16-17 q: qgcbftwncjhdzwqmw
1-3 g: tjftgp
11-16 l: rlllllllllgglllm
4-6 z: zprzvrfbpblf
7-11 j: jjjjjjjjhpjmjj
3-4 l: ltlrblllwljljlc
8-11 k: kkvkkkkkbqkskrkkd
5-10 r: hjrcrrrdvtrkrvrxrr
5-6 x: xxxxpx
13-16 g: gmggggggcggpwgghgt
3-4 h: hzzp
13-15 h: hhwhhghhhhhhhhh
3-5 t: mlftttt
8-13 c: cccccvcdccccfcccccc
1-6 k: kczzpq
8-14 t: rtcttttgtttttgtttz
6-7 l: lhsvlll
1-2 x: cxlr
8-10 t: rtbtttttsblttttb
11-14 z: zzzzzzzzzzdzzzz
2-3 t: ltttbthjdxwbxrv
5-6 x: xxxxxxxkx
8-12 f: fffffpffwfng
5-6 x: xxxxflxxxxx
5-7 d: ddddvvk
4-8 j: ttjjjjhj
2-5 p: rtrmpksjdvpplmrkl
9-11 s: ssshsskssssssr
5-8 j: wjnjjvjjfjjhf
4-6 q: qlpcjqqqq
13-14 m: zctdnmkjstxbmmfqtns
4-11 n: nqntnngnvmnknrnwnnl
3-5 d: ddfvdnkd
9-14 j: wsznlrpljmjwjjjkmtk
2-6 w: wlwwwww
9-12 j: jjzjxjjjjhjp
10-13 v: zvvvvvvvvfvwlvvvv
3-18 x: dzxcqgwxpwxvpmcxxdxx
2-3 w: wsgwwd
3-20 n: nrnfxnnnnlnnnnnfnrhp
3-8 f: fmvjwsffvxjfnlw
5-6 l: llllcs
3-5 b: bbbbbbc
2-7 l: rlwkflnsm
4-18 m: dqskhdqgmrpbgtmdnp
4-6 r: grpxzr
5-7 m: mmmmmmjmm
7-8 b: bbkkbbkbb
1-4 r: rwrtr
5-6 g: gggcggg
4-6 l: qlcbwrsf
16-18 t: tttmtttltvtttttxtrtt
3-4 z: zzzz
6-10 g: gggggtgggg
12-15 f: tffffffffqrffvvftffh
10-16 w: wwgwwpwhqdwhwpbw
5-7 m: mpmmmmm
3-5 b: bbxtbbb
5-10 x: xxxxbxxxkjkx
10-12 b: bjbldbbbwbxg
3-4 g: gnggqgg
2-4 s: sstst
6-10 j: jjjjfvjjjj
16-20 r: rrrrrrrrrrrrrrrrrrrr
4-12 b: bbbxbbbbbbbbbbbbb
3-4 k: kkpk
4-7 s: ssssqsh
10-13 b: vbzbbbbnblbbb
12-14 f: rgqffrfsvftwff
2-4 x: bfxvhmsxnqxz
10-12 c: ccccccccccbcc
1-4 l: llxbmjpll
9-14 f: ffhfmpfffffzfgcg
3-4 n: ndfm
1-6 k: lkmdzgfbkfktkkvkw
12-13 q: qtkqqgqbqtqgvqqqzq
7-9 d: ddddddhddsd
4-11 j: kdqjjjjjjxg
4-6 k: kkkgkm
6-12 n: nnnnndtnnnnnnv
2-6 c: dccccdc
10-11 v: vvvlvvvvvvb
7-10 w: wwwwwcwtzwkpvjqwsb
1-5 x: xxxxxxx
5-8 g: dhggzggsggggglgggg
8-9 t: dttttttdtfnt
11-17 g: cqgglgtwgggcbwjvwg
1-2 t: ttttt
16-17 j: jjjjjjjjjjjjjjjjjj
4-7 k: lkdkhkkkfk
15-17 z: zzzzszzzzzzzzzwzlz
3-13 w: wwswwwwwwwwwfwww
5-12 h: mstzhsghhhhnzmdrh
10-12 h: hhhhhhfhhphhbhhk
3-4 j: jjsd
11-12 k: kkkkkkmkkmfd
19-20 d: ddddhdddddddddddddxj
7-8 g: gggjggrg
4-5 m: mdzmv
3-4 w: wwww
7-8 b: bdbwbbbbb
2-12 q: dxqqqqqjqqqlqq
3-6 w: wwwwxwh
9-11 s: smhnkssssssstxj
5-6 n: nnpnkj
7-8 s: qsgdxkjs
9-14 m: mmmmmmmmsmmmmv
1-3 v: vvcvv
2-5 x: kzxgjttwxspclfx
5-8 c: ccctpcckz
5-6 h: hhhchthqxchh
3-7 t: hnrcqdtttmtxtnmhcf
2-4 v: vvlz
4-5 k: kbgkl
9-12 x: mhzpjqtxqnfrcnwhk
7-11 z: slztclzvxbzmz
13-14 l: ldllllllllllkcl
1-2 l: fslcthfv
12-16 b: bxbkbbbbbbbbbbbb
1-4 r: rrmr
8-11 d: dddfdpdddtdd
17-20 n: nnnsngnbnnnnnnnncnnn
1-16 x: xxxxxxxxxxxxxxxxx
2-4 z: zqzv
1-4 m: fnwm
2-3 j: jqvd
10-12 h: ghhhhhjhhchg
14-15 v: vvtvvvvvvvvvvvv
4-6 f: ffffff
8-20 g: tgghjfglrzggggcxhcgg
9-11 p: pvpmzppppkpk
5-18 x: xxxxnxxxxxxxxxxxwlzx
10-11 m: mgdmrfchqwmfmrlnq
7-8 g: gggggzxs
4-6 n: vjnchzknzbvnvn
17-18 p: pppppppppppkppppjp
6-8 d: dddddfddld
1-4 r: brrr
2-10 m: mzmmhqmmmmkmmwm
8-15 f: cfjwxkgmfkxdmwxf
3-8 c: djskjzcmwjcz
2-3 k: hkckkjbztrggrffvxwm
11-13 d: krddnddddrddgdddd
4-5 f: zjsndf
4-5 r: rrrgl
1-2 z: tsbn
1-11 s: sssdwtjssssskkszms
6-16 x: xfxxtxxxxxxdxzxmxx
5-13 m: mmmmmmmmmmmmmvm
2-4 z: zdzj
3-4 d: dddd
3-4 n: nnmnkv
14-16 d: dfddddddddddtddddqdd
5-7 n: jnnnnnnj
8-16 q: qqltjqqqqqqqsqqfq
10-14 s: sssxsmsssvqjssss
6-7 w: wwwwjwwxwd
2-5 m: mzqcndqmnmmgwmsspm
9-10 k: tkkkkrkkkhkk
3-5 r: rxrrrrr
7-11 c: glfcdqrcnfhc
8-9 r: rrrrrrrjd
7-8 d: ddddddlk
2-7 j: pjsmjjr
2-4 x: txxx
13-15 f: ddkhqfnbcmtwvbf
7-11 n: nnnnnnnnnnvn
7-9 m: jmmmlgmmthlrm
8-13 w: wwwwkwwgwwwwfrwww
2-6 d: drdrhn
8-10 k: lnkfrvgkzkchq
4-7 z: lxjzzzzhzprrzzzpcwj
1-2 s: lssc
2-3 n: jmkcngpn
3-9 x: xxmzxnxxxx
3-12 v: nqwshwqgfnwvwvnf
5-8 m: zmmmmmmmqlkprv
1-5 q: qpqrqwqsvpjqf
14-18 q: qqqqqqqtqqqcqqqqqq
13-16 v: vvvvhvvvvvvvrvxdv
2-6 r: rrlrrrk
6-8 r: hmsrxsrkprdrrrl
14-16 s: sssssslssgswssssss
3-11 t: ctttvsnfcstzktktb
1-11 c: gwfbddphwnqcmf
3-18 h: hhhhhhwhhhhhhhhhhs
7-9 c: cjjcrtpvctccfcc
6-14 f: fffffgfffffffff
8-15 z: zzzzzzzzzzzzzzdz
9-16 d: ddddbdddhddddqpd
1-2 q: qffc
3-5 l: grcsjln
12-13 q: qqqqqqqqqqqqq
4-5 q: qqqlk
1-3 w: wwwx
3-4 w: kwwf
5-15 m: pkwmgmmxspzxhmmrmp
5-18 t: ttfthsbwntpcnttmwtc
14-15 p: pjpjwppkpxpqkpf
1-3 n: nnnn
8-9 j: jjjjjjjbxj
4-6 w: gfhwfwwmfx
8-11 k: kkckkkknkkkk
13-14 m: mmmmmmmmmmmmsqmmm
2-4 s: tsrz
9-13 j: tjvjqpnjjjlkwjjljrj
3-4 f: xwfgf
2-7 h: rhxshbh
10-18 j: jjjjjjgbjjjjjjjjjjj
5-14 n: fnwnnnsnnnncnpnn
9-13 h: qhhlnhhhqhhhm
3-17 h: hhfgzkhhjhrbhwdcpbnh
2-4 c: qccrblqtcd
13-16 s: ssjssqssssqsxssw
10-15 n: nnnnnnnnnqnnnnf
2-3 m: nmtl
2-4 w: wqwdt
4-7 v: vvvvvvvvvvv
5-6 w: wbctwwwgj
4-6 q: qqqttqzzwsxp
2-7 r: rcrrrrrr
10-12 d: sdmddcfdddzvdddddq
1-15 f: ffffffffffffffffff
3-7 r: rrwddcjgr
2-11 t: tttttgttttttt
3-6 n: nhxgnqnnfs
1-3 t: pqtwt
8-17 r: rrrrrrrrrrrrrrrrrrrr
3-16 t: tktnpjtcthrhtqltq
5-6 h: kcmkkqdrbhhxm
3-4 l: llll
1-14 g: gggdgrvjtqfgpk
5-8 p: ppppplwcpp
4-7 d: ddddtdmdd
1-7 q: qqvxrqq
8-10 v: pvvvgkqrvvgnvlvv
17-19 g: sdgghgnggggggfbmggp
6-8 x: rvjknxlx
13-14 r: rrrrrrrrrrrrrb
3-10 b: zbkmbbbbbb
4-6 d: kdtbdmkd
8-12 m: mmzmmmmmcxmmh
7-8 n: gspnbfnp
13-14 l: llllllllllllnf
4-5 b: rzbbbxblvbwbrbbbx
3-5 x: bxgrcxxrk
2-4 j: jjjh
11-13 r: rrrrrrrrrfrrrrrrr
4-7 q: mwqqfqqqnwqwq
2-3 g: sghvhggvv
4-5 k: kkkkk
11-12 s: ssssssskssgss
16-17 g: dcgqnwtptvvlfkdgg
4-5 v: vvvqc
2-6 s: xsksrmrrd
7-8 w: swwwwwfnww
5-6 m: hmgchm
6-8 m: mmmglzmmmhfnfqk
2-5 c: bnjknt
2-3 x: lxxj
1-4 g: gqgpzgtj
3-12 c: cngsrcvcjccxgcc
2-11 z: zpzzzzzzzzzzz
6-7 s: ctsxgslsjbstspgsl
1-2 v: vnqs
4-5 n: rnnwcnfl
14-17 v: kvvvvvvvkvvvvbnvw
5-6 h: hhhchhh
1-7 d: vmcdddj
14-16 n: snnnnnnnnnnmnnnhn
11-16 h: hhhhhhvhdhrhhghn
3-5 k: lckkknk
1-12 t: tcttbpgtdwdxwddrxv
1-13 x: jxxxxxxxxxxxfx
11-12 l: llllflllllll
11-14 p: qpphckzdppkjxz
3-16 d: nfngxfjxwdpjvjcds
4-5 b: xkbmb
11-12 s: sssssssssshs
15-17 t: tttttttttttwttttt
14-15 x: xxxxxxxxxxxcxxgm
3-5 t: wxlttc
10-11 x: xxxxxxxxxtk
9-12 h: hhhhhhhhdhhhh
5-20 d: smdvdkdbqbnsdssfhdnd
16-17 d: ddddddddddddddsvtddl
6-11 v: kvvvvvvmvvdv
2-5 r: nrrgr
1-4 b: bbbc
8-10 p: ppppptjpspkpppp
7-10 w: pjhswvhdjqx
11-13 c: cfcfccbcctgnccccvcc
8-14 t: tttttttttgtttttts
1-4 c: fcccc
4-6 v: tvfvvvqvlkrpxkvvhztr
3-6 v: vvdvvbv
13-15 p: pwppppppppppppp
1-2 v: pwbr
15-18 r: xrrrbrrrgrpbrprrqrqr
2-4 g: zgggp
";
void Main()
{
Lines = Input.Split("\n", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
Width = Lines[0].Length;
//int trees = 0;
//
//var next = Point.Start;
//do
//{
// trees += (next.IsTree ? 1 : 0);
// next.Dump();
// next = next.Next();
//}
//while (next is not null);
//
//trees.Dump();
int tB = GetPoints(p => p.NextB()).SumTrees().Dump();
int tA = GetPoints(p => p.NextA()).SumTrees().Dump();
int tC = GetPoints(p => p.NextC()).SumTrees().Dump();
int tD = GetPoints(p => p.NextD()).SumTrees().Dump();
int tE = GetPoints(p => p.NextE()).SumTrees().Dump();
((long)tA * tB * tC * tD * tE).Dump();
}
public static class PointExt
{
public static int SumTrees(this IEnumerable<Point> points) => points.Sum(p => p.IsTree ? 1 : 0);
}
IEnumerable<Point> GetPoints(Func<Point, Point> nextAlgorithm)
{
var next = Point.Start;
do
{
yield return next;
next = nextAlgorithm(next);
}
while (next is not null);
}
public record Point(int X, int Y)
{
public static readonly Point Start = new (0, 0);
private int NextX(int step)
{
int nx = X + step;
return nx >= Width ? nx - Width : nx;
}
private int? NextY(int step)
{
int ny = Y + step;
return ny >= Lines.Length ? null : ny;
}
private Point Next(int xStep, int yStep) => NextY(yStep) is int ny ? new (NextX(xStep), ny) : null;
public Point NextA() => Next(1, 1);
public Point NextB() => Next(3, 1);
public Point NextC() => Next(5, 1);
public Point NextD() => Next(7, 1);
public Point NextE() => Next(1, 2);
public bool IsTree => Lines[Y][X] == '#';
}
public static string[] Lines { get; set; }
public static int Width { get; set; }
public string Input = @"
.#.#....##.......#..........#..
...#...........##...#..#.......
#.####......##.#...#......#.#..
##.....#.#.#..#.#............#.
##.....#....#.........#...##...
###..#.....#....#..............
..........#..#.#..#.#....#.....
##.....#....#.#...#.##.........
#...#......#....##....#..#.#...
.##.##...#....##..#.#.....#...#
.....#.#..........##.#........#
.##..................#..#..##.#
#.#..........##....#.####......
.#......#.#......#.........#...
#....#..##.##..##........#.#...
##..#.##..#...#..####.#..#.....
###....#.###.##...........##..#
.....#.##.....##.#..#####....##
....#.###....#..##....##...#...
..###.#...##.....#.##..#..#.#..
#...#..#..#.........#..#.......
##..#.#.....#.#.#.......#...#.#
...#...##.#........#...#.......
..#..#.#..#...#...#...........#
........#.....#......#...##....
#........##.##.#.#...#...#.....
####.......#.##.###.#....#.....
...#...........#...#......#...#
##...#...#............#.......#
....#...........##.......#.....
###......#.....#....#...#.#...#
.....##..........#.......#.#...
##.##.##...#......#....#.......
##..#.#..#......#...#..#.......
....#....##.##............####.
..#.###..#.##.###..#.##.......#
#.##..#.#.....#..#.....##......
..##..#.....##.#.##........#...
.#..#.#......#..#............#.
.....#..#.#...#....#.##.#......
.#...##.#..#.#...##...##..##...
###............#.#..#..#...#...
..#..##.####.#.....#.....##.###
#....#.##..##....#..#...#.##.#.
.....#.##.........##...##......
.........####.#....#.#......#.#
.........#.#..#...#.#..#.#....#
.#.....#..##.##..##....#.......
..........##......#.##.###....#
.##...###..##.#...#........##..
..............#.#....#.#.###.##
..##.##.......#.#......##...#..
.#.....#..##..#.###...#..#.##.#
#.....#.#..#...#........#...#..
.#......#....#.#.....###...#..#
..##.#....#..##......#.....#...
..#.#.##..#.....#.####..###....
.........#......#..#...........
..#........#.##.#.....##.##..#.
.......#.........#....#...#.#..
.##.....#.#....#.#.......#.....
..........#.##........##...##..
###..###.#.#..#..#####.##.#.##.
..##..##.#.#...#..#.#.#......#.
#..#..#..#..##..#.....#......#.
..#....#.##..#......##.........
..#.##......#...##.#......#....
.......#..#.##.#.....#.........
.......#.#.#.###...##......#...
.....#.#..........#..#...#.....
....##..........#..........##..
..#......#.....#.##.#..#...#.#.
....#.....#..#...#..#.#.##..###
.####....#........#...#........
...##.#.##.#..#...##...#.##....
....#...#...#.#.#.#...#..#.....
.....#...#.#.....#.#........##.
..#.#.......###.#.....##.......
......#.........##....#....#..#
.............##.....##.........
.........##...##.......#.....#.
##.........#..........#.###..##
...#.....#......#....#..##.....
##..#...#...##.#.....#.#......#
..#...##.#.......#.#......#.##.
......#.......#.#...........#..
..........#.....##............#
#........#...#..#.......###.##.
.##...........#.#........#.#.#.
...#..##...#.#....#####.#......
.....##...###...#..#.##...####.
...#....#.....#..#.......#.....
#....#....#...#..#..#.######..#
#.###...........#......#...#..#
.#.#.#.#..#....#....#...##.#...
.#..#.........#.#....###...#...
......#..##.##..........#....##
.....#......##....##.....#...#.
.#...#.#.#....##....#..#....#.#
..................#..###.#..##.
..#.........#......#....#..###.
#.#.....#..#..#....###..###....
..##..##.#..##........##...##..
##..#........##..###..#.....#.#
..#..###..#......#....#...#...#
#..#.#..............##.#..#.#..
.....####....#...####.....#.#..
.....#....##.#......###........
##.##...#.#.#.#.......#....##..
.#......#...#.#....#..##.#.##.#
#.#.##.#.#......#..##........##
...##.....#.....#...#..###...#.
........###.....#.....#...##..#
.....#.##.##......#.#....#...#.
.#....##.......#..#.####.......
.#..#....#..........#......#.#.
.#.##.##.....###.#.#...........
.........#......#..##..........
....#...##.#.#.#..#.#.........#
..#.....#.##...#..#..#.###....#
...#.##......#.....##....#.....
###............#.#....#...#....
.......#.....#..#.#.#....#..#.#
...#......#.#..##..#....#...#.#
............##........##..##...
..#..#.##..#......###..#.......
........#.........#............
..#...#.#########.#...##..###..
#....#......#.......#.#.....#..
#.#..#....###.###....#...#.#...
#...###.#.#.......#.##......#..
.................#...#.#.#.....
##....#...#........#....#.#..#.
......#.....#...#..........#.#.
##..........#...#..........#.##
..#.#.##.#....#.#......#...##..
.....#.......#..#.....#........
#.##.#..##..#.......##.........
....#......#..#..#.#...#.......
...#....#................###...
.##.....#.#....#.#..........##.
...#..#....#.##.##......#......
..#.#....#.......#.#..##.......
....#.....#..........##.#.#####
#.....................##..#..#.
.###..#.##.......##.#...#..#...
...###.......#..#...#......#..#
#..#...#.#..#.#..#..#.##.......
#...##.......#..#..#.##..###...
......#....#.#.#........#.##..#
..##..#....#....#..#.#..#......
..##.#...#.#######..#...#.....#
..#....#..#.........#..##......
...#....#.#......#..#..#.#.....
#..#....#........#.#..##....###
#....#..##......##.##.....#.###
...#.#..........#..#.#.#.#.##..
......##..#.#..#.#....#....#...
##....#....#..#..#.##......#...
....#.#..##.#.#...###....##.#..
...#.......##..#.......#...#...
......##.......#..##.....#...#.
...#.#...#...........#...#.....
.#....#...#......##.##..###..#.
.#..........#...#...#...##.##..
.....###..#.....#..##....#.####
..#.###..#..##..##.....#.#.....
.............#.###...##.#.....#
....###.......###.#.....#..#.#.
........##.#.........#.....###.
.....###.#..#.....#...#..#.....
.#....#..##.#..#.#....#.......#
........#......#.#..#.#..#...##
...#.##.##......#..............
.#.....##.#.....#..#......##...
#..#..#.....#.....#.....###....
.##...........#..#.##.....#....
..#.#......#.#...#.##.#..#...##
...#..........#.....#..........
#.#.#.#.#...#....#...#.....##..
#......##...#...#..........#.#.
....##........#.#..............
#..#.#.#..#........##......#.##
........####...##.#.....#......
....#........#.#..#..##..#.#...
.#.....#..###...#..#.....#..#..
#......###.#..#....#..#.#......
....#.....##.##..#...#.#..##.#.
..##..#...#.#......#....#...#.#
#..##...##..#...###...#..#.....
.......#.....#...........##....
#..##....#........#....##..#.#.
.#........#..##...###.#..#.....
.#.#....#..##...#...##.#..###..
#.........#.......#.....#.#....
#..#.....#.#.###.#..#......#...
....#..#.#....#..##..###....###
###.##.#.#..#...........#.#.#..
..##.#.......#......#..##....#.
.....#.#.#.......##.......#...#
...........#.##....##.##....#.#
...#.......#..#.##..#......#..#
#.#.#...#......##.#...........#
##........#...........###.#..#.
..........#.#.#....#.#..##.#.#.
...#.#.#....#..........#..#....
#.#....###.#.#..#.......###...#
.#....#......#.#.#..#..#.......
......##.............#....#.#.#
.#..........#.........#.##.....
##....#....##....#..#.......#..
#.##.##.#..#..#.....#..#.##.#..
.#..#.......##..#.....##.##....
.......#..........#.#.##..#.##.
....#.....#.#...##....##.......
.......#.........#...##....##.#
#.....#......#..........#...#..
...#.#.......#.#..#....###..#..
.....#.#.#.........#...........
.#..###.#.#........#.#.........
.........#..#......##...##....#
...###..#.....##.....#.###....#
.##...#...#........###.#..#....
.##........#..#.###.######.##.#
##.#...#.#....#..##.#....##....
.......##.....##.#..###.#......
..##...##........#.......#....#
#..##...#.####...###......#...#
.##.....#.##.#.#.....###.#..##.
..###....#.#.###.#....#........
....#..###..#...#....#..#..#.#.
#.#.##....##...##.......#......
.........#...#....#..#.........
.............#...#..##.#.......
...#.##.......#...#.#..##.##...
.####.#.##..#.#......#.##...#.#
.#..#.#.....#.................#
..#.##..###....#...#......####.
..##..##...........#....#...#..
....#...#...#...#.......#....#.
#.#...###...#...#.#...#....##.#
......#...#.#.......#.....#...#
....##...#.#.#....#....#.#....#
.....#.....#...##..#...#....##.
#.....#....#......##.##....#...
...#.#....#...#....#.#....##..#
...#.#..#...##....###..#.......
...##......###...###.#...#..#..
##.......#.......###.......#..#
..##.##..###.#............#...#
#.....##..#..##....##..#.......
......#.#...#......#.....#.....
#...........#....#..##.##.#....
.......#..#......#...#....#...#
.#...##...........#......#...#.
#........#....##...###.#....#..
.....#.......##.........#.##...
.#.###..#....#..##.#..#.#..#...
#.......#.##.#.#....#.#..#....#
###.....#.#.......#..#......#.#
#..#.#.......#.#..##..##.#.#...
#..#.#.#.###........#.....#...#
#.#.#..#..##.....#...........#.
..#.#..#.....#...#...#...##....
...#.##......#...##.#...#.#.#.#
#..#.#.#.#.......####..........
..#......#.#......##.###.....##
..#...##..#.........##....#.##.
##.##.##.#.#.....#..........##.
.#.....###.#..#....#..#.###...#
#...##.......###....#.#..#.....
..#....##.........##.........##
......#....#.##.......#........
..#.#.#..#...#...#...##.#...#..
......#..##.#.#.#...##...#.#.##
#..#...##.#.....#...#.##.......
..#..#.........##.#...#.##...##
##.##.#....#.......#.##..#.....
.....##...##.##...##.........##
#......#...#.......#...#...#...
...##...........#...#..#.......
.#.##.#..#........#....#.......
#.#...#..#......##...#.#.##....
##........####..#.#...#.#.##.##
#..#.#.##......##.#.#..#.......
.....#.........#..#.####....#..
......##..#....#...#.#....#....
#...##........#.........#.....#
.#.#...#.#.#..#............##.#
.#..#....#....#.....#...#.....#
..###...#..#.....#.##.###...#.#
.#.###..#..#...#.#...#.#......#
#...#####......###........##...
.....#.....#..#.#....#..##.....
....##...#.#.##.#####...#....#.
.#.#.........##.#.......#..##..
.#...#.#...#...#....#.#...##.#.
.##...#..#.#..#......#.#.#..##.
..#.....#..#.....##.....#......
..#........#..##...#.......###.
.#....#.......#....#....#..#...
....#......#.#.#.........#.....
..##...#.#.#...#.#........#....
.#.....####...##.#..#...##.....
...#.....#...#...#....#....#...
.........#..#.#.....#..#.#..#..
.........##...........#.......#
......#..#.....##...#.##.#.....
.#......##........##...#.#.##..
.....#.#..##...........#..#..#.
...#.......#...#.#..#.##..#.##.
...#.......#.....#.#...#.##.#..
#.....#.............##.#..####.
.#...#......#...##.#....#.#....
.##..##.##....#.#.....#.......#
...#...#....#....##.#..#....##.
..............##....#.......#.#
.#.#.#...##..#..#...###.#..#...
.#.#...#.#..#.#..#...######..#.
........#......#.#..#.#....#...
..###.....###.#.##....#...##...
.##.#.....#.......##.......#...
..#..##...#..........#.#....#.#
";
void Main()
{
var passportStrings = Input.Split("\r\n\r\n", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);//.Dump();
passportStrings.Select(s => Passport.Parse(s)).ToList().Dump()
.Count(p => p.IsValid).Dump();
}
record Passport(int? BirthYear, int? IssueYear, int? ExpYear, string Height, string Hair, string Eye, string PID, string CID)
{
private bool BirthYearValid => BirthYear is int byr and >= 1920 and <= 2002;
private bool IssueYearValid => IssueYear is int iyr and >= 2010 and <= 2020;
private bool ExpYearValid => ExpYear is int eyr and >= 2020 and <= 2030;
public bool HeightValid {
get {
if (Height is not null && Regex.IsMatch(Height, @"\d+((cm)|(in))"))
{
int value = int.Parse(Regex.Match(Height, @"\d+").Value);
return (Height.Contains("cm") && value is >= 150 and <= 193)
|| (Height.Contains("in") && value is >= 59 and <= 76);
}
else
{
return false;
}
}
}
public bool HairValid => Hair is not null && Regex.IsMatch(Hair, @"^#[0-9a-f]{6}$");
public bool EyeValid => Eye is not null && Regex.IsMatch(Eye, @"(amb)|(blu)|(brn)|(gry)|(grn)|(hzl)|(oth)");
public bool PidValid => PID is not null && Regex.IsMatch(PID, @"^\d{9}$");
public bool IsValid =>
BirthYearValid
&& IssueYearValid
&& ExpYearValid
&& HeightValid
&& HairValid
&& EyeValid
&& PidValid;
//BirthYear is not null
//&& IssueYear is not null
//&& ExpYear is not null
//&& Height is not null
//&& Hair is not null
//&& Eye is not null
//&& PID is not null;
//&& CID is not null;
public static Passport Parse(string raw)
{
raw = raw.Trim();
var flatKeyValue = raw.Split(new string[] { "\n", ":", " " }, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
int? byr = default;
int? iyr = default;
int? eyr = default;
string hgt = default;
string hcl = default;
string ecl = default;
string pid = default;
string cid = default;
for (int i = 0; i < flatKeyValue.Length;)
{
string StrVal() => flatKeyValue[i++];
int IntVal() => int.Parse(StrVal());
switch (flatKeyValue[i++].ToLowerInvariant())
{
case "byr":
byr = IntVal(); break;
case "iyr":
iyr = IntVal(); break;
case "eyr":
eyr = IntVal(); break;
case "hgt":
hgt = StrVal(); break;
case "hcl":
hcl = StrVal(); break;
case "ecl":
ecl = StrVal(); break;
case "pid":
pid = StrVal(); break;
case "cid":
cid = StrVal(); break;
}
}
return new Passport(byr, iyr, eyr, hgt, hcl, ecl, pid, cid);
}
}
public readonly string Input = @"
ecl:amb
pid:690616023
byr:1994 iyr:2014 hgt:172cm hcl:#c0946f eyr:2022
eyr:1980 cid:97
hcl:z ecl:#102145 iyr:2011 byr:1945
pid:187cm hgt:179in
ecl:amb
iyr:2011
cid:113
eyr:2021 hcl:#b6652a pid:004682943 byr:1940
hgt:173cm
iyr:2023
cid:146 byr:2022 ecl:dne hgt:76in eyr:2040 hcl:z
hcl:#f97e30
cid:73 iyr:2013 byr:1929 hgt:157cm
eyr:2024 ecl:blu pid:673398662
hcl:5343fe
hgt:152 byr:2018
eyr:1992 pid:85999926 iyr:1938 ecl:#15bd97
byr:1975 hcl:z eyr:1988 pid:#c36f52
iyr:2018
hgt:184cm
byr:1954 eyr:2023 hgt:170cm iyr:2012 ecl:blu pid:299556897 hcl:#b6652a
hgt:191cm ecl:oth hcl:#7d3b0c
iyr:2016 pid:187567535
byr:1999 eyr:2023
pid:814358147 eyr:2022 iyr:2000 byr:2001 hcl:#18171d
ecl:blu
hgt:76in
ecl:hzl
hgt:163cm byr:1955 iyr:2018 eyr:2024 hcl:#6b5442 pid:343362099
eyr:2020 pid:185090160 ecl:#21a5e6
iyr:1928 byr:2006 hcl:a2ebbf hgt:104
hgt:153cm
hcl:#a97842 ecl:blu eyr:2028 byr:1969 iyr:2019
pid:729700590
iyr:2019 byr:1981 hgt:150cm pid:606092356 hcl:#18171d eyr:2026
ecl:grn
pid:760899887
eyr:2023 hcl:#866857 hgt:185cm iyr:2017
byr:1976 ecl:gry
byr:1965 eyr:2026
hcl:#623a2f
ecl:blu pid:483363116 iyr:2010 hgt:178cm cid:204
ecl:oth eyr:2022
pid:268557763 byr:1965 iyr:2015 hcl:#c0946f hgt:164cm
ecl:gry hgt:168cm hcl:#623a2f eyr:2020 cid:163 pid:124082663 iyr:2016 byr:1996
hcl:4c44fb iyr:1957 eyr:2039 ecl:grt hgt:63cm byr:2012 cid:104
byr:2024 iyr:2023
ecl:gry
eyr:2007 pid:170cm hgt:68 hcl:d57b67 cid:333
byr:1956
hgt:169cm iyr:2013 pid:370491367
ecl:gry hcl:#5bc41d
eyr:2023 iyr:2028 byr:1969 ecl:lzr hcl:1989b1 hgt:71cm pid:#12c226
cid:304 pid:866132461
byr:2022
hcl:z hgt:191in ecl:lzr iyr:2029 eyr:1989
ecl:brn hcl:#9a45a7
hgt:176cm
byr:1974 pid:758747330 iyr:2014 eyr:2020
cid:190 ecl:hzl iyr:2014 byr:1990 hgt:69in eyr:2037 pid:384015829 hcl:#ceb3a1
byr:1998 eyr:2022 iyr:2018 hgt:153cm
hcl:#733820 pid:424512443
ecl:blu
hcl:27c41f byr:1972 eyr:1994 pid:777840405
ecl:gry
hgt:179cm
iyr:2021
hgt:166cm eyr:2032 ecl:gry byr:1936
pid:41703652
hcl:#efcc98 iyr:2019 byr:1936 pid:985830958 eyr:2021
hgt:175cm ecl:brn
eyr:2025 pid:972163513 hgt:155cm ecl:brn cid:169 iyr:2015
hcl:#6b5442
eyr:2026
hgt:173cm
byr:1984
cid:191
pid:791209101 hcl:#341e13 iyr:2020 ecl:hzl
hgt:64cm
iyr:2010 byr:1978
pid:618891746 hcl:#d6ac23 eyr:2023 ecl:brn
eyr:2021 hcl:#341e13 iyr:2018 pid:502081929
ecl:blu
ecl:amb
iyr:2018 pid:8933462515
hgt:160cm hcl:e330f0 eyr:2030 byr:2007
ecl:gry byr:1980 hcl:#341e13 iyr:2015 pid:830724822 hgt:167cm cid:156
eyr:2023
ecl:gry hcl:#c39b75 byr:1995 hgt:153cm
eyr:2029 pid:83056475 iyr:2013
byr:1965 cid:250
ecl:oth iyr:2016
pid:242792947 eyr:2025 hcl:#efcc98
byr:2011 ecl:#62fe2d hcl:#2b434a hgt:190cm
eyr:2031 iyr:1964 pid:7096872943
cid:258 hcl:#c0946f pid:698224453 eyr:2029 hgt:189cm iyr:2012 ecl:blu byr:1963
eyr:2028 byr:1942 hgt:156cm pid:836243052 iyr:2016
hcl:#888785 cid:310 ecl:brn
hcl:#a97842 pid:740164307 ecl:oth byr:1997
hgt:166cm
iyr:2015 eyr:2026
hcl:4ee9da iyr:2020
eyr:1933 hgt:136 ecl:#8dee29 pid:44266010 byr:1966 cid:82
ecl:amb byr:1921 hgt:182cm eyr:2026
hcl:#c0946f iyr:2010
hgt:178cm cid:343 eyr:2023 pid:197119382 hcl:#623a2f iyr:2017
ecl:brn byr:2002
eyr:2030 byr:1967 ecl:blu hgt:166cm iyr:2017
pid:655602762 hcl:#6b5442
cid:143 hgt:152cm eyr:2026 iyr:2018 byr:1950 ecl:grn hcl:#866857 pid:067535973
byr:2019 ecl:#e3c288 iyr:1948 hgt:72cm hcl:7da71b eyr:1956
hcl:#cfa07d
pid:688405238 cid:200 byr:1950
iyr:2020 ecl:hzl hgt:170cm
eyr:2026 hgt:164cm iyr:2010 hcl:#b6652a pid:404835595 byr:1924 ecl:blu
iyr:2016 hcl:#866857
ecl:gry
eyr:2023 pid:986813245 cid:247 byr:1977
hgt:173cm
ecl:#a59335 eyr:2023
hcl:033f22 byr:1947 hgt:152
iyr:2029 pid:#1e686a cid:305
byr:2005
ecl:amb hcl:#a97842
iyr:1972
eyr:1967 pid:274884869
eyr:2038 iyr:2018
pid:181cm ecl:xry hgt:185in
hcl:109b28 cid:287
ecl:amb byr:1943 pid:002483342 hgt:178cm
hcl:#c0946f eyr:2030
iyr:2014
iyr:2020 byr:1963 cid:131 hcl:#18171d hgt:181cm pid:146726616 eyr:2021
pid:062629370 byr:1931 hgt:188cm eyr:2021 ecl:gry
hcl:#166b3d
pid:007028786 ecl:blu hgt:156cm byr:1981 hcl:#888785 cid:53 iyr:2019
iyr:2014 hcl:#623a2f
ecl:hzl eyr:2029 byr:1988
pid:849096536 hgt:167cm cid:322
pid:160824363
hcl:#19bed3
eyr:2024 hgt:171cm
byr:1968 iyr:2019
eyr:2024 hcl:#dd66d0
byr:1986
cid:105 pid:816153574 ecl:hzl iyr:2013
hgt:173cm
hcl:#ceb3a1 hgt:62in ecl:gry
iyr:2017 cid:234 byr:1963
eyr:2029
pid:514406488
hcl:#fffffd ecl:blu
eyr:2020 iyr:2010
pid:544347103 hgt:164cm byr:1939
eyr:2021
pid:999479324 hgt:164in ecl:brn iyr:2016
hcl:#a97842 byr:2020
pid:053149570 byr:1920 eyr:2027 hgt:190cm iyr:2011 hcl:#fffffd ecl:oth
hgt:165cm
hcl:#cfa07d
ecl:oth
eyr:2023
pid:186cm
byr:1937 iyr:2012
eyr:2026 hgt:64cm hcl:#ac426a byr:1969
cid:345 iyr:1960
pid:#df648a ecl:blu
byr:1923 iyr:2017
eyr:2027 pid:798497862 hgt:182cm
hcl:#ceb3a1 ecl:oth
hgt:182cm eyr:1990 ecl:grn hcl:#efcc98 byr:1968
pid:005962011
iyr:2010
cid:74 eyr:2020 hgt:71in
iyr:2015 pid:487940408 byr:1952
hcl:#733820
hgt:75cm cid:249
ecl:hzl
hcl:#6b5442 pid:4860441 eyr:2020
ecl:hzl eyr:2025 hgt:183cm
iyr:2020 byr:1993 pid:572766871 hcl:#866857
hcl:#888785 pid:200125941 hgt:155cm byr:1923
eyr:2021 iyr:2010 ecl:gry
pid:502547835 iyr:2014 hcl:#b6652a
byr:1985 hgt:189cm eyr:2024
eyr:2024 hcl:#fffffd ecl:amb byr:1952
pid:724639818
iyr:2013 hgt:183cm
byr:2023
iyr:2026 ecl:gry eyr:2032 hcl:3e0fc4 pid:5620497552
hgt:84
cid:79
hgt:68cm
iyr:2021
pid:#365b83 byr:1928
ecl:#79a6b3 eyr:2027 hcl:54130e
hgt:74cm byr:1953
cid:263 iyr:2018
ecl:zzz
hcl:#efcc98
pid:154cm eyr:1951
cid:272 pid:0638528559 hcl:z hgt:63cm byr:2029 ecl:zzz
eyr:2033
iyr:2016
hgt:193cm hcl:#6b5442 pid:715518898 ecl:brn cid:195
eyr:2025
ecl:oth
eyr:2025 hgt:166cm byr:1944
iyr:2017 pid:814141652
eyr:2025 cid:140 ecl:hzl hcl:#c0946f pid:824866056 iyr:2011 hgt:65in byr:1947
iyr:2016
ecl:brn eyr:2021
hgt:161cm
byr:1984 hcl:#602927 pid:821539320
hgt:175cm cid:190 hcl:#ceb3a1 ecl:brn byr:1927 iyr:2017 eyr:2029 pid:836598854
eyr:2026 ecl:brn hgt:157cm pid:038645205 byr:1995
iyr:2019 cid:339
ecl:brn hgt:70in hcl:#c0946f
pid:535498918 cid:153
iyr:2012 eyr:2030
byr:1995
hcl:#efcc98 hgt:174cm eyr:2030 pid:180839761
ecl:grn iyr:2010
hgt:59cm eyr:2035 byr:2021 iyr:2012 ecl:hzl pid:219328725 hcl:#888785
ecl:oth hgt:184cm byr:1984 iyr:2016
hcl:#cfa07d
iyr:1998 byr:2024 ecl:lzr hgt:187 hcl:z eyr:1935 pid:#789b56
iyr:1967 hcl:z pid:828930046 hgt:59in
cid:153
byr:2021
ecl:grn
eyr:1935
byr:1991
hcl:#341e13 ecl:gry iyr:2018
hgt:67in pid:157970631 eyr:2021
byr:1941 hgt:169cm pid:322510952 hcl:#cfa07d cid:75 ecl:oth
eyr:2021 iyr:2020
hcl:#7d3b0c iyr:2013 cid:78 hgt:167cm ecl:brn byr:1974 pid:237404828
pid:1567157833
hcl:#7d3b0c iyr:2025 eyr:2023
byr:2002 ecl:oth hgt:191cm
ecl:amb iyr:2014 hgt:182cm pid:526612838
cid:287 eyr:2025 byr:1988
hcl:#866857
hcl:#866857 hgt:174cm byr:1992 eyr:2028 iyr:2015
eyr:2029
hgt:190cm
hcl:#18171d
cid:245
ecl:oth pid:3636033742 byr:2024
iyr:2019
byr:1972 hgt:163cm eyr:2020 hcl:#b6652a
pid:360516396 iyr:2019 ecl:grn
iyr:1997 ecl:#be02d2
eyr:2020 cid:259 byr:1953
hcl:#6b5442
hgt:177cm pid:978155362
pid:377596476 cid:153
eyr:2025 byr:2000 hgt:181cm iyr:2014 hcl:#abc5cb ecl:hzl
cid:171 ecl:lzr iyr:2013 eyr:1973 byr:2004
pid:#267099 hgt:101
hcl:#623a2f
pid:029193661
hgt:183cm
ecl:hzl eyr:2029 iyr:2013
byr:1977
ecl:amb eyr:2021 hgt:159cm byr:1970 cid:152
hcl:#b6652a iyr:2020 pid:180512119
eyr:2025
ecl:grn
hgt:60in iyr:2013 pid:697352361
hcl:#18171d byr:1989
byr:1934 hgt:165cm pid:703537570 ecl:hzl iyr:2015
hcl:#888785
ecl:gmt
hcl:6dd6a5
byr:1951
pid:#7ab761 cid:304 iyr:1924 eyr:1953 hgt:71in
ecl:amb hcl:#733820 eyr:2030 hgt:178cm
pid:692422832 iyr:2019
cid:276
iyr:2012 ecl:oth
pid:674969358
eyr:2027 hgt:157cm cid:247 hcl:#a97842
byr:2017 eyr:2031 hgt:180cm hcl:#ceb3a1 pid:372071110
iyr:2015 ecl:amb
hgt:165cm iyr:2015
eyr:2021 ecl:amb byr:2000 cid:235
eyr:2027 hcl:#623a2f pid:595874068
ecl:amb
hgt:177cm iyr:2019 byr:1929
pid:8150929412 hgt:191in eyr:2031 cid:233 byr:2027
iyr:2026 ecl:#e94348 hcl:z
hgt:65 byr:2009 iyr:2029 hcl:#fffffd eyr:1950 pid:950012410 cid:212 ecl:#5a6042
ecl:#44c561 hgt:178cm eyr:2021 pid:753771724
iyr:2014
hcl:#70adb2 byr:1989
iyr:2018 pid:809109448 ecl:amb hcl:#b6652a hgt:63in byr:1976 cid:96
byr:2021 ecl:grn pid:9284377919 iyr:2011 hgt:75cm hcl:#18171d eyr:2026
ecl:oth
byr:1926
hgt:63 iyr:1948 cid:61 hcl:a528d1 eyr:2034
byr:1978 pid:150503169 iyr:2015 ecl:grn hgt:172cm cid:70 eyr:2022 hcl:#7d3b0c
byr:1957 hcl:#cfa07d iyr:2010 ecl:amb eyr:2025 pid:921901279
ecl:utc pid:154cm
byr:1964 eyr:1978 hgt:114 hcl:z
byr:1929 ecl:amb eyr:2028 iyr:2013
hcl:#fffffd pid:479814281
cid:105 hgt:64in
pid:949640425
cid:205 hcl:#341e13 ecl:amb
hgt:171cm byr:1998
hgt:190cm cid:113 ecl:grn eyr:2037
hcl:#ceb3a1 pid:7994792779 iyr:2011
hgt:152cm iyr:2010
byr:1992 eyr:2020
hcl:#602927
cid:66
pid:604149642
eyr:2028
byr:1961 hgt:71in
iyr:2013 cid:135
pid:534090716 hcl:#ceb3a1 ecl:oth
iyr:1937 byr:1995 cid:200
eyr:2037 pid:#daf9af
hcl:052017 ecl:zzz hgt:73cm
ecl:amb
hcl:#a97842
iyr:2018
hgt:153cm
cid:149 eyr:2023 pid:533403632
cid:275 ecl:brn iyr:2017 pid:087665205 byr:1945 hcl:#7d3b0c
eyr:2025
eyr:2030 hgt:177cm hcl:#cfa07d iyr:2018 pid:734113761
byr:1965
hgt:163cm byr:1924 ecl:blu cid:125
eyr:2027 hcl:#fffffd pid:137238888
hgt:174cm hcl:#623a2f eyr:2023 ecl:gry pid:585758460
iyr:2011
cid:183
byr:1928 pid:471385060
hgt:192cm
ecl:oth iyr:2010 hcl:#623a2f eyr:2020
hgt:177cm
cid:273 ecl:oth eyr:2020
hcl:#efcc98
iyr:2012 pid:246299733
byr:1954
pid:052203766 cid:146 ecl:hzl byr:1974 hcl:#6b5442
eyr:2030 hgt:173cm
iyr:2011
hgt:167cm
byr:1972 iyr:2010
pid:783359411 ecl:hzl hcl:#9f8cc9 eyr:2028
iyr:2020 hcl:#18171d ecl:grn
byr:1992
hgt:189cm
eyr:2023 pid:736882272
cid:230 ecl:utc iyr:2022
pid:170cm
byr:2015 hcl:#c0946f
eyr:2031
cid:261
byr:1922 hgt:170cm ecl:brn eyr:2021
pid:593276915 hcl:#18171d
iyr:2017
hcl:#341e13 pid:038417039 hgt:61in eyr:2025 iyr:2017
cid:117
iyr:2017 eyr:2026 pid:441484223
hgt:155cm byr:1968 hcl:#ceb3a1 ecl:hzl
eyr:2021
hgt:64in
ecl:oth hcl:#b6652a byr:1954 pid:204959612 iyr:2016
hcl:z eyr:1969
pid:162cm ecl:#944b0f
iyr:2030 byr:2029
hgt:114 eyr:2034 byr:2026 hcl:84fa1a
pid:47909473
iyr:2028
ecl:utc
eyr:2025 ecl:blu hgt:157cm iyr:2014 hcl:#a97842 byr:1974 pid:702610675 cid:241
pid:732388109
hcl:#6b5442 cid:272 eyr:2026 hgt:193cm
ecl:amb byr:1982
eyr:2030 byr:1994
hgt:177in ecl:amb pid:1589147420 iyr:2011 hcl:#4bf920
cid:252
ecl:oth eyr:2022
byr:1948
pid:177cm cid:90 hgt:102 hcl:z iyr:2028
hgt:157cm pid:233347213
hcl:z
byr:2009 eyr:2027 cid:235 ecl:blu
iyr:1965
ecl:blu iyr:2030 eyr:2028 hcl:#18171d pid:322593908 byr:1954
cid:215 hgt:63in
hgt:72cm
cid:345 pid:911728732 eyr:2025
byr:2004 ecl:#0c4af7 hcl:3bb675
pid:171714794 byr:2019
hcl:#866857
cid:290 hgt:183in ecl:#d0c30f eyr:2032
iyr:2016 pid:905945155 hcl:#ceb3a1 byr:1958 hgt:159cm eyr:2028 cid:180 ecl:oth
hcl:efb614
eyr:2022 hgt:177cm pid:46962273
byr:1974
ecl:#089bdd iyr:1988
pid:662993164 iyr:2011 eyr:2025 ecl:hzl
byr:1942 hcl:#fffffd
hgt:175cm
hcl:#7d3b0c iyr:2016 hgt:175cm eyr:2022 pid:953132241
byr:1963 cid:261 ecl:grn
iyr:2013 hgt:180cm cid:318
ecl:amb
byr:1985 pid:439097817 eyr:2029 hcl:#602927
hgt:162cm ecl:blu
pid:675749832 cid:73
byr:1940 hcl:#888785
eyr:2026
pid:275352007 iyr:2012 eyr:2020
ecl:amb hcl:#623a2f hgt:175cm cid:317 byr:1988
hcl:z hgt:164in
iyr:2026 eyr:1961 ecl:#2df35e pid:#5c9ed5 cid:341
pid:848086119 ecl:oth eyr:2021 iyr:2011 hgt:180cm byr:1923 hcl:#93461b
eyr:2028
iyr:2014
byr:1978
hgt:184cm
pid:966277564 ecl:hzl
cid:176
hcl:#888785 ecl:amb cid:329 pid:835961958 byr:1927 eyr:2028 iyr:2016
pid:160cm eyr:2026 hcl:#08714b
ecl:hzl iyr:1961
hgt:156cm byr:1984
ecl:gry cid:302
byr:1965
iyr:2019 hcl:#ceb3a1 eyr:2027 pid:458192010 hgt:156cm
pid:058273969 byr:1942 eyr:2027
hcl:#c0946f iyr:2013 hgt:179cm
iyr:2019 hgt:193in pid:52144528 eyr:2036
cid:169 ecl:grt hcl:7e7039
hgt:192cm ecl:blu iyr:2015 pid:544936486 eyr:2024
byr:1972 hcl:#c0946f
eyr:2000
hcl:78de23 byr:2020
hgt:171in pid:160cm cid:68
iyr:1956 ecl:gmt
hcl:#733820 ecl:grn iyr:2018
byr:2001 pid:770957230
cid:103 ecl:grn iyr:2018
pid:068344094
eyr:2023 hgt:69in byr:1984 hcl:#6b5442
hgt:193cm eyr:2021 ecl:grn hcl:#602927 byr:1938 iyr:2011
iyr:1931
hcl:c0a318
pid:99195939
byr:2028 ecl:grt hgt:164 eyr:2017
eyr:1980
ecl:zzz
hgt:98 cid:161
pid:#96fe01 hcl:z
iyr:1974
byr:1936 hgt:176cm pid:56797167 iyr:2015
ecl:#07ad47
hcl:z
pid:48720181 hcl:270e76
byr:2022
hgt:180cm ecl:#dde399
eyr:2035 iyr:2023
eyr:2030 byr:2022 iyr:2018 hgt:162in ecl:gry
hcl:#63e2ec pid:615812600
ecl:grn
cid:56 hcl:#623a2f eyr:2020 hgt:167cm byr:1971 iyr:2012
pid:262692066
hgt:61 hcl:#efcc98 iyr:2011 eyr:2026
byr:1938
ecl:amb pid:385025739
pid:972423724 hcl:#602927 eyr:2027 ecl:oth iyr:2015
hgt:158cm byr:1956
pid:530035096
ecl:hzl
iyr:2017
eyr:2024 hcl:#888785 byr:1962 hgt:64in
byr:1935 eyr:2022 ecl:grn hcl:#7d3b0c pid:294714199
eyr:2029
iyr:2013
byr:1927 hgt:175cm pid:058261075 hcl:#cfa07d ecl:amb
ecl:blu pid:188764763 hgt:155cm byr:1921
iyr:2018 eyr:2029 hcl:#b6652a
byr:1975 hcl:930e76 iyr:2019
pid:169cm eyr:2009 hgt:191
ecl:#d28c56
hcl:z
pid:3190617557
hgt:160cm cid:80 ecl:oth iyr:2022 eyr:2008
byr:2016
hcl:#888785 byr:1999 ecl:blu cid:238 iyr:2018 hgt:160cm
eyr:2028 pid:174517111
eyr:2035
hcl:z byr:2020
pid:262135957 cid:324 iyr:2016 hgt:161cm ecl:grn
byr:1936
ecl:grn
iyr:2013 hcl:#623a2f eyr:2029 hgt:166cm
hcl:#cfa07d hgt:159cm eyr:2021
ecl:hzl
iyr:2014 pid:816039817 byr:1935
pid:596634790 hgt:161cm
eyr:2036 iyr:2016
hcl:#7d3b0c byr:2015 ecl:brn
byr:1952
hgt:157cm eyr:2024 cid:60 pid:876160626
ecl:blu iyr:2011 hcl:z
hgt:193cm iyr:2020 eyr:2026
pid:0136642346 ecl:hzl hcl:#efcc98 byr:1995
byr:1934 hgt:177cm
pid:445993865
ecl:brn iyr:2018
eyr:2030
hcl:#733820
eyr:2021 hgt:71in
pid:918630878
hcl:#602927 iyr:2017 byr:1943
ecl:gry
ecl:#81de2c iyr:2021 hgt:176cm eyr:1947 hcl:#888785 pid:1370052400
ecl:amb
byr:1922 iyr:2012 eyr:2022 pid:098866466 hcl:#18171d hgt:63in
eyr:2028 iyr:2010 hcl:184355
byr:1968 pid:337089458 ecl:brn hgt:181cm
hcl:#733820 pid:225958483 ecl:gry eyr:2030 hgt:62in iyr:2012 byr:1987
eyr:1955
hcl:03199c
pid:#3e832e
byr:2014 ecl:#453931 hgt:70cm
byr:1975
ecl:blu hcl:#7d3b0c
cid:169 pid:582470437 hgt:151cm
iyr:2019 eyr:2027
iyr:2017 byr:1971 pid:343492418 hgt:150cm hcl:#fffffd eyr:2024
byr:1997
eyr:2026
cid:257 hcl:#7d3b0c ecl:blu hgt:166cm iyr:2016 pid:117625518
iyr:2014 cid:248 hgt:165cm hcl:#18171d pid:294270262
byr:1925 ecl:amb
eyr:2028
hgt:167in ecl:dne pid:174cm iyr:2019 byr:2005 hcl:b29331 cid:86
hcl:#733820 pid:259969636 eyr:2023
ecl:hzl cid:317
hgt:185cm byr:2025
iyr:2012
hcl:#cfa07d hgt:152cm pid:807755992 iyr:2020
byr:1922 ecl:grn eyr:2025 cid:241
pid:997807107 byr:1958 ecl:dne iyr:2013 eyr:2023 hcl:#18171d
hgt:152cm
ecl:blu hgt:170cm
byr:1932
pid:775223495 eyr:2024 iyr:2015
iyr:2011
ecl:grn hcl:#ceb3a1 pid:190577415
hgt:63in
eyr:2021
byr:1986
ecl:oth eyr:2025 hgt:180cm
pid:258195402 iyr:2017
byr:1961
cid:109 hcl:#888785
hgt:178cm byr:1952 eyr:2023 hcl:#733820
pid:106939563 ecl:brn iyr:2012
hgt:188cm iyr:2012 hcl:#fffffd byr:1942
ecl:brn pid:804371742
byr:1978 cid:120
eyr:2026 pid:405714523 hgt:60in
hcl:#a97842 ecl:blu
iyr:2017
iyr:2015 byr:1958 ecl:grn
hcl:#b6652a pid:#9e8af3
eyr:2026 hgt:167cm
hgt:171cm hcl:#888785
cid:274
ecl:grn pid:919263460 eyr:2023 iyr:2020
pid:606726472 eyr:2022
byr:2008
ecl:zzz cid:72 hgt:173in
eyr:2032 byr:2004
hcl:z iyr:2011 ecl:hzl
pid:523494728
hgt:70cm
hgt:169cm pid:755822781 byr:1984 ecl:hzl hcl:#6b5442 iyr:2014
eyr:2020
byr:1942 cid:85
hgt:157cm pid:558287447 hcl:#efcc98
ecl:hzl
byr:1980 cid:225 pid:367501996 iyr:2016 ecl:grn hcl:#efcc98
hgt:175cm eyr:2029
pid:264780775 hgt:182cm ecl:grn
hcl:#18171d
eyr:2024
byr:1926 iyr:2013
byr:1969 iyr:2015
eyr:2026 ecl:blu
hcl:#fffffd
pid:005695878 cid:273
ecl:brn byr:2006 hgt:152cm
hcl:#888785
pid:171cm cid:249 iyr:2026
eyr:2022
byr:2011 iyr:2020 ecl:zzz hcl:z pid:412624100
eyr:2031
cid:111 hcl:df9bd0
iyr:2022 ecl:#32fdf9
byr:2017 eyr:2000
hgt:166in pid:0654651026
eyr:2021
ecl:gry pid:587324819 hgt:187cm byr:1951 hcl:#6b5442
iyr:2011
pid:180780096 hcl:#623a2f ecl:amb hgt:160cm byr:1991 eyr:2026
byr:2022 hgt:152cm eyr:2023 cid:70 ecl:grn
hcl:e0a24e
iyr:1959 pid:77110462
pid:251982311 byr:1994 ecl:gry hgt:165cm eyr:2021
hcl:#623a2f
iyr:2019
ecl:blu byr:1945
cid:241
pid:732768808 hcl:#efcc98
hgt:171cm eyr:2020 iyr:2012
cid:243 eyr:2001
hcl:01a022
hgt:162 pid:507703455
byr:2003 ecl:#c6a07b
iyr:1941
hcl:#733820 cid:150
ecl:hzl pid:843607639 hgt:190cm
byr:1958
eyr:2025
eyr:2030
pid:489370607 iyr:2014 ecl:oth hcl:#cfa07d byr:1995 hgt:193cm
hgt:68in
byr:1933
iyr:2010 ecl:brn
pid:380075958
hcl:#623a2f cid:279
eyr:2025
iyr:2019
byr:2001
hcl:#cfa07d ecl:brn pid:349877352
hgt:161cm eyr:2029
hgt:171cm
eyr:2040 ecl:dne hcl:#6b5442 iyr:2020 byr:1990
hcl:#fffffd
hgt:154cm
byr:1979 eyr:2020 iyr:2018
pid:118713281 cid:174
hcl:#7d3b0c eyr:2030 ecl:brn iyr:2017
cid:184 hgt:180cm pid:504181498 byr:1925
hgt:150cm
eyr:2020 byr:1999 hcl:#a97842 iyr:2011 ecl:grn pid:620166468
hcl:#602927
iyr:2015
byr:1928
pid:083747352
eyr:2027 hgt:193cm
ecl:hzl
byr:1938 ecl:gry
pid:511669464 eyr:1973 hgt:70cm
cid:262 iyr:2015 hcl:#c0946f
eyr:2029
byr:1923 hgt:160cm hcl:#7d3b0c iyr:2013 pid:525837692 ecl:gry
hcl:#602927 eyr:2025
pid:232338168 hgt:174cm cid:322 iyr:2010 ecl:oth
hgt:192in cid:126 hcl:#6b5442
pid:101406211 byr:1922 ecl:hzl eyr:2022 iyr:2013
eyr:2026 ecl:amb
byr:1921
cid:336
iyr:2020 hgt:182cm pid:533626984
pid:411943955 ecl:amb eyr:2025 hgt:166cm byr:1964 hcl:#341e13 cid:285
iyr:2010
ecl:grn byr:1933 eyr:2024
hgt:153cm
hcl:#5cfb31 iyr:2019 pid:773885967
ecl:hzl pid:426060511
hgt:159cm
byr:1922 hcl:#6ffd04 iyr:2017
byr:2025 pid:#097d1b iyr:2020 eyr:2029 hcl:73d113 hgt:69cm ecl:utc
ecl:amb hgt:170cm eyr:2025 byr:1930 iyr:2018 hcl:#733820
cid:262
iyr:2019
eyr:2021
cid:65 pid:258615618
ecl:oth byr:1987
hcl:#efcc98
hgt:178cm
hcl:z eyr:1980 ecl:#1c5fd1 hgt:65cm byr:2014
cid:222 pid:#c69fd5 iyr:2020
cid:271 pid:#4b8380 hcl:80fab0
byr:2024 ecl:#20e25f
iyr:1945
eyr:1935 hgt:159cm
";
void Main()
{
var passes = Input.Trim().Split("\n", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
Seat.Parse("FBFBBFFRLR").Equals(new (44, 5)).Dump(); // 44, 5
Seat.Parse("BFFFBBFRRR").Equals(new (70, 7)).Dump(); // 70, 7, 567
Seat.Parse("FFFBBBFRRR").Equals(new (14, 7)).Dump(); // 14, 7, 119
Seat.Parse("BBFFBBFRLL").Equals(new (102, 4)).Dump(); // 102, 4, 820
var seats = passes.Select(p => Seat.Parse(p)).OrderByDescending(p => p.SeatId).ToList().Dump();
int min = seats.OrderBy(s => s.SeatId).First().SeatId;
int max = seats.First().SeatId;
(max - min).Dump();
Enumerable.Range(min, max - min).Except(seats.Select(s => s.SeatId)).Dump();
}
record Seat(int Row, int Col)
{
public int SeatId => Row * 8 + Col;
public static Seat Parse(string raw)
{
raw = raw.Trim();
int rowDiv = 128;
int row = 0;
for (int i = 0; i < 7; i++)
{
rowDiv /= 2;
row += raw[i] == 'F' ? 0 : rowDiv;
}
int colDiv = 8;
int col = 0;
for (int i = 7; i < 10; i++)
{
colDiv /= 2;
col += raw[i] == 'L' ? 0 : colDiv;
}
return new (row, col);
}
}
static readonly string Input = @"
FFBBFFFLLL
BFBFBFBLLR
BFFBBBBRRR
FBFBFFFLLL
FFFBFBBRRL
FBBFFBBLLR
FBBBFBFRRR
FBFBBFFLLL
FBFBFBFRRR
FFBFFFFLRL
FBFBFBBLRL
FBFFFBBLLR
FBBBBBFLLL
BBFBFFFLLL
FBBBBFBLRL
FBBBBFBRRR
FBFFBBBLLL
FBFFFFFLLR
BFBFFFFRRL
BFFFBBBLRL
FBBBBFBRLL
BFBFBBBRLR
BFBBFFFLRR
BBFFFFBRRR
FFBFBBFRRR
FFBFBFBLRR
BBFBBFBRRL
BBFBFBFLRR
FBBBBFFLRR
BFBFBBBLRL
BFBFFFFRLL
BBFFFBFRLR
BBFFFBBLRR
FBFBBBFRRL
BFBFBBFLRL
BBFFBBBRLL
BBFFBBBLRL
FBFFFFFRLR
FBFBFBFRRL
FBBFBFBLLR
BFBBFFBLLL
BFFFFBFRLR
FBBFFFFLRR
FFFBBFBRRR
FBFFBFFLRR
FFBBFBBLLR
FBFBBFBLLR
BFFBBFBRLR
FFBBBBBRRR
FBFFBBFRLL
BFFFBFFRLL
BBFFBFBLRR
BFFFBFBRLR
BFFBBBFRLR
BBFBFBFRLL
BFFFBFFRLR
FBFFFBFRLL
BBFBFFBRLR
BBFFBFBLRL
FBBBBBFLLR
FBBBFFBRLR
FFFBBBFRRL
BFBFBBBRRR
BBFBFBBLRL
FBFBBBFLRR
FBFBBFBLLL
FFBBFBFLLR
BFBFBBFRLR
FFBFBBBRRR
FFBFBFFRRR
BFBBFFFRRL
BFFBBBBRLR
BFFBFFFLRR
FBBFBFBLLL
FBFFBBBLRL
BFBBBBBLRR
BBFBFFFRRL
BFBFFFFLRL
BBFFBBFRLL
FBFBFFBLRR
BFBFBBFRLL
BBFFFBFLLR
BFBFBFFLRL
BFBFBFBLRR
BFFFFFFRRR
FFFBFBFRLR
BFFFFFBRLL
BFFFBFFLRL
BBFFBFFLRL
FFBBBFFLLL
FFFBFBBRLL
FBFFBBFLRR
BBFBFFFLRL
BBFBFFBRRR
FBFFFBFLRL
FFBFFBBRLR
FBBBFBBLRL
BFFFBBFRLR
BBFFBFBRLR
BFFFFBFRRL
FBFBBBBLLR
BFFBBFFLRL
FFBFFBFRLR
FBBFFFFLLL
FBFFBFFRLR
BFFBFBFLLL
BFFFBFFLLR
BFFBBFBLLR
FBBBBBBLRR
BFFFFBFRLL
BBFBBBFRLR
FFBBFFFRRL
FBBFFFBRRL
FBBFFBBRLR
BBFBFBBLLR
BBFFFBFRRL
BFFFBBFRRL
FBFBBBFLLL
BBFFFBFRRR
FBFBBFFRLR
BBFFFFFLRR
FFBFFFBRRR
BFBFBBFRRL
FBBFFBBLLL
FFFBBFBLRL
FBBFBBFLRR
FBBFBFBLRR
FBFFFBBRRR
BBFFBBFLRL
FBBFFBFLRR
BBFBBFFLRR
BFFFFFFLRL
FBFBFFFLLR
FBBFFFFRRR
BFBBFFBLRR
FFBFFFFLLR
FFBFBFFLRR
BBFFFBFLRR
FBBFBBBRLR
FBBFBFBRRR
FBFFBBFLLR
FFFBBFBRLR
BFFBBFFRRR
BFBFFBBLLR
BFFBBFFRLL
FBBFBFBLRL
BBFFBBFRLR
BFFBFBBLLL
FBBBBBBRRL
BBFFBFFLLL
FBFBFFFRRL
FBBBBFBRLR
FBBFFBBLRL
FBBFFFBRLR
FBFBFBFLRR
BFFFBBBRRL
FBFBBBFRLR
BFFBBFFRRL
FFFBFBBLRL
FBBFBBFRRL
FFBBBBFRRL
FFBBBFBLLL
FBFBBBFLRL
FBBFFBFLLL
FFBFFBFLLL
BBFBBFFRLL
FBBFBBBLRR
BFBBBFFRRR
BBFFBBFRRL
BFFBFFFLLR
BBFBBBBLRL
FFBBFBBLRR
BFFFFFFRLL
FBBFBFFLRL
BBFFFFBLRL
BFBFFFBRLL
FFBBBFBRRL
BBFBFBBRLR
FBBBFFBLRR
BFBBBFFLLR
BFBBBBFRLL
BFBBBFFLRL
FBFBFFBLLR
FFBFBBBLLR
BFBBFFFLLR
FBFFBBFRLR
FFBBFBFRRL
BFFBFFFRRL
BBFBFBBRRR
BFFBFFFRLR
BFFFBFFLLL
FBBBFBFLRR
FBFFFFFLLL
FBBBFFFLRL
BBFFBBBRLR
BBFFBFFRRL
FFBFFFBLLL
FFBBFFBRLR
FFBBBFFRRR
BFBBFBBLRR
BFBBBBFLLR
BFFFBFBRLL
FBBBBFFRRL
BFFBBBFLRL
BFFFFFFLLR
FFBBBBFLRL
BFBFBBBLLR
BBFFFFFRLR
FBBFBBFLLR
FFBBBBFLRR
BFFBFFBRRL
BFFFBBFLRL
FBBBFFFLRR
FBBFFBBRLL
FBFBFBBLRR
FFBBFFBLLL
FFBFBBFRRL
BFBBFFBRRL
BFBFFBBRRL
FFFBBFFLLL
FFFBFBBLRR
BFBBFBFLLL
BFFFBBBLRR
FBFBFFFRLL
FBBBFBFLRL
BFBFBFBRRL
FBFBBFFRLL
FBBBFBBRLR
FBFFBFBLLR
FFBFBFFLLR
BFFFBFBLLR
FFFBBBFLRL
BFFBFBFLRL
BFFBFBBRRL
FFBBBBBLRR
FBBBFBFRLR
BBFBBFFRLR
BFBFBFBLLL
BFBFFFBRRL
FFBBBBBRRL
BBFFFBBRLR
FBBBBFFLLL
FFBBFBFLRL
BFBFFBFLRR
BFBBBFBLRR
BFBBBBFLRR
FFFBFBBRRR
BBFBBFBRRR
FFFBBBFLRR
FBBFFFBLLR
BFFBFBBRRR
FFFBBBBLLL
FFFBBFBLLR
BFBBBFFRLL
FBBBFFFRRL
FFBFFFFRRR
BBFFFFBLLL
FBFFFFFLRR
BBFFBBFLRR
FFFBBBFRRR
BBFBBFBRLR
FBBFFBFLLR
FFBFBBFLLL
FFBBBFFLRR
FBBFFFBLRL
BFFFBFBRRL
FBBFFFFRRL
FFFBFBBLLR
FBBFFBFRLR
BFFBBBFLRR
FBFFBFFRRR
BFBFFBFRRR
BBFFBFFLLR
FFBBFBFLLL
BBFBBBFRRR
FBBBBFFRLL
BFBBBBFLRL
BBFBFFBLLL
FFBFBBFLLR
BBFFFFBLLR
BBFFFBBRRR
BFFFBFFRRL
FFBBFBBRLL
FBBBFBFLLR
BFBBFBFRRR
BBFBFFFRLR
FBFFFBBLRR
BBFFFFFRRL
FFBFFBBLLL
BFFBBFFLLR
FBFFFBFRLR
FBFFFBBLRL
BFBBBFBRLL
BFBFBFFRLL
BFBBFBFRLR
FBBFBBFRLL
FBBBBFBLRR
FBBBFBFRLL
BBFBFFFLLR
FBBFBBBRRL
FFBFBBFLRL
BFBBBBFRRL
BFFBBFFRLR
BFBBBFBRRL
FFBBFFBLRL
FFBBBFBLRL
FBBFBBBLLR
FFBFFFBRLL
BFFFFBBLRR
BFBBBBBRRL
BFFBBFBRRR
BFFBBBFLLR
BFBFBFFLLL
FBBBBBBRRR
BFBFBBFLLL
BFBBBFFRRL
BFBFBBFLLR
FBFBBBBRLL
FBFBFBBRLR
BBFBBFFLLR
BBFBBFBLRL
BBFFBBFLLR
BFBFFBBRLR
FFBFFFBRLR
FBBFBFFLLR
FBFBFBFLLR
FFBBBFBLLR
FFBBBFBRLR
BFFBFBFRLR
BBFFFBFRLL
FFFBFBBRLR
FFBFFFFRLL
BBFFFBBRRL
FBFFFFBRRR
BFBFBFFLRR
FBBFBFFRLR
BBFBBFBLLL
FBFFBBBRRL
FFBBBBBLLR
BBFBBBFLLR
FFBFBFFRRL
FBFFFBBRLR
FBFBBFBRLL
BBFFFFFLLL
FBBBBBFLRL
BBFBBBFLRR
FBBFBFFLLL
FFBFFFBLLR
BFFBBBFRRL
FFFBBBBLRL
FFBBFBFRLR
FBFFFBFRRL
FFBBFBBRLR
FBBFBFBRLR
FBBBFBBLRR
FBFFFFBRLR
BBFBBBFLLL
FBFFFFBLLR
FFFBBBFRLL
FFFBBFFRLR
BFBBBFBLLL
BBFBBFFLRL
BFBBFFBRLR
FFBFBBBRLL
BFFFFFFLLL
BFBBBFFLRR
BFBBFBFRRL
BFFFFFFLRR
BBFFBBFRRR
FFBBFBBLLL
BBFBBFBLRR
FBBBBBFRRL
FFFBBBBLLR
FFFBBBBRLR
BBFBFBBLLL
BBFBFBBRLL
FBFBBBFRLL
BFBFBFBRLR
BBFBFFFRRR
FFBBBBFLLR
BBFFBBBLRR
FBBFFBBRRL
FFFBBFFRLL
FBFBBFFLRL
BFFFFBBLLR
BFFBFFBRRR
BFBFFFBLLR
FFBBFFBRRL
FFFBBBFRLR
BFFFFFBLRR
BBFBBBFRRL
BFBFFFBLRL
FBBFBFBRLL
BFFBBBFRRR
FBBFFBBRRR
FBFBFBBLLL
FFBBBBFLLL
FFBFFBFLLR
BBFBBFFRRL
BFFBBBBLRR
FBFBFBFLRL
FBBFFFFRLR
BBFBFFBLRL
FFFBBFBLLL
FBBBFFFRLL
FBBBFBBRLL
FBBBFFBRRR
FBBBFFBLLL
BFBFFFFRRR
BFBBBBBLRL
FBFBBBBRLR
FBFBFFFLRR
BFBBBBBLLR
FFBFBFBLLR
BBFBBFFRRR
FFBBBBBRLL
BFFFFBBLRL
FFBBBFBRRR
FBFFFBFLLR
BBFFBFBLLL
FBBBBBBLLR
BBFBFBBRRL
BFFFFBFLLL
BFBFFFBRLR
FBBBBBFRLL
BFFFFFBRRR
BFBBFBFLRR
FBFBBBBLRR
FFBBFBFRLL
FBBFBBBLRL
BFBFBFFRLR
FBFBFFBLLL
BFBBFFFRLR
FBFBFBBRRL
FFBFFBFRRR
BFFBFBBLLR
BFBBFFBLRL
FBBFFFFLLR
BBFBFBFLRL
BFBBFBBRRL
BFBFBFFRRL
FBFBBFBLRL
BFBBFFBRLL
FFBFFBFRLL
FFBBFFFRLL
BBFFBBBRRR
FFBBBFFLLR
BBFFBFBLLR
FBFFBFFLLL
FBBFFFFRLL
BFBFFBFLLR
BBFFBFBRRL
BBFFFFBRRL
FFBFBFBLRL
FBFFFFBRRL
BBFFFFFLRL
BFFBFFBLLR
FFBFFFBLRL
BFBFBBFRRR
FBBBFFBRRL
FFBBFBBRRL
BFFBFFFLRL
BBFBFFFLRR
FFFBBFFRRR
BFFBFBFRRR
FBFFFBFLLL
FBFBBFFLRR
BFBFBFBRLL
FFBFFFFLRR
BFFFFFBLLR
FBFBBFFRRR
BFBBBBBLLL
FBFFFFBRLL
BFBBBFFLLL
FBBFFFBLRR
FFBFFFFRRL
BFFBBBBLLR
FBFFBBFRRL
FBBFBFBRRL
FBFBFFFRLR
BBFFFFFLLR
BFBBFFFLRL
FBBBFFBLLR
BFBBBFBRLR
FBBBBFBLLL
FBBBFBBRRR
BBFFBFFLRR
BFFFBBBLLR
FBBFFBFRLL
BBFBFFBLLR
BBFBFFFRLL
FFFBBBFLLL
FBFFFFBLLL
FBFBBFBLRR
FFBFBFBRRR
FBFFBBBRLR
BFFFFFBLRL
BBFFBFBRRR
BFFFFBFLRR
FFBBBBFRLR
FBFFBFBRRL
FBFFFFFLRL
FFBFFFBLRR
BFFBBFBLLL
FFBBFFBRRR
FFBBFBFLRR
BBFFBBFLLL
FBBBBBBRLL
FFBFFBFLRL
BBFFBFFRLR
BFFFBFBLRL
BFBBBBBRLL
BFBBFBFLLR
BBFFFFBRLL
FFFBBFFLLR
BFFBBBBRLL
FFBBFFFLLR
BBFBFBBLRR
FBFFFFFRLL
BBFBBBFLRL
BBFFBBBLLR
BFFFBFBRRR
FBFFFBBLLL
FBFBFBBRLL
FFBFBBFRLL
BFBBBBBRLR
BFBFFBBLRL
FFBBFBBLRL
BFBFFBFLRL
FBBFBFFLRR
BFBBFBFLRL
FBBFBBFLLL
FBFFFFBLRR
FBFBBFFRRL
FBFFBFFRLL
BBFBBBBLLR
BFBBFFBRRR
BBFFFBBLLR
FBFBFBBRRR
FBBFBBFLRL
BFFBBBBLRL
FBFFBBBRLL
FFBFFFFLLL
BBFBFBFRRL
BFBFBFBLRL
BBFFFBFLLL
FFFBBFFRRL
FFBFFBBLLR
BFBFFFFLRR
FFBFBBFRLR
FFBBFFBLLR
BFBFBFBRRR
FBBBFFFRLR
FBFBFFFRRR
FBFFBBBLRR
FBFFFBBRRL
BBFFFFFRRR
FFBFBFFLLL
FBBBBFFLRL
FBFBBBBRRL
FBFBBBBRRR
BFBBFBBRLR
FBFBFFBRLR
FBFFFFFRRL
FFBFBBBLLL
FBFFBBBRRR
FBBBFFBRLL
BFFBFBFRRL
FFFBBBFLLR
FBFFBFBRLR
FFBFBFBLLL
FBBFBFFRRL
FFBFFBBLRL
BFFBFBBLRR
BFFFFBFLLR
FBFFBFBLRL
BFBBFBBLLL
FFBFBFBRLL
BFFBBBFLLL
FBBBBBBRLR
FBBBBBBLLL
FFBFBBBRLR
BFFFBBFLRR
BFBBBFBLLR
FFFBFBFRRR
BFFFBBBRRR
FFBFFBBRLL
BFFBFBFLRR
FFBBBBFRLL
BFBBFFFRRR
FBBFBBFRRR
BFFBBBBLLL
FBFFBBFLRL
BBFBFFBRLL
BFFFBFFLRR
BFBBBBFRLR
BFFBFBFRLL
BFBFFBBLRR
BFFFBBBRLL
FBFBBBFLLR
BBFBFBFRLR
FFFBBFBRRL
BBFFBFFRRR
BFBFFFFLLL
FBBBFFFLLR
FBFBBBBLLL
BBFFFFFRLL
FBFFBFFLLR
BBFFBBBLLL
FFBBFBBRRR
BFBBBFBRRR
BFBBBBFRRR
FFFBFBBLLL
FBBFFBFLRL
BBFFBBBRRL
FBFBBBFRRR
BBFFFFBLRR
BFBBFBBRRR
BFFBFFBLRL
BFFFFFFRRL
BBFFFBBLLL
FBFFBFFLRL
FBFFFBFLRR
FBFBFBFLLL
BFFBBFBRRL
FBBFFFBLLL
BFBBBFBLRL
FBFBBFBRLR
FBBBFFFRRR
FFBFFBBRRR
FFBBFFBRLL
FFBFBBFLRR
BFFFBFBLLL
BFFFFBBRLL
FFBFBFFRLL
BFFBFBFLLR
FFBBBFFRRL
BFFBFFFRLL
BBFFBFBRLL
FFBBFBFRRR
BFBFBBFLRR
FBFBFFBLRL
FBBBBFBLLR
FFFBBFFLRR
FBFBFFBRRL
BFFFFBBRRR
FBBFBBFRLR
BFFBBBFRLL
BBFBBBBLLL
FFBBFFFRLR
BFBBBBBRRR
FBFFBFBRRR
FBFBBFBRRL
FBFFFFFRRR
BFFFFBFRRR
BFFBBFBLRR
FBBBFBFRRL
BBFFFBBLRL
BFBFFFBRRR
FFBBFFFLRL
FFBFBFBRLR
BFBFBBBRLL
FBBBFFBLRL
BFBFFBBLLL
FFBFFBFLRR
FFFBFBFRRL
FBBBBFFRRR
BBFFFFBRLR
FBFBFFBRLL
BFBBFBFRLL
BFFFFBBLLL
FBFFBFBLRR
BFFFFFFRLR
FBFBFBBLLR
FFBBBFFLRL
FFBFBBBRRL
FBBFBBBRLL
BFFBFFFLLL
FFBBFFBLRR
FBBBFBBLLL
FBBFBFFRLL
FBFBBFBRRR
BFFBBFBLRL
BFBFBFFRRR
FFBBBBBLLL
FFBFBFFLRL
FFBBBFBRLL
FBBBFBFLLL
FBBBBBFRRR
BFBFFBBRLL
FBBFFFBRLL
FFBBBFFRLL
FFBFFBBLRR
FBFFBFBRLL
BBFBFBFLLL
BFFFBFBLRR
FBBBBBFRLR
FFBBBBFRRR
BFFBFBBRLL
FFFBBFFLRL
BFBBFFBLLR
BFFFFBBRRL
FFBFFBBRRL
FBFFBFFRRL
FBBBBBBLRL
BFFFBBBLLL
BBFBFFBLRR
FBBFFFFLRL
FBBBBBFLRR
BBFBBFBLLR
BFFFFBFLRL
FBBBFBBLLR
BBFBFBFRRR
FFBBFFFRRR
BBFFFBFLRL
BFBFFFBLLL
FFBBBBBLRL
BBFBFBFLLR
BFBFBBBLRR
BFBBFFFLLL
BFFFFFBLLL
FBFFBBBLLR
BBFBBFFLLL
BFBBFFFRLL
BFBFFBFLLL
BFFBBFFLRR
FFBBBFFRLR
BFFFBBFLLR
BFFBFBBLRL
FFFBBBBRRL
BFFFBBFLLL
FBFBBFFLLR
FBFFBBFRRR
FBFBFBFRLL
BFBBFBBLRL
FFBBBBBRLR
FFBFBBBLRL
FFBFBBBLRR
BBFFBFFRLL
BFFFFBBRLR
FFBFFBFRRL
FBFFFBFRRR
FBBBBFBRRL
FBFFBFBLLL
BFBFFBFRRL
FFBFFFFRLR
BFBFBBBRRL
FFBBBFBLRR
BFFFFFBRLR
BFFBBFBRLL
BFFFBFFRRR
FBFFBBFLLL
BFFFBBBRLR
FBFBFFBRRR
FFFBBBBRLL
FBFBFBFRLR
BBFBBFBRLL
FBBBFFFLLL
BFFFFFBRRL
FBBFFBFRRR
FBFBBBBLRL
BFBFFFFLLR
BFFBFFBRLR
FFBFBFBRRL
BFBFBBBLLL
BFFFBBFRLL
BBFBFFBRRL
BFBFBFFLLR
FBFBFFFLRL
BFBBBBFLLL
FBBFFFBRRR
FBBBBFFRLR
BFFBFBBRLR
FFBBFFFLRR
FBBFBFFRRR
FBFFFFBLRL
FBBBFBBRRL
FBBFFBFRRL
FBBFFBBLRR
FFFBBFBLRR
FBFFFBBRLL
BFBFFBFRLR
FBBBBFFLLR
BFBBFBBLLR
FFBFFFBRRL
BFBFFBBRRR
BFBBBFFRLR
FBBFBBBLLL
BFFBFFBLRR
FFFBBBBRRR
FFFBBFBRLL
BFFBFFBLLL
BFFBFFBRLL
BFFBBFFLLL
FBBFBBBRRR
BFFBFFFRRR
BFFBBBBRRL
BBFBBBFRLL
BBFFFBBRLL
BFFFBBFRRR
FFBFBFFRLR
BFBFFFFRLR
BFBFFBFRLL
BFBBFBBRLL
FFFBBBBLRR
";
void Main()
{
var sGroups = Input.Split("\r\n\r\n", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
// Number of answers where passengers said 'yes'
sGroups
.Select(group =>
group.Split("\n", StringSplitOptions.TrimEntries)
.SelectMany(person => person)
.Distinct()
.Count())
.Sum().Dump();
// Number of answers to which all group members said 'yes'
sGroups
.SelectMany(group =>
{
var people = group.Split("\n", StringSplitOptions.TrimEntries);
return people
.SelectMany(person => person.Distinct())
.GroupBy(response => response, (r, g) => (response: r, count: g.Count()))
.Where(g => g.count == people.Count());
})
.ToList().Dump()
.Count().Dump();
}
static readonly string TestInput = @"
abc
a
b
c
ab
ac
a
a
a
a
b
";
static readonly string Input = @"
lfnghcsvpyrdjtxozimb
mdtbnorpfalcijxvhsy
elmwjkfbihydxcpqtovsrun
tlhmsdjingyxcbfrvpo
a
a
xqh
mxdeqcinvfg
vbncrgzxqefka
oejsdfwm
fojsmewd
ewxfsouimdj
eodafjwsm
edjwsmfo
d
d
j
mgxywknlt
khgwmr
wkpezgboavm
mjgkwni
mwkcg
mqzjtgskhadecwy
nhkjeqgdtfsa
rc
cru
hcr
vuaeqdcnty
nltovzycbeidu
phcqe
chep
hpce
smjuow
jwktu
ujw
ljphnwtmugi
giltnpuwm
mgtulpkiwn
uxltinpgwm
jmglintwpu
slbguajo
lqwardbuo
zlqmdobau
ucalqob
lobua
uwtcp
umtlwc
lrcpgjwqfaybxtisoznuhe
wjpnrsxiultyabgzhcqfe
clmfrxgbqikzpsoduvjy
uoxibjmkygrsdqczplfnv
oncmzsf
onzmds
snzmo
zlmegxcnavjb
bmloajdecvwzxgn
pjgzecxvsmbhnla
fngpcvhaexzlbjm
ulhkjzxadgvc
uejbgctld
xuindfqzvpg
ugdofws
qrpvexjlywfmgbintuzk
wrtnibqvuflkeypxg
kretgquypbinwxfvl
tmrdpzxvily
itorywvlxjcd
rltdvygbxic
xyliotvrdc
xrvtdilygc
uihswfvanoyzl
owgnzcshuvaqlfiy
whrtnuoyimzlsvqfac
jiekwxbznhfvuplo
jgbtesurivfxclapnqdmkzhyw
dcnjhsqgkzyitwfplvearubxm
umovhtgaekjixwfcdnq
fcoamwkvjeqxhdbgitn
datcxweqzhirmjfnkogv
vwahorqcxfilmkgtndej
myhkadptsgcxfojinqewv
oys
syo
oys
yso
oys
fatvyeruxnilcmpd
ydacelgfmrxtvin
tgdirmynaxclqwe
jstnbxmdlcezhraiy
fkbnpgyhs
ktnhbya
ybhan
wqconhbey
zicrfu
dblyczk
eshjmczvn
cdzgofpx
rawzc
hcuypzdfalvt
dfplcsyvazrqh
lfcdvzrhyabtqup
lycegwaofdkmzpnihv
ayvzdhscplf
rvowpcnbjlfhe
hsgbdivpcjlxo
wbiplofhkmgvr
wvmrohkbfeglpi
bvklotpghrfiwm
wltkighfbrmvpo
bgvkflitwhmpor
dwmorjebnchvuaz
hyikgfenl
nykhxegq
pnsactlj
knytclorg
w
wj
w
gushnlqjctfvwiyz
shtqjuvzcgniy
cgdusyjpntzivqh
ivuzjgcnqhwtsy
vcusgtqinyzhj
fjnacgiw
ngijcfw
gcwnifjo
wvhsncikgtfj
tecvxgzsjridpa
azvtdgprjesixc
mxspejvzrdcaigkt
vristcjaexpzdg
jvipeagxdtczsr
v
f
w
w
wrsxdmlay
yxalwfs
xlatysmwe
bgqyohvpzswnlxujcak
silxayw
zxelswo
slwzpxo
aizvyoqg
ealnxdyczgpsrj
hkmwbutf
cohalxbk
suiydp
qebdumfwsjagk
cxaokgmr
r
x
a
xhey
exhy
hxey
zchi
izhc
dh
dsh
hd
lfjcmoauvzxqitdspbw
febzhrmowptvsqiyaudjkgc
ijausfvcdznmpqowtb
vcsfzqbjoipuwadmt
up
rkpy
nzjdbg
twkl
tuepkzc
opzst
rgszfijlxneuvqcmktpa
azcjfnkuvlpegmrsq
fgjzkvusqnmlcarep
kvrcpumgsfqalezjn
tvqiwkmdf
qfdtvowsk
tvkifsrqdw
vgdxeubfkjhqzlpwt
dvkytawfqm
yhiogvbkxlzjwsafd
fylwkxhotbasivdjzg
cdjfgnkshmwyxvaliozb
xusvawyhzklgjoifbd
vkisfrjowaxhglydubtz
kqws
xqysrkw
lcjsqkmw
qwsk
koqsw
wc
cjw
wc
cw
wc
awrshieplc
ixelpycsrvw
qebsmzklpwiuocg
cxf
xf
najxvf
xfh
umgylpoz
fxwcyet
yt
t
gbeskji
ejbsqki
grmdbezfou
ufzbredgom
wmtvcfhk
cyleh
prseclyhz
cyrwzamnoxhue
hxacmyenru
ndyrashxgmecu
eilychmuraxnfbtv
fbgwal
ablhjg
agxlb
cvw
vcoz
nvmrc
prvbngaqh
qbhgpvarn
palgyevfrqnhb
vgqnbarhp
rbhavqpgn
fztoevmhwgnb
nbhfweomvg
zfmghoevwbn
vhmsfgwcbeonq
negfvwobhm
qbx
dev
hyzl
wr
ltnibrq
qrbnil
rlbinq
qinrbl
irnqbl
thfng
gfhkbd
hmucga
rhdg
fqwalrhvpyxieu
plehrstgivfx
xbcvtrpefldih
efpxrlhvdi
kculvzfnesawmty
vkztnuycwfamlse
ecvnzlumykwatsf
zatkulemcyfsvnw
tafczlusnywekmv
a
a
a
a
cktun
lnrdyfk
rexndcwvkibpflzjqymu
exivdprnjzyblfmkwc
czbknjlrfdivxypmwe
fjvgyixpedkmrwzncbl
hricxbjypenlzfdwvkom
vqebrauop
ebopavuc
upabhveo
vobeaup
iaxlnehuycwkrmzqsbp
bynlcreqpswzmxikhau
nb
ikqoh
ho
qjh
oaixhtmeqc
envpiuhkqdmjx
xhforyeqwim
hcaezwimxq
ctubrpd
dstub
vchgnkea
hkegyxivc
fpychegtvk
apxkiotyjzsqufvbld
daviftqlxopsbyjku
zblyqpajvkdsixuotf
lafqdsyjuckbtoixvp
pmlwfdcbik
xzjebqshotrnygu
cepzjtkamvnfuloqrig
vkoiepjfnztuglqmarc
pnjrlqgmkzotiuevfca
tluscvmjrzkgaeipnfqo
k
k
r
ae
ea
ae
ea
ae
ypvtzi
mtu
tjs
fjust
ufmtj
zilgoaqmr
aqopzmuvxlwrjg
ozrmnadbqgl
rbfm
r
rep
vfmr
ajrsgqiodfmwuezkltv
tqsfiwvgzmeurdkajlo
sqgywzoakturjlimfdev
wplbfyivhasrujdgzqcmxnk
tklsezcwrihvj
vshfrae
bhnocstidq
xlhsfmza
swlxah
mpksvhy
uelktdbswyjpaxqmnr
ruvwjsnyadhmzepb
jepzvwaqublirdftgcmx
lwncbxgqkvdjpztiuamf
vxmfwtlaibpjgzucdq
pfidxgumvtacwblqzj
dsgivqfnptwzmbaxucjl
gotqzew
jdfn
dub
v
nzj
jg
g
vp
n
clbgtr
tgrlbc
rtbclg
rtbylgac
uyit
iuqtpc
ituj
tui
jlsipo
hpijl
solxjip
izplej
xlpitsj
zd
grntma
w
iz
lkxgcpywohifnu
hyglocfnkpqwux
fjz
hj
fxpjdrglkntmzce
qznmtgfpljcrhd
w
hauesfy
goixwvdy
dxivyow
dowvyix
idxowvy
dvowxyi
bw
y
swg
uyw
aijx
xhkdzbts
pedonw
gqld
neslgchypjqavwr
aclkpygqtnwiosh
vboyhcijednm
neyvjcd
yvdjnec
ednvjcy
pezkudgxf
zpfxgkbedu
exkzgfdpu
oulheigbsfjn
ltnagbieju
vmyhslndzaroiqpgxutfk
dpilskvjutayrghzon
dctniozulkhpsvgrya
srhtzkyupavdngoli
aeybn
slcoixqtkgh
bw
rvfzp
uynjmpd
zexkwslndgyi
encftykmx
rhbenmkoyjx
xymnrke
kyxjbnumer
egdq
efkxg
lmnscieutozapj
wye
nk
ny
wn
nk
wnmubxsrvqzcyhtpjf
sjymafxtzhcnriubwv
msub
ubvyhkm
ulmocbq
blfcuepqm
gtsfubrozwdiapm
oqkuvhncxbzip
vfbklexjnhziwsayqtrpm
ntrzifljyqvesamhpk
hnvmkyprultqsifazoejc
ejcvmtnipfalyrhkzqs
qtiavmhrlneydpjgkszf
yxst
hgtwy
ymf
yv
zpdyb
amdhqbzjkxilowtuvgnrfpsy
fugmwydqvsihkntlxjeazbo
rsvxyzqjoadibglfthunmkw
qzbsk
bqzsk
zsbqhk
zkbsdq
qdbkzs
dwlij
jldiwn
jiwnl
ljwrbi
jiwl
nmbhlqkaovrgiudte
dbnotamqvikeglhzrx
ohgnmkrztblaidvqef
tbqvahorjgniewldmk
qrtvyobigemkdlhan
par
rpx
rq
r
r
r
r
nuxaoymrctdsikpeghzqwjb
lrnpzwbyiksdcjeumxga
efzlgxyvdubrsmjwpnakci
ftm
t
zjydrsx
syrxjdz
sjrxyzd
rxczvljiahfwmbok
olznqgdawfjtchibvmrx
ydlwknjzhugeamq
jzvylqmgdewhaukn
zyluqhnewjdamgk
lnuygmwdaehkqzj
jindyaeqzulwghmk
ujcbsanxhmltdvzeg
uznjaedcmlgstbhxv
ejxp
dypjn
lan
bwgvkrm
v
s
s
s
s
rdswzekavfj
jubothxgani
jazgdw
gazjdw
gajzdw
wdjzga
mnecwfslyp
yfntmsl
mcnfghls
xlinzojsvm
ocgxrsmheynbvuiw
handgupyeslixmwcbvr
yfzhmrpdkustegwoalbq
lyftdmopzrewsgbu
rwuglfsbkdtcnpqozme
etzuwbsoyprfdglm
dmwtljgrszpfeobiux
ealrftgbzy
blgearjyz
yngdbxclrzmea
jayfrezbglh
leargyszbf
clkedspwxzqhfojb
nsxhezwcjpkdfoqb
czowphbeskfjqxdl
pkzoadrt
dozrtapk
dtorzpka
atdpzrko
vrjyxhnqfg
yjhrnvqag
owgadqkfusicxrztl
qicupjdzgkolftw
o
q
csbaloz
cozblas
soczalb
lczabso
mtozcbsla
faljzbneuxympogctdi
cailgjmzqexdptbvfynu
wjpknbfhelcimtxrdyzg
gmyebdfipnxljczvt
j
j
j
j
getbmjnwazok
czenqpftw
nlxzweqtf
drwuzetnyl
ywmi
sgqdt
lnhzfxpbruovja
cqe
gyk
vp
dxesf
krp
ar
gz
xeo
q
myfw
qnelw
jrodw
ndajkhfmzxslvopb
ajsckbhdpqfnlgzmvx
imldxsptvaqyhcgbjn
ghnyicdvpqtljasxbm
lqjesvdhtbaxpmcginy
andpytcblvsixmghjq
tdvyxcnimahlsjqgbp
vsopuwdxhtabgej
gjahsudbxtwpeov
vsawxbgedzotphju
detawvgbouxhpsj
xriwbfaocqgztydvnelkspj
xkjfpcaqibswtdelyrgzovn
zpdexnfwalqhyjsokgbvcirt
zevfqwxcrjplgoskyitadnb
jcsvkgtwezobdnxyfqprial
uvigr
i
i
i
zyatdpgjrle
ezsyrdhxptav
kapdyuzreotm
qeryptdagz
z
z
z
z
z
sizxwqmegyflndk
fnweyjdbckugxtmpv
vjtkzol
hwjtzmqdykosv
jtzokev
xztkvojc
o
utxgqfenh
d
yvkj
kswvm
uefcqyzgalm
qafcezlmguy
cumafzlgeqy
lmfzyt
mltf
tlgfm
ne
eu
e
zen
e
tepckxywbnuqahilvr
cwqpuveanixogmbtlyk
mgyu
usyz
nyu
uy
hvnilwjcgbekmt
mljgckftviwhneq
rdaspohl
lfxjad
amdl
dla
ncjmux
hxzemjuoqnc
slhdpwkc
plhkwsc
wslphnkc
kx
kx
klbmqja
cbpikxjoaswyhg
lakbmuj
kbja
do
dl
qd
d
uwbktzrfax
xfvtkl
pvylfnsder
dnfprelvys
srlpdefnoyv
fvnesrpldy
rdfyneplsv
cietjkmyu
gkqjcrubel
gvjouc
ajuco
nsfjpdcwuh
zeacqhdkltxi
mtldxqcha
adqcxlhwt
whatcdxql
gsrhkdwnyt
wvngykhtd
otvwdnhgk
dkmtnhwg
gdq
asgqd
gkuqd
cgdaq
amoriyvlens
nfrdvltkyes
bgemhciuqtnpw
jqwtgbpcnhmui
zyogtixnwmhcqbp
gqtwinhbcmepu
jn
nj
gkqz
gvjyzmk
kagwzf
qimgwjex
qcxjemi
xjmqige
jqxgmei
emjxqi
bftzjip
fkjvzbcy
kzjthybdm
nogjbrezl
lukfvrc
lkrfucv
drbfuklvc
uflckrv
tekijdqozns
djsiekoqtn
noektqjdis
hndojsiqekt
usndjteqiokg
cw
c
cs
wc
cn
lxfgopvmh
ckpatzifnwxsjum
bfemqdyrpx
xosicnwrb
wsocbr
brwcasoy
esiz
ise
ies
dcungxvhipzorlbwsjqkt
pvgzlihbocskdnuwqxjr
jwqvrboixdchpsklzugn
jsizhem
zjsbhi
tjhzu
tgldmihkjb
hbekplin
borvflqchzauxi
eosqa
zpqgusowa
okqslrae
qofskay
olaqst
dbulmwerfxjoiha
jdiwhoumflbxra
rxbdihmofuwalj
gqzwfumsipboyjnl
forhywgnulpsbmiz
ql
qml
owq
dpbxiqjy
bxyqjpdi
yisjxpqdb
hxcrzpjvmnkgeuo
hryatdbx
rxlhytfwds
ljdozibqytwnfhvkxp
fqxiwhcyzbptkjlvnod
iptkxndvjzlyqwmhofb
efgvoxydhpjqiztwlbkrnus
vfzqpjblnidytkxaowh
onewvclt
vhcteos
vecnto
fpoisndugqmb
fqkgntpwjbmdus
elfqmcnbudgshzp
gnqpdmbfsvu
snrqdupbvgfmj
euvtmyohfqkscjdn
fydvukotsmpnjhqec
fhqumnvydstkoejc
zcoupardbfvns
siufbpodcnlva
dwkfe
nfdz
ibjodf
xdyhvltgpu
dzjnmrcasq
k
k
k
bk
ckj
tavfsckigh
hquzcnbdorlwm
ycgh
qplvetmdc
qdmvetcpl
pqmdcvtel
lpetvmdqc
lhcq
qcuk
whmnsqpkjov
wtjgu
tlcjdw
egicls
cioegs
cesgi
lxaifjhyrqgsem
mafexiryqdsjghl
xemjlkgfqyraish
zwrdcmavo
zvrcadfmo
madfozrcv
slfagzbjwotdni
mdspebtajxfiwknzlc
dqsitfarvljnbzhw
auilefztdjonwbs
tsiebdwjlnfaz
svgnwpr
nsaiguwl
xmplcdgsn
eotjkyshbqnzgf
bl
ly
iafxle
wnckbplriv
ixdbelhpgmqfscvwzj
lpwivbc
byptliwvuac
vbicwoklpyu
eskwamyvgxzqbtprculijf
eipbrxystfkgucjazwqmvl
wvplyjkrbcguzqsfteimxa
vhtrlousjbpmfzanqkwgcxyei
p
m
ntfspeyqrj
pqyernsftj
tnrspejfqy
gx
x
x
x
gizducfvmtohe
genmuitdvzkhxf
tbpyaruimeshzgwldqv
kidmjnuovehzgt
mxthzudigve
kudjgcbhna
lcajungkd
chdankjug
cekjgpanud
zqlucvfkmnpoighxb
ohcpgetlvzufinkqmbx
cunpqvgkziflbxhom
cgklbnvfxouqmpzih
kjimlchzgxpqvyuofbn
uwmz
nz
zbofx
zw
r
or
av
j
j
tvbqc
qedctbv
tqzvbc
t
t
ts
t
t
qhkbwa
awubqtzx
fqbyja
mbaiqhrt
wzcuyqanpdtsghr
zpocrshdwynaqtxvge
gpq
qeh
cq
jfltaouwri
ygbxsqdz
skd
jmlh
hlmj
hjlm
jmlh
umihknslj
ute
ltdzqf
ygkx
mywxcrd
apyx
xy
y
dy
mivusqxpzyljehgkotrf
ajlizqnpegckfohdvsxrwb
pl
lp
pl
lp
xmnaupwtcvozrfekbdshlq
dlafzmnhvpeskwoqucb
uzydhfovwmapneqlgkbcs
cjapswblfmnzqokeuvhid
dzlaovqnmsuwkhcyfpeb
wpb
bp
bp
bp
bp
pusm
umpshr
musp
xdz
z
f
ecjo
nkxz
tjmvdf
st
trn
hkfgarys
rghfasy
ljyixtumsfngvdwoqzpakecrbh
kfpuvicgrsnoetabmywjzqxlhd
az
z
rgkf
khrgn
nrgk
gkrfoc
werzgkpa
vkg
k
k
ku
ik
blruxyvehtsn
thdl
mtldh
lht
thil
rnzqadiplhbegj
qlezpgnabdrji
lnrzaqjpdigeb
rbjlnpiegqazd
jprzlegqdbnia
kgo
okg
rjm
kiml
cuxstqpwod
kghb
yckovthbrigazfxq
atriygxofzkcqh
vudbtxjpgaqfzhlkmncswyi
lgfjahksybqmncoeuwvixtrd
dmlyrgkwfjovqasxit
ylawsjxrftdegmkqvi
stqgmxfrjvlkhaydwie
mypcdrjnkgtsxvqawlfzi
ethrvfnyasdkb
eanwdyfcsbhr
xayerdsbhlf
ejdrshvywbaf
hqyfnrxjzsd
buly
yukpm
likmy
zlpditkvsawocunjqyhmrx
rdtjsunpqymlhxkvcwzoai
oaprkqhumtvlcwxdnzsyij
uxmdclkpjqrotahysizvnw
olwhpitmraqdnkxuvjsycz
srnhuf
hrsxfwynuo
gnzsfbutcrh
krnhusf
l
lsb
ujqtvol
cptnhxgdkivyjlsbrwmuf
nkbshfmrxgjdoclwivy
fxibalcmhydvkjnwgsr
txye
cjvqsulagn
kihdbf
ohpmzwr
rbtw
tgm
mgt
nhucrjmq
rubajlyszwn
nlbsjzwryau
zrwuynsjbla
flvdypkxabzm
lipzbtrmqof
ljmghurbifpzns
bsv
wsux
vs
s
sv
vfqsehx
xseqvhf
svxefqh
fipwjdl
jpilwfd
whflvdipjx
oclrqnubyhpmdks
wmkchdsqujbpxlnyo
onulmdsbyhkqp
mlubkpyhnqods
tfmesqblonudihypk
gcwf
a
v
q
o
xpqlzcfvtjgr
fxwprjglmasiqev
xljpgbrfqvo
fbvqrcgxpdljt
nxpktofqglvrsjbi
wvkotsgijlbnrufdxq
rpfew
iflep
tdy
teyvdjo
tdy
ix
gzkwchaqd
oysure
hxvkjmneycuspbwroqaligf
qkhpisjmxblnwezrgoauycfvt
emcqhiufkjbrlwyngapsovx
aixrbgcfynwelsoqkpmhjuv
ckxhmridjbfalqo
yzunwpsdlgev
ls
lzk
sl
kdpzmau
gzamukp
kpfua
pkau
usmywivnpgt
biqxymnosaklrehzj
orwcjpkbiexz
bpzikgwn
winpbkz
wobslxnhfyjtg
vqdecolzarnm
rgfloc
yufcor
tgwnebxyzkchqvoulmprdijasf
zmpdjlekigtswronhubqcvfa
fyrbd
yfbr
frby
fbkghytr
stexkgyiqpaodnm
opecuqrdnytkxaig
oxykdtnaegpiq
xtgaydoepqikn
oyktnixegqpbad
irgbyxhwm
iwgykrbx
yibgrwx
dxejzvrocb
tbxhmqscrid
cjrodlgbxz
zcbxwpjrd
l
lg
g
lg
nfi
ab
aw
vlbi
zegtwnc
dgbj
dgjybl
ardgupbsqjv
xoquygizahnwpkvds
duaoyzvgqxhkiwspn
gpvyukzaiqdnwoxsh
qpwnyzihovukasxgd
fcepzibvulyxhsjqdanwmtrg
bijrdfxcqhplwnymsezatuv
uxbcwnrmisvqhljpzdaetfy
umwzscitfjhxyrelpvdabnq
usahyzdmtqfibxcjvlepwnr
tpk
gzetqkypuhj
pknct
mfticpk
akiwtfsp
qedhju
lvdqtzehyj
vyfe
vey
yve
yve
yev
dseopbmfcuk
msfekpuodcb
jm
jm
mj
jm
jfgevdqxm
mqftev
fmeqv
etfmqv
grhalzpfsjweuyt
zteylfsaugpj
jtuzpeyflgsa
zlajntyufgkspe
fjyapletgzsu
ixhz
n
mqekbhiu
ikgbhmeq
xscglkt
ctglkxr
kxlctg
siygouxkzhetdrqcfp
eiftxuyhpkczrqdsgo
qgfryxepotiucskhdz
pfruziqyxgedkthcso
pezofhisdcxygurqkt
kp
kqyxp
hzbtkxlyipegra
lkrgehiyapzxtb
zhliaprgbkexty
axgyhlpekbiztr
mh
al
hien
zxkprdvo
xfjokhuyszwt
ujotxwsfkzyh
tfhwozsujykx
bqudfgvjeiy
djefqvibug
yvxuiedqjgbf
xuefjqgdvib
ibveujdqgnf
liyqzxwogcdhvjsr
nvcigxswpoedq
zjdgxfqwhcbm
qxhjgdwmbzcvf
cxgfmzjwbdqh
qjzwphxibcmfdg
tdflsxicwmpar
iawprsxtmcfdl
rxpafwlihsdtcm
amtwplscxrfdi
sgjmp
sojg
gsj
sjgu
pjtayfvqgubsdzh
rxwbhcekljnm
fhsmgpyblcitz
zmibgvhylwf
vigmfbzylh
iyfvglwhmzb
bprqyialnmkveohuxs
iykvuxbpshemloarqn
ivnoqlxrpyabheukms
xvqnmyhbkueslipora
ogdijpwtxuchrv
ovjhdwxptiugcr
jxutokrfwpighcvd
oizhtyglwbnjfuverqps
syaiuqhzeltbovrwjpgn
eohzgwjbtrqulsivnpy
uptch
igt
up
uhy
u
oua
hu
owtkc
oktwc
wkcto
wcokt
qosvjmkcixhdb
upaweznmgjt
pcnabt
bapct
dcbaqzuvyl
jcab
siw
iws
wsi
siw
zskiw
b
by
vdljnuawqg
daluqjvwgn
vqctdhulbpj
citavlqhjkdpe
glhsjpryofnzwvcqdt
xo
xo
xo
ox
l
vkjflgh
ld
oftdbe
jutioleh
ebcrtgo
dcwx
zgcxtb
dcqt
opfucrjikea
kjogaebchpmxzudy
yvxmabpdgznjoe
dtfrbceshaupizxqwl
wlefqdxbarzitscpuh
lrafisdhktxpzcbwuqe
tleibrqsazhufdpcxw
mwjahec
wcjme
kjrwcme
cemjw
jfgonrqkezumxdsbvaci
vgsindtuyzjbomrkqf
osfbklvjiumwznhdgp
nwmgfludzhoyb
jwmgonfzhdkiuab
huvgwsfrbdcenmotzqp
zdhgxofwbijmnu
wahstyxvugdmolp
tdalphmxsuoygwv
glpudovmtshawxy
hwstlopuyxmagvd
lgayovuwdnxptshjm
a
a
a
rca
szlidbpwxq
slbzpqdwx
qzwxhrpybls
ewhjlxfcmuidsgnbrkyoq
enmiavrkwzlobjsuyq
pisbwokteznlqjuymr
brnec
nwcrei
bnecor
ncerb
rnkedc
pqw
kbct
hviudfjyars
wbe
b
xtsbynudvwjkfalre
auwkntbfeyvxsrdlj
nyewflsxkjuartdbv
adexltvsbymrwnkujf
yima
miay
amiy
czimay
yagqmw
mwqgya
gqwyam
acqibtfwlnyvjumrdgspoxz
dxzbqownsgylajucitmrpfv
ztpcrulxjomvwbdgyfinas
scbwynpftarmgjduxliovz
mpgtuyzhxwcoibdrsanflvj
bdftwqgsaimhxvn
stmaqbxhgwvfdni
abmfshgnxvqitdw
thabinfgmvdqsxwy
dtwvbasxnhiqfgm
siomckdrlhnytjaqpzwu
cqxytvoanbulrekzwfpd
uxadwqkgptrzlycon
stwohnvrq
kfnpxvcy
ijlkvrdacmuhotxwbsqpegyn
gopemwhirtcbynxaskvulqj
aweqlciybkguopsjtmxrhvn
pwelrvhicybstoqkujgaxmn
ckpdbfs
kcdfqv
foecjkqsvbh
muzckif
zsblxdetgovunfiqwhjpkmracy
wvkxysnjdraclzgemouphbt
qmtx
xqt
dmieulgon
jfmyra
fsjma
xmsq
tvcm
xklcpvzje
lpjrvaez
zpjlev
fvpjlez
bodrkvzcmhyxulswnijt
ynilmcwzrvohtsubkdx
tewspzja
wjtsplzfega
atzsewjp
tu
but
atdnsu
y
u
qbtawmldjsy
mjqdsylbatw
tyalbmqjswd
ljsdtwbqyma
msgytaj
vygscje
qjciogk
nhpflxzrduw
vcmrtws
srwyc
wursckd
cpwrs
wsrc
ielm
pilfr
mhxlcaf
gvzosdytl
ij
avi
ylio
kaim
ijamw
cgxwjydavlhbpior
adckqejbhysinlo
ajwczfloydthbmvi
cubojhwagryild
jyqagilxfsk
yfasltokjgqx
impglqcwn
ngcaydziwp
ipbgnzwcu
lj
j
jfrb
xncgrjkpsmwailbdeouzqht
rayuhpxqsezkdlowicfnmjgbt
ijzwpaqtdxcuhegsmlkvborn
upndtklhgeoibmzcxrswaqj
ohsckdiej
dochisejk
dcsiojkeh
xcbnwtzqu
oeywhzn
jgfskirml
dsrvqfctojm
facqi
yflgqcw
cqnlfz
qefkcy
xvwadfktl
fltkxwa
wptxjalf
mtfaxlw
awtflx
vzxqjbrwlpysguonctmf
orynmphcqbfuzwtaxjs
mrunfcqjxoytszbpw
podxzyserwjbqutnfcm
sxqdfercbnopmyujtwz
anzbwplo
ingwuxc
dwrketnsv
goz
go
goa
msgopxyt
tsopygmx
gmxyustpko
xpmtsoyg
xptgmosy
ohj
ojf
jo
gvm
c
nrhjkwda
ryqudzpvg
vzugpqr
wya
wa
bajqno
gxa
da
eobwrtihcqfp
rhbkdep
spnlubhavkw
obiqgzyxdfercj
jtfq
q
jyx
wuz
bhqnegu
uehqngo
ehvqgu
edquhg
ucgyqdhe
cigbdtul
agicltduv
cgytuidl
utgcdilm
ulgejtcwfxdi
efk
fd
yekuojwtxp
odky
ngz
tpwyd
vo
og
o
o
ofj
wavejohibzrk
wijeafkrvzob
ierabjvkzwoq
bxtkfhcyigulzdp
ihjfyukgltb
nafkrhwibgyulqvm
wljfgnvr
aowxfliqpr
swkxmvhcriylgt
cgitkxhlvmrwy
ilnzkweohypu
axfcdrtsmjqbv
xolcuzgfvitedbkyr
gkldfetvpuxyorzi
fxituzlqvokersgjhyd
btkzyxiedrlfvgou
koryuemagtixfdlzv
hsubfgecvrjna
nctvf
pyeaxfmr
eyxprfam
zr
uez
zou
zqdxnsakmvifj
hz
jhbwgfrpvdx
mcnrpehvufgtb
pvzubqhfgar
ofipybhktlqrvgs
bsfu
hu
xk
kx
uk
k
k
qymaugnc
ajigmczroyxb
dxjisapbrcqnltwv
anzrjtiqxslbce
qnxgjalrtiscmyb
rkmxv
hmrkvx
nha
pqjeh
h
ahv
vah
ipl
svirqdjpmx
pjimx
whpekfzgtbi
qlshkevani
eshaknilvq
xpi
pxio
xpjoi
pnxi
piox
kxub
dkmxu
nka
cku
quxzmk
exthvjmbrl
ebsamihlxrvt
utfbrexmkljhvn
hbxmelrvtj
mlerbhxtv
ykzvcm
vfackzmy
zvmkyc
cdnqv
vcqdn
dcsqn
dcnzq
odv
jdokvasx
dqvo
dwplnvo
qsodv
ud
du
du
sfoihm
oisf
siohf
sifo
qdjkifalso
eabz
bpza
bz
ezb
bzuyvg
d
x
d
d
d
muf
m
ohtfclrqkabuvynewidxgjp
lchojyerxwianpbtfkdvqu
h
h
vh
h
uthpecmangsirovj
itzrvywgmaushc
cumrhqtasvgnfi
mvgtorachqiebsu
icrlaxzefw
ceibjhywlvzdrsao
xelqaiczmufwr
ialnczmewr
v
frwckiy
qne
zsgn
ysaxl
xqwlasey
xsyalb
ntevywd
hxungtl
snzgpbyhtlamxroec
wczfumyrjhidgsqbkavot
sapbxcfrthquln
kqafnsuhob
eaxhmlnuwco
qigzs
gkfjy
jrvdg
bztomjpxycqnkse
qcotlpesajmfk
oetdksqpcmj
pwtjdilcyx
liejpwtcdyx
ticlpwyjxd
iwldjcpytx
aoznvbfrxy
zbfvyxroan
fybavroznx
fbavnyzrox
xobyfvrnza
ioxynh
xinyho
io
uyiwon
oxi
ivo
cio
y
ny
l
lc
gl
cl
l
akxs
asxk
akxs
vglhiwm
hkv
rducpj
iszjbtaouvcdkgfylxhqnrm
cagdmhlziutfxqrkjynovsb
kmcdrvgxynzoafusjlebqtih
kqduelpmh
uplhedkmq
dupqelkh
eflyuhwqgdkp
hqplekdu
gwkfxo
fowxgk
foxkwg
xkfwog
fwkgxo
xpegdzcsoyjt
zpcsgetjydxo
stoxjgfzecvdpy
typecgxjzosd
digfewr
psxv
pntydfukzoecihxv
vtfzihungkcdxoey
ktaqydchpr
kcalptydhx
ydkprcaht
qep
pqew
qvpe
qepx
l
o
o
n
zubsojhtqep
bujqpsytoieh
upeqthsobyj
regblhcjn
djgecrtblnh
jhebcnlrg
brehclngj
lprbihju
jhzoplsnk
hgnlwjfqczu
cjyuntigwzqeh
qhwlgunfzcajv
adjmogquh
wpsodnth
brueif
teiuqrfb
ufrbei
fbieru
zeaufk
ukfeza
qk
cqkf
kq
kq
qk
dfw
ndwft
wfd
sdevru
fdsr
nbtmord
vlhxnguq
qvlgun
nkcoszpaivjqybwt
qjdzgrumbsiopkveaylcx
szypwickvjfoqbha
xbtzcjeimsnwf
vtkicgmnhbx
xnhabvqicmtdpr
uxt
utx
utx
yurfmzncxwbil
vyi
yovi
iya
ksyi
vbkmdhjzf
vbhkjzmf
mfolkbhjzv
bcl
blc
clb
groy
n
mq
wiebc
bpn
pnb
pbn
bpnw
nbzp
blgdwivs
gvilsmwbd
bwgdklisnv
busdviwlg
mwlibsgvudc
stafhuqw
aufhqs
hsqauf
xrkfmepbsnqac
ajlhmnzqfbiskyxvuoc
svfalqujboincmxzkhy
sxvlznqfajhyboimukc
vljuykzxnsiabqchfmo
fbszjynvolhamucikqx
tjhcwv
wc
jobkfqrchsxeilu
jmfiaowhpkulqrx
janucsmrw
lnjco
qgctnjz
vgjnfc
dcionzxj
ouhskqaiydtjz
oisamqzehwlyutx
uqytfipahsvzco
uapehtyqziso
yqatsuizefhmow
klsdvrhmfiqyptuebxwc
usdxgerciwlvnmpyfob
vbwxyedsrmlpiacfu
mzcf
mwc
chm
zuipejovcklydarwxqsft
cdevzkwmrjfpoqxtuylsia
frwldqezastuocvixpjyk
xkluzcosjtfvdeapwriqy
yk
yk
ky
kgy
ykv
vtrikmwcoju
qtphlzbjwovrg
pujnbx
nbupjx
ubxpjn
nikcbsdhge
hibkgcnle
nboehtpigck
likhecnbg
cuhjlgofs
khsocg
sbfoghzv
ydsngtwop
swfudijxtklq
xqvnajufkihwtdsl
ixjkwdsqtful
mvajfubtpgxwocs
pvsbofxmjwaguc
asbgcfmowxujpv
oseuibcgxfvmawjp
pmbcageuojfxswv
dvwqskngflbpx
ibtgczowdfljmhuaye
svlgnwfrpqbd
ftxykloisajqwzun
qytozbimwxuafeknj
lazjyixqmotnuwk
voxhyjzknuticqwa
tfszajmeokvupiy
tmqcvyjsuf
vtyufsmgnj
kwzrisqu
zuskiqr
v
h
h
h
w
g
g
g
g
mg
wmoigknfuqlerxcpd
xmcrguoeqfnpkwild
egmlufncqdvxropiwk
wagquoxrcfptekdinml
lxgfmeirdquowkcpn
";
void Main()
{
var sRules = Input.Split("\n", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
//(new Bag("a", "b") == new Bag("a", "b")).Dump();
foreach (var sRule in sRules)
{
Bag.Parse(sRule);
}
// Number of bags with at least one "shiny gold" bag
Bag shinyGoldBag = new Bag("shiny", "gold");
Bags.Where(b => HasInnerBag(b, shinyGoldBag))//.Dump()
.Count().Dump("Number of bags with at least one shiny gold bag");
// Number of bags inside each "shiny gold" bag
Bags.TryGetValue(shinyGoldBag, out Bag actual);
(actual.RecursiveTotal - 1).Dump("Number of bags inside each shiny gold bag");
Bags.Dump();
}
bool HasInnerBag(Bag subject, Bag bagToFind)
{
foreach (var inner in subject.InnerBags.Keys)
{
if (inner == bagToFind)
{
return true;
}
else if (HasInnerBag(inner, bagToFind))
{
return true;
}
}
return false;
}
public static readonly HashSet<Bag> Bags = new();
public sealed record Bag(string Modifier, string Color) : IEquatable<Bag>
{
public Dictionary<Bag, int> InnerBags { get; } = new();
public int RecursiveTotal => InnerBags.Sum(ib => ib.Key.RecursiveTotal * ib.Value) + 1;
public bool Equals(Bag other) => Modifier == other.Modifier && Color == other.Color;
public override int GetHashCode() => Modifier.GetHashCode() + Modifier.GetHashCode();
public override string ToString() => $"{Modifier} {Color}";
public static Bag Parse(string raw)
{
var words = raw.Split(' ', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
var parsedBag = new Bag(words[0], words[1]);
Bag bag = Bags.TryGetValue(parsedBag, out Bag existingBag) ? existingBag : parsedBag;
if (words[4].ToLowerInvariant() == "no")
{
Bags.Add(bag);
return bag;
}
for (int i = 0; i < (words.Length - 4) / 4; i++)
{
(int count, Bag inner) = ParseInner(words.Skip(4 * (i + 1)));
bag.InnerBags.TryAdd(inner, count);
}
Bags.Add(bag);
return bag;
}
private static (int count, Bag bag) ParseInner(IEnumerable<string> words)
{
var e = words.GetEnumerator();
e.MoveNext();
int count = int.Parse(e.Current);
e.MoveNext();
string modifier = e.Current;
e.MoveNext();
string color = e.Current;
var newBag = new Bag(modifier, color);
if (Bags.TryGetValue(newBag, out var existingBag))
{
return (count, existingBag);
}
else
{
Bags.Add(newBag);
return (count, newBag);
}
}
}
static readonly string TestInput = @"
light red bags contain 1 bright white bag, 2 muted yellow bags.
dark orange bags contain 3 bright white bags, 4 muted yellow bags.
bright white bags contain 1 shiny gold bag.
muted yellow bags contain 2 shiny gold bags, 9 faded blue bags.
shiny gold bags contain 1 dark olive bag, 2 vibrant plum bags.
dark olive bags contain 3 faded blue bags, 4 dotted black bags.
vibrant plum bags contain 5 faded blue bags, 6 dotted black bags.
faded blue bags contain no other bags.
dotted black bags contain no other bags.
";
static readonly string Input = @"
dim silver bags contain 3 posh fuchsia bags.
wavy olive bags contain 1 striped olive bag, 1 dull cyan bag.
dull coral bags contain 1 dim olive bag, 5 muted violet bags, 2 dark gray bags.
bright olive bags contain 3 light indigo bags, 3 dark coral bags.
clear lavender bags contain 1 dark olive bag.
dim lime bags contain 3 dotted red bags.
drab indigo bags contain 5 striped coral bags, 2 muted bronze bags.
striped orange bags contain 5 wavy fuchsia bags, 5 clear red bags, 3 plaid red bags.
dotted indigo bags contain 2 plaid white bags, 1 wavy gold bag, 1 plaid silver bag.
posh crimson bags contain 3 clear crimson bags, 5 dotted silver bags, 3 dull crimson bags, 5 wavy violet bags.
mirrored tan bags contain 1 plaid white bag, 3 vibrant beige bags, 3 drab silver bags, 1 pale blue bag.
dull turquoise bags contain 5 plaid magenta bags, 3 bright aqua bags, 1 dim purple bag, 1 wavy orange bag.
dark tomato bags contain 1 plaid gray bag.
shiny red bags contain 4 vibrant maroon bags, 5 faded bronze bags.
clear tan bags contain 4 pale lime bags, 4 faded plum bags.
mirrored plum bags contain 1 wavy silver bag, 4 dim purple bags, 3 dim coral bags.
dotted orange bags contain 4 pale aqua bags, 3 dotted aqua bags, 4 clear beige bags.
wavy lime bags contain 5 dim salmon bags, 4 dark violet bags, 4 clear turquoise bags.
faded gray bags contain 2 dotted lime bags, 5 plaid tomato bags.
pale orange bags contain 5 faded maroon bags.
shiny lime bags contain 3 striped olive bags, 5 light fuchsia bags, 1 pale crimson bag, 1 pale salmon bag.
drab red bags contain 5 muted chartreuse bags, 4 clear purple bags, 4 drab silver bags, 3 posh green bags.
plaid plum bags contain 2 dim blue bags, 1 dim coral bag.
clear red bags contain 3 plaid teal bags, 4 vibrant orange bags, 1 pale red bag.
dark yellow bags contain 5 mirrored lavender bags, 5 dull bronze bags, 4 pale salmon bags, 5 wavy crimson bags.
clear violet bags contain 5 clear turquoise bags, 3 clear beige bags, 4 dim plum bags.
plaid cyan bags contain no other bags.
light salmon bags contain 3 dull yellow bags, 2 vibrant violet bags, 2 dark orange bags, 1 light magenta bag.
dim indigo bags contain 2 vibrant orange bags, 3 drab teal bags, 4 plaid indigo bags.
shiny magenta bags contain 1 dark salmon bag, 4 shiny gray bags, 2 mirrored purple bags.
drab coral bags contain 5 pale crimson bags, 1 mirrored aqua bag, 4 light red bags.
muted blue bags contain 1 dark green bag, 5 muted salmon bags, 4 posh beige bags, 4 pale salmon bags.
plaid salmon bags contain 5 striped white bags, 4 posh fuchsia bags, 5 faded turquoise bags.
vibrant bronze bags contain 1 bright orange bag, 2 bright plum bags.
dull salmon bags contain 2 pale crimson bags, 3 dark tan bags, 5 light plum bags.
striped magenta bags contain 4 wavy yellow bags, 3 bright chartreuse bags, 5 plaid cyan bags.
light olive bags contain 5 vibrant beige bags, 3 faded tomato bags, 1 dark indigo bag.
faded turquoise bags contain 2 shiny salmon bags, 3 wavy crimson bags, 5 dim yellow bags, 1 posh salmon bag.
pale fuchsia bags contain 2 posh blue bags, 4 mirrored blue bags, 3 wavy silver bags, 2 wavy crimson bags.
dotted tomato bags contain 2 dotted lime bags, 1 wavy teal bag, 1 mirrored black bag, 3 dull gold bags.
shiny maroon bags contain 5 striped salmon bags.
vibrant gray bags contain 5 clear tan bags, 5 plaid crimson bags, 3 striped cyan bags, 1 dark gold bag.
muted tomato bags contain 1 dull salmon bag.
striped salmon bags contain 4 plaid white bags, 5 dim salmon bags, 4 vibrant lime bags.
light tan bags contain 2 posh lavender bags, 5 shiny aqua bags.
wavy brown bags contain 2 posh lavender bags.
drab beige bags contain 5 plaid coral bags, 3 bright turquoise bags, 5 dark purple bags, 3 mirrored black bags.
bright tomato bags contain 1 bright teal bag, 2 bright tan bags, 2 dotted salmon bags.
dim tan bags contain 2 striped cyan bags, 5 wavy green bags, 3 drab beige bags.
light plum bags contain 4 clear silver bags, 1 vibrant chartreuse bag.
light black bags contain 1 muted tan bag, 2 dim yellow bags.
clear orange bags contain 5 mirrored violet bags, 1 wavy salmon bag, 3 dim plum bags.
bright gray bags contain 5 dim blue bags, 1 dotted red bag, 5 mirrored aqua bags.
striped cyan bags contain 4 striped teal bags, 1 dark tan bag, 1 dim green bag.
shiny olive bags contain 1 dark aqua bag, 2 muted lime bags.
clear brown bags contain 5 dark salmon bags.
dotted tan bags contain 2 plaid brown bags.
light green bags contain 5 plaid silver bags, 5 posh aqua bags, 3 dull green bags, 5 faded red bags.
posh coral bags contain 1 muted teal bag.
drab green bags contain 1 dotted blue bag.
dark fuchsia bags contain 2 wavy tomato bags, 3 faded plum bags.
vibrant purple bags contain 3 posh tomato bags, 4 dim purple bags, 5 plaid brown bags, 4 dotted red bags.
vibrant tomato bags contain 5 wavy orange bags, 1 striped teal bag.
faded coral bags contain 5 dotted maroon bags, 2 light tan bags, 1 plaid black bag, 4 dark indigo bags.
posh gold bags contain 4 mirrored plum bags.
muted beige bags contain 2 pale brown bags, 4 dull black bags, 4 vibrant blue bags.
dull green bags contain 3 drab silver bags, 5 dotted red bags, 3 mirrored violet bags, 3 bright black bags.
dark lime bags contain 5 light chartreuse bags, 3 pale magenta bags, 1 dull indigo bag.
dark orange bags contain 1 dark crimson bag, 2 clear turquoise bags, 2 dotted silver bags.
muted yellow bags contain 2 pale salmon bags, 3 bright plum bags, 3 shiny aqua bags, 5 plaid cyan bags.
vibrant white bags contain 5 dim coral bags, 5 dim bronze bags.
posh white bags contain 2 wavy blue bags, 3 clear chartreuse bags, 1 wavy coral bag, 5 drab turquoise bags.
faded violet bags contain 4 dim bronze bags.
bright yellow bags contain 5 pale violet bags, 2 striped fuchsia bags.
dim blue bags contain 2 posh salmon bags, 4 posh red bags, 5 clear turquoise bags, 4 muted lavender bags.
plaid olive bags contain no other bags.
posh plum bags contain 2 drab turquoise bags, 4 bright fuchsia bags, 4 drab indigo bags.
posh violet bags contain 3 plaid olive bags, 2 posh teal bags, 1 posh purple bag.
pale beige bags contain 4 wavy crimson bags, 5 shiny gold bags.
shiny turquoise bags contain 5 dark gray bags, 4 clear brown bags.
clear bronze bags contain 1 dull coral bag, 1 mirrored cyan bag, 2 dotted orange bags, 1 plaid magenta bag.
dark magenta bags contain 3 vibrant orange bags, 1 dull lime bag, 1 dim plum bag.
light silver bags contain 2 posh coral bags.
drab gold bags contain 5 mirrored gold bags, 1 bright blue bag.
dull fuchsia bags contain 3 pale blue bags.
muted brown bags contain 4 drab fuchsia bags, 4 plaid bronze bags.
bright coral bags contain 2 dull crimson bags.
clear black bags contain 5 striped brown bags.
mirrored coral bags contain 2 striped brown bags, 4 clear coral bags.
dull purple bags contain 1 plaid green bag, 5 shiny gold bags.
drab brown bags contain 4 striped coral bags, 1 muted magenta bag, 4 faded red bags.
faded plum bags contain 5 shiny orange bags.
vibrant violet bags contain 1 drab gold bag, 1 light violet bag.
clear salmon bags contain 5 posh orange bags, 1 wavy fuchsia bag, 5 mirrored yellow bags.
dull yellow bags contain 5 light orange bags, 4 striped purple bags.
striped olive bags contain 1 plaid beige bag, 1 shiny turquoise bag, 2 drab gold bags, 1 pale lime bag.
clear beige bags contain no other bags.
mirrored fuchsia bags contain 1 clear olive bag, 3 pale aqua bags.
posh turquoise bags contain 5 pale crimson bags, 3 dull cyan bags.
dull lime bags contain 3 plaid chartreuse bags.
wavy black bags contain 3 dull salmon bags, 5 plaid teal bags.
dim lavender bags contain 1 dark gray bag, 2 muted indigo bags.
wavy yellow bags contain 2 striped turquoise bags.
striped gray bags contain 3 drab white bags.
dotted magenta bags contain 3 plaid white bags, 4 clear beige bags, 1 faded maroon bag, 3 muted lavender bags.
vibrant coral bags contain 5 shiny olive bags, 2 pale brown bags.
dim aqua bags contain 5 striped crimson bags, 3 bright lavender bags.
pale lavender bags contain 3 vibrant tan bags.
bright fuchsia bags contain 2 dotted fuchsia bags.
dark black bags contain 5 drab purple bags, 3 striped yellow bags, 2 posh tan bags.
dark teal bags contain 3 plaid white bags, 5 bright cyan bags, 1 posh blue bag, 4 mirrored magenta bags.
plaid brown bags contain 3 bright plum bags, 1 muted magenta bag, 4 clear gray bags, 2 clear crimson bags.
mirrored magenta bags contain no other bags.
light brown bags contain 4 wavy red bags, 2 faded white bags.
dotted purple bags contain 2 pale lime bags.
clear teal bags contain 3 plaid red bags, 3 striped coral bags, 4 mirrored black bags, 2 posh red bags.
striped gold bags contain 3 bright plum bags, 2 mirrored gold bags.
dotted black bags contain 2 clear crimson bags, 1 dark violet bag, 2 clear teal bags, 3 mirrored purple bags.
dim gray bags contain 1 dotted salmon bag, 2 dim silver bags, 5 wavy black bags, 2 dotted green bags.
shiny black bags contain 3 plaid bronze bags, 5 dim plum bags, 3 muted teal bags, 5 muted magenta bags.
plaid orange bags contain 5 plaid crimson bags, 4 muted white bags, 4 dark lime bags, 5 plaid cyan bags.
striped fuchsia bags contain 1 dull bronze bag, 1 wavy aqua bag, 1 plaid salmon bag, 2 faded cyan bags.
wavy white bags contain 4 posh beige bags.
dull teal bags contain 1 vibrant blue bag, 1 light red bag, 3 striped brown bags.
vibrant chartreuse bags contain 1 shiny aqua bag, 4 clear crimson bags, 1 faded red bag, 1 dull crimson bag.
wavy cyan bags contain 5 striped red bags, 1 shiny magenta bag.
vibrant olive bags contain 3 light fuchsia bags, 5 pale tan bags, 5 light tomato bags.
dotted fuchsia bags contain 5 clear silver bags, 5 light aqua bags, 5 posh beige bags.
wavy tomato bags contain 2 wavy tan bags, 3 muted lavender bags, 2 pale salmon bags.
posh lime bags contain 4 drab lime bags, 4 dull lavender bags.
shiny white bags contain 1 plaid olive bag, 2 faded white bags, 2 dull salmon bags.
bright plum bags contain 1 dotted salmon bag, 4 plaid red bags, 1 mirrored purple bag, 3 shiny aqua bags.
dotted lavender bags contain 1 light green bag, 3 light magenta bags.
bright gold bags contain 4 dim blue bags, 5 dark salmon bags, 2 posh crimson bags.
striped violet bags contain 4 posh plum bags, 1 drab crimson bag, 2 faded orange bags, 3 dotted green bags.
dull plum bags contain 1 dark maroon bag.
striped tomato bags contain 5 striped maroon bags, 1 plaid turquoise bag.
muted bronze bags contain 1 plaid red bag.
dull lavender bags contain 2 plaid white bags.
dark bronze bags contain 1 clear turquoise bag, 5 dim purple bags, 2 bright turquoise bags, 2 striped coral bags.
muted green bags contain 3 plaid white bags, 5 pale blue bags, 3 plaid tan bags, 2 clear turquoise bags.
mirrored bronze bags contain 2 faded white bags, 3 bright teal bags, 2 clear red bags, 2 clear crimson bags.
clear silver bags contain 5 dim yellow bags, 2 striped brown bags, 1 muted magenta bag.
dark indigo bags contain 3 faded maroon bags, 3 mirrored purple bags.
posh silver bags contain 3 dotted maroon bags, 1 striped indigo bag, 1 faded red bag.
light teal bags contain 1 vibrant beige bag, 1 striped plum bag, 4 dim salmon bags.
dull orange bags contain 2 shiny teal bags, 5 muted teal bags, 1 dark fuchsia bag, 4 bright magenta bags.
muted red bags contain 2 mirrored magenta bags.
dotted gray bags contain 3 dull maroon bags, 4 mirrored blue bags, 3 mirrored red bags.
light lime bags contain 5 plaid fuchsia bags, 4 posh plum bags.
pale coral bags contain 3 shiny gray bags, 2 plaid beige bags.
dim brown bags contain 1 faded gray bag.
drab tan bags contain 5 dotted crimson bags.
clear chartreuse bags contain 4 faded maroon bags, 5 plaid white bags.
posh maroon bags contain 1 clear beige bag, 5 light black bags.
mirrored blue bags contain 4 faded gray bags, 5 mirrored olive bags, 1 pale lime bag.
clear coral bags contain 1 plaid fuchsia bag, 4 drab yellow bags, 4 light bronze bags.
mirrored orange bags contain 4 mirrored lavender bags, 3 faded orange bags, 4 mirrored gold bags, 3 dim silver bags.
pale bronze bags contain 4 plaid orange bags, 3 wavy chartreuse bags, 2 clear red bags.
faded yellow bags contain 2 posh green bags.
light magenta bags contain 3 clear silver bags, 3 pale magenta bags.
clear aqua bags contain 2 dark tan bags.
clear yellow bags contain 5 dim violet bags, 5 drab bronze bags.
plaid yellow bags contain 4 dotted salmon bags.
pale salmon bags contain 2 plaid olive bags, 5 clear beige bags.
bright magenta bags contain 2 shiny maroon bags, 1 bright maroon bag, 5 shiny white bags.
dull brown bags contain 4 posh fuchsia bags, 2 dotted tan bags.
muted magenta bags contain no other bags.
muted lavender bags contain 5 light aqua bags, 1 faded maroon bag, 4 plaid lavender bags.
dotted violet bags contain 2 pale red bags, 3 mirrored magenta bags.
wavy gray bags contain 5 dark indigo bags, 3 dim yellow bags, 3 posh lime bags, 1 wavy yellow bag.
posh beige bags contain 4 mirrored magenta bags, 1 striped brown bag, 1 mirrored aqua bag, 5 dotted silver bags.
drab crimson bags contain 2 faded coral bags, 4 light indigo bags, 4 dark indigo bags.
wavy magenta bags contain 5 clear gold bags, 4 dim purple bags, 3 pale green bags.
dim fuchsia bags contain 2 drab teal bags, 4 plaid brown bags, 5 faded orange bags.
faded indigo bags contain 2 faded orange bags, 4 striped turquoise bags, 4 pale salmon bags, 4 bright cyan bags.
posh yellow bags contain 2 pale gold bags, 3 posh coral bags, 1 dotted tan bag.
muted chartreuse bags contain 5 plaid brown bags, 3 dull green bags.
dotted plum bags contain 4 mirrored purple bags, 1 drab tan bag, 3 striped white bags.
clear plum bags contain 3 posh green bags.
striped red bags contain 1 striped tomato bag, 1 wavy fuchsia bag, 3 clear yellow bags.
striped aqua bags contain 4 posh teal bags, 2 bright beige bags.
dim gold bags contain 5 dull salmon bags, 3 mirrored red bags, 1 mirrored black bag.
mirrored brown bags contain 1 mirrored salmon bag.
wavy plum bags contain 3 shiny yellow bags, 5 light crimson bags, 5 dotted silver bags.
striped coral bags contain no other bags.
dark gray bags contain 4 dotted salmon bags, 2 clear brown bags, 2 posh crimson bags, 5 mirrored plum bags.
posh chartreuse bags contain 2 wavy fuchsia bags, 4 mirrored beige bags.
dotted gold bags contain 1 dark lavender bag, 1 striped black bag.
posh green bags contain 3 dotted salmon bags, 4 pale salmon bags, 3 posh red bags, 4 dim green bags.
plaid blue bags contain 2 posh green bags, 3 dim cyan bags, 5 dull bronze bags.
light lavender bags contain 5 muted green bags, 1 light violet bag, 5 muted plum bags.
pale plum bags contain 5 muted lavender bags, 5 light bronze bags, 4 plaid crimson bags.
mirrored indigo bags contain 4 dark violet bags, 2 wavy purple bags, 5 plaid tan bags.
dim violet bags contain 4 mirrored black bags, 4 dull lime bags, 3 posh crimson bags, 1 pale brown bag.
shiny coral bags contain 1 light aqua bag, 5 plaid olive bags, 4 bright turquoise bags.
dotted cyan bags contain 4 shiny olive bags, 4 light bronze bags, 2 dim plum bags.
mirrored teal bags contain 5 dim violet bags.
shiny purple bags contain 4 dim magenta bags, 2 clear white bags, 3 posh silver bags, 1 shiny turquoise bag.
shiny gray bags contain 5 pale lavender bags, 3 vibrant turquoise bags, 1 faded maroon bag, 1 bright cyan bag.
mirrored chartreuse bags contain 2 clear white bags.
light beige bags contain 5 mirrored turquoise bags, 5 plaid maroon bags, 3 light silver bags.
dull tomato bags contain 1 shiny gold bag, 4 pale blue bags.
plaid teal bags contain 1 dim purple bag, 3 striped turquoise bags, 3 light indigo bags, 2 faded red bags.
vibrant aqua bags contain 3 mirrored turquoise bags, 1 light plum bag, 5 clear teal bags, 1 dull blue bag.
dotted turquoise bags contain 5 bright fuchsia bags, 5 dim blue bags, 3 posh green bags, 3 wavy red bags.
dark lavender bags contain 1 mirrored lime bag, 2 plaid red bags, 2 striped white bags, 1 plaid tomato bag.
plaid tan bags contain 5 plaid white bags.
pale olive bags contain 1 clear salmon bag.
wavy indigo bags contain 1 plaid black bag, 1 wavy teal bag, 3 mirrored salmon bags.
drab chartreuse bags contain 2 light lime bags, 3 drab yellow bags.
drab blue bags contain 3 vibrant brown bags.
muted purple bags contain 2 shiny yellow bags.
muted aqua bags contain 4 striped white bags.
mirrored violet bags contain 3 wavy violet bags, 4 mirrored aqua bags.
bright cyan bags contain 3 wavy fuchsia bags, 2 dark coral bags, 1 shiny orange bag.
posh teal bags contain 5 bright gray bags, 4 faded gray bags, 2 plaid turquoise bags.
muted lime bags contain 2 striped coral bags, 1 dark tan bag, 4 plaid cyan bags.
mirrored crimson bags contain 4 faded violet bags, 1 posh purple bag.
light blue bags contain 2 dotted blue bags, 2 dark gold bags, 5 bright cyan bags, 1 light crimson bag.
dull beige bags contain 2 dark turquoise bags, 5 mirrored violet bags, 1 muted crimson bag.
dark cyan bags contain 5 muted blue bags.
dim turquoise bags contain 3 shiny silver bags, 1 pale yellow bag, 3 plaid chartreuse bags, 1 posh bronze bag.
faded brown bags contain 3 dim silver bags, 2 mirrored bronze bags.
wavy bronze bags contain 3 shiny tomato bags, 3 dim salmon bags.
pale brown bags contain 3 pale tan bags, 2 plaid olive bags, 2 posh lavender bags, 1 shiny aqua bag.
dull white bags contain 1 dull red bag, 5 dark gold bags, 3 striped magenta bags, 2 muted green bags.
plaid crimson bags contain 5 drab bronze bags, 2 pale blue bags.
bright lavender bags contain 1 dark bronze bag.
plaid red bags contain 3 striped turquoise bags, 4 dull crimson bags, 1 striped brown bag, 2 clear crimson bags.
muted gold bags contain 5 dotted black bags, 1 striped salmon bag, 3 drab purple bags, 5 bright red bags.
striped silver bags contain 3 posh black bags.
bright aqua bags contain 4 light orange bags, 3 wavy blue bags, 3 dull lime bags.
plaid fuchsia bags contain 2 shiny orange bags.
bright violet bags contain 1 drab turquoise bag, 1 dim cyan bag, 4 pale blue bags, 3 wavy blue bags.
dim white bags contain 1 plaid black bag, 5 plaid violet bags, 2 light gray bags.
bright tan bags contain 5 bright gold bags, 3 shiny salmon bags, 2 muted magenta bags, 1 dotted black bag.
shiny bronze bags contain 3 light aqua bags, 4 clear crimson bags, 1 light beige bag, 4 clear blue bags.
muted silver bags contain 4 striped lavender bags.
dull red bags contain 1 dim coral bag, 1 faded plum bag, 4 plaid red bags.
wavy aqua bags contain 2 dotted fuchsia bags, 2 mirrored tomato bags.
dark olive bags contain 4 muted yellow bags, 2 shiny gold bags, 2 posh crimson bags.
dark crimson bags contain 3 shiny aqua bags, 1 wavy black bag.
dark brown bags contain 2 drab lavender bags, 5 posh green bags, 4 pale turquoise bags.
pale blue bags contain 2 striped coral bags, 2 shiny gold bags.
vibrant blue bags contain 1 mirrored lavender bag, 4 dark aqua bags, 5 wavy coral bags.
posh cyan bags contain 1 dull lavender bag, 3 striped gray bags, 1 vibrant orange bag.
faded red bags contain 1 posh crimson bag, 1 wavy coral bag, 5 clear beige bags, 3 dotted silver bags.
vibrant gold bags contain 3 drab lavender bags, 5 dim magenta bags, 2 bright tomato bags, 4 light magenta bags.
shiny chartreuse bags contain 5 vibrant turquoise bags.
clear gray bags contain 4 wavy coral bags, 2 dark salmon bags, 3 dark indigo bags.
pale maroon bags contain 4 posh tomato bags, 5 bright tan bags.
light turquoise bags contain 3 drab fuchsia bags, 4 bright silver bags, 5 light green bags.
muted crimson bags contain 1 dim yellow bag, 4 wavy fuchsia bags, 2 mirrored magenta bags, 2 clear beige bags.
dull gray bags contain 2 posh green bags.
light fuchsia bags contain 5 dark gold bags, 3 plaid black bags, 2 bright lavender bags.
striped green bags contain 2 striped fuchsia bags, 5 dull tomato bags, 2 posh crimson bags.
mirrored purple bags contain 2 posh crimson bags, 2 mirrored magenta bags, 3 wavy violet bags, 1 striped coral bag.
vibrant black bags contain 3 clear magenta bags, 4 muted salmon bags, 5 posh blue bags.
plaid beige bags contain 2 dark black bags, 5 plaid yellow bags, 2 bright violet bags.
pale teal bags contain 3 pale crimson bags.
striped turquoise bags contain no other bags.
dim purple bags contain 2 dull crimson bags, 5 bright red bags.
faded cyan bags contain 5 posh aqua bags, 4 dull green bags, 3 dark olive bags.
mirrored cyan bags contain 5 plaid salmon bags, 4 dim salmon bags, 4 posh tomato bags.
striped purple bags contain 2 faded salmon bags, 2 bright tan bags, 4 drab white bags.
bright blue bags contain 3 light purple bags, 1 pale yellow bag.
faded bronze bags contain 1 light indigo bag, 3 plaid green bags, 5 posh orange bags.
striped white bags contain 4 drab indigo bags, 5 wavy tomato bags, 5 dotted fuchsia bags, 2 dim silver bags.
clear lime bags contain 2 dotted magenta bags, 5 striped magenta bags, 3 bright coral bags, 3 mirrored silver bags.
bright white bags contain 3 dim lavender bags.
dim crimson bags contain 1 posh black bag, 1 mirrored silver bag.
clear olive bags contain 4 vibrant purple bags, 3 drab lavender bags, 2 pale violet bags.
light coral bags contain 2 dotted green bags, 2 wavy aqua bags, 4 dark salmon bags, 3 light gold bags.
muted plum bags contain 5 plaid tan bags, 1 mirrored silver bag, 3 vibrant turquoise bags.
dim plum bags contain 4 bright plum bags.
drab bronze bags contain 1 light indigo bag, 3 striped brown bags, 3 clear gold bags, 3 clear gray bags.
plaid maroon bags contain 1 dotted orange bag, 5 light magenta bags, 4 faded salmon bags, 3 pale yellow bags.
wavy violet bags contain 2 dotted silver bags, 3 dull crimson bags, 5 mirrored aqua bags, 4 striped brown bags.
pale crimson bags contain 3 bright chartreuse bags, 4 light turquoise bags, 1 bright gray bag, 1 muted bronze bag.
mirrored aqua bags contain no other bags.
clear crimson bags contain 2 pale salmon bags, 4 mirrored magenta bags, 1 striped coral bag, 5 plaid olive bags.
dark tan bags contain 4 wavy silver bags, 4 dark aqua bags.
wavy maroon bags contain 3 clear gray bags.
light crimson bags contain 3 clear silver bags.
vibrant green bags contain 1 clear magenta bag, 1 dim white bag, 4 plaid black bags.
bright bronze bags contain 2 light brown bags.
light maroon bags contain 5 bright red bags, 2 bright tan bags, 5 dim silver bags, 4 pale salmon bags.
dark coral bags contain 2 light crimson bags.
pale silver bags contain 2 mirrored magenta bags, 3 posh red bags, 1 muted yellow bag, 5 dark salmon bags.
dotted crimson bags contain 4 faded salmon bags, 4 vibrant beige bags, 5 dim beige bags.
dull silver bags contain 1 striped brown bag, 2 shiny magenta bags.
striped beige bags contain 4 clear crimson bags.
faded orange bags contain 2 drab white bags, 3 striped salmon bags, 5 bright chartreuse bags.
drab olive bags contain 4 clear purple bags.
dull maroon bags contain 3 dotted magenta bags.
vibrant lavender bags contain 2 light tomato bags, 1 shiny teal bag.
dotted chartreuse bags contain 4 faded white bags, 2 light brown bags.
drab cyan bags contain 2 pale coral bags, 3 light purple bags, 2 drab bronze bags, 1 dim beige bag.
bright teal bags contain 2 vibrant plum bags, 2 dull tan bags, 1 dim tomato bag, 5 dark violet bags.
wavy fuchsia bags contain 1 dim green bag, 2 wavy violet bags.
drab black bags contain 3 striped tomato bags, 4 light salmon bags, 4 dim yellow bags, 3 shiny black bags.
dark green bags contain 5 dark tan bags.
clear tomato bags contain 4 mirrored gold bags, 4 dark gold bags.
plaid aqua bags contain 5 dotted coral bags, 1 muted white bag.
plaid white bags contain 3 clear crimson bags, 3 wavy gold bags, 3 pale lime bags, 2 striped brown bags.
muted black bags contain 1 wavy tan bag, 4 mirrored turquoise bags.
faded aqua bags contain 5 dull turquoise bags, 1 vibrant tan bag.
vibrant brown bags contain 5 pale silver bags, 3 drab orange bags, 1 clear olive bag.
pale cyan bags contain 2 faded cyan bags, 1 mirrored tan bag, 3 vibrant aqua bags, 3 light gold bags.
shiny salmon bags contain 5 posh red bags, 5 light chartreuse bags, 2 striped brown bags.
plaid lime bags contain 4 dim gold bags, 1 clear magenta bag.
drab tomato bags contain 5 clear orange bags.
faded beige bags contain 3 dark crimson bags, 2 mirrored tan bags.
vibrant crimson bags contain 4 wavy blue bags, 5 clear gray bags.
dotted maroon bags contain 5 dotted red bags, 4 wavy silver bags, 1 drab brown bag, 3 dark black bags.
striped indigo bags contain 3 striped orange bags.
dim orange bags contain 1 wavy lavender bag, 5 drab brown bags, 1 dull salmon bag.
posh olive bags contain 3 faded indigo bags, 1 plaid white bag.
striped lavender bags contain 1 bright red bag.
muted violet bags contain 3 bright tan bags, 5 striped coral bags, 1 drab bronze bag.
wavy tan bags contain 1 striped brown bag, 3 dim salmon bags, 1 posh fuchsia bag, 4 mirrored violet bags.
dull magenta bags contain 1 clear red bag, 4 dull green bags, 2 posh lime bags, 5 mirrored gold bags.
dotted red bags contain 1 mirrored black bag, 3 dull bronze bags, 2 dim salmon bags.
drab turquoise bags contain 5 muted yellow bags, 1 light indigo bag, 5 dotted black bags.
faded purple bags contain 5 dim orange bags, 3 dark red bags.
faded teal bags contain 1 bright fuchsia bag.
plaid gray bags contain 5 pale aqua bags.
bright black bags contain 4 wavy violet bags.
dim green bags contain 3 mirrored aqua bags, 1 light chartreuse bag, 1 light indigo bag.
dark gold bags contain 2 mirrored red bags, 2 bright lavender bags, 3 pale crimson bags.
dark plum bags contain 2 pale salmon bags.
wavy orange bags contain 2 light tan bags, 1 pale yellow bag, 2 shiny aqua bags, 4 vibrant orange bags.
bright chartreuse bags contain 5 dark salmon bags, 1 plaid olive bag.
wavy purple bags contain 4 faded coral bags, 2 vibrant orange bags.
shiny violet bags contain 3 plaid chartreuse bags, 2 plaid brown bags.
posh indigo bags contain 1 posh salmon bag.
clear indigo bags contain 3 light violet bags.
plaid purple bags contain 1 clear blue bag, 2 muted gold bags, 1 dull brown bag.
posh lavender bags contain 1 plaid black bag, 3 shiny orange bags, 3 posh red bags, 4 plaid cyan bags.
wavy silver bags contain 3 plaid cyan bags, 1 plaid olive bag.
posh salmon bags contain 3 clear gray bags, 5 dotted silver bags, 4 shiny aqua bags.
faded lavender bags contain 4 drab chartreuse bags, 4 plaid magenta bags, 1 vibrant tomato bag.
pale red bags contain 4 bright red bags, 4 pale lime bags, 3 striped turquoise bags.
bright purple bags contain 3 muted lavender bags.
dim magenta bags contain 1 plaid teal bag, 3 posh lavender bags.
posh magenta bags contain 3 pale teal bags, 5 mirrored tomato bags, 2 striped gold bags, 2 bright tomato bags.
bright brown bags contain 1 dark fuchsia bag, 4 pale yellow bags, 5 shiny crimson bags.
light red bags contain 1 wavy teal bag.
pale turquoise bags contain 3 mirrored yellow bags.
vibrant magenta bags contain 4 dark gold bags.
dotted salmon bags contain 3 wavy violet bags, 4 shiny aqua bags, 4 dull bronze bags.
mirrored gray bags contain 3 dark plum bags, 3 striped gray bags, 4 plaid violet bags.
dim yellow bags contain 3 striped turquoise bags, 2 pale salmon bags, 4 mirrored magenta bags, 5 striped brown bags.
drab lavender bags contain 2 faded maroon bags, 2 shiny orange bags.
muted maroon bags contain 1 wavy tomato bag, 2 drab red bags.
clear gold bags contain 3 mirrored olive bags, 3 striped turquoise bags.
light bronze bags contain 1 muted lavender bag.
dotted bronze bags contain 2 dotted turquoise bags.
pale tomato bags contain 3 shiny beige bags, 1 mirrored tomato bag, 2 dotted maroon bags, 2 wavy teal bags.
pale chartreuse bags contain 5 plaid silver bags.
drab magenta bags contain 5 wavy tomato bags, 1 drab brown bag, 2 posh maroon bags, 5 mirrored teal bags.
posh blue bags contain 3 muted lime bags, 1 mirrored tomato bag, 5 shiny aqua bags.
posh purple bags contain 5 dull maroon bags.
posh bronze bags contain 2 mirrored orange bags, 2 pale violet bags, 2 plaid gray bags.
pale gold bags contain 4 striped brown bags, 2 muted green bags.
faded crimson bags contain 5 drab salmon bags, 2 posh crimson bags, 3 light purple bags, 5 clear red bags.
vibrant fuchsia bags contain 2 posh beige bags, 4 dotted indigo bags, 5 pale silver bags, 4 clear black bags.
faded lime bags contain 3 posh plum bags, 3 shiny aqua bags, 4 dull chartreuse bags.
shiny fuchsia bags contain 4 shiny salmon bags, 3 pale chartreuse bags.
wavy lavender bags contain 2 dark blue bags, 5 muted salmon bags.
pale indigo bags contain 1 wavy gold bag, 1 clear silver bag, 3 dim blue bags.
drab violet bags contain 4 muted yellow bags.
shiny plum bags contain 3 bright black bags, 5 pale teal bags, 5 light red bags, 2 plaid magenta bags.
shiny gold bags contain 1 vibrant chartreuse bag.
wavy gold bags contain 5 posh beige bags, 1 mirrored aqua bag.
dark salmon bags contain 3 light aqua bags, 3 posh red bags, 2 mirrored black bags, 1 posh crimson bag.
pale tan bags contain 4 wavy coral bags.
dull tan bags contain 4 bright cyan bags.
clear maroon bags contain 4 dim magenta bags, 2 shiny lavender bags.
light white bags contain 3 dark brown bags, 4 bright fuchsia bags.
wavy red bags contain 4 dim red bags.
dotted aqua bags contain 4 striped teal bags.
bright beige bags contain 5 shiny tomato bags.
plaid indigo bags contain 1 muted bronze bag.
light yellow bags contain 2 striped black bags, 2 muted gold bags, 3 dotted tan bags, 5 dark coral bags.
vibrant silver bags contain 2 dim blue bags.
posh tomato bags contain 5 bright red bags, 3 posh red bags, 3 plaid olive bags, 4 clear crimson bags.
pale magenta bags contain 3 mirrored blue bags, 5 dull maroon bags, 5 dark violet bags.
light indigo bags contain 2 plaid olive bags, 1 plaid black bag, 3 dark indigo bags.
shiny green bags contain 1 vibrant chartreuse bag, 4 bright lavender bags, 3 wavy crimson bags, 4 dull red bags.
striped maroon bags contain 2 posh coral bags, 2 striped gray bags, 3 clear plum bags.
posh fuchsia bags contain 2 wavy gold bags, 2 posh beige bags.
dim coral bags contain 4 wavy gold bags, 4 muted lavender bags.
faded maroon bags contain 5 dim purple bags, 4 bright red bags, 5 wavy violet bags, 1 mirrored aqua bag.
striped black bags contain 4 plaid fuchsia bags, 5 bright lavender bags, 4 dull black bags.
mirrored gold bags contain 3 dotted silver bags.
light tomato bags contain 5 pale brown bags, 3 wavy coral bags.
dark white bags contain 2 mirrored tomato bags, 1 striped orange bag, 1 dim olive bag, 2 dotted blue bags.
dotted green bags contain 3 clear plum bags.
dotted brown bags contain 1 clear magenta bag.
muted orange bags contain 3 muted olive bags, 2 faded yellow bags, 2 faded turquoise bags, 3 muted violet bags.
dull olive bags contain 2 dotted teal bags.
mirrored lime bags contain 4 dark violet bags, 4 muted yellow bags.
wavy green bags contain 5 bright lime bags.
drab purple bags contain 2 striped turquoise bags, 4 clear silver bags, 1 muted lime bag.
clear cyan bags contain 5 light lavender bags.
dim black bags contain 3 dull black bags.
posh gray bags contain 4 mirrored magenta bags.
dotted yellow bags contain 4 light maroon bags, 1 clear blue bag, 5 dark maroon bags.
mirrored olive bags contain 2 dark violet bags, 2 dull crimson bags, 5 dim salmon bags, 5 bright tan bags.
dark blue bags contain 3 dull aqua bags, 1 dim teal bag.
dull bronze bags contain 4 striped coral bags.
drab maroon bags contain 2 dark bronze bags, 1 wavy blue bag.
mirrored lavender bags contain 4 clear black bags.
dim beige bags contain 3 shiny silver bags, 2 dark purple bags, 3 dull green bags.
light violet bags contain 1 muted gray bag, 5 wavy tomato bags.
striped chartreuse bags contain 3 dull tan bags, 1 dim salmon bag.
posh red bags contain 2 clear crimson bags, 2 striped coral bags, 2 bright red bags.
wavy beige bags contain 5 muted silver bags, 5 pale teal bags.
light gray bags contain 5 drab indigo bags, 3 posh crimson bags, 1 dark tan bag, 2 pale red bags.
muted white bags contain 3 wavy fuchsia bags.
pale violet bags contain 4 wavy tan bags, 2 plaid yellow bags.
drab fuchsia bags contain 1 plaid lavender bag, 2 pale lime bags.
clear green bags contain 4 light indigo bags.
vibrant turquoise bags contain 2 vibrant tan bags, 3 clear silver bags.
faded green bags contain 5 striped orange bags, 4 bright fuchsia bags.
striped tan bags contain 4 wavy silver bags.
clear white bags contain 3 vibrant fuchsia bags, 2 pale silver bags, 1 vibrant indigo bag, 3 shiny silver bags.
dim cyan bags contain 2 mirrored black bags, 2 plaid chartreuse bags, 4 bright gold bags.
muted gray bags contain 3 mirrored violet bags, 4 dim yellow bags.
mirrored maroon bags contain 5 clear crimson bags, 2 clear gray bags, 1 dotted salmon bag.
dim bronze bags contain 2 striped plum bags, 2 bright orange bags.
shiny tomato bags contain 4 dim yellow bags, 2 faded bronze bags, 1 drab maroon bag, 3 dim gold bags.
muted olive bags contain 2 mirrored yellow bags, 4 bright olive bags.
shiny brown bags contain 3 bright coral bags.
clear blue bags contain 2 pale green bags, 2 light violet bags, 4 plaid crimson bags.
faded tan bags contain 4 dim crimson bags, 3 mirrored turquoise bags, 3 drab gold bags.
muted cyan bags contain 2 drab silver bags.
mirrored red bags contain 1 bright gold bag.
faded salmon bags contain 5 posh red bags, 4 dull crimson bags, 3 dotted salmon bags, 5 shiny olive bags.
dark purple bags contain 5 dim magenta bags.
dotted lime bags contain 4 posh fuchsia bags, 3 wavy tan bags, 2 mirrored aqua bags, 1 shiny aqua bag.
posh tan bags contain 3 plaid tan bags, 2 drab fuchsia bags.
dotted teal bags contain 4 dull crimson bags, 2 bright lavender bags, 2 wavy tan bags, 4 muted crimson bags.
clear purple bags contain 4 shiny aqua bags, 1 dim cyan bag, 3 dotted black bags, 4 dull gray bags.
light gold bags contain 2 dotted magenta bags, 5 dark olive bags, 3 dim cyan bags, 2 dark indigo bags.
mirrored silver bags contain 2 plaid black bags, 3 vibrant beige bags, 3 mirrored purple bags, 3 dotted lime bags.
posh black bags contain 4 wavy violet bags, 3 plaid teal bags.
faded silver bags contain 2 vibrant purple bags, 5 shiny olive bags.
drab teal bags contain 2 dotted salmon bags, 4 posh beige bags, 4 mirrored tan bags, 1 muted green bag.
dark maroon bags contain 2 dark tan bags, 5 mirrored gold bags, 2 dim plum bags.
striped plum bags contain 3 striped coral bags, 5 clear brown bags, 1 striped brown bag.
striped bronze bags contain 4 drab yellow bags, 4 striped chartreuse bags, 5 posh plum bags, 3 clear blue bags.
drab plum bags contain 1 shiny gold bag, 5 vibrant tan bags, 3 light gold bags.
clear fuchsia bags contain 1 vibrant red bag.
dark silver bags contain 5 clear salmon bags, 1 faded yellow bag, 1 shiny lavender bag, 3 wavy fuchsia bags.
striped lime bags contain 2 dim tomato bags, 3 light fuchsia bags, 1 light lime bag.
wavy salmon bags contain 1 shiny tomato bag, 1 light tomato bag.
dim maroon bags contain 4 faded beige bags, 2 bright turquoise bags, 4 dull purple bags, 4 vibrant olive bags.
faded chartreuse bags contain 4 mirrored blue bags, 5 posh white bags, 2 wavy magenta bags.
clear magenta bags contain 2 muted bronze bags, 5 dim yellow bags, 2 dotted lime bags.
bright silver bags contain 2 bright gold bags, 4 wavy yellow bags.
dull violet bags contain 3 faded beige bags, 1 mirrored orange bag, 1 mirrored aqua bag.
vibrant cyan bags contain 2 clear aqua bags, 2 dark maroon bags, 5 pale tan bags.
light chartreuse bags contain 1 wavy gold bag, 2 posh tomato bags, 2 clear silver bags.
dotted olive bags contain 5 wavy crimson bags, 1 drab tomato bag.
posh aqua bags contain 3 striped brown bags.
posh orange bags contain 2 wavy coral bags.
dull cyan bags contain 1 dark tan bag, 5 dull gray bags, 3 drab turquoise bags, 4 shiny aqua bags.
muted teal bags contain 4 dull blue bags.
bright turquoise bags contain 5 dull bronze bags, 1 plaid lavender bag.
plaid tomato bags contain 2 muted lime bags, 1 light indigo bag, 5 posh tomato bags.
dim salmon bags contain 1 dark indigo bag, 5 plaid brown bags, 3 clear crimson bags, 4 clear silver bags.
posh brown bags contain 3 clear silver bags, 5 faded cyan bags, 4 posh crimson bags.
dark turquoise bags contain 1 drab crimson bag, 5 striped coral bags.
dull crimson bags contain no other bags.
striped teal bags contain 5 plaid lavender bags, 4 faded red bags.
dotted blue bags contain 5 muted beige bags.
vibrant plum bags contain 1 pale lime bag, 1 posh red bag, 1 dull bronze bag, 3 drab silver bags.
wavy coral bags contain 4 mirrored magenta bags, 5 dim yellow bags, 4 bright red bags, 2 posh crimson bags.
dark chartreuse bags contain 5 dotted fuchsia bags, 3 mirrored silver bags, 5 mirrored aqua bags, 4 dim cyan bags.
vibrant teal bags contain 3 vibrant silver bags.
shiny beige bags contain 5 posh teal bags.
dim olive bags contain 3 clear gray bags, 4 wavy gold bags.
drab yellow bags contain 4 light chartreuse bags, 3 striped crimson bags, 2 faded gray bags.
dull chartreuse bags contain 1 light lavender bag.
dotted silver bags contain no other bags.
shiny blue bags contain 5 dull brown bags, 2 dark coral bags, 4 shiny crimson bags.
mirrored black bags contain 5 mirrored magenta bags, 1 striped turquoise bag, 2 plaid cyan bags.
dull black bags contain 4 dim purple bags, 4 dark salmon bags, 2 mirrored gold bags.
mirrored beige bags contain 4 striped fuchsia bags, 4 plaid black bags, 5 dim red bags, 5 light green bags.
dim chartreuse bags contain 4 shiny yellow bags.
shiny teal bags contain 1 vibrant maroon bag.
dim tomato bags contain 5 plaid tomato bags, 5 mirrored violet bags, 2 mirrored orange bags.
vibrant beige bags contain 1 plaid black bag, 3 dotted salmon bags, 2 posh fuchsia bags.
dull aqua bags contain 5 wavy tan bags, 3 bright olive bags.
pale lime bags contain 5 bright turquoise bags, 5 dim yellow bags, 3 shiny orange bags.
bright orange bags contain 4 muted gold bags, 1 clear white bag.
drab salmon bags contain 2 dark fuchsia bags, 2 dull gray bags.
mirrored salmon bags contain 3 posh plum bags, 1 dotted silver bag, 1 clear plum bag, 5 dull black bags.
shiny silver bags contain 4 drab lavender bags, 2 dim violet bags, 5 dark aqua bags, 2 vibrant chartreuse bags.
plaid coral bags contain 4 dim blue bags, 1 vibrant lime bag.
mirrored white bags contain 2 pale gold bags, 3 shiny green bags, 5 striped white bags.
pale gray bags contain 5 mirrored gold bags, 1 wavy silver bag, 5 posh green bags, 1 mirrored red bag.
pale white bags contain 4 shiny turquoise bags, 4 bright plum bags, 5 dotted bronze bags.
muted fuchsia bags contain 5 plaid turquoise bags, 2 dark aqua bags, 4 pale brown bags, 4 striped plum bags.
striped yellow bags contain 5 posh red bags, 1 plaid black bag.
plaid silver bags contain 2 dark indigo bags, 3 clear teal bags, 3 dotted black bags.
plaid black bags contain 3 dull crimson bags.
vibrant lime bags contain 1 dotted fuchsia bag, 4 dull bronze bags, 4 dark aqua bags, 1 dark salmon bag.
dotted white bags contain 5 dim red bags.
light aqua bags contain 5 mirrored aqua bags, 2 striped brown bags, 4 posh crimson bags.
striped brown bags contain 1 dotted silver bag, 5 clear beige bags.
vibrant red bags contain 3 bright olive bags, 3 plaid chartreuse bags, 3 light olive bags, 4 dim violet bags.
dim teal bags contain 3 clear violet bags.
bright lime bags contain 2 dull lavender bags, 4 pale turquoise bags.
striped crimson bags contain 5 bright gray bags, 4 dark green bags, 4 posh plum bags, 5 shiny coral bags.
mirrored tomato bags contain 1 wavy tan bag.
dull blue bags contain 5 bright turquoise bags, 2 striped brown bags.
mirrored yellow bags contain 4 vibrant purple bags, 4 faded bronze bags, 2 dull lavender bags, 3 light plum bags.
plaid gold bags contain 5 striped olive bags, 5 dotted chartreuse bags.
dotted coral bags contain 2 bright teal bags.
wavy crimson bags contain 5 dotted salmon bags, 1 dull crimson bag.
dark aqua bags contain 3 dull crimson bags, 5 light aqua bags, 3 mirrored purple bags, 1 striped brown bag.
vibrant yellow bags contain 1 faded beige bag, 3 dark brown bags, 1 wavy bronze bag.
wavy teal bags contain 5 dotted magenta bags.
drab white bags contain 3 pale blue bags.
muted salmon bags contain 4 posh salmon bags, 1 bright chartreuse bag.
light purple bags contain 5 dark maroon bags.
faded black bags contain 4 dull gold bags.
muted turquoise bags contain 1 wavy silver bag, 4 clear purple bags.
plaid chartreuse bags contain 1 posh crimson bag, 5 striped brown bags.
vibrant tan bags contain 2 dull blue bags, 1 posh black bag, 1 faded red bag, 5 plaid magenta bags.
shiny orange bags contain 5 vibrant chartreuse bags, 3 shiny gold bags.
shiny lavender bags contain 2 posh teal bags.
pale black bags contain 5 dark brown bags.
shiny cyan bags contain 5 wavy tomato bags, 3 bright bronze bags, 3 faded crimson bags.
faded olive bags contain 3 clear aqua bags.
dark violet bags contain 4 faded red bags.
light orange bags contain 1 posh aqua bag, 2 light crimson bags, 2 dark maroon bags.
drab silver bags contain 1 pale blue bag.
plaid bronze bags contain 5 mirrored orange bags, 4 plaid cyan bags, 1 dotted black bag.
plaid violet bags contain 1 plaid fuchsia bag, 5 clear teal bags.
clear turquoise bags contain 4 dim yellow bags, 5 plaid teal bags, 3 plaid red bags, 1 dotted salmon bag.
plaid lavender bags contain 3 clear silver bags, 4 dull bronze bags.
mirrored green bags contain 3 striped lavender bags.
faded white bags contain 2 light chartreuse bags.
bright crimson bags contain 2 mirrored purple bags.
dotted beige bags contain 1 pale salmon bag, 5 dotted teal bags, 5 light lavender bags, 3 wavy violet bags.
pale green bags contain 2 dark gold bags, 4 clear gray bags.
dull indigo bags contain 2 striped brown bags, 3 plaid plum bags.
shiny yellow bags contain 3 striped silver bags, 2 mirrored plum bags, 1 muted red bag, 5 clear gold bags.
bright maroon bags contain 2 muted crimson bags, 2 plaid chartreuse bags, 1 dim violet bag, 1 plaid blue bag.
vibrant orange bags contain 5 posh plum bags, 4 shiny gold bags.
faded fuchsia bags contain 2 dotted aqua bags.
bright indigo bags contain 3 shiny coral bags, 1 muted salmon bag, 2 clear white bags, 1 vibrant maroon bag.
shiny indigo bags contain 4 dark red bags, 2 pale lime bags.
light cyan bags contain 2 clear black bags, 2 mirrored aqua bags, 1 faded beige bag, 2 faded salmon bags.
faded gold bags contain 5 muted lime bags, 3 plaid fuchsia bags.
muted coral bags contain 2 faded indigo bags, 1 dim beige bag, 5 dotted orange bags, 4 posh black bags.
drab gray bags contain 5 clear magenta bags, 5 bright tomato bags, 1 dull gold bag.
vibrant salmon bags contain 4 bright gold bags.
dark red bags contain 5 posh black bags, 4 faded teal bags.
wavy blue bags contain 3 dim green bags, 4 dull green bags, 2 posh aqua bags.
mirrored turquoise bags contain 5 dull lime bags, 4 dark gray bags, 1 striped cyan bag, 4 muted gold bags.
wavy chartreuse bags contain 1 pale brown bag, 4 shiny chartreuse bags, 4 wavy fuchsia bags.
dim red bags contain 1 bright blue bag, 3 clear purple bags, 2 wavy crimson bags, 5 shiny black bags.
dull gold bags contain 4 wavy blue bags.
faded blue bags contain 1 plaid turquoise bag, 2 vibrant indigo bags.
shiny aqua bags contain 4 plaid cyan bags, 4 posh crimson bags.
bright salmon bags contain 1 posh red bag, 1 shiny orange bag, 1 vibrant crimson bag.
pale yellow bags contain 4 plaid cyan bags.
plaid magenta bags contain 3 plaid brown bags, 5 pale yellow bags, 5 drab fuchsia bags, 1 clear black bag.
vibrant maroon bags contain 4 dull tomato bags, 1 dotted indigo bag, 2 plaid teal bags, 2 shiny gold bags.
drab orange bags contain 3 wavy coral bags.
pale aqua bags contain 5 wavy lime bags, 5 drab turquoise bags.
shiny crimson bags contain 3 posh black bags, 5 drab fuchsia bags, 1 plaid fuchsia bag, 4 posh plum bags.
pale purple bags contain 2 clear green bags, 2 striped crimson bags, 4 drab indigo bags.
faded magenta bags contain 5 light red bags.
shiny tan bags contain 5 plaid silver bags, 3 light lavender bags, 4 wavy purple bags.
vibrant indigo bags contain 5 plaid beige bags.
wavy turquoise bags contain 4 dark teal bags, 2 dark cyan bags, 4 mirrored olive bags, 5 bright red bags.
striped blue bags contain 1 vibrant lime bag, 3 vibrant indigo bags, 1 pale maroon bag, 2 dark white bags.
faded tomato bags contain 3 plaid tan bags, 4 pale tan bags, 5 wavy violet bags, 3 pale lime bags.
bright green bags contain 1 bright purple bag, 5 posh magenta bags.
dark beige bags contain 4 light green bags, 4 light magenta bags, 5 dotted lime bags, 4 plaid salmon bags.
plaid green bags contain 2 pale salmon bags.
bright red bags contain 2 dotted silver bags.
drab lime bags contain 3 dotted bronze bags.
muted indigo bags contain 4 posh gray bags, 2 dark lavender bags, 2 plaid chartreuse bags, 2 pale red bags.
muted tan bags contain 2 muted brown bags, 3 dull maroon bags.
plaid turquoise bags contain 3 clear teal bags, 2 dull tomato bags, 5 dotted purple bags, 1 posh salmon bag.
drab aqua bags contain 3 bright lime bags, 5 posh red bags.
";
void Main()
{
var sInsts = Input.Split("\n", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);
var originalInstructions = sInsts.Select(i => Instruction.Parse(i)).ToList();
PartOne(originalInstructions.ClearExecutionCounts().ToList());
PartTwo(originalInstructions.ClearExecutionCounts().ToList());
}
void PartOne(IReadOnlyList<Instruction> instructions)
{
// Accumulator state before the next instruction is executed a second time
InitState();
while (instructions[ProgramCounter].ExecutionCount < 1)
{
instructions[ProgramCounter].Execute();
}
Accumulator.Dump();
}
void PartTwo(IReadOnlyList<Instruction> originalInsts)
{
// Accumulator state after the program terminates
var indexInsts = originalInsts.GetIndexInst().Where(pair => pair.inst.OpCode == Operation.Jmp || pair.inst.OpCode == Operation.Nop);
int exitPoint = originalInsts.Count;
//indexInsts.Dump();
foreach (var indexInst in indexInsts)
{
InitState();
// Fresh copy of instructions
var workingInsts = originalInsts.ClearExecutionCounts().ToList();
workingInsts[indexInst.index] =
indexInst.inst with
{
OpCode = indexInst.inst.OpCode switch
{
Operation.Jmp => Operation.Nop,
Operation.Nop => Operation.Jmp,
_ => indexInst.inst.OpCode
}
};
while (true)
{
var nextInst = workingInsts[ProgramCounter];
//nextInst.Dump();
if (nextInst.ExecutionCount == 1)
{
"Infinite loop".Dump();
break;
}
nextInst.Execute();
if (ProgramCounter == exitPoint)
{
Accumulator.Dump();
return;
}
else if (ProgramCounter > exitPoint)
{
break;
}
}
}
}
static class InstructionExt
{
public static IEnumerable<(int index, Instruction inst)> GetIndexInst(this IReadOnlyList<Instruction> insts)
{
for (int i = 0; i < insts.Count; i++)
{
yield return new(i, insts[i]);
}
}
public static IEnumerable<Instruction> ClearExecutionCounts(this IEnumerable<Instruction> insts) =>
insts.Select(i => i with { ExecutionCount = 0 });
}
void InitState()
{
Accumulator = 0;
ProgramCounter = 0;
}
public static int Accumulator { get; set; } = 0;
public static int ProgramCounter { get; set; } = 0;
public enum Operation { Acc, Jmp, Nop }
public record Instruction(Operation OpCode, int Arg)
{
public int ExecutionCount { get; set; }
private void DoAcc()
{
Accumulator += Arg;
ProgramCounter++;
}
private void DoJmp() => ProgramCounter += Arg;
private void DoNop() => ProgramCounter++;
public void Execute()
{
//$"{ProgramCounter} : {OpCode} {Arg} {ExecutionCount}".Dump();
switch (OpCode)
{
case Operation.Acc: DoAcc(); break;
case Operation.Jmp: DoJmp(); break;
case Operation.Nop: DoNop(); break;
default: throw new Exception($"Unknown opcode {OpCode}");
};
ExecutionCount++;
}
public static Instruction Parse(string raw)
{
var sInst = raw.Trim().Split(' ', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
string sOp = sInst[0].ToLowerInvariant();
Operation op = sOp switch
{
"jmp" => Operation.Jmp,
"acc" => Operation.Acc,
"nop" => Operation.Nop,
_ => throw new Exception($"Unknown opcode {sOp}")
};
int arg = int.Parse(sInst[1]);
return new (op, arg);
}
}
static readonly string TestInput = @"
nop +0
acc +1
jmp +4
acc +3
jmp -3
acc -99
acc +1
jmp -4
acc +6
";
static readonly string Input = @"
jmp +149
acc -11
nop +95
acc -6
jmp +196
acc +2
acc -6
acc +38
acc +18
jmp +246
acc +43
acc +37
acc -1
jmp +390
acc +32
acc -15
jmp +487
jmp +382
jmp +71
jmp +331
acc -3
acc -12
acc +4
jmp +417
acc +30
acc +20
jmp +410
acc +22
acc +25
acc +19
acc +5
jmp +405
acc +15
acc +33
acc +7
acc -18
jmp +463
acc +25
acc +8
acc +1
jmp +64
jmp +1
jmp +562
jmp +4
acc +21
acc +12
jmp +467
nop +197
acc +32
jmp +7
acc +2
jmp +352
acc +15
jmp +289
acc +39
jmp +448
jmp +227
acc +17
acc +4
jmp +326
acc -1
nop +167
acc +30
nop +471
jmp +101
acc +45
nop +276
acc +12
jmp +215
nop +80
acc +23
acc +31
jmp +104
acc +39
acc +15
jmp +40
nop +433
acc +21
acc +22
acc +37
jmp +421
acc +14
jmp -30
acc +42
acc +38
jmp +203
acc -8
acc +27
jmp +102
acc -5
acc +0
acc +18
acc +26
jmp +212
acc +25
acc +18
jmp +209
acc +18
acc +44
acc +47
nop -40
jmp +372
acc +29
jmp +384
acc +39
acc -11
acc +43
jmp +406
acc +2
nop +439
jmp +343
acc +29
acc +18
jmp +457
jmp -31
jmp +146
acc +12
acc +26
nop +98
jmp +125
acc +6
acc +35
acc +48
acc +44
jmp +497
acc +17
acc -8
jmp +223
acc +47
jmp +405
jmp +212
jmp +317
acc -13
acc -6
jmp +94
acc +47
acc +50
acc -16
acc +38
jmp +290
jmp +383
nop -44
acc +38
nop +418
acc +42
jmp +233
nop -94
acc +46
jmp +413
acc +10
acc -6
jmp +410
acc +30
jmp -93
acc -13
jmp +6
acc -16
acc +18
nop +403
acc +0
jmp +68
acc +45
jmp +302
acc +5
jmp +26
acc -5
acc +49
jmp +412
acc +3
acc +14
jmp +278
acc +6
acc +4
jmp -58
acc +14
jmp -60
acc -12
acc +23
jmp +225
acc +9
acc +17
acc -10
acc -13
jmp +216
acc -8
nop +363
jmp +84
nop +300
acc -15
jmp +415
acc +17
acc -11
nop +96
jmp +377
nop +259
acc +4
jmp +327
acc +0
jmp +149
jmp +12
acc +23
acc +43
acc +2
jmp +1
jmp +400
acc +24
jmp +114
acc +3
acc -13
jmp +149
jmp +100
jmp +1
jmp +157
acc +23
acc -15
jmp -139
nop -85
jmp +201
acc -2
acc +39
acc +30
nop -93
jmp -11
acc +46
jmp +285
jmp +1
acc +41
jmp +115
acc +48
acc -12
acc -17
jmp -15
nop +82
acc +25
jmp -151
acc +20
acc -14
acc +9
acc -9
jmp +284
acc +27
acc +38
acc +50
jmp +145
nop +279
jmp -55
nop +245
jmp +254
acc +4
jmp +368
nop -119
acc -11
acc +16
acc +19
jmp -54
nop -186
nop -187
acc +9
acc +44
jmp -222
jmp +253
nop -234
acc +33
acc +35
acc -17
jmp +11
acc +2
acc +41
acc +47
jmp +310
acc +0
acc -8
acc +1
jmp +55
acc -1
jmp -257
acc +7
acc +44
nop +253
acc +41
jmp +302
acc +16
jmp -185
jmp +140
jmp +1
nop +3
acc +35
jmp -267
acc +6
jmp -269
jmp +211
acc +30
acc +14
acc +16
acc +41
jmp -47
jmp -192
nop -21
acc -1
jmp +192
acc -6
acc +15
acc +3
nop -247
jmp -88
jmp +164
acc +47
nop +43
acc +40
jmp +151
jmp +85
jmp +1
acc +40
jmp -257
acc +13
acc +13
jmp -256
acc +25
acc +39
jmp +260
acc +13
acc -18
acc -19
acc -14
jmp -10
acc -16
acc +9
jmp -199
nop +185
acc +38
jmp -261
nop +200
acc -18
nop +115
acc +36
jmp -259
acc +47
acc -2
acc +9
jmp -139
nop -117
jmp -13
jmp +1
jmp +247
acc +19
acc +49
jmp +177
acc -1
jmp +249
jmp -218
acc +12
acc +33
jmp +108
jmp -48
nop -205
acc +32
jmp -159
jmp -129
acc +32
jmp +1
jmp +249
nop +75
acc +17
acc -16
jmp +253
acc -9
jmp -12
acc +15
jmp -14
acc +13
acc -8
nop -13
jmp +27
nop -336
acc +33
acc +10
acc -1
jmp -350
nop -134
acc -11
jmp +5
acc +10
acc +13
acc +13
jmp -249
acc +8
jmp -215
jmp +49
acc +35
acc +28
jmp -54
acc +14
nop -264
jmp +1
jmp -166
jmp -291
acc +9
acc +43
jmp -301
nop +149
acc -9
jmp -81
jmp -287
acc +9
acc +35
acc -12
jmp -295
acc +46
jmp -394
acc +29
acc +19
acc +9
jmp -58
acc +7
acc +32
nop -261
acc +44
jmp -365
jmp +1
jmp +120
acc +37
nop -177
jmp +101
acc +42
acc +13
acc +36
jmp -343
acc +45
jmp -408
acc +23
acc +0
jmp -66
jmp +1
acc +34
acc +19
jmp +104
jmp +1
acc +36
jmp -141
jmp -44
acc +9
acc +30
acc +18
acc +0
jmp -303
jmp +1
acc +12
jmp +66
acc +0
jmp +82
acc +43
acc +18
jmp +49
acc -16
acc -3
acc +0
jmp -249
acc -2
nop +81
jmp +40
jmp +94
acc -16
acc +1
jmp -445
jmp +1
acc +22
jmp -130
acc +44
jmp -73
acc +3
acc +5
jmp -121
jmp -352
jmp -163
acc +15
acc +47
nop +141
jmp +140
acc -18
nop -289
acc +16
jmp -476
acc -19
nop +134
acc -10
acc +37
jmp -13
jmp -359
acc +32
acc +14
jmp -306
acc +25
acc +30
jmp -441
acc +44
acc +14
acc +12
acc +19
jmp -387
jmp -12
jmp -180
jmp -113
jmp -29
acc +34
acc -13
acc -12
nop +73
jmp -263
jmp -373
jmp -360
acc +38
nop -123
jmp -176
nop -155
acc -11
acc +32
nop +54
jmp -461
acc +31
acc +10
acc -7
acc -19
jmp -212
acc +41
acc +4
nop -2
jmp -483
acc +16
acc +42
acc -15
jmp -286
jmp -122
acc -4
jmp -436
acc +27
jmp -508
acc +38
nop -309
jmp +10
acc +31
acc +18
acc +5
jmp -119
acc +8
acc -7
acc -16
acc +18
jmp -416
acc -15
acc +1
acc +30
acc +8
jmp -476
jmp -298
acc +29
acc +24
acc -9
acc +35
jmp -438
nop -5
jmp -100
acc +5
acc +3
acc +5
acc -4
jmp +14
acc +43
acc +3
acc +40
jmp -517
acc +10
acc +35
acc +38
jmp -120
acc +1
acc -18
acc +0
acc +42
jmp -69
jmp -101
acc +1
jmp -271
acc +37
acc +17
jmp +1
jmp -401
acc +1
acc +3
acc -8
jmp -392
nop -99
acc +2
jmp -301
acc +10
acc +32
acc +3
jmp -286
jmp +1
jmp -444
nop -364
acc +46
acc +30
acc -2
jmp -13
nop -65
acc +22
jmp -292
acc -13
jmp -480
acc +4
acc -8
nop -500
jmp -113
acc -16
acc +40
acc -18
jmp -125
jmp -482
acc +28
acc -5
jmp -471
acc +33
acc +49
acc +21
acc +9
jmp +1
";
void Main()
{
var testPuzzle = new PuzzleInput(TestInput, 5);
var realPuzzle = new PuzzleInput(Input, 25);
DayOne(testPuzzle);
DayTwo(testPuzzle, 127);
string.Empty.Dump();
DayOne(realPuzzle);
DayTwo(realPuzzle, 21806024); // Test 127, Real 21806024
}
void DayTwo(PuzzleInput input, long target)
{
var data = input.GetData();
bool foundMatch = false;
for (int a = 0; a < data.Count && !foundMatch; a++)
{
for (int b = a + 1; b < data.Count && !foundMatch; b++)
{
var set = data.Skip(a).Take(b - a + 1);//.Dump();
long min = set.Min();
long max = set.Max();
long weakness = min + max;
long sum = set.Sum();
string result = $"[{a}]-[{b}] c:{set.Count()} => {sum} // {min} + {max} = {weakness}";
foundMatch = sum == target;
if (foundMatch)
{
result.Dump();
}
}
}
if (!foundMatch)
{
$"No weakness found".Dump();
}
}
void DayOne(PuzzleInput input)
{
var data = input.GetData();
int preLength = input.PreambleLength;
var preamble = data.Take(preLength);
for (int baseIndex = 0; baseIndex < data.Count; baseIndex++)
{
bool foundMatch = false;
int targetIndex = baseIndex + preLength;
for (int a = baseIndex; a < targetIndex && !foundMatch; a++)
{
for (int b = a + 1; b < targetIndex && !foundMatch; b++)
{
long da = data[a];
long db = data[b];
long sum = da + db;
long target = data[targetIndex];
// $"[{a}]:{da} + [{b}]:{db} = {sum} => [{targetIndex}]:{target}".Dump();
foundMatch = sum == target;
}
}
if (!foundMatch)
{
$"No match for [{targetIndex}]:{data[targetIndex]}".Dump();
return;
}
}
}
record PuzzleInput(string RawInput, int PreambleLength)
{
public IReadOnlyList<long> GetData() => RawInput.Split("\n", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries).Select(ti => long.Parse(ti)).ToList();
}
static readonly string TestInput = @"
35
20
15
25
47
40
62
55
65
95
102
117
150
182
127
219
299
277
309
576
";
static readonly string Input = @"
11
1
33
5
20
31
49
26
3
35
25
39
29
28
23
44
19
4
21
2
7
41
10
32
14
68
6
11
8
18
27
20
71
13
9
16
73
52
34
25
79
15
12
17
113
94
19
24
21
22
114
31
23
26
28
29
32
47
27
39
33
80
35
38
34
36
127
40
41
227
42
43
45
44
48
54
70
71
65
55
110
60
72
74
114
77
69
90
75
187
78
100
81
83
85
86
118
93
92
102
115
120
127
175
129
160
132
144
169
147
252
150
153
156
179
178
164
166
168
185
204
208
222
194
284
235
276
256
261
273
330
297
291
447
300
303
306
378
320
332
334
374
351
485
379
398
455
478
634
491
647
517
553
896
977
750
588
591
606
603
623
626
652
654
685
829
725
1132
777
1084
946
969
995
1008
1120
1123
1070
1707
1722
1431
1273
1179
1217
1876
1857
1249
1337
1306
1339
1502
1554
1671
1785
2625
1964
2319
2039
2901
2078
2190
3215
2886
2704
2396
4375
3149
2428
2466
2555
2588
2645
2643
2808
2841
3456
3225
4358
3749
4951
4229
4435
4117
4778
5363
5681
4824
5100
7333
5274
12433
5016
5288
5021
6304
7664
5451
5484
7759
9386
6681
9138
7978
7866
8552
8664
10500
8895
9602
9840
14426
9845
10037
19175
10290
14346
11697
10309
10472
10935
12165
12132
14036
19447
14547
17818
15844
16418
28111
22202
27420
18497
18735
19442
20154
26134
19882
20327
24837
20762
24655
20781
21244
27353
45850
24297
44991
28583
32262
34429
34236
46016
35153
38617
37232
39741
37939
38177
39596
40036
59183
66612
41089
45078
41543
49827
78278
63736
68665
78112
75849
73574
79482
66498
108406
69389
119821
72385
78321
75171
81579
77535
98779
79632
85114
82632
122613
116260
86621
133125
147501
156390
130234
177795
135887
138883
151109
144560
141669
159006
141774
147556
157167
200934
152706
183893
209866
167746
212866
219746
228395
268966
202881
481832
410635
283443
266121
269117
274770
280447
354535
286229
344655
289225
535238
637978
300262
1048613
320452
907095
351639
370627
436712
415747
644917
431276
469002
492106
540891
543887
549564
751728
786374
736974
846641
836761
575454
589487
609677
1015544
875716
620714
946081
672091
1507650
722266
801903
847023
1566795
900278
1292805
961108
1032997
1090455
1093451
1125018
1583997
1164941
1210201
1185131
1196168
1199164
2085917
1774618
1342980
1714165
1868259
1705088
2540350
2025296
1524169
1834900
2783161
1861386
1933275
2433435
1994105
2928351
2183906
2350072
2324182
4307330
2553181
4639098
3575551
6332626
3392428
3048068
2867149
4716436
3229257
3359069
3549465
3385555
5733371
3457444
3696286
3794661
3855491
5579329
6633203
4178011
4674254
5398140
6778722
6961106
5420330
5601249
5915217
6096406
6252704
8782366
6226218
6563435
6588326
6614812
7081841
6842999
7972672
7635455
7153730
13411925
7650152
8033502
8852265
11262580
9576151
10072394
13932452
11021579
11335547
11516466
11697655
12011623
13696653
19803945
12789653
12841030
13151761
13431325
17950359
13924840
13996729
15126402
19166618
31501600
17226303
15683654
19731157
21588860
43513223
23997234
21093973
22719234
28247882
23033202
25513195
24487308
30922956
25630683
25941414
35513700
21806024
37272514
27356165
32909957
75014823
29123131
45091207
34850272
41713611
35414811
76014163
40825130
42682833
42899997
43813207
44525258
52156333
44839226
46293332
60928006
66766544
47436707
47747438
89364484
49162189
69553462
104039058
60266122
73648389
70836742
63973403
70265083
127694550
112422455
76239941
95455521
83507963
87208091
88652433
88338465
105767232
91132558
92275933
95184145
96909627
107702829
151398680
109428311
187547021
113135592
141101825
124239525
130531205
134238486
153773046
217341766
146505024
159747904
194419665
163448032
170716054
222890919
175546556
231942354
179471023
186316703
198835387
187460078
267625681
204612456
272883496
222563903
233667836
472238137
316648381
254770730
258478011
264769691
386338951
309953056
306252928
334164086
335294460
378306410
338994588
346262610
361863259
355017579
402034926
365787726
373776781
487333594
392072534
427176359
438280292
568431067
456231739
488438566
513248741
519540421
523247702
611032301
643076101
616205984
640417014
848304273
669458546
674289048
712771369
685257198
701280189
716880838
1036496443
1096648753
765849315
800953140
915614925
894512031
865456651
926718858
1081679808
1798560646
1007978987
1042788123
1130572722
1134280003
1227238285
1256622998
1749267812
1309875560
1391169886
1755968856
1359546246
1386537387
1402138036
2230928756
1482730153
1666409791
1566802455
2361518288
3055183644
1958403048
2286265104
2658761034
2409449011
2142258990
4189331804
2050767110
4325170825
2440448282
2390903001
2483861283
2566498558
2876678015
3158106892
2842276399
2746083633
2761684282
2788675423
3624989143
3957705456
4812451392
3624812839
3617569565
4009170158
4524901606
5251725410
4337032214
4533161991
4193026100
6065261121
4441670111
4924309565
4831351283
4874764284
7008168669
5050359841
5312582191
5507767915
5534759056
10459068621
5550359705
7634159301
6406244988
7242558708
9706115567
7242382404
8534071764
7954601779
10059660662
8870194205
8530058314
8634696211
8726188091
9024377383
15040941199
9925124125
9755660848
9881711124
10187346475
10820350106
10362942032
10847341247
14080418019
15610020367
15196984183
13184519006
19680784973
13648627392
16112752913
23573751517
15772440718
16484660093
16824795984
18893000346
17164754525
19943007323
17750565474
22940179854
20729052371
38573785319
20244653156
21183292138
25559926215
29255942378
21210283279
23547461038
24031860253
53770769502
30935084480
29761380305
26833146398
29421068110
30133287485
31885193631
36982723997
33523006192
33309456077
33989550509
37409407681
34915319999
37693572797
46972040107
40973705527
41427945294
64975406332
42393575417
44730753176
44757744317
47579321291
64244540557
50380607436
50865006651
56254214508
62944074302
78837352975
56966433883
70972274506
97227920035
65194649708
70292180074
66832462269
83821520711
68904870508
84988728972
72608892796
78667278324
82401650821
83367280944
86185689611
93258582068
115049924391
89488497493
92337065608
103833535799
101245614087
151276171120
107119221159
121448864216
122161083591
127258613957
123798896152
231092149756
132027111977
134099520216
137124642343
150199743213
254033279012
141513763304
207149812563
155010543617
161068929145
165768931765
169552970555
372918744328
273540875281
249419697548
190734111580
193582679695
222694478303
253475976193
284299263429
311066733859
268772377261
257898416368
251057510109
255826008129
419802210777
325609791672
271224162559
292135185960
291713506517
332247874884
527929287945
420610480664
360287082135
565254381798
413428589883
363135650250
384316791275
416277157998
464806842254
444210087773
514829664263
555523425988
504533486302
508955926477
583848692477
670859720886
527050170688
506883518238
616113090264
709926582947
562937669076
563359348519
623961381401
981531539796
887771300872
723422732385
925233084475
744603873410
779412808248
1704645892723
807345738023
800593949273
920810644300
909016930027
1251487391648
1011417004540
1013489412779
1089987839764
1015839444715
1216810101185
1544772025701
1489339391195
1069821187314
1240074471665
2686177432519
1347384113786
1549194465876
1368565254811
1468026605795
1580006757521
1524016681658
1820835150802
2019487279913
1586758546271
1607939687296
2058833129671
2289933340468
1829827574327
2101404844304
3109475119677
2623779132011
2029328857494
2537847793109
2085660632029
2286631288499
2309895658979
2417205301100
2438386442125
2820081229186
2715949368597
2815410719581
2892581936469
2836591860606
2992043287453
3110775227929
4921910793963
3194698233567
3437767261623
3416586120598
3693600319325
5516361068480
3859156431821
4130733701798
4114989489523
4315960145993
4467715299619
4339224516473
4372291920528
6611284354165
4596526947478
4727100960079
6513681548511
5608531305066
6408629408051
6010108953148
9930267669109
9046298566689
8032686021892
8503025622326
6305473461496
6632465495190
6854353382221
7110186439923
7275742552419
7552756751146
7974145921344
7989890133619
8582704789142
8454214005996
11868716897139
12418738361199
8711516437001
9099392880607
12523790501659
11032574421575
10335632265145
11618640258214
16444104139615
12315582414644
13999999086767
19169935796865
12937938956686
13159826843717
13415659901419
13486818877411
20597005317334
13964539822144
14385928992342
14828499303565
15526902672490
20392884282543
16572594922761
17036918795138
27486817964178
17810909317608
20718033138821
25748435232139
31810908404375
21368206686720
33169934883632
25618639344981
24556579214900
35546532442386
52043397179078
26097765800403
26353598858105
46986846031701
29912831664832
26902478778830
28315318180976
28350468814486
32639408621173
51716405145384
30355401976055
32099497595251
33609513717899
44923063737247
54448234614889
38528942456429
52650914010969
42086239825541
83527313549759
45924785901620
47465972487123
50175218559881
50910178073005
50654345015303
52451364658508
53000244579233
53256077636935
54668917039081
55252947593316
60989877435659
55217796959806
70401558006517
70628440051680
";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment