Си шарп с нуля

Формула программиста
основатель — Волосатов Евгений Витольдович
C# Олимпиада из Простоквашино




Андрей Н.
  • Звание: Полиморфер
  • Накопленный опыт: 443 часа
  • Не состоит в «Клубе формулистов»
  • Последний визит: 2017-06-24 17:22:11
  • Возраст: 29 лет

Видеокурсы

Дата активности Видеокурс Прогресс
2017-01-05 aspnet Базовый ASP.ект 10 из 24 42 %
2016-12-24 task3 Комбинаторика 1 из 22 5 %
2016-12-24 java2 Игры на JavaScript 1 из 11 10 %
2016-10-08 gmaps ASP.NET и GMaps 2 из 11 19 %
2016-08-22 game0 Демо игры 3 из 9 34 %
2016-08-14 image Фотошарп все 9 100 %
2016-08-13 thread Бурные потоки все 12 100 %
2016-08-03 biknight Мат Конём и Слоном 23 из 32 72 %
2016-06-11 shifr Шифрование 8 из 20 40 %
2016-06-02 bilife Бинарная жизнь 5 из 6 84 %
2016-05-30 chess НаноШахматы 15 из 17 89 %
2016-05-29 ef Entity Framework все 8 100 %
2016-05-10 saver Хранитель экрана 13 из 15 87 %
2016-05-08 graf Коллекция графов все 19 100 %
2016-05-06 task1 Семантика все 1 100 %
2016-05-06 eshop Интернет-магазин 3 из 25 12 %
2016-05-01 iterator Итератор 9 из 10 90 %
2016-04-28 soft2 Новые технологии 1 из 17 6 %
2016-04-16 webbot Webbot On-Line 2 из 23 9 %
Итого: 145 из 291 50 %

Консольные задачи

Дата активности Консольный раздел Прогресс
2017-01-30 task2f Do-рацикл 1 из 4 25 %
2017-01-30 task2t Матрицы 1 из 4 25 %
2017-01-08 book 8.Потоки 1 из 8 13 %
2017-01-07 book 6.Математика 1 из 7 15 %
2017-01-05 book 4.Циклы все 8 100 %
2017-01-05 book 5.Массивы все 8 100 %
2017-01-05 book 3.Условия все 8 100 %
2017-01-03 book 2.Числа все 8 100 %
2017-01-03 book 1.Строки все 8 100 %
2017-01-02 club 10494 - Алексей Васюк 5 из 6 84 %
2016-12-31 club 4004 - Елена Вставская 24 из 27 89 %
2016-12-24 task1g Целые задачи все 11 100 %
2016-12-24 solo C# набор 1 из 15 7 %
2016-10-27 club 8275 - Глушков Александр 6 из 28 22 %
2016-10-17 club 10162 - Дмитрий Гринь 3 из 5 60 %
2016-09-26 club 10670 - Сергей Соколов все 10 100 %
2016-09-26 club 5649 - Максим Лапшинов 7 из 8 88 %
2016-09-09 club 6452 - Кирилл Шмойлов все 6 100 %
2016-09-05 task2h Точка и плоскость все 6 100 %
2016-09-03 task2o Матрёшки все 9 100 %
2016-08-30 club 10558 - Иван Воронин все 7 100 %
2016-08-27 club 7119 - Владимир Новопашин 14 из 15 94 %
2016-08-17 club 24 - Муза Оля все 2 100 %
2016-08-13 task2c Условный оператор 1 из 16 7 %
2016-08-12 task2b Логика 1 из 13 8 %
2016-07-31 task1c Лирика все 14 100 %
2016-07-23 olimp Олимпиада 28 из 32 88 %
2016-05-05 task1i Календарь все 16 100 %
2016-05-02 task1h Цифры все 12 100 %
2016-05-01 task1d Формулы все 9 100 %
2016-03-13 task1f Геометрия все 8 100 %
2016-03-10 task1e Символы все 5 100 %
2016-02-18 task1a Целые числа все 7 100 %
2016-02-14 task1b Строки все 14 100 %
2016-02-13 task1 Семантика все 6 100 %
Итого: 276 из 370 75 %
Сохранить страницу:

