public NineNode(long value, NineNode ccw, NineNode cw) { Value = value; CCW = ccw ?? this; CW = cw ?? this; CW.CCW = this; CCW.CW = this; }
public void PartOne(int elfCount, long marbleMaxIdx) { var solution = String.Empty; NineNode iter = new NineNode(0, null, null); List <long> players = Enumerable.Range(0, elfCount).Select(x => (long)0).ToList(); var playerIdx = 0; //16458525 for (var i = 1; i <= marbleMaxIdx; i++) { if ((i % 23) == 0) { for (var j = 0; j < 7; j++) { iter = iter.CCW; } var toRemove = iter; iter = toRemove.CW; iter.CCW = toRemove.CCW; toRemove.CCW.CW = iter; players[playerIdx] += toRemove.Value + i; } else { var one = iter.CW; var two = one.CW; iter = new NineNode(i, one, two); } playerIdx += 1; if (playerIdx == elfCount) { playerIdx = 0; } } solution = players.Max().ToString(); //System.Windows.Forms.Clipboard.SetText(solution.ToString()); Console.WriteLine("Day Nine: " + solution); }