Last active
February 18, 2025 07:40
-
-
Save pashagray/e0f24fa686b460467111a07da7bdedbb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace ConsoleApp | |
{ | |
public class Item | |
{ | |
public string Name { get; } | |
public Item(string name) | |
{ | |
Name = name; | |
} | |
} | |
public class Warehouse | |
{ | |
public static List<Warehouse> Warehouses { get; } = new List<Warehouse>(); | |
public static Warehouse[] GetWarehouses(string name) | |
{ | |
return Warehouses.Where(w => w.Name == name).ToArray(); | |
} | |
public List<Item> Items { get; } | |
public string Name { get; } | |
public Warehouse(string name) | |
{ | |
Name = name; | |
Items = new List<Item>(); | |
Warehouses.Add(this); | |
} | |
public bool TryAddItem(Item item) | |
{ | |
if (item.Name == Name) | |
{ | |
Items.Add(item); | |
return true; | |
} | |
else | |
{ | |
return false; | |
} | |
} | |
public class Conveyor | |
{ | |
public Queue<Item> Items { get; } | |
public Conveyor() | |
{ | |
Items = new Queue<Item>(); | |
} | |
public void AddItem(Item item) | |
{ | |
Items.Enqueue(item); | |
} | |
public Item GetItem() | |
{ | |
return Items.Dequeue(); | |
} | |
public void Draw() | |
{ | |
// In reverse order | |
for(var i = Items.Count - 1; i >= 0; i--) | |
{ | |
Console.Write(Items.ElementAt(i).Name[0]); | |
if (i > 0) | |
{ | |
Console.Write(" -> "); | |
} | |
} | |
} | |
} | |
} | |
internal class Program | |
{ | |
private static void Main(string[] args) | |
{ | |
// Warehouses | |
new Warehouse("Морковь"); // Морковь Склад 1 | |
new Warehouse("Морковь"); // Морковь Склад 2 | |
new Warehouse("Картошка"); | |
new Warehouse("Лук"); | |
new Warehouse("Лук"); | |
new Warehouse("Помидоры"); | |
new Warehouse("Огурцы"); | |
var conveyor = new Warehouse.Conveyor(); | |
// Items | |
conveyor.AddItem(new Item("Морковь")); | |
conveyor.AddItem(new Item("Картошка")); | |
conveyor.AddItem(new Item("Лук")); | |
conveyor.AddItem(new Item("Помидоры")); | |
conveyor.AddItem(new Item("Огурцы")); | |
conveyor.AddItem(new Item("Морковь")); | |
conveyor.AddItem(new Item("Картошка")); | |
conveyor.AddItem(new Item("Лук")); | |
conveyor.AddItem(new Item("Помидоры")); | |
conveyor.AddItem(new Item("Огурцы")); | |
conveyor.AddItem(new Item("Морковь")); | |
conveyor.AddItem(new Item("Картошка")); | |
conveyor.AddItem(new Item("Лук")); | |
conveyor.AddItem(new Item("Помидоры")); | |
conveyor.AddItem(new Item("Огурцы")); | |
conveyor.AddItem(new Item("Морковь")); | |
conveyor.AddItem(new Item("Картошка")); | |
conveyor.AddItem(new Item("Лук")); | |
conveyor.AddItem(new Item("Помидоры")); | |
conveyor.AddItem(new Item("Огурцы")); | |
conveyor.AddItem(new Item("Морковь")); | |
conveyor.AddItem(new Item("Картошка")); | |
conveyor.AddItem(new Item("Лук")); | |
conveyor.AddItem(new Item("Помидоры")); | |
conveyor.AddItem(new Item("Огурцы")); | |
while (conveyor.Items.Count > 0) | |
{ | |
Console.WriteLine("\n"); | |
DrawWarehouses(); | |
Console.WriteLine(); | |
conveyor.Draw(); | |
Console.WriteLine(); | |
var item = conveyor.GetItem(); | |
Console.WriteLine($"\nТовар на конвеере: {item.Name}"); | |
Console.WriteLine(); | |
Warehouse[] warehouses = Warehouse.GetWarehouses(item.Name); | |
if (warehouses.Length == 0) | |
{ | |
conveyor.AddItem(item); | |
Console.WriteLine("Нет подходящего склада, товар возвращен в конец конвеера"); | |
continue; | |
} | |
else { | |
Console.WriteLine("Выберите склад:"); | |
for (var i = 0; i < warehouses.Length; i++) | |
{ | |
Console.WriteLine($"{i + 1}. {warehouses[i].Name} (ID {warehouses[i].GetHashCode()})"); | |
} | |
var index = int.Parse(Console.ReadLine()); | |
if (index < 1 || index > warehouses.Length) | |
{ | |
conveyor.AddItem(item); | |
Console.WriteLine("Неверный индекс склада, товар возвращен в конец конвеера"); | |
continue; | |
} | |
if (warehouses[index - 1].TryAddItem(item)) | |
{ | |
Console.WriteLine("Товар успешно добавлен на склад"); | |
} | |
else | |
{ | |
Console.WriteLine("Товар не добавлен на склад и возвращен в конец конвеера"); | |
conveyor.AddItem(item); | |
} | |
} | |
} | |
} | |
private static void DrawWarehouses() | |
{ | |
foreach (var warehouse in Warehouse.Warehouses) | |
{ | |
Console.Write($"{warehouse.Name} (ID {warehouse.GetHashCode()}) : {new string('|', warehouse.Items.Count)}"); | |
if (warehouse.Items.Count == 0) | |
{ | |
Console.WriteLine("<Пусто>"); | |
} | |
else | |
{ | |
Console.WriteLine(); | |
} | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace ConsoleApp | |
{ | |
public enum CoinDenomination | |
{ | |
Penny = 1, | |
Nickel = 5, | |
Dime = 10, | |
Quarter = 25 | |
} | |
class Coin | |
{ | |
public CoinDenomination Denomination { get; } | |
public Coin(CoinDenomination denomination) | |
{ | |
Denomination = denomination; | |
} | |
public int GetValue() | |
{ | |
return (int)Denomination; | |
} | |
} | |
class CoinsGenerator | |
{ | |
private Random _random = new Random(); | |
public Coin GenerateCoin() | |
{ | |
// Get all possible denominations from the enum | |
Array values = Enum.GetValues(typeof(CoinDenomination)); | |
// Pick one at random | |
CoinDenomination randomDenomination = | |
(CoinDenomination)values.GetValue(_random.Next(values.Length)); | |
// Create and return the coin | |
return new Coin(randomDenomination); | |
} | |
} | |
class Player | |
{ | |
public List<Coin> coins = new List<Coin>(); | |
public void AddCoin(Coin coin) | |
{ | |
coins.Add(coin); | |
} | |
public int GetBalance() | |
{ | |
int balance = 0; | |
foreach (var coin in coins) | |
{ | |
balance += coin.GetValue(); | |
} | |
return balance; | |
} | |
} | |
internal class Program | |
{ | |
private static void Main(string[] args) | |
{ | |
CoinsGenerator coinsGenerator = new CoinsGenerator(); | |
Player player = new Player(); | |
while (true) | |
{ | |
Console.WriteLine("Press any key to generate a coin"); | |
Console.ReadKey(); | |
Coin coin = coinsGenerator.GenerateCoin(); | |
Console.WriteLine($"\nGenerated coin: {coin.Denomination}"); | |
Console.WriteLine("Press 'y' to add the coin to the player's balance or any other key to skip"); | |
if (Console.ReadKey().Key == ConsoleKey.Y) | |
{ | |
player.AddCoin(coin); | |
Console.WriteLine($"\nCoin added to the player's balance. Current balance: {player.GetBalance()}"); | |
} | |
else | |
{ | |
Console.WriteLine($"\nCoin skipped. Current balance: {player.GetBalance()}"); | |
} | |
Console.WriteLine(); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment