コード例 #1
0
            private static int CountV(int x, Eris eris)
            {
                var c = 0;

                for (int i = 0; i < N; i++)
                {
                    if (eris.Get(x, i))
                    {
                        c++;
                    }
                }
                return(c);
            }
コード例 #2
0
            private static int CountH(int y, Eris eris)
            {
                var c = 0;

                for (int i = 0; i < N; i++)
                {
                    if (eris.Get(i, y))
                    {
                        c++;
                    }
                }
                return(c);
            }
コード例 #3
0
    public bool ProveA()
    {
        var eris  = new Eris();
        var lines = File.ReadAllLines(Example, Encoding.UTF8);

        for (var y = 0; y < 5; y++)
        {
            for (var x = 0; x < 5; x++)
            {
                eris.SetBug(x, y, lines[y][x] == '#');
            }
        }
        return(SimpleSolution(eris, false) == 2129920);
    }
コード例 #4
0
    private string SolveA()
    {
        var eris  = new Eris();
        var lines = File.ReadAllLines(Input, Encoding.UTF8);

        for (var y = 0; y < 5; y++)
        {
            for (var x = 0; x < 5; x++)
            {
                eris.SetBug(x, y, lines[y][x] == '#');
            }
        }
        return(SimpleSolution(eris, false).ToString());
    }
コード例 #5
0
        public Eris Iterate()
        {
            var next = new Eris();

            for (var y = 0; y < 5; y++)
            {
                for (var x = 0; x < 5; x++)
                {
                    int  neighbors = NeighboringBugs(x, y);
                    bool hasBug    = GetBug(x, y);
                    bool isBug     = hasBug ? (neighbors == 1) : (neighbors == 1 || neighbors == 2);
                    next.SetBug(x, y, isBug);
                }
            }
            return(next);
        }
コード例 #6
0
        public override string Part1()
        {
            var eris = new Eris(ReadAllText(), false, 0);
            var set  = new DefaultDict <int, int>();

            while (true)
            {
                var r = eris.Rating();
                set[r]++;

                if (set[r] > 1)
                {
                    return(r.ToString());
                }
                eris.Tick();
                eris.Swap();
            }
        }
コード例 #7
0
        public override string Part2()
        {
            foreach (var i in Enumerable.Range(-100, 201))
            {
                Planet[i] = new Eris(i == 0 ? ReadAllText() : string.Empty, true, i);
            }

            foreach (var n in Enumerable.Range(0, 200))
            {
                foreach (var e in Planet.Values)
                {
                    e.Tick();
                }
                foreach (var e in Planet.Values)
                {
                    e.Swap();
                }
            }

            return(Planet.Values.Sum(x => x.CountBugs()).ToString());
        }
コード例 #8
0
    private long SimpleSolution(Eris eris, bool trace)
    {
        var patterns = new HashSet <long>();
        var next     = eris;

        while (true)
        {
            var hash = next.Hash();
            if (patterns.Contains(hash))
            {
                return(hash);
            }
            patterns.Add(hash);
            next = next.Iterate();

            if (trace)
            {
                next.Trace();
            }
        }
    }