Skip to content

Instantly share code, notes, and snippets.

@pashagray
Last active February 18, 2025 07:40
Show Gist options
  • Save pashagray/e0f24fa686b460467111a07da7bdedbb to your computer and use it in GitHub Desktop.
Save pashagray/e0f24fa686b460467111a07da7bdedbb to your computer and use it in GitHub Desktop.
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();
}
}
}
}
}
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