Add TowerDisplay

This commit is contained in:
Andrew Cooper
2021-10-31 10:46:39 +11:00
parent 882f51057d
commit 26374f143c
3 changed files with 44 additions and 7 deletions

View File

@@ -8,13 +8,13 @@ namespace Tower.Models
{
private readonly Stack<int> _disks = new Stack<int>();
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<int> GetEnumerator() =>
Enumerable.Repeat(1, 7 - _disks.Count).Concat(_disks).GetEnumerator();
Enumerable.Repeat(0, 7 - _disks.Count).Concat(_disks).GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}

View File

@@ -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<IEnumerator<int>> _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;

View File

@@ -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);
}
}
}
}