logo.aleks Versus Поиск по сайту:
  Главная | Регистрация | Вход   Приветствую Вас Гость | RSS
Майнпаги
тыц
Стихи.РУ
Проза.РУ
Aleks Versus на LI
Я на Самиздате
читательский дневник
На Книготопии

Поделки на QSP

Если Вы до сих пор не знаете, что такое QSP, рекомендую причаститься:    QSP . SU.

Генератор Судоку v.2.x

Описание:

Генератор судоку — конструкция из нескольких алгоритмов, позволяющих создавать задачи судоку различной степени сложности и формы. Комбинируя различные алгоритмы тем или иным образом, Вы можете собрать собственную задачу судоку для игры. Любой алгоритм легко корректируется в соответствии с вашими нуждами

Что умеет:

Предлагаемая вашему вниманию версия генератора судоку способна на следующее:

  • генерировать случайную матрицу судоку 9х9 элементов
  • генерировать готовую задачу судоку с единственно возможным вариантом решения (в среднем скрывается около 40 элементов).
  • генерировать готовую задачу судоку повышенной сложности (около пятидесяти скрываемых значений). Иммитирует задачу, составленную человеком. Решается трудно, но решается.
  • генерировать задачу судоку со случайным скрытием элементов матрицы. Количество скрываемых элементов можно изменить на локации step5, вторая строка, переменная numbercount_sudoku
  • генерировать приблизительное решение для частично заполненной матрицы судоку (т.е. для готовой задачи). Совершенно правильно заполняет любую задачу, сгенерированную действием "Новый судоку с единственным вариантом решения".

Версии:

2.4.1 — к имени каждой переменной добавлен суффикс sudoku.

2.4.2 - добавлена подпрограмма переадресовки по имеющемуся адресу для блоков ('ffa'). Так же умеет вычислять координату блока.

2.5.0 — Подкорректированы два алгоритма, дублирующие некоторые другие алгоритмы. Исключены подпрограммы del_element7 и del_countnum. Добавлена подпрограмма kill_all, предназначенная для избавления от всех переменных, задействованных в игре, что позволяет собирать судоку в виде модуля и добавлять к любой игре.

2.5.1 – Исправлена ошибка в работе алгоритма prove_dcount (проверялось условие, выполнение которого заведомо невозможно). Почищен код. Исключена подпрограмма prove_element, дублирующая подпрограмму prove_anum.

Локации:

  • Sudoku – локация самой игры. При сборке модуля эта локация может быть исключена. Здесь она является примерной локацией для Вашей игры. На этой локации обязательно должна быть выставлена переменная usehtml=1
  • Step1 – шаг первый. Генерация трёх случайных блоков, заполненных случайным образом. Эта подпрограмма всегда вызывается первой. Она заполняет три блока матрицы из восьмидесяти одного элемента числами по правилам судоку:
  • step2 – шаг второй (условно). Находит элемент с наименьшим возможным количеством вариантов заполнения. Выбирает среди имеющихся вариантов случайным образом один и прописывает этот вариант элементу.
  • Step3 – шаг третий. Заполняет все элементы матрицы через шаг второй. Заполнение ведётся до тех пор, пока numbercount_sudoku не окажется равной нулю.
  • step4 – шаг четвёртый. Условный. Проверяет правильность заполнения судоку по правилам судоку. т. е. проверяет наличие пустых элементов, или повторяющихся элементов в блоках, строках, столбцах.
  • Step5 – шаг пятый. Формирует задачу со скрытием заданного количества случайных элементов.
  • step6 – шаг пятый. Формирует задачу с единственно возможным вариантом решения (около 40 скрываемых элементов).
  • step7 – шаг пятый. Формирует задачу, похожую на задачу, составленную человеком (порядка пятидесяти скрываемых элементов).

  • full_block – заполняет блок с координатами первого элемента args[0] – args[1] (x_sudoku – y_sudoku) случайным образом.
  • full_anum – заполняет массив с именем $args[0] текстовыми значениями от '0' до '8'
  • full_countnum – заполняет массивы $countnum_sudoku_N значениями от '0' до '8', где N – порядковый номер элемента в матрице (0...80), вычисляемый по координатам x – y.
  • full_countnum_adr – заполняет массив $sountnum_sudoku[N] строковыми значениями вида 'x_sudoku=<<x_sudoku>> & y_sudoku=<<y_sudoku>>', где N – порядковый номер элемента в матрице (0...80), вычисляемый по координатам x_sudoku – y_sudoku.
  • full_count – заполняет массивы $count_raw_J $count_col_J $count_block_J значениями от '0' до '8', где J – порядковый номер строки, столбца или блока (соответственно) в матрице.
  • full_menu – заполняет массив $menu_sudoku – конструкциями меню вида 'действие:локация действия'.
  • print_sudoku – выводит в окно дополнительного описания результирующий вид матрицы судоку. т. е. вид судоку после шага третьего. Может использоваться, как для проверки решения, так и для подсказки игроку. Предназначалась для отслеживания правильности заполнения матрицы после шага третьего. Необязательная локация.
  • print_link – выводит в окно основного описания все возможные значения элемента, т. е. массив $countnum_sudoku_N. Необязательная локация.
  • print_exit – выводит в окно основного описания получившуюся задачу судоку.
  • print_count – выводит в окно дополнительного описания размеры массивов $countnum_sudoku_N. Необязательная локация.
  • del_countnum_b – подпрограмма удаления из массивов $countnum_sudoku_N значений элементов, которые в них больше не могут использоваться.
  • del_element_raw, del_element_col, del_element_block – удаляет из массивов $count_raw_J $count_col_J $count_block_J значение удаленного из матрицы элемента.
  • del_element – удаляет из массива $dublnum_sudoku элемент с координатами args[1] args[2] (x_sudoku – y_sudoku) и со значением $args[0]. Добавляет в массив $countnum_sudoku_N элемент со значением $args[0], из массива $countnum_sudoku удаляет элемент со значением 'x_sudoku=<<args[1]>> & y_sudoku=<<args[2]>>'. При обращении с локаций del_element_raw, del_element_col, del_element_block непосредственно удаляет из массивов $count_raw_J $count_col_J $count_block_J значение удаленного элемента.
  • kill_countnum – удаляет все массивы $countnum_sudoku_N.
  • kill_all – удаляет все массивы переменных, использовавшихся в игре. Весьма полезная локация, если вы встраиваете генератор судоку в собственную игру.
  • s0 ... s8 – локации, отвечающие за работу контекстного меню в игре.
  • prove_anum – проверка на то, какие значения может принимать элемент. Если больше одного, выдается ошибка.
  • prove_anum7 – практически то же самое, что prove_anum, только алгоритм попроще и в результате выдается маркер перехода.
  • prove_count – проверяет каждый элемент в строке, столбце или блоке, сопутствующих удаляемому элементу, на количество возможных вариантов.
  • prove_fast – простая проверка на то, есть ли в строке, столбце или блоке ещё удалённые элементы.
  • prove_place и prove_dcount – сложно вспомнить, что это за проверки, однако в результате этих проверок заполняется массив $dcount_N значениями, которые у этого элемента не могут быть.
  • ffa – подпрограмма, вычисляющая координаты правого верхнего угла блока (или координаты блока среди остальных блоков) по координатам элемента, который в этом блоке находится.

Скачай последнюю версию..

 
Copyright MyCorp © 2018
Конструктор сайтов - uCoz
aleksversus@mail.ru
lex666endless@rambler.ru
437337904
Наверх