diff --git a/BucketChain/Person.cs b/BucketChain/Person.cs index 4a047c0..d60a006 100644 --- a/BucketChain/Person.cs +++ b/BucketChain/Person.cs @@ -101,25 +101,20 @@ public sealed class Person return false; } - if(RightNeighbor.HasBucket) + if (RightNeighbor._forwardBucket == null && _forwardBucket != null) { - if (RightNeighbor._backwardBucket != null && _forwardBucket == null) - { - _forwardBucket = RightNeighbor._backwardBucket; - RightNeighbor._backwardBucket = null; - LastStepPerformed = currentStep; - return true; - } - if (RightNeighbor._forwardBucket != null && _backwardBucket == null) - { - _backwardBucket = RightNeighbor._forwardBucket; - RightNeighbor._forwardBucket = null; - LastStepPerformed = currentStep; - return true; - } + RightNeighbor._forwardBucket = _forwardBucket; + _forwardBucket = null; + } + if (RightNeighbor._backwardBucket != null && _backwardBucket == null) + { + _backwardBucket = RightNeighbor._backwardBucket; + RightNeighbor._backwardBucket = null; } - return false; + LastStepPerformed = currentStep; + RightNeighbor.LastStepPerformed = currentStep; + return true; } /// @@ -144,7 +139,45 @@ public sealed class Person /// A new bucket to use; can be null public void UseWell(Well well, Bucket? additionalBucket) { - // TODO + // fill forward bucket if empty + if (_forwardBucket is { IsEmpty: true }) // using here pattern, bc rider suggests it + { + well.FillBucket(_forwardBucket); + } + // else fill backward bucket if empty + else if (_backwardBucket is { IsEmpty: true }) + { + well.FillBucket(_backwardBucket); + + // if successful, swap buckets + if (!_backwardBucket.IsEmpty) + { + _forwardBucket = _backwardBucket; + _backwardBucket = null; + } + } + // else add additional bucket + else if (additionalBucket != null) + { + if (_forwardBucket == null) + { + _forwardBucket = additionalBucket; + } + else if (_backwardBucket == null) + { + _backwardBucket = additionalBucket; + } + + // try to fill the new bucket + if (_forwardBucket is { IsEmpty: true }) + { + well.FillBucket(_forwardBucket); + } + else if (_backwardBucket is { IsEmpty: true }) + { + well.FillBucket(_backwardBucket); + } + } } /// @@ -155,7 +188,14 @@ public sealed class Person /// String representation of the person public override string ToString() { - // TODO - return string.Empty; + if (_forwardBucket != null) + { + return _forwardBucket.IsEmpty ? "🔘" : "🔵"; + } + if (_backwardBucket != null) + { + return _backwardBucket.IsEmpty ? "🔘" : "🔵"; + } + return "🫲"; } } \ No newline at end of file