2450. Saniych
Saniych
ответить
→  Андрей Н.  # Консоль / 7119 - Владимир Новопашин / Сумма цифр суммы чисел / 2017-04-07 19:09

Вся оптимизация сводится к выводу формулы согласно свойств чисел.  Например: сумма чисел от 1 до 10 равна 55.
Перебором всех решений можно, но уже 10-значные пары вычисляются более 2х часов на кора2дуба Е7500, на одном ядре.
Мой вариант брутфорса, вывел его от скуки:
public class Program       
//заморочки с байтами для экономии памяти, решение проверялось в онлайн сервисах.
{ public static void Main()     
// а в них сброс задачи при завышении потреблении памяти или процессорного времени.
{ uint st = uint.Parse(Console.ReadLine()); uint ylast = st-1;
byte[] sumA = new byte[st], sumB = new byte[st], cont = new byte[st+st];
sumA[ylast] = 1;
while (sumA[ylast] < 9)
{ Array.Clear(sumB, 0,sumB.Length); sumB[ylast] = 1;
while (sumB[ylast] < 9)
{ byte chk = 1; if (sumB[0] > 9) { rebild_mas(sumB); }
for (byte j = 0; j <= ylast; j++) { if (sumA[j] + sumB[j] > 9) { chk = 0; break;} }
                                if (chk == 1) { cont[0]++; if (cont[0] > 200) rebild_mas(cont); } 
                                sumB[0]++;

sumA[0]++; if (sumA[0] > 9) { rebild_mas(sumA); }
}
                Console.WriteLine("{0} ", otvet(rebild_mas(cont)));
}
        static byte[] rebild_mas(byte[] summas)
        {  byte z = 0; while (z < summas.Length-1)
        {  if (summas[summas.Length-1] > 9) { Array.Resize(ref summas, summas.Length+1); }
summas[z + 1] += (byte)(summas[z] / 10);
            summas[z] = (byte)(summas[z] % 10);  z++;
        }  return summas; }
static string otvet(byte[] lon)
{ string rez =""; for (int x=lon.Length-1; x >= 0; x--)
{ if (lon[x] == 0 && x > lon.Length-2)continue; else rez += lon[x]; }
return rez; }
}


8275. Tekashnik
Tekashnik
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-02-12 18:50

Хм мм,  проверю завтра...


9263. Андрей Н.
Андрей Н.
ответить
→  Tekashnik  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-02-12 16:54

Интересно играете, сударь! http://savepic.ru/12891971.png


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-16 20:42

IRobot robot = (IRobot)currentPlayer;
всё, спасибо, понял теперь, теперь ещё всё проще, не глянул сразу, что это присвоение просто для удобства. сразу не увидел, мельком глянул. подумал что там "new ..." сказывается спешка и отсутствие времени.


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-16 19:36

Экземпляр бота создается один раз, а вот карта каждый раз передается новая - клонированная с рабочей


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-16 19:05

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


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-16 18:27

По поводу функции клонирования с возможностью реверса я сразу увидел, в любом случае после тестирования, я увидел потенциал для доработки идеи. Осталось найти время.


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-16 16:24

В классе Position, кстати, и метод для копирования поля есть (с возможностью реверса)


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-16 16:18

Провёл тестирование, да, точно, значит кое что проверю, если что, скину ещё одну версию бота. Спасибо.


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-16 06:59

Бот получает копию игрового поля, поэтому там можно делать какие угодно пометки, на "рабочее" поле они не повлияют.


9263. Андрей Н.
Андрей Н.
ответить
→  Antonio  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-15 00:37

Да, проверку на ничейный результат допилил только сегодня. ))


11549. Сергей Аникин
Сергей Аникин
ответить
→  Андрей Н.   / 2017-01-14 21:34

Во, ушел ;-) спасибо!


9263. Андрей Н.
Андрей Н.
ответить
→  Сергей Аникин  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-14 20:53

