2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Как правильно перемешать пятнашки 4х4?
Сообщение27.05.2015, 21:33 
Если тупо рэндомом - они не всегда собираются. Можно проверить расстановку рэндомом на собираемость?
Можно конечно много и случайно гонять по полю белый квадратик, но этот лёгкий путь я использую, если других не найдётся.

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение27.05.2015, 22:05 
Первый же результат по randomizing fifteen в гугле: http://www.sitepoint.com/randomizing-sliding-puzzle-tiles. Если бы я сразу знал, как игра называется правильно, результат получился бы вообще наверняка (а так это просто была удача).

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение27.05.2015, 22:27 
По русски ничего нету?

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение27.05.2015, 22:40 
Что ж, не запрещаю ввести в гугл и русскоязычный запрос.

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение27.05.2015, 22:47 
Назовем инверсией некоторого положения фишек положение, получающееся из первого перестановкой двух соседних по горизонтали или вертикали квадратиков (непустых). Если стартовое положение можно перевести в желаемое с помощью четного числа инверсий, то задача решается. Если с помощью нечетного числа - нет.

Все. Осталось написать код, что, в общем, тривиально. :-)

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение29.05.2015, 19:34 
Забил на алгоритмы, делаю 1000 случайных ходов и ещё - до тех пор, пока не очистится правый нижний квадрат. Нормально всё перемешивается.

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение29.05.2015, 21:11 
Alexu007 в сообщении #1021200 писал(а):
Забил на алгоритмы
:facepalm:

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение30.05.2015, 12:31 
А и наплевать, главное работает. Вон какие симпатяшки, и рисовать ничего не пришлось. В роли квадратиков выступают обычные кнопки:

Изображение

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение30.05.2015, 17:21 
Alexu007 в сообщении #1021489 писал(а):
А и наплевать, главное работает.
Удачи с размером $50\times50$.

Кстати, опять же, мало кто с первого взгляда поймёт, что такое FIFTEENs (по ссылке же можно увидеть, что это называется по-английски sliding puzzle), и чего именно change (думаю, даже new было бы куда ясней).

Alexu007 в сообщении #1021489 писал(а):
В роли квадратиков выступают обычные кнопки:
До этого в своё время даже я додумался. :roll:

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение30.05.2015, 19:17 
arseniiv в сообщении #1021568 писал(а):
Кстати, опять же, мало кто с первого взгляда поймёт, что такое FIFTEENs (по ссылке же можно увидеть, что это называется по-английски sliding puzzle), и чего именно change (думаю, даже new было бы куда ясней).
А ещё лучше "Shuffle".

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение30.05.2015, 20:43 
Да, это самое лучшее! Пытался вспомнить, но вспомнил не то слово scramble, поглядел в словаре и решил не писать, хотя в одной игре, когда ходы заканчивалось, перемешивание звалось именно так.

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение12.07.2015, 13:12 
Аватара пользователя
venco в сообщении #1021612 писал(а):
А ещё лучше "Shuffle".
А еще лучше - "New game" =). "Shuffle" для процедуры в коде пойдет ).
Alexu007 в сообщении #1021200 писал(а):
Забил на алгоритмы, делаю 1000 случайных ходов и ещё - до тех пор, пока не очистится правый нижний квадрат. Нормально всё перемешивается.

Свои плюсы ) легче сделать разные уровни сложности. Легкий уровень (10-20) перемешиваний, средний (20-30) перемешиваний и сложный.
arseniiv в сообщении #1021568 писал(а):
Удачи с размером $50\times50$.
Дык в такое кто играть будет? ))
arseniiv в сообщении #1020527 писал(а):
Первый же результат по randomizing fifteen в гугле: http://www.sitepoint.com/randomizing-sliding-puzzle-tiles. Если бы я сразу знал, как игра называется правильно, результат получился бы вообще наверняка (а так это просто была удача).
За ссылку спасибо. Я вот нарыл только для квадратных http://e-maxx.ru/algo/15_puzzle.

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение12.07.2015, 17:31 
nenefertiti в сообщении #1036140 писал(а):
Дык в такое кто играть будет? ))
Вопрос был по алгоритму, а о применимости автор ничего не говорил. Значит, подразумевать её не нужно.

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение12.07.2015, 17:45 
Аватара пользователя

(Оффтоп)

arseniiv в сообщении #1020527 писал(а):
Если бы я сразу знал, как игра называется правильно, результат получился бы вообще наверняка (а так это просто была удача).

Есть простой способ в подобной ситуации правильно перевести нужный термин (а также найти все релевантные переводы) на другой язык (иногда вообще незнакомый, типа китайского): найти нужное в ру-вики и перейти на нужное-вики.

 
 
 
 Re: Как правильно перемешать пятнашки 4х4?
Сообщение12.08.2015, 20:40 
Чтобы перемешать пятнашки, нужно рандомно заполнить первые 15 ячеек числами от 1 до 15 (16-я пустая).
Далее нужно проверить будет ли складываться полученная комбинация. Если не будет, нужно поменять местами любые 2 числа.
Как я понимаю проблема именно в том чтобы проверить является ли полученная комбинация корректной, т.е. складываемой?

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

допустим у нас есть масив
A[1..15]: array of integer;

тогда функция проверки (на Delphi) будет выглядеть так (правда при проверке она испортит проверяемый массив, так что нужно либо сделать заранее копию массива, либо чуть изменить алгоритм).
код: [ скачать ] [ спрятать ]
Используется синтаксис Delphi
function check:boolean;
var
p,k,i:integer;
begin
  Result:=true;
  for i:=1 to 14 do
  begin
    p:=i;
    while i<>A[p] do
    begin  
      k:=p;
      p:=A[p];
      A[k]:=k;
      Result:= not Result;
    end;
    A[p]:=p;
  end;
end;


Смысл в том что мы перебираем все закольцованные цепочки переставленных элементов.
допустим a[1]=4, a[4]=10, a[10]=1, тогда у нас это является цепочкой с длинной 3
каждая цепочка с четным числом элементов инвертирует значение функции, а с нечетным не меняет.

 
 
 [ Сообщений: 15 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group