В недавней статье обсуждалось решение логической задачи с помощью SQL.
Скрытый текст
На званом обеде были леди Уинслоу, доктор Марколла, графиня Конти, мадам Нациу и баронесса Финч.
В недавней статье обсуждалось решение логической задачи с помощью SQL.
На званом обеде были леди Уинслоу, доктор Марколла, графиня Конти, мадам Нациу и баронесса Финч.
SQL — язык сверхвысокого уровня, а SQL-движки очень высоко оптимизированы. И поэтому во многих случаях с помощью него можно просто и быстро решать сложные задачи. Вы удивитесь, но даже существует шахматный движок на SQL.
Сегодня мы рассмотрим решение непростой загадки Джиндоша из замечательной игры Dishonored 2 с помощью SQL.Читать полностью »
В общем случае задача выглядит как поиск знаков арифметических операций и иных действий без использования других цифр для того, чтобы получить из четырёх двоек любое число от 0 до 9.
Довольно простые решения на сложение, деление и возведение в степень есть для всех чисел, кроме 7.
С 7 же нужно выйти за рамки привычного (помните головоломку про соединение точек и выход из зоны квадрата). По решению задачи можно многое узнать о собеседнике.
Каждое воскресенье в нашей компании принято устраивать весёлые викторины, это одна из них.
Чтобы найти убийцу мистера Бодди, нужно узнать, где находился каждый человек и какое оружие было в комнате. Подсказки разбросаны по всей викторине (вы не можете ответить на первый вопрос, пока не прочитаете все десять).
Японские кроссворды (также нонограммы) — логические головоломки, в которых зашифровано пиксельное изображение. Разгадывать кроссворд нужно с помощью чисел, расположенных слева от строк и сверху от столбцов.
Размер кроссвордов может доходить до 150x150. Игрок с помощью специальных логических приемов вычисляет цвет каждой клетки. Решение может занять как пару минут на кроссвордах для начинающих, так и десятки часов на сложных головоломках.
Хороший алгоритм может решить задачу намного быстрее. В тексте описано, как с помощью наиболее подходящих алгоритмов (которые вообще приводят к решению), а также их оптимизаций и использования особенностей C++ (которые уменьшают время работы в несколько десятков раз) написать решение, работающее почти мгновенно.

На Хабре было несколько статей про генерацию кроссвордов. В одной из них «Самый сложный кроссворд, составленный компьютером» говорилось про очень сложный кроссворд, составленный компьютером, которому «пришлось немного помочь» вручную. Во второй статье «Алгоритм формирования кроссвордов» рассказывается про алгоритм, созданный автором для составления кроссвордов, и отмечается, что этот «самый сложный кроссворд» остался непокоренным и говорится, что «может быть эта непокоренная вершина вдохновит кого-нибудь на новый штурм!». Что же, можно принять вызов. Что из этого получилось, смотрите под катом.
Однажды попалась мне игра пентамино, где было необходимо уложить 13 фигурок в квадрат 8 на 8. После некоторого периода времени, втечение которого я безуспешно пытался решить эту задачу, я решил, что необходимо написать программу, которая бы делала это за меня. Для этого необходимо было выбрать алгоритм решения. Первое, что приходит на ум — это обычный алгоритм ветвей и границ, когда фигурки укладываются одна за другой примыкая друг к другу (алгоритм с танцующими ссылками здесь не подходит, поскольку фигурки разные). Для ускорения этого алгоритма обычно используются различные эвристики, например, предпочтение отдается ветвлению с наименьшим количеством вариантов. Можно придумать и реализовать и другие эвристики в этом алгоритме, но тут я подумал, что множество различных ухищрений для ускорения решения подобных задач уже реализовано в SAT солверах. Поэтому, необходимо перевести задачу на соответствующий математический язык и воспользоваться каким-либа SAT солвером. О том, как это было реализовано и какие получились результаты можно почитать под катом.
Читать полностью »
Современные веб-фреймворки в основном используются для написания корпоративных приложений, но они давно уже достаточно гибки и функциональны и для других областей. Попробуем написать логическую казуальную игру на ASP.NET Core 2. Рассмотрим процесс создания игрового проекта, а так же новшества фреймворка и сопутствующих инструментов.

У каждого есть свои методы, касающиеся общего подхода к устранению проблем, существуют распространенные ловушки, которых, кажется, не удалось миновать никому. Наш крайне шаблонный образ мыслей был оптимизирован для решения определенных проблем в ходе эволюции, и это обошлось нам недешево. Конечно, нет шаблонов, подходящих под все жизненные ситуации. Но Дэвид Баптиста раскрывает нам сущность трех наиболее распространенных ловушек, чтобы мы смогли распознать их в момент неизбежной встречи. И повести себя правильно, то есть – принять правильное решение!Читать полностью »
Первая попытка собрать кубик Рубика интуитивно, без использования уже разработанных и хорошо описанных методов, натыкается на бессильное поражение. После ознакомления с соответвующими инструкциями задача решается, хотя повторение алгоритмов требует минуты. Но какое минимальное время нужно, чтобы привести каждую из граней случайно перемешанного кубика к одному цвету? Люди достигли пяти секунд. А машины недавно стали быстрее секунды. Речь идёт о уже описанном роботе Джея Флэтлэнда и ещё более быстром новом претенденте на мировой рекорд Sub1.
Итак, задача состоит в том, чтобы получить случайно перемешанный кубик 3×3×3, ознакомиться с его конфигурацией и вращением привести каждую из граней к одному цвету. Делать это не нужно вслепую или в темноте, движения никак не ограничены. Нужна лишь скорость. Допустимые модели кубиков, порядок перемешивания и прочие детали регулируются регистрирующей результат организацией. Одно остаётся неизменным: максимальное оптимальное число ходов никогда не может быть больше 20. Это так называемое число Бога.
Читать полностью »