Разбор от сообщества: Математика и алгоритмы в простой головоломке "Пятнашки". | infolimp.ru

Разбор от сообщества: Математика и алгоритмы в простой головоломке "Пятнашки".

4 сентября 2026 · infolimp.ru

«Пятнашки» — это не просто игрушка для разминки мозга. Для 1С-разработчика это идеальный полигон для проверки алгоритмического мышления: здесь есть нетривиальная математика, проблема комбинаторного взрыва и подводные камни, которые не заметны при поверхностном взгляде. Разбор сообщества на Infostart показывает, как простая головоломка вскрывает пласт вопросов: от критерия разрешимости до выбора стратегии поиска. Мы идём дальше пересказа — разбираем, почему наивные подходы умирают, как правильно считать инверсии и какие ловушки ждут вас при реализации на платформе 1С.

Контекст: почему «Пятнашки» стали популярной темой в 1С-сообществе

На первый взгляд, задача тривиальна: перемещать костяшки до целевого состояния. Но когда сообщество начинает обсуждать реализацию на 1С, выясняется, что 90% решений падают на тесте из 10 ходов. Проблема не в синтаксисе, а в алгоритме. Статья на Infostart — это не про «как сделать кнопку», а про то, как математика и структуры данных превращают игрушку в серьёзный вызов.

Что именно разбирают на Infostart

Автор показывает, что стандартный перебор всех состояний невозможен: для поля 4×4 число достижимых позиций — 16! / 2 ≈ 1013. Даже если хранить одно состояние в 16 байт, потребуется 160 терабайт. Поэтому ключевой вопрос — не «как перебрать», а «как отсечь заведомо недостижимые цели и сократить перебор». Здесь вступает в силу критерий разрешимости, который многие пропускают.

Математика: критерий разрешимости

Прежде чем писать поиск, нужно ответить на вопрос: а можно ли в принципе собрать данную позицию? Ответ даёт чётность числа инверсий. Инверсия — это пара костяшек, где большая стоит раньше меньшей (не считая пустую клетку). Для поля с нечётной шириной (3×3) головоломка разрешима тогда и только тогда, когда число инверсий чётно. Для поля с чётной шириной (4×4) добавляется условие на ряд пустой клетки: сумма числа инверсий и номера ряда пустой клетки (снизу) должна быть нечётной.

Реализация проверки на 1С

Функция ПроверитьРазрешимость(Поле, Размер) Экспорт
    // Поле — массив чисел от 0 до Размер*Размер-1, где 0 — пустая клетка
    // Размер — ширина/высота квадратного поля
    Инверсии = 0;
    ИндексПустой = -1;
    
    Для Индекс1 = 0 По Поле.Количество() - 1 Цикл
        Если Поле[Индекс1] = 0 Тогда
            ИндексПустой = Индекс1;
        Иначе
            Для Индекс2 = Индекс1 + 1 По Поле.Количество() - 1 Цикл
                Если Поле[Индекс2] <> 0 И Поле[Индекс1] > Поле[Индекс2] Тогда
                    Инверсии = Инверсии + 1;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    
    Если ИндексПустой = -1 Тогда
        Возврат Ложь; // Нет пустой клетки — некорректное поле
    КонецЕсли;
    
    РядСверху = Цел(ИндексПустой / Размер) + 1;
    РядСнизу = Размер - РядСверху + 1;
    
    Если Размер % 2 = 1 Тогда
        Возврат Инверсии % 2 =

Расширение «НОПик» для 1С — встраиваемый коннектор к внешнему AI с интеллектуальным поиском по базе. Задавайте вопросы обычными словами - AI сам найдёт нужное. 45 дней бесплатно.

Попробовать НОПик →
Знаете ответ на такие вопросы не хуже автора статьи? Пройдите бесплатную анонимную проверку уровня на infolimp.ru - 3 практических задачи, 15 минут, публичный токен-профиль, который можно показать работодателю или заказчику. Без регистрации по почте.

Проверить свой уровень бесплатно →