예제 #1
0
        private long Part2Returner(CardDeck deck, DeckCommandArray commands)
        {
            // This takes literal millenia to execute; I cannot figure out what to do so here goes
            // F**k math and Project Euler integrations in AoC
            // This will never be changed; as this is how far AoC should go

            const long cardCount       = 119315717514047;
            const long repetitions     = 101741582076661;
            const long desiredPosition = 2020;

            long uniqueIterations = 0;
            long currentPosition  = 2020;

            do
            {
                currentPosition = commands.FindStartingPosition(currentPosition, cardCount);
                uniqueIterations++;
            }while (desiredPosition != currentPosition);

            long remainingIterations = repetitions % uniqueIterations;

            for (int i = 0; i < remainingIterations; i++)
            {
                currentPosition = commands.FindStartingPosition(currentPosition, cardCount);
            }

            return(currentPosition);
        }
예제 #2
0
        private T General <T>(Returner <T> returner)
        {
            const int cardCount = 10007;

            var deck     = new CardDeck(cardCount);
            var lines    = FileLines;
            var commands = new DeckCommandArray(lines.Select(l => DeckCommand.Parse(l)).ToArray());

            return(returner(deck, commands));
        }
예제 #3
0
 private int Part1Returner(CardDeck deck, DeckCommandArray commands)
 {
     commands.ApplyAll(deck);
     return(deck.PositionOfCard(2019));
 }