Initial commit

This commit is contained in:
2024-04-28 21:34:56 +03:00
commit 4898bea338
4 changed files with 158 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
bin
obj
.vscode
.vs

102
EightQueens.cs Normal file
View File

@@ -0,0 +1,102 @@
namespace EightQueens;
public struct Coord(int x, int y)
{
public int X { get; set; } = x;
public int Y { get; set; } = y;
};
public class Board {
private List<Coord> Figures {get;set;} = [];
public bool IsFieldBusy(int x, int y)
{
return Figures.Any(f => x==f.X && y==f.Y);
}
public void Add(int x, int y)
{
var pos = new Coord(x, y);
if (IsFieldBusy(x, y)) return;
Figures.Add(pos);
}
public void Remove(int x, int y)
{
var pos = new Coord(x, y);
Figures.Remove(pos);
}
public void Clear()
{
Figures.Clear();
}
public List<Coord> GetFigures()
{
return Figures;
}
public void Draw()
{
for (int x = 0; x < 9; x++)
{
string row = "";
for (int y = 0; y < 9; y++)
{
if (x + y == 0)
{
row += " ";
}
else if (y == 0)
{
row += $"{x}";
}
else if (x == 0)
{
row += $"{y}";
}
else if (IsFieldBusy(x, y))
{
row += "O";
}
else
{
row += "#";
}
row+=" ";
}
Console.WriteLine(row);
}
}
public int Count()
{
return Figures.Count;
}
public bool IsFieldSafe(int row, int col)
{
var figs = Figures.Where(f => !(row==f.X && col==f.Y)).ToList();
foreach (var fig in figs)
{
if (fig.X == row || fig.Y == col) return false;
if (Math.Abs(fig.X - row) == Math.Abs(fig.Y - col)) return false;
}
return true;
}
public bool IsBoardSafe()
{
foreach (var fig in Figures)
{
if (!IsFieldSafe(fig.X, fig.Y)) return false;
}
return true;
}
}

10
EightQueens.csproj Normal file
View File

@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

42
Program.cs Normal file
View File

@@ -0,0 +1,42 @@
using EightQueens;
var board = new Board();
string[] cmd = [];
bool quit = false;
while (!quit)
{
board.Draw();
Console.WriteLine(
$"Действия:\n"
+ $"add X Y - добавить ферзя\n"
+ $"del X Y - удалить ферзя\n"
+ $"clear - очистить доску\n"
+ $"issolved - проверить решение задачи\n"
+ $"exit - выход\n");
var cmdString = Console.ReadLine();
if (cmdString == null) continue;
cmd = cmdString.Trim().Split();
switch (cmd[0])
{
case "add":
board.Add(int.Parse(cmd[1]), int.Parse(cmd[2]));
break;
case "del":
board.Remove(int.Parse(cmd[1]), int.Parse(cmd[2]));
break;
case "clear":
board.Clear();
break;
case "issolved":
Console.WriteLine(board.IsBoardSafe() ? "Ферзи в безопасности!" : "Задача не выполняется");
break;
default:
Console.WriteLine($"Неизвестная команда '{cmd[0]}'");
break;
}
Console.WriteLine($"\n=======================\n");
}