Skip to content

Instantly share code, notes, and snippets.

@emak4rov
Created June 17, 2025 00:36
Show Gist options
  • Save emak4rov/a0f4b6453561808723668428e1e6c46d to your computer and use it in GitHub Desktop.
Save emak4rov/a0f4b6453561808723668428e1e6c46d to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
namespace HWFindingACriminal
{
internal class Program
{
static void Main(string[] args)
{
DefaultCriminalsListFactory factory = new DefaultCriminalsListFactory();
List<Criminal> criminals = factory.Create();
DetectiveInterface userInterface = new DetectiveInterface();
userInterface.Work(criminals.ToList());
}
}
class DetectiveInterface
{
public void Work(List<Criminal> criminals)
{
string newSearchCommand = "да";
do
{
Console.Clear();
SearchParameters parameters = GetParameters();
IEnumerable<Criminal> results = FindCriminals(criminals.ToList(), parameters);
DisplayResults(results);
Console.WriteLine($"Поискать ещё кого-нибудь? ({newSearchCommand}/anykey)");
}
while (Console.ReadLine().ToLower() == newSearchCommand);
}
private void DisplayResults(IEnumerable<Criminal> criminals)
{
if (criminals.Any() == false)
{
Console.WriteLine("Подходящих по описанию преступников не обнаружено(возможно, всех уже переловили).");
}
else
{
Console.WriteLine("Следующие подходящие под описание преступники всё ещё на свободе:");
foreach (var criminal in criminals)
{
Console.WriteLine($"{criminal.FullName}, Рост: {criminal.Height} см, Вес: {criminal.FullName} кг, {criminal.Nationality}");
}
}
}
private IEnumerable<Criminal> FindCriminals(List<Criminal> criminals, SearchParameters parameters)
{
return criminals.Where(criminal =>
criminal.Height == parameters.Height
&& criminal.Weight == parameters.Weight
&& criminal.Nationality.Equals(parameters.Nationality, StringComparison.OrdinalIgnoreCase)
&& criminal.IsImprisoned == false);
}
private SearchParameters GetParameters()
{
Console.WriteLine("Введите параметры для поиска:");
Console.WriteLine("Рост: ");
int height = UserUtils.ReadInt();
Console.WriteLine("Вес: ");
int weight = UserUtils.ReadInt();
Console.WriteLine("Национальность");
string nation = Console.ReadLine();
return new SearchParameters(height, weight, nation);
}
}
class SearchParameters
{
public SearchParameters(int height, int weight, string nationality)
{
Height = height;
Weight = weight;
Nationality = nationality;
}
public int Height { get; private set; }
public int Weight { get; private set; }
public string Nationality { get; private set; }
}
class DefaultCriminalsListFactory
{
public List<Criminal> Create()
{
List<Criminal> criminals = new List<Criminal>
{
new Criminal("Француа Эмануэльевич Макрон", "Француз", false, 175, 80),
new Criminal("Лео Рафаэльевич Гудрон", "Француз", false, 170, 85),
new Criminal("Луи Бернардович Шеврон", "Француз", false, 170, 85),
new Criminal("Луи Джулсович Рулон", "Француз", true, 180, 75),
new Criminal("Ганс Христианович Андерсон", "Немец", true, 181, 77),
new Criminal("Фриц Карлович Пинкертон", "Немец", true, 177, 73),
new Criminal("Фридрих Михаэльевич Гавриштерн", "Немец", false, 171, 79),
new Criminal("Джонн Смитович Калифорнийский", "Американец", true, 168, 90),
new Criminal("Смитт Джоннович Айовский", "Американец", false, 175, 99),
new Criminal("Билл Джекович Вашинингтонский", "Американец", true, 179, 109),
new Criminal("Руссо Туристо Обликоморале", "Беларус", false, 175, 77)
};
return criminals;
}
}
class Criminal
{
public Criminal(string name, string nationality, bool isInPrison, int height, int weight)
{
FullName = name;
Nationality = nationality;
IsImprisoned = isInPrison;
Height = height;
Weight = weight;
}
public string FullName { get; private set; }
public string Nationality { get; private set; }
public bool IsImprisoned { get; private set; }
public int Height { get; private set; }
public int Weight { get; private set; }
}
public static class UserUtils
{
public static int ReadInt()
{
int number;
while (int.TryParse(Console.ReadLine(), out number) == false)
{
Console.WriteLine("Ошибка! Введите целое число.");
}
return number;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment