private static void OperateRecipe(bool part2) { byte firstRecipeByte = firstRecipe.Value; byte secondRecipeByte = secondRecipe.Value; byte newResult = (byte)(firstRecipeByte + secondRecipeByte); if (newResult >= 10) { temporalQueue[0] = 1; temporalQueue[1] = (byte)(newResult % 10); howManyGet = 2; } else { temporalQueue[0] = newResult; howManyGet = 1; } var newRecipes = newResult.ToString().ToArray(); for (byte w = 0; w < howManyGet; w++) { lstRecipes.AddLast(temporalQueue[w]); if (part2 == true) { if (getLastNumber() == iterations) { Console.WriteLine("PART 2: " + (lstRecipes.Count - strIterations.Length)); breakPart2 = true; } } } firstRecipe = Util.GetNextCircular(firstRecipe, firstRecipeByte + 1); secondRecipe = Util.GetNextCircular(secondRecipe, secondRecipeByte + 1); }
public static long Problem1(int numberOfPlayers, long marbles) { LinkedList <int> marbleCircle = new LinkedList <int>(); marbleCircle.AddFirst(1); marbleCircle.AddFirst(0); LinkedList <Player> lstPlayers = new LinkedList <Player>(); for (int i = 1; i < numberOfPlayers + 1; i++) { lstPlayers.AddLast(new Player(i)); } var currentPlayer = lstPlayers.First.Next.Next; //int currentPlayer = 3; LinkedListNode <int> leCurrentNode = marbleCircle.Last; for (int currentMarble = 2; currentMarble < marbles; currentMarble++) { var marble = currentMarble; if (marble % 23 != 0) { var insertPosition = Util.GetNextCircular(leCurrentNode); leCurrentNode = marbleCircle.AddAfter(insertPosition, currentMarble); } else { var player = currentPlayer;//lstPlayers.SingleOrDefault(r => r.playerID == currentPlayer); player.Value.score += marble; var insertPosition = Util.GetPreviousCircular(leCurrentNode, 7); player.Value.score += insertPosition.Value; leCurrentNode = Util.GetNextCircular(insertPosition); marbleCircle.Remove(insertPosition); } currentPlayer = Util.GetNextCircular(currentPlayer);//lstPlayers.ElementAt(GetNextCircular(lstPlayers.Count, currentPlayer - 1)).playerID; } return(lstPlayers.Max(r => r.score)); }
private static void Part1() { lstRecipes.AddFirst(7); lstRecipes.AddFirst(3); firstRecipe = lstRecipes.First; secondRecipe = lstRecipes.First.Next; for (int i = 0; i < 10 + iterations; i++) { OperateRecipe(false); } LinkedListNode <byte> startPoint = lstRecipes.First; var properPoint = Util.GetNextCircular(startPoint, iterations); for (int i = 0; i < 10; i++) { lstResult.AddLast(properPoint.Value); properPoint = properPoint.Next; } Console.WriteLine("PART 1: " + string.Concat(lstResult)); }