private void MoveDisk(Stick from, Stick to) { var aDisk = from.Remove(); var message = $"{aDisk.Size:D2}: {from.Id} -> {to.Id}"; _log.AppendLine(message); to.Add(aDisk); }
private void DoSolve(int n, Stick initial, Stick buffer, Stick target) { if (n <= 0) { return; } DoSolve(n - 1, initial, target, buffer); MoveDisk(initial, target); DoSolve(n - 1, buffer, initial, target); }
/// <summary> /// creates Hanoi tower game solver with specific amount of disks and 3 sticks /// all disks are on the first stick initially /// </summary> /// <param name="n"></param> public HanoiGameSolver(int n) { _initial = new Stick(n); _buffer = new Stick(); _target = new Stick(); if (n > 31) { throw new Exception($"Too many disks {n}!"); } _log = new StringBuilder((int)Math.Pow(2, n) - 1); }