From 26374f143cbb7400d96b1772382b9b7c044663b3 Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Sun, 31 Oct 2021 10:46:39 +1100 Subject: [PATCH] Add TowerDisplay --- 90 Tower/csharp/Tower/Models/Needle.cs | 10 +++---- 90 Tower/csharp/Tower/Models/Towers.cs | 4 +-- 90 Tower/csharp/Tower/UI/TowerDisplay.cs | 37 ++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 90 Tower/csharp/Tower/UI/TowerDisplay.cs diff --git a/90 Tower/csharp/Tower/Models/Needle.cs b/90 Tower/csharp/Tower/Models/Needle.cs index e373efe9..f47329d6 100644 --- a/90 Tower/csharp/Tower/Models/Needle.cs +++ b/90 Tower/csharp/Tower/Models/Needle.cs @@ -8,13 +8,13 @@ namespace Tower.Models { private readonly Stack _disks = new Stack(); - public int Top => _disks.TryPeek(out var disc) ? disc : default; + public int Top => _disks.TryPeek(out var disk) ? disk : default; - public bool TryPut(int disc) + public bool TryPut(int disk) { - if (_disks.Count == 0 || disc < _disks.Peek()) + if (_disks.Count == 0 || disk < _disks.Peek()) { - _disks.Push(disc); + _disks.Push(disk); return true; } @@ -24,7 +24,7 @@ namespace Tower.Models public bool TryGetTopDisk(out int disk) => _disks.TryPop(out disk); public IEnumerator GetEnumerator() => - Enumerable.Repeat(1, 7 - _disks.Count).Concat(_disks).GetEnumerator(); + Enumerable.Repeat(0, 7 - _disks.Count).Concat(_disks).GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } diff --git a/90 Tower/csharp/Tower/Models/Towers.cs b/90 Tower/csharp/Tower/Models/Towers.cs index 830fa631..7672ad52 100644 --- a/90 Tower/csharp/Tower/Models/Towers.cs +++ b/90 Tower/csharp/Tower/Models/Towers.cs @@ -36,7 +36,7 @@ namespace Tower.Models IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); - private class TowersEnumerator : IEnumerator<(int First, int Second, int Third)> + private class TowersEnumerator : IEnumerator<(int, int, int)> { private readonly List> _enumerators; @@ -45,7 +45,7 @@ namespace Tower.Models _enumerators = needles.Select(n => n.GetEnumerator()).ToList(); } - public (int First, int Second, int Third) Current => + public (int, int, int) Current => (_enumerators[0].Current, _enumerators[1].Current, _enumerators[2].Current); object IEnumerator.Current => Current; diff --git a/90 Tower/csharp/Tower/UI/TowerDisplay.cs b/90 Tower/csharp/Tower/UI/TowerDisplay.cs new file mode 100644 index 00000000..f8a56261 --- /dev/null +++ b/90 Tower/csharp/Tower/UI/TowerDisplay.cs @@ -0,0 +1,37 @@ +using System; +using System.Text; +using Tower.Models; + +namespace Tower.UI +{ + internal class TowerDisplay + { + private readonly Towers _towers; + + public TowerDisplay(Towers towers) + { + _towers = towers; + } + + public override string ToString() + { + var builder = new StringBuilder(); + + foreach (var row in _towers) + { + AddTower(row.Item1); + AddTower(row.Item2); + AddTower(row.Item3); + builder.AppendLine(); + } + + return builder.ToString(); + + void AddTower(int size) + { + var padding = 10 - size / 2; + builder.Append(' ', padding).Append('*', Math.Max(1, size)).Append(' ', padding); + } + } + } +} \ No newline at end of file