Евгений Витольдович указал неправильный ящик.
Правильный: formula_programmista@mail.ru
Подчеркивание вместо дефиса


11549. Сергей Аникин
Сергей Аникин
ответить
→  Андрей Н.   / 2017-01-14 20:32

Вот беда с отправкой, приходит уведомление, что нельзя доставить письмо. Три раза уже отправлял, возвращается отрицательный ответ. Завтра попробую еще направить. А вообще я сильно не расстроюсь, если не дойдет, это мой первый проект, связанный с ИИ, и он вряд ли удачен ;-)


9263. Андрей Н.
Андрей Н.
ответить
→  Сергей Аникин  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-14 20:18

Сергей, молодец!
Нужно теперь написанный класс прислать на указанный e-mail.


9263. Андрей Н.
Андрей Н.
ответить
→  Евгений Волосатов  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-14 19:58

Ну конечно понимаю. А какая задача просто написать оценочную функцию или всё же более-менее полноценный ИИ?


1. Евгений Волосатов
Евгений Волосатов
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Оценка позиции / 2017-01-14 19:38

Ну ты же понимаешь, что эту функцию мы можешь использовать в рекурсивном поиске лучшего хода, качество игры значительно улучшится.


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин  # C# Четыре в ряд - Соревнование / Пять в Ряд - Соревнование / 2017-01-12 22:08

Боты-комментаторы придумали прикольную идею?)))


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Пять в Ряд - Соревнование / 2017-01-11 06:54

Да, прикольную идею придумали, боты - комментаторы =)


1. Евгений Волосатов
Евгений Волосатов
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Пять в Ряд - Соревнование / 2017-01-10 11:40

Нет, не с точки зрения крестиков, а глобально.
больше нуля - крестики побеждают
меньше нуля - нолики побеждают


11017. Владимир Петреченко
Владимир Петреченко
ответить
→  Андрей Н.  # Базовый ASP.ект / Схема базы данных / 2017-01-09 00:17

Классно получилось!


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Пять в Ряд - Соревнование / 2017-01-08 23:00

Они не программисты, у них другие задачи в команде.


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин  # C# Четыре в ряд - Соревнование / Пять в Ряд - Соревнование / 2017-01-08 22:57

Надо друзей привлекать к участию


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Пять в Ряд - Соревнование / 2017-01-08 22:54

Это не три случайных посетителя, а друзья с которыми я сейчас дискорде общаюсь


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин  # C# Четыре в ряд - Соревнование / Пять в Ряд - Соревнование / 2017-01-08 22:53

Сразу три случайных посетителя поставили оценки? Ай-яй-яй, Иван! :)
Надо бы рассылку сделать с приглашением, а то участников толком не будет.


9263. Андрей Н.
Андрей Н.
ответить
# Вебинары C# / Отзыв по Новогоднему Марафону / 2017-01-08 18:33

Круто, мотивация хорошая, давно хотел пройти курс, наконец-то его приобрел и начал выполнять, осталось только доделать, еще 60%. Хотя не очень удачное время конкретно для меня вышло, гости и прочее отвлекало. Ну и + начал свой кое-какой проект.


9263. Андрей Н.
Андрей Н.
ответить
→  Евгений Волосатов   / 2017-01-06 10:59

Привет! Еще не занимался, но сегодня что-нибудь уже будет точно.


1. Евгений Волосатов
Евгений Волосатов
ответить
→  Андрей Н.  # Базовый ASP.ект / Схема базы данных / 2017-01-06 10:30

Андрей, привет. Как у тебя успехи с подготовкой к соревнованию 15 вряд?


791. Валерий Жданов
Валерий Жданов
ответить
→  Андрей Н.  # Базовый ASP.ект / Подключение к базе данных / 2017-01-06 09:16

Интересный совет


791. Валерий Жданов
Валерий Жданов
ответить
→  Андрей Н.  # Базовый ASP.ект / Создание SQL-запросов / 2017-01-05 22:47

В MySQL нет такой...


791. Валерий Жданов
Валерий Жданов
ответить
→  Андрей Н.  # Базовый ASP.ект / Схема базы данных / 2017-01-05 22:46

четкий список задач!


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.   / 2017-01-05 11:16

Я тоже так думал, но запятая у меня и у робота шарпа, и это уже не впервые, поэтому я уже заранее код дорабатываю, чтобы точка была полюбому.


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин  # Консоль / 4.Циклы / Среднее арифметическое / 2017-01-05 09:20

Запятая будет на твоем локальном ПК, а у робота Шарпа будет точка по-умолчанию.


9263. Андрей Н.
Андрей Н.
ответить

791. Валерий Жданов
Валерий Жданов
ответить
→  Андрей Н.   / 2017-01-03 21:05

да я смотрю, прочерки в сложности и в отчетности. вот и задал впросы



791. Валерий Жданов
Валерий Жданов
ответить
→  Андрей Н.  # Базовый ASP.ект / Установка сервера MySQL / 2017-01-03 21:00

Отлично, Андрей. SQL везде схож


791. Валерий Жданов
Валерий Жданов
ответить

9263. Андрей Н.
Андрей Н.
ответить
→  Елена  # Функциональный П / ФП - Свой метод Where / 2017-01-03 08:17

Методы-расширения иногда бывают очень полезны, они позволяют сократить писанину, хотя на самом деле это обычный статический метод. Обязательное знание.


9263. Андрей Н.
Андрей Н.
ответить

9263. Андрей Н.
Андрей Н.
ответить
→  Елена  # Функциональный П / ФП - Калькулятор / 2017-01-03 08:13

Без лямбд сейчас никуда, поэтому знать и любить их обязательно!


9263. Андрей Н.
Андрей Н.
ответить
# Консоль / 1.Строки / Длинное слово / 2017-01-03 07:52

С помощью Linq решается, как обычно, в одну строчку.


9263. Андрей Н.
Андрей Н.
ответить
→  Кирилл Лебедев  # Консоль / 1.Строки / Подстрока / 2017-01-03 07:47

Кирилл, а как удалять, если string - неизменяемый класс?


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # Консоль / 10558 - Иван Воронин / А и Б сидели на Трубе / 2017-01-03 01:29

Первую версию этой задачи решил всего один человек, Сергей Соколов, для остальных её упростили 2 раза, проще уже некуда.


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # Консоль / 10558 - Иван Воронин / Мультиварка / 2017-01-03 01:28

Это задача не по математике


9263. Андрей Н.
Андрей Н.
ответить
# Консоль / 1.Строки / Слова / 2017-01-02 20:10

С опытом эту задачу можно использовать как тренировку использования Linq


9263. Андрей Н.
Андрей Н.
ответить
# Консоль / 1.Строки / Эхо / 2017-01-02 19:27

Начало положено!


9263. Андрей Н.
Андрей Н.
ответить
→  Ludmila  # Хранитель экрана / Движение шарика / 2017-01-02 18:19

Отлично, начало положено!


9263. Андрей Н.
Андрей Н.
ответить

10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # Java Book / ФИНАЛЬНЫЙ УРОК / 2017-01-02 18:15

Куда же без неё в консоли =)


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин  # Java Book / ФИНАЛЬНЫЙ УРОК / 2017-01-02 18:14

Старая добрая псевдографика!


9263. Андрей Н.
Андрей Н.
ответить
# Консоль / 8275 - Глушков Александр / Гладкие числа / 2016-12-31 09:40

Написал красивое решение с использованием итератора, а робот шарп его не может переварить :(


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # Базовый ASP.ект / Создание модели Story / 2016-12-25 22:49

Да, времени всегда не хватает =)


9263. Андрей Н.
Андрей Н.
ответить
→  Валерий Жданов  # Базовый ASP.ект / Создание модели Story / 2016-12-25 11:53

Осталось дождаться выходных, чтобы уже окончательно приступить


791. Валерий Жданов
Валерий Жданов
ответить
→  Андрей Н.  # Базовый ASP.ект / Создание модели Story / 2016-12-25 09:20

Логично. но тут идеальных программ нет, после окончания курса можно сделать репозиторий, как ты хочешь)


791. Валерий Жданов
Валерий Жданов
ответить
→  Андрей Н.  # Базовый ASP.ект / Создание пустых страниц / 2016-12-25 09:19

а что за красная буковка на заднем плане? уж очень она эмблему "videosharp" напоминает)))


791. Валерий Жданов
Валерий Жданов
ответить
→  Андрей Н.  # Базовый ASP.ект / Выбор темы для проекта / 2016-12-25 09:17

Ну что ж, гифки так гифки)) котики так котики)


791. Валерий Жданов
Валерий Жданов
ответить
→  Андрей Н.  # Базовый ASP.ект / Мы начинаем ASP.NET с MVC / 2016-12-25 09:17

главное - начать! welcome!


7119. Новопашин Владимир
Новопашин Владимир
ответить
→  Андрей Н.  # Базовый ASP.ект / Выбор темы для проекта / 2016-12-25 07:36

Коты они захватили инет.


9263. Андрей Н.
Андрей Н.
ответить
→  вадим   / 2016-12-01 22:14

Закончилось, в воскресенье на вебинаре подвели итоги, на выходных выложу видео и архив с ботами.


6245. вадим
вадим
ответить
→  Андрей Н.   / 2016-12-01 21:53

соревнование закончилось?


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.   / 2016-11-27 02:27

я сравнивал с одинаковыми по силе ботами, сделал 2 дубликата бота и с ними сравнивал, с разными по силе естественно разница будет не сильная, так как всё равно они выиграют, я о сравнении одинаковых ботов, клонов, ладно, я после соревнований сам сравню ещё раз.


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин   / 2016-11-26 22:15

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


9263. Андрей Н.
Андрей Н.
ответить
→  Orange  # C# Четыре в ряд - Соревнование / Как протестировать ИИ / 2016-11-26 22:10

Сделать игрока с функцией:
public int GetMove(...) => int.Parse(Console.ReadLine());
и можно тогда делать ходы ручным вводом, возможно действительно стоило об этом упомянуть в видео.


9263. Андрей Н.
Андрей Н.
ответить
→  Orange  # C# Четыре в ряд - Соревнование / Как протестировать ИИ / 2016-11-26 22:01

1, 2 - Для этого есть этот урок - можно вместо второго игрока запрашивать ввод с консоли.
Советы хороши, но, как говорится... да много как говорится, поговорок подходящих много.
Первый блин - комом. Одна голова хорошо, а две - лучше. Ложка хороша к обеду. И т.д.
3 - Здесь - да и с этим ничего не поделать.
То что сложно - да, поэтому особо не углублялся, лишь старался показать минимальный код, который позволит протестировать свою dll.
Комментарий дельный и полезный. Спасибо!


9263. Андрей Н.
Андрей Н.
ответить
→  Елена  # C# Четыре в ряд - Соревнование / Заявка на участие! / 2016-11-25 19:22

Ну еще есть пара дней, если вруг будут мыски как еще улучшить - можно прислать повторно


9263. Андрей Н.
Андрей Н.
ответить
→  Максим Лапшинов  # C# Четыре в ряд - Соревнование / Как протестировать ИИ / 2016-11-25 19:19

Максим, молодец, у тебя чуть менее двух суток, чтобы прислать своего бота!


11852. Alex
Alex
ответить
→  Андрей Н.   / 2016-11-25 11:15

Большое спасибо!


9263. Андрей Н.
Андрей Н.
ответить
→  Alex   / 2016-11-24 20:11

http://rgho.st/8X2Bxs6Dd


11852. Alex
Alex
ответить
→  Андрей Н.  # Хранитель экрана / ПОЛУФИНАЛЬНЫЙ урок / 2016-11-24 19:43

Можно ли посмотреть исходник?


9263. Андрей Н.
Андрей Н.
ответить
→  Елена  # C# Четыре в ряд - Соревнование / Как создать ИИ / 2016-11-23 07:14

Теперь есть видео, на котором показано как протестировать своего бота, поэтому написать его стало немного проще.


8275. Tekashnik
Tekashnik
ответить
→  Андрей Н.   / 2016-11-18 20:35

Ну спасибо, только сейчас уже спать, а завтра на дачу(( так что не думаю, что успею потестить, лучше перенести на неделю)))


9263. Андрей Н.
Андрей Н.
ответить
→  Елена  # C# Четыре в ряд - Соревнование / Как создать ИИ / 2016-11-18 20:21

Ну, это, скорее, не урок, а так, введение в курс дела...


9263. Андрей Н.
Андрей Н.
ответить
→  Tekashnik   / 2016-11-18 20:17

Вообще в папке с программой лежит отдельная dll - это движок игры (не знаю, для чего я его вынес отдельно, но можно теперь этим воспользоваться).
Нужно его подключить также как библиотеку FiaRPlayer.dll и сыграть следующим образом:
using System;
using FiaREngine;
using FiaRPlayer;

namespace MyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            IFiaRPlayer player1 = new MyPlayer();
            IFiaRPlayer player2 = new MyPlayer();
            FiaREngine.FiaREngine engine = new FiaREngine.FiaREngine(player1, player2);
            engine.PrepareToPlay();
            while (engine.GameState == GameState.MoveOfFirst || engine.GameState == GameState.MoveOfSecond)
                engine.DoMove();
            Console.WriteLine(engine.GameState);
        }
    }
}
Сюда скинул xml-ку, надо положить в папку с FiaREngine.dll для того, чтобы были русские комменты к методам и свойствам движка: http://rgho.st/6RdTRnXjg


8275. Tekashnik
Tekashnik
ответить
→  Андрей Н.   / 2016-11-18 19:14

Печально, пока ошибку найти не могу, а то что есть, жаде терменатора не выиграет, хотя моя реальная прога, вроде неплохо справляется


9263. Андрей Н.
Андрей Н.
ответить
→  Tekashnik   / 2016-11-18 19:02

Напрямую - никак, только если добавить в солюшен какой-то запускаемый проект и из него работать с этой библиотекой


8275. Tekashnik
Tekashnik
ответить
→  Андрей Н.   / 2016-11-18 15:25

Андрей, а можно как то оттебажить dll??
Я вот написал свою прогу в которой всё работает, переношу методы в dll, а там работает некорректно, а брейкпоинта нигде не поставишь и не понятно, что именно там не отрабатывает, есть ли какие то методы?


5649. Максим Лапшинов
Максим Лапшинов
ответить
→  Андрей Н.   / 2016-11-18 14:38

Неочень ведь выйдит отсеять. Может случится зацыкливание при специальной комбинации которая небыла выевлена в переуд тестирование и получится зацыкливание на 1 партии из мильена партии


9263. Андрей Н.
Андрей Н.
ответить
→  Максим Лапшинов   / 2016-11-18 13:20

Именно поэтому его нет, потому что не определишь время оптимальное, то ли 1 сек ставить на ход, то ли 10, а может 60?
Просто в начале вручную всех зацикленных надо будет отсеить.


5649. Максим Лапшинов
Максим Лапшинов
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Заявка на участие! / 2016-11-18 09:16

Как так? Должен быть таймоут. Ктото напишит хитро обработку массива клеток и программа зацыклится вечно. Что тогда будит? А ктото напишит что один ход обрабатывается скажем 1 секунду.


9263. Андрей Н.
Андрей Н.
ответить
→  Максим Лапшинов  # C# Четыре в ряд - Соревнование / Заявка на участие! / 2016-11-18 08:21

Таймаута нету, по крайней мере я о нем не знаю


9263. Андрей Н.
Андрей Н.
ответить
→  Orange  # C# Четыре в ряд - Соревнование / Как создать ИИ / 2016-11-18 07:30

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


9263. Андрей Н.
Андрей Н.
ответить
→  Orange  # C# Четыре в ряд - Соревнование / Как создать ИИ / 2016-11-18 07:26

