Exemplo n.º 1
0
        public int GetDelayForNoAlarms(Firewall firewall)
        {
            int  delay = 0;
            bool safe  = false;

            while (!safe)
            {
                bool earlyBreak = false;

                for (int i = 0; i < firewall.Depth(); i++)
                {
                    if (firewall.AlarmWillBeTriggered(i, i + delay))
                    {
                        // This delay is no good, so increase the delay and try again.
                        delay++;
                        earlyBreak = true;
                        break;
                    }
                }

                // If at no point we terminated the loop early, then every layer will
                // be safe as we travel through, so we've found the necessary delay.
                if (!earlyBreak)
                {
                    safe = true;
                }
            }

            return(delay);
        }
        public void HandleTicksAndAlarms()
        {
            var input = @"0: 3
            1: 2
            4: 4";

            Firewall f = FirewallFactory.CreateFromString(input);

            // At time 0...
            Assert.True(f.AlarmWillBeTriggered(0, 0));
            Assert.True(f.AlarmWillBeTriggered(1, 0));
            Assert.False(f.AlarmWillBeTriggered(2, 0));
            Assert.False(f.AlarmWillBeTriggered(3, 0));
            Assert.True(f.AlarmWillBeTriggered(4, 0));

            // At time 2...
            Assert.False(f.AlarmWillBeTriggered(0, 2));
            Assert.True(f.AlarmWillBeTriggered(1, 2));
            Assert.False(f.AlarmWillBeTriggered(2, 2));
            Assert.False(f.AlarmWillBeTriggered(3, 2));
            Assert.False(f.AlarmWillBeTriggered(4, 2));
        }
Exemplo n.º 3
0
        public int GetTravelCost(Firewall firewall)
        {
            int cost = 0;

            for (int i = 0; i < firewall.Depth(); i++)
            {
                // Each time the alarm will be triggered by us moving into it,
                // we increment the cost by the depth into the firewall we're at
                // times the depth of the layer we are entering.
                if (firewall.AlarmWillBeTriggered(i, i))
                {
                    cost += i * firewall.RangeAtDepth(i);
                }
            }

            return(cost);
        }