Skip to content

Commit 88746a4

Browse files
committed
Add solution for 2018/day07/part1
1 parent 6e43854 commit 88746a4

File tree

3 files changed

+226
-0
lines changed

3 files changed

+226
-0
lines changed

2018/day07/input.txt

+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
Step X must be finished before step M can begin.
2+
Step A must be finished before step R can begin.
3+
Step C must be finished before step K can begin.
4+
Step H must be finished before step G can begin.
5+
Step R must be finished before step Z can begin.
6+
Step S must be finished before step K can begin.
7+
Step K must be finished before step G can begin.
8+
Step O must be finished before step Z can begin.
9+
Step Q must be finished before step G can begin.
10+
Step E must be finished before step Y can begin.
11+
Step U must be finished before step I can begin.
12+
Step G must be finished before step N can begin.
13+
Step M must be finished before step P can begin.
14+
Step Y must be finished before step I can begin.
15+
Step I must be finished before step V can begin.
16+
Step Z must be finished before step B can begin.
17+
Step W must be finished before step V can begin.
18+
Step D must be finished before step P can begin.
19+
Step L must be finished before step J can begin.
20+
Step N must be finished before step T can begin.
21+
Step T must be finished before step P can begin.
22+
Step B must be finished before step F can begin.
23+
Step F must be finished before step P can begin.
24+
Step J must be finished before step V can begin.
25+
Step V must be finished before step P can begin.
26+
Step Z must be finished before step F can begin.
27+
Step B must be finished before step J can begin.
28+
Step B must be finished before step P can begin.
29+
Step X must be finished before step F can begin.
30+
Step Y must be finished before step N can begin.
31+
Step W must be finished before step D can begin.
32+
Step G must be finished before step B can begin.
33+
Step L must be finished before step V can begin.
34+
Step K must be finished before step L can begin.
35+
Step W must be finished before step P can begin.
36+
Step E must be finished before step F can begin.
37+
Step Y must be finished before step J can begin.
38+
Step J must be finished before step P can begin.
39+
Step A must be finished before step O can begin.
40+
Step O must be finished before step E can begin.
41+
Step T must be finished before step V can begin.
42+
Step S must be finished before step E can begin.
43+
Step I must be finished before step L can begin.
44+
Step E must be finished before step B can begin.
45+
Step G must be finished before step J can begin.
46+
Step Z must be finished before step J can begin.
47+
Step K must be finished before step T can begin.
48+
Step L must be finished before step F can begin.
49+
Step X must be finished before step S can begin.
50+
Step U must be finished before step G can begin.
51+
Step K must be finished before step N can begin.
52+
Step Q must be finished before step W can begin.
53+
Step H must be finished before step F can begin.
54+
Step O must be finished before step P can begin.
55+
Step M must be finished before step D can begin.
56+
Step T must be finished before step J can begin.
57+
Step G must be finished before step T can begin.
58+
Step N must be finished before step P can begin.
59+
Step O must be finished before step V can begin.
60+
Step Q must be finished before step I can begin.
61+
Step Z must be finished before step T can begin.
62+
Step C must be finished before step J can begin.
63+
Step D must be finished before step J can begin.
64+
Step G must be finished before step W can begin.
65+
Step U must be finished before step L can begin.
66+
Step R must be finished before step B can begin.
67+
Step H must be finished before step K can begin.
68+
Step X must be finished before step I can begin.
69+
Step X must be finished before step B can begin.
70+
Step I must be finished before step P can begin.
71+
Step L must be finished before step N can begin.
72+
Step O must be finished before step Y can begin.
73+
Step F must be finished before step J can begin.
74+
Step E must be finished before step I can begin.
75+
Step G must be finished before step M can begin.
76+
Step Q must be finished before step E can begin.
77+
Step D must be finished before step F can begin.
78+
Step A must be finished before step Z can begin.
79+
Step I must be finished before step D can begin.
80+
Step B must be finished before step V can begin.
81+
Step U must be finished before step J can begin.
82+
Step Y must be finished before step T can begin.
83+
Step O must be finished before step M can begin.
84+
Step M must be finished before step B can begin.
85+
Step M must be finished before step L can begin.
86+
Step N must be finished before step B can begin.
87+
Step X must be finished before step U can begin.
88+
Step E must be finished before step Z can begin.
89+
Step Z must be finished before step L can begin.
90+
Step R must be finished before step E can begin.
91+
Step M must be finished before step I can begin.
92+
Step H must be finished before step N can begin.
93+
Step X must be finished before step J can begin.
94+
Step C must be finished before step S can begin.
95+
Step R must be finished before step I can begin.
96+
Step E must be finished before step D can begin.
97+
Step Y must be finished before step L can begin.
98+
Step S must be finished before step D can begin.
99+
Step U must be finished before step Z can begin.
100+
Step A must be finished before step C can begin.
101+
Step Y must be finished before step W can begin.

2018/day07/lotsa-steps.cs

+118
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace AdventOfCode
5+
{
6+
class Step
7+
{
8+
public char name;
9+
public Dictionary<char, Step> requirements;
10+
public Dictionary<char, Step> descendants;
11+
12+
public void AddRequirement(Step req)
13+
{
14+
Step entry;
15+
this.requirements.TryGetValue(req.name, out entry);
16+
if(entry == null) this.requirements[req.name] = req;
17+
}
18+
19+
public void AddDescendant(Step desc)
20+
{
21+
Step entry;
22+
this.descendants.TryGetValue(desc.name, out entry);
23+
if(entry == null) this.descendants[desc.name] = desc;
24+
}
25+
26+
public void RemoveRequirement(Step req)
27+
{
28+
this.requirements.Remove(req.name);
29+
}
30+
31+
public void RemoveDescendant(Step desc)
32+
{
33+
this.descendants.Remove(desc.name);
34+
}
35+
36+
public Step(char theName)
37+
{
38+
this.name = theName;
39+
this.requirements = new Dictionary<char, Step>();
40+
this.descendants = new Dictionary<char, Step>();
41+
}
42+
}
43+
44+
class Day07
45+
{
46+
private static Dictionary<char, Step> steps = new Dictionary<char, Step>();
47+
48+
private static Step GetStep(char name)
49+
{
50+
Step step;
51+
Day07.steps.TryGetValue(name, out step);
52+
if(step == null)
53+
{
54+
step = new Step(name);
55+
Day07.steps[name] = step;
56+
}
57+
58+
return step;
59+
}
60+
61+
private static void ReadInput()
62+
{
63+
string line;
64+
while((line = Console.ReadLine()) != null)
65+
{
66+
string[] words = line.Split(" ".ToCharArray());
67+
if(words.Length < 8) continue;
68+
69+
char nameR = words[1].ToCharArray()[0];
70+
char nameD = words[7].ToCharArray()[0];
71+
72+
Step stepR = Day07.GetStep(nameR);
73+
Step stepD = Day07.GetStep(nameD);
74+
75+
stepR.AddDescendant(stepD);
76+
stepD.AddRequirement(stepR);
77+
}
78+
}
79+
80+
private static Step GetNextStep()
81+
{
82+
Step best = null;
83+
foreach(KeyValuePair<char, Step> entry in Day07.steps)
84+
{
85+
if(entry.Value.requirements.Count > 0) continue;
86+
87+
if(best != null)
88+
{
89+
if(best.name < entry.Value.name) continue;
90+
}
91+
92+
best = entry.Value;
93+
}
94+
95+
return best;
96+
}
97+
98+
static void Main()
99+
{
100+
Day07.steps = new Dictionary<char, Step>();
101+
Day07.ReadInput();
102+
103+
Step s;
104+
while((s = GetNextStep()) != null)
105+
{
106+
Console.Write(s.name);
107+
Day07.steps.Remove(s.name);
108+
109+
foreach(KeyValuePair<char, Step> entry in s.descendants)
110+
{
111+
entry.Value.RemoveRequirement(s);
112+
}
113+
}
114+
115+
Console.WriteLine("");
116+
}
117+
}
118+
}

2018/day07/test.txt

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Step C must be finished before step A can begin.
2+
Step C must be finished before step F can begin.
3+
Step A must be finished before step B can begin.
4+
Step A must be finished before step D can begin.
5+
Step B must be finished before step E can begin.
6+
Step D must be finished before step E can begin.
7+
Step F must be finished before step E can begin.

0 commit comments

Comments
 (0)