О временных ограничениях я сначала думал, но потом решил от них уйти, так как непонятно сколько ставить - поставить 1 секунду, кому-то может вполне не хватить, поставить - больше? сколько тогда? 5? 10? 60?
С другой стороны, кто-то может впихнуть в своего бота бесконечный цикл, но я для себя решил, что таких мы просто вручную отсеим на предварительном этапе.
Чтобы посмотреть заголовок класса, метода, перечисления и прочего - нужно нажать F12, забыл сказать об это на видео, наверное.
По поводу того, то первый игрок всегда выигрывает - для человека может быть гораздо проще, а вот в коде это реализовать... Тут ведь даже мат конем и слоном покажется детским лепетом, здесь всего число комбинаций на доске ограничено сверху величиной 127^7 = 5.3*10^14 и в каждом случае до 7 вариантов хода, такое количество не то что перебрать во время игры, так даже заочно перебрать и составить словарь не предоставляется возможным - он будет занимать более 3 ПБ


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.   / 2016-11-17 13:33

чем тормознее, тем больше побед =) да, надо оптимизировать, времени небыло, но тормозных там реально 2, другие 3 сносные по скорости.


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин   / 2016-11-17 13:26

Да-да, получил. Какие-то они у тебя неторопливые)


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.   / 2016-11-17 12:25

Привет, я там письмо с ботами скинул, пришли?


8275. Tekashnik
Tekashnik
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Как создать ИИ / 2016-11-17 07:12

Там и бота то по сути нет, так посмотреть как работает))


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.   / 2016-11-16 22:34

Да, я понял, уже архив раздал, поэтому правила изменить можно будет после соревнований, ок, скоро скину письмо с ботами


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин   / 2016-11-16 22:33

В принципе, формула расчета рейтингов изаестна и смоделировать при желании можно и так. Примем, что у нас 5 ботов, например, #1 и #4 самые сильные, побеждают остальных, а между собой всегда играют вничью, #3 - самый слабый, проигрывает всем остальным, #2 чуть сильнее, #5 еще сильнее, но слабже чем #1 и #4. Теперь просто запускаем 1000 боев так и 1000 так и смотрим эффект. Если реально будет ощутимая разница, то я на подведении итогов это сообщу и прямо там заменим алгоритм, но менять архив уже выложенный - точно не будем.


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.   / 2016-11-16 22:05

Я понял, просто я проверял, запускал сразу 1000 боёв и вручную тыкал по 1 бою чтобы было 1000 =) и когда тыкал по 1 бою статистика у одинаковых ботов была одинаковая, +- 1-3 рейтинга, а при тыке в 1000 боёв сразу, один слил рейтинг у всех, отожлася, второму уже нечего было высасывать, так как разница в рейтинге была существенная и потом когда он совокупился с себе подобным, он чуток перелил и всё, не хватило сравняться, я просто с 2003 года изучаю этот рейтинг и работаю с ним часто, такая формула используется на соревнованиях 1х1 или командных, при этом чем разница в рейтинге больше, тем не выгоднее тем, у кого рейтинг выше, потому что они ничего не получат при победе, а при проигрыше потеряют больше обычного, ок, я после соревнований проведу доп. исследования, свопнув циклы, спасибо. Прикольно сделал, зацепила идея =)


9263. Андрей Н.
Андрей Н.
ответить
→  Кирилл Лебедев  # C# Четыре в ряд - Соревнование / Как создать ИИ / 2016-11-16 20:19

Зато победа будет сладкой!


9263. Андрей Н.
Андрей Н.
ответить
→  Tekashnik  # C# Четыре в ряд - Соревнование / Как создать ИИ / 2016-11-16 20:17

Интересный скрин, написать бота, который проигрывает "комплектным" - тоже надо уметь)


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин   / 2016-11-16 20:02

Привет, Иван!
Не думаю, что это значительно повлияет на результаты, так уж устроена эта формула, иначе ее бы повсеместно не использовали! Возможно мелкие погрешности будут из-за округления до целого, но в общем итог всё равно один, победитель от этого не изменится (да и второе-третье место при большом количестве ботов тоже). Тут ведь всё завязано на мат.ожидание количества набранных очков и оно не зависит от порядка партий, только от их числа. Ну и самая главная проблема в том, что архив выложен и "менять правила во время игры" как-то не правильно.
А вообще после подведения итогов у тебя будет возможность поменять последовательность боев.


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.   / 2016-11-16 19:34

Привет, уже 5 ботов между собой сталкиваю лбами и базовые 2, итого уже 7 штук у меня балуются, заметил погрешности в расчётах, проанализировав ситуацию увидел, что если долго тыкать по 1 бою между ботами, то статистика ровненькая идёт как надо, а если сразу ткнуть 1000, то самый крутой схавает у всех по очереди рейтинг, а другие потом с теми же играют и рейтинг чуть ниже отбирают, так как формула так устроена, что чем с более слабым противником играешь и побеждаешь, очков меньше получаешь или вовсе не получаешь, поэтому советую свопнуть циклы количества битв с циклами перебора противников, т.е. у тебя сейчас выбираешь один бот, потом другой, а потом они по циклу выбранного количества боёв сражаются, сливая друг другу рейтинг, если окажется, что один заведомо слабее, то слив будет критическим, потом выбирается другой и если первый оказался сливатором, то он уже второму и последующим ничего не сольёт, так как у него рейтинг упадёт ниже плинтуса, а если он был тот, кто вампирил рейтинг, то он схавает его у всех, кто попадётся, если они слабее, в итоге, последующий выбор бота уже с ослабленным рейтингом и сталкивание их лбами с другими будет приносить им мизер или вовсе ничего, если же сделать как я написал выше, а именно свопнуть циклы, то погрешность будет минимальной, так как в идеале, данный расчёт рейтингов рассчитан на балансировку противников, а именно, можно реализовать отсеивание и сталкивать лбами тех, у кого рейтинги минимально отличаются в первую очередь. это отдельная песня, хотябы просто свопни циклы.


5649. Максим Лапшинов
Максим Лапшинов
ответить

9263. Андрей Н.
Андрей Н.
ответить
→  Aleksandr Zaitcev  # C# Четыре в ряд - Соревнование / Заявка на участие! / 2016-11-15 17:52

Пока не анонсировано, но я думаю - подведение итогов будет в воскресенье


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Заявка на участие! / 2016-11-15 17:49

А когда будут проводиться соревнования и до какого числа принимаются боты?


9263. Андрей Н.
Андрей Н.
ответить
→  Aleksandr Zaitcev  # C# Четыре в ряд - Соревнование / Заявка на участие! / 2016-11-15 17:30

Если будет время и желание - никто не запрещает прислать еще одного бота, чем больше ботов, тем веселее!
Главное чтобы имя у него другое было, в том сисле и у класса, а то там, вроде, коллизии могут быть.


10558. Иван Воронин
Иван Воронин
ответить
→  Андрей Н.  # C# Четыре в ряд - Соревнование / Как создать ИИ / 2016-11-15 14:47

Да, отлично выглядит, молодец!


9263. Андрей Н.
Андрей Н.
ответить
→  Иван Воронин  # C# Четыре в ряд - Соревнование / Как создать ИИ / 2016-11-15 14:09

Вот над переливом времени пришлось потрудиться отдельно, но оно того стоило, думаю, смотрится интересно. Хотя, средствами wpf это получилось значительно проще, чем если бы я разрабатывал WinForms-приложение.

Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.
Научился: Хранить позиции в массиве
WhiteBox сделал встроенным в Chess, все-таки вне контекста шахматного класса этот вайтбокс неактуален... но для того чтобы не загромождать файл, сделал его partial еще один + от этого - при использовании других nested классов в WhiteBox не требуется указывать префикс "Chess."
Научился: Научился: 1. Сoздaть мeтод SetRule (int nr). 2. Сoздaть мeтoд Next (). 3. Пoмecтить в цикл вызoв этих мeтодов. 4. Пoэкcпepиментиpовать с рaзличными прогpаммами.
---