public void AddContainer(IFreightContainer container) { if (CanAddContainer(container)) { if (container.Type == FreightType.Valuable) { _containers.Add(container); } else { if ((Containers.Length != 0) && (Containers[0].Type != FreightType.Valuable) && (Containers[0].Weight > container.Weight)) { _containers.Insert(1, container); } else { _containers.Insert(0, container); } } } else { throw new InvalidOperationException(); } }
public void AddContainer(IFreightContainer container) { if (CanAddContainer(container)) { _containers.Add(container); } else { throw new InvalidOperationException(); } }
public bool TryAddContainer(IFreightContainer container) { try { AddContainer(container); return(true); } catch (InvalidOperationException) { return(false); } }
public bool TryAddContainer(IFreightContainer container) { try { AddContainer(container); return(true); } catch { return(false); } }
private void AddValuableContainer(IFreightContainer container) { int numValuable = GetNumberOfValuableContainers(); if (numValuable == Columns.Length) { throw new InvalidOperationException(); } bool left = (numValuable % 2) == 0; int offset = (int)Math.Floor(numValuable / 2.0); int rightIndex = Columns.Length - 1 - offset; Columns[left ? offset : rightIndex].AddContainer(container); }
public void AddContainer(IFreightContainer container) { switch (container.Type) { case FreightType.Valuable: AddValuableContainer(container); break; case FreightType.Normal: AddNormalContainer(container); break; default: throw new NotImplementedException(); } }
private void AddNormalContainer(IFreightContainer container) { for (int i = 0; i < Columns.Length; ++i) { int index = GetSymetricIndex(i); if (IsValuableContainerInColumnBlockedOnBothSides(index) && Columns[index].TryAddContainer(container)) { return; } } for (int i = 0; i < Columns.Length; ++i) { int index = GetSymetricIndex(i); if (CanColumnBeRaisedWithoutBlockingValuableContainer(index) && Columns[index].TryAddContainer(container)) { return; } } throw new InvalidOperationException(); }
private bool CanAddContainer(IFreightContainer container) { if (HasValuableContainer() && container.Type == FreightType.Valuable) { return(false); } if (Containers.Length != 0) { if (Containers[0].Type == FreightType.Valuable || Containers[0].Weight > container.Weight) { return((TotalWeight - Containers[0].Weight) + container.Weight <= 120_000); } else { return(TotalWeight <= 120_000); } } else { return(true); } }
public bool CanAddContainer(IFreightContainer container) { return((TotalWeight + container.Weight) <= 120_000); }