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);
     }
 }
예제 #4
0
 public bool TryAddContainer(IFreightContainer container)
 {
     try
     {
         AddContainer(container);
         return(true);
     }
     catch
     {
         return(false);
     }
 }
예제 #5
0
        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);
        }
예제 #6
0
        public void AddContainer(IFreightContainer container)
        {
            switch (container.Type)
            {
            case FreightType.Valuable:
                AddValuableContainer(container);
                break;

            case FreightType.Normal:
                AddNormalContainer(container);
                break;

            default:
                throw new NotImplementedException();
            }
        }
예제 #7
0
        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);
 }