namespace Day20; public class ConjunctionModule : Module { private readonly Dictionary _inputStates = new Dictionary(); public ConjunctionModule(string name) : base(name) { } public override string GetState() { return string.Concat(_inputs.Select(m => StateOf(m) ? "1" : "0")); } public override IEnumerable Process(Pulse p) { _inputStates[p.Source] = p.Value; var outPulse = !AllHigh(); return _outputs.Select(o => new Pulse(Name, o.Name, outPulse)); } public override void Reset() { _inputStates.Clear(); } private bool StateOf(Module m) { return _inputStates.GetValueOrDefault(m.Name, false); } private bool AllHigh() { return _inputs.All(StateOf); } }