Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- public class Program
- {
- static void Main()
- {
- Car car = (Car)Factory();
- Truck truck = (Truck)Factory();
- int cnt = int.Parse(Console.ReadLine());
- while (cnt > 0)
- {
- string command = Console.ReadLine();
- string[] data = command.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
- string action = data[0] + data[1];
- decimal argument = decimal.Parse(data[2]);
- switch (action)
- {
- case "DriveCar":
- Console.WriteLine(car.Drive(argument));
- break;
- case "DriveTruck":
- Console.WriteLine(truck.Drive(argument));
- break;
- case "RefuelCar":
- car.Refuel(argument);
- break;
- case "RefuelTruck":
- truck.Refuel(argument);
- break;
- }
- cnt--;
- }
- Console.WriteLine(car);
- Console.WriteLine(truck);
- }
- private static Vehicle Factory()
- {
- string[] part = Console.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
- decimal fuelQty = decimal.Parse(part[1]);
- decimal fuelConsumption = decimal.Parse(part[2]);
- switch (part[0])
- {
- case "Car":
- return new Car(fuelQty, fuelConsumption);
- case "Truck":
- return new Truck(fuelQty, fuelConsumption);
- default:
- return null;
- }
- }
- }
- public abstract class Vehicle
- {
- public Vehicle(decimal fuelQuantity, decimal fuelConsumption)
- {
- FuelQuantity = fuelQuantity;
- FuelConsumption = fuelConsumption;
- }
- public decimal FuelQuantity { get; set; }
- public decimal FuelConsumption { get; set; }
- public string Drive(decimal distance)
- {
- if (distance * FuelConsumption > FuelQuantity)
- {
- return $"{this.GetType().Name} needs refueling";
- }
- FuelQuantity -= distance * FuelConsumption;
- return $"{this.GetType().Name} travelled {distance} km";
- }
- public virtual void Refuel(decimal quantity)
- {
- FuelQuantity += quantity;
- }
- public override string ToString()
- {
- return $"{this.GetType().Name}: {this.FuelQuantity:f2}";
- }
- }
- public class Car : Vehicle
- {
- private static readonly decimal ADDITIONAL_CONSUMPTION = 0.9m;
- public Car(decimal fuelQuantity, decimal fuelConsumption)
- : base(fuelQuantity, fuelConsumption + ADDITIONAL_CONSUMPTION)
- { }
- }
- public class Truck : Vehicle
- {
- private static readonly decimal ADDITIONAL_CONSUMPTION = 1.60m;
- private static readonly decimal QTY_MODIFIER = 0.95m;
- public Truck(decimal fuelQuantity, decimal fuelConsumption)
- : base(fuelQuantity, fuelConsumption + ADDITIONAL_CONSUMPTION)
- { }
- public override void Refuel(decimal quantity)
- {
- FuelQuantity += (quantity * QTY_MODIFIER);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement