Классическая задача для моделирования эвристических алгоритмов. (I need help)
Здравствуйте господа. После недолгого изучения JavaScript решил попробовать написать старую детскую головоломку, в которой на поле размером 4x4 нужно расположить числа от 1 до 15. Полученный скрипт доступен по ссылке. www.dropbox.com/s/osza66pmqu30tga/puzzle.html
Главная сложность оказалась в том, что не все из генерируемых комбинаций можно решить. И хотя на высокоуважаемой википедии представлена формула, по которой следует определить "решаемость комбинации" долгие и томные взгляды на нее не смогли дать ощутимый логический результат (только попытка его изобразить в 155 строчке), поэтому смиренно прошу помощи у вас старожилы данного ресурса, чтобы как могли объяснили что же мне нужно добавить в исходный код. Да и просто буду рад конструктивной критике о качестве написанного (лишь бы не увидеть себя на govnokod.ru). Статья на вики: http://ru.wikipedia.org/wiki/%D0%9F%...88%D0%BA%D0%B8 |
Цитата:
А то получается такая ситуация: - решил подкачаться - сразу поставил на штангу 150кг - чета поднять не смог - помоготе начать поднимать ту штангу Т.ч. совет - начни с гантелей! :D |
Цитата:
Позвольте мне принести свои глубочайшие извинения.:cray: Мне кажется, я не правильно выразился, когда написал что буду рад "конструктивной критике". Ведь вы явно решили, что мне требуются псевдоумные советы как строить процесс обучения. Как же мне повезло, что сразу же после регистрации мне попался такой юзер как вы который, даже не смотря в написанный код, сразу же определил, что для меня написать "Пятнашки" это не посильная задача (аж целых 150 кг) и мне необходимо "начать с гантелей". И, тем не менее, я надеюсь на адекватные советы... |
Цитата:
|
|
Там простая формула. Перемешивать ничего не надо. Просто чайку сладкого выпейте и еще раз посмотрите. По коду сказал бы: а) открывающая скобка должна быть на той строке, к сущности которой относится; закрывающая наоборот и вровень с отступом; б) одна операция - одна строка; где надо строим ступеньки; в) бессмысленные комментарии типа этого: "обычный рандом который выдает числа из указанного промежутка", там по названию и параметрам все понятно, а вот включая ли концы или нет - непонятно; г) return всегда должен быть в конце функции, там его ищут обычно; д) пробелы не забывать; е) сверху переменные, далее функции, далее обычная последовательность выполнения; ж) оборачивайте все в анонимную функцию, глобальную область засорять не рекомендуют; з) null мне не нравиться, используйте undefined - более понятнее)) и) придерживайтесь одного стиля оформления кода, желательно самого распространенного для языка на котором пишите.
Я практикующий junior, вот такие моменты выделил.:) |
генератор правильных комбинаций для пятнашек
:write:
по формуле из википедии 1 пост генератор правильных комбинаций для пятнашек function gen() { function f(a) { for (var b = 4, c = 0; c < a.length - 1; c++) { !a[c] && (b -= 4 - c / 4 | 0); for (var d = c + 1; d < a.length; d++) a[c] && a[d] && a[d] < a[c] && b++ } return !(b % 2) } for (var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 14, ""]; !f(a);) for (var b = a.length - 1; 0 < b; b--) { var e = Math.floor(Math.random() * (b + 1)), g = a[e]; a[e] = a[b]; a[b] = g } return a }; alert(gen()); функцию f можно использовать для проверки правильности автономно - на входе массив 15 чисел и пусто на выходе true/false |
Большое спасибо за помощь. Воспользуюсь советами и недочетами:)
|
Часовой пояс GMT +3, время: 04:11. |