Changed fields to match the README.adoc
Operate_Initially_NotLongEnough is currently in an infinite loop
This commit is contained in:
parent
db300f950c
commit
c3bd3a7416
2 changed files with 36 additions and 8 deletions
|
|
@ -11,7 +11,6 @@ public sealed class Chain
|
||||||
private readonly double _bucketSize;
|
private readonly double _bucketSize;
|
||||||
private Person _firstPerson;
|
private Person _firstPerson;
|
||||||
private int _availableBuckets;
|
private int _availableBuckets;
|
||||||
private int _usedBuckets;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new bucket chain based on the supplied parameters.
|
/// Creates a new bucket chain based on the supplied parameters.
|
||||||
|
|
@ -58,10 +57,9 @@ public sealed class Chain
|
||||||
|
|
||||||
// step 3
|
// step 3
|
||||||
Bucket? bucket = null;
|
Bucket? bucket = null;
|
||||||
if (_usedBuckets < _availableBuckets)
|
if (GetBucketCount() < _availableBuckets)
|
||||||
{
|
{
|
||||||
bucket = new Bucket(_bucketSize);
|
bucket = new Bucket(_bucketSize);
|
||||||
_usedBuckets++;
|
|
||||||
}
|
}
|
||||||
_firstPerson.UseWell(_well, bucket);
|
_firstPerson.UseWell(_well, bucket);
|
||||||
|
|
||||||
|
|
@ -80,13 +78,18 @@ public sealed class Chain
|
||||||
lastPerson = currentPerson;
|
lastPerson = currentPerson;
|
||||||
bool movedSuccessfully = currentPerson.MoveBucket(currentStep);
|
bool movedSuccessfully = currentPerson.MoveBucket(currentStep);
|
||||||
|
|
||||||
if (!movedSuccessfully && currentPerson.RightNeighbor != null)
|
if (!movedSuccessfully)
|
||||||
{
|
{
|
||||||
if (currentPerson.RightNeighbor.HasBucket)
|
// check if move failed because the step was already performed
|
||||||
|
if (currentPerson.LastStepPerformed != currentStep &&
|
||||||
|
(currentPerson.RightNeighbor?.HasBucket ?? false))
|
||||||
{
|
{
|
||||||
|
// move failed because of an invalid state (neighbor can't accept the bucket)
|
||||||
error = true;
|
error = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
// else, move wasn't successful because it was already performed
|
||||||
|
// continue without error
|
||||||
}
|
}
|
||||||
|
|
||||||
currentPerson = currentPerson.RightNeighbor;
|
currentPerson = currentPerson.RightNeighbor;
|
||||||
|
|
@ -101,6 +104,22 @@ public sealed class Chain
|
||||||
return _fire.Extinguished;
|
return _fire.Extinguished;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int GetBucketCount()
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
Person? currentPerson = _firstPerson;
|
||||||
|
while (currentPerson != null)
|
||||||
|
{
|
||||||
|
if (currentPerson.HasBucket)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
currentPerson = currentPerson.RightNeighbor;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents this <see cref="Chain"/> with the referenced <see cref="Well"/>, <see cref="Fire"/>
|
/// Represents this <see cref="Chain"/> with the referenced <see cref="Well"/>, <see cref="Fire"/>
|
||||||
/// and <see cref="Person"/> instances as string, ready to print to the terminal.
|
/// and <see cref="Person"/> instances as string, ready to print to the terminal.
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,7 @@ public sealed class Person
|
||||||
}
|
}
|
||||||
|
|
||||||
LastStepPerformed = currentStep;
|
LastStepPerformed = currentStep;
|
||||||
|
RightNeighbor.LastStepPerformed = currentStep;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -157,10 +158,18 @@ public sealed class Person
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// else add additional bucket
|
// else add additional bucket
|
||||||
else if (additionalBucket != null && _forwardBucket == null && _backwardBucket == null)
|
else if (additionalBucket != null)
|
||||||
{
|
{
|
||||||
_forwardBucket = additionalBucket;
|
if (_forwardBucket == null)
|
||||||
well.FillBucket(_forwardBucket);
|
{
|
||||||
|
_forwardBucket = additionalBucket;
|
||||||
|
well.FillBucket(_forwardBucket);
|
||||||
|
}
|
||||||
|
else if (_backwardBucket == null)
|
||||||
|
{
|
||||||
|
_backwardBucket = additionalBucket;
|
||||||
|
well.FillBucket(_backwardBucket);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue