Skip to content

Илон Маск и Марк Цукерберг в колизее

Notifications You must be signed in to change notification settings

rodkot/IlonMarkFight

Repository files navigation

IlonMarkFight

Описание

Проект на платформе .NET Core по предмету "Введение в C# и платформу .NET".

Формулировка задачи

Илон Маск и Марк Цукерберг решили сразиться в поединке в римском Колизее. Боги разгневались на них, схватили и заперли в двух разных комнатах. Они согласны освободить Марка и Илона, если они решат одну задачку.

Есть колода из 36 карт. Боги перемешивают колоду, делят её напополам и отдают одну стопку Илону Маску, а вторую стопку Марку Цукербергу. Затем оба смотрят на свои карты не перемешивая их. Каждый из них должны назвать номер карты в стопке у партнера. Если цвета выбранных карт совпадают, им разрешают сразится иначе, не разрешают.

Илон и Марк, как придвинутые парни, заранее предвидели все эти обстоятельства и имели возможность договориться о стратегиях своего поведения (они могут быть как одинаковы, так и различны для Илона и Марка).

Цель: найти стратегию(и) позволяющие выйти на арену с как можно большей вероятностью.

Тех задание

.Net Generic Host

Поместить песочницу в .Net Generic Host:

Класс, реализующий проведение единичного экспериментов, выделить в отдельную зависимость;

Класс реализующий перемешивание колоды карт выделить в отдельную зависимость;

Также в качестве зависимостей реализовать партнеров и их соперников.

class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }
    public static IHostBuilder CreateHostBuilder(string[] args)        	
    {
        return Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<CollisiumExperimentWorker>();
                services.AddScoped<CollisiumSandbox>();
                services.AddScoped<IDeckShufller, DeckShufller>();
                // Зарегистрировать партнеров и их стратегии
            });
    }
}

Unit тестирование

Реализовать следующие тесты:

  • Тест колоды карт. Проверить, что колода карт должна иметь по 18 черных и 18 красных карт;

  • Тесты на стратегию. Проверить, что стратегия должна давать определённый результат на определенным образом перемешанную половину колоды;

  • Тесты на проведение эксперимента:

    • Колода должна быть перемешана. Т.е. метод перемешивания должен быть вызван один раз;
    • Корректность результата эксперимента. При определённом (заранее известном) перемешивании колоды, при определенных стратегиях должен получаться однозначный результат.

Взаимодействие с базой данных

Приложение должно поддерживать следующие возможности.

Условие эксперимента, это то порядок карт в колоде:

  • Сгенерировать 100 экспериментов. Сохранить условия экспериментов в базе данных с помощью EF;
  • Считать условия 100 эксперимента с (помощью EF), из базы данных, и провести эксперименты в этих условиях;
  • Реализовать тесты на сохранение и считывание условий экспериментов, с использованием SQLite в режиме выполнения в памяти.

Web-API

Комнаты, в которых сидят Илон и Марк, должны быть реализованы в виде отдельных веб служб.

Боги, должны быть реализованы в качестве консольного приложения, которое должно поддерживать возможно проведения заранее записанных экспериментов из предыдущей задачи.

Боги перемешивают колоду и по http, отправляют части колоды партнерам. В ответ получают номер карты, которую нужно проверить. Зная, что они отправили определяют результат эксперимента.

Реализиция

Solution IlonMarkFight состоит из 7 Projects:

Projects Тип сборки Описание
ConsoleApp Console Application Точка входа в приложение, работа песочницы
Core Class Library Реализация библитечных абстракций для задачи
DataLib Class Library Абстракции библиотеки
DbStorage Class Library Описание конткста для Entity Framework и Entity для сохранения контекста игр
Models Class Library Модели библиотеки
OpponentsWebApp ASP.NET Core Application Web-приложения оппонентов
Test Unit Test Project Unit-тестирование программы

Работа компонентов

Запуск ConsoleApp

\ConsoleApp> dotnet run <Type> <Count>

Type Описание
Generate Не использовать предыдущие попытки
UseGenerated Использовать условия предыдущих попыток
Count
Кол-во попыток

Запуск OpponentsWebApp

Рекомендуемый тип запуска через launchSettings

Однако можно запустить через CLI

\OpponentsWebApp> dotnet run <Name>

Name
Имя оппонента

About

Илон Маск и Марк Цукерберг в колизее

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published