Детская головоломка
От: vadimcher  
Дата: 06.05.08 16:42
Оценка: 2 (1) +1
здесь

А вот зайца кому, зайца-выбегайца?!
Re: Детская головоломка
От: Элик Россия  
Дата: 07.05.08 16:37
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>здесь


Часа три убил...
Re[2]: Детская головоломка
От: vadimcher  
Дата: 07.05.08 17:29
Оценка:
Здравствуйте, Элик, Вы писали:

Э>Здравствуйте, vadimcher, Вы писали:


V>>здесь


Э>Часа три убил...

Э>

Бывает и больше... Главное не сдался! Добил ведь?

А вот зайца кому, зайца-выбегайца?!
Re[3]: Детская головоломка
От: vadimcher  
Дата: 07.05.08 17:54
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>Здравствуйте, Элик, Вы писали:


Э>>Здравствуйте, vadimcher, Вы писали:


V>>>здесь


Э>>Часа три убил...

Э>>

V> Бывает и больше... Главное не сдался! Добил ведь?


Кстати, у меня картника в конце другая получилась. Все 4 прямоугольника 1х2 наверху. Снизу 2х1 и 4 1х1 по два по бокам. Так что, видимо, есть разные варианты решить! Хотя даже один найти достаточно трудно.

А вот зайца кому, зайца-выбегайца?!
Re: Детская головоломка
От: McSeem2 США http://www.antigrain.com
Дата: 08.05.08 23:25
Оценка:
Здравствуйте, vadimcher, Вы писали:

Тупо. Почему не работают кнопки со стрелками?! Я, например, правша, поэтому держу мышь в левой руке — клавиатура-то сложнее для управления.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Детская головоломка
От: SI_16  
Дата: 09.05.08 09:06
Оценка: :))
Здравствуйте, vadimcher, Вы писали:

6 часов и я — гений
Re: Детская головоломка
От: Joric  
Дата: 09.05.08 21:37
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>здесь

Солюшн довольно впечатляющий =)
http://crystalorb.net/mikem/lufia2.html
Re[2]: Детская головоломка
От: vadimcher  
Дата: 09.05.08 21:50
Оценка:
Здравствуйте, Joric, Вы писали:

J>Здравствуйте, vadimcher, Вы писали:


V>>здесь

J>Солюшн довольно впечатляющий =)
J>http://crystalorb.net/mikem/lufia2.html

Во, я получил в конце как раз такую расстановку, о чем я написал уже ранее. Неужели мне и вправду потребовалось пару сотен ходов (с учетом неоптимальности) !!! Решение для головоломки 4 на 5 в 116 ходов! Да, и вправду сурово...

А вот зайца кому, зайца-выбегайца?!
Re[2]: Детская головоломка
От: vadimcher  
Дата: 10.05.08 22:06
Оценка:
Здравствуйте, Joric, Вы писали:

J>Здравствуйте, vadimcher, Вы писали:


V>>здесь

J>Солюшн довольно впечатляющий =)
J>http://crystalorb.net/mikem/lufia2.html

Кстати, интересно посмотреть на путь в этой головоломке квадрата 2х2: в оптимальном решении его двигают первый раз только на 24-м ходу, до этого идет простая перетасовка мелких прямоугольников и квадратов, причем двигают его вбок, затем он остается там в углу еще на 46 ходов (!), и его сдвигают вниз, затем еще вниз через десяток ходов, а затем, когда до последней строчки остается все один шаг, его вместо этого прогоняют на другую сторону, к противоположной стенке, и только оттуда в нижний угол и к центру.

А вот зайца кому, зайца-выбегайца?!
Re: Детская головоломка
От: MaxCS Россия http://www.coderstudio.net
Дата: 14.05.08 14:35
Оценка: :)
Здравствуйте, vadimcher, Вы писали:

V>здесь


Уф! Ну и "детская" головоломочка!

Но сделал это, часа 3 ! И саботировал работу половины конторы
Re: Детская головоломка - как решить?
От: PaulMinelly  
Дата: 26.05.08 05:37
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>здесь


Это оказывается задача с контеста программирования в MIT.
Кто знает алгоритмы как такие задачи решать? Оказалось таких задач дофига и китайцы лет по 17-18 решают такие задачи как-то за вечер. Как они это делают?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Детская головоломка - как решить?
От: vadimcher  
Дата: 27.05.08 21:04
Оценка:
Здравствуйте, PaulMinelly, Вы писали:

PM>Здравствуйте, vadimcher, Вы писали:


V>>здесь


PM>Это оказывается задача с контеста программирования в MIT.

PM>Кто знает алгоритмы как такие задачи решать? Оказалось таких задач дофига и китайцы лет по 17-18 решают такие задачи как-то за вечер. Как они это делают?

Как китайцы -- не знаю. А написать алгоритм несложно: т.к. вариантов ходов достаточно мало и многие ветки приводят в тупик (когда приходится делать ход назад), то брутфорс тут самое оно.

А вот зайца кому, зайца-выбегайца?!
Re[3]: Детская головоломка - как решить?
От: PaulMinelly  
Дата: 28.05.08 03:30
Оценка: :)
PM>>Это оказывается задача с контеста программирования в MIT.
PM>>Кто знает алгоритмы как такие задачи решать? Оказалось таких задач дофига и китайцы лет по 17-18 решают такие задачи как-то за вечер. Как они это делают?

V>Как китайцы -- не знаю. А написать алгоритм несложно: т.к. вариантов ходов достаточно мало и многие ветки приводят в тупик (когда приходится делать ход назад), то брутфорс тут самое оно.


Как написать такой алгоритм?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Детская головоломка - как решить?
От: Erop Россия  
Дата: 28.05.08 05:07
Оценка: -1
Здравствуйте, PaulMinelly, Вы писали:

PM>Как написать такой алгоритм?

Ключевые слова: "рекурсия" или "дерево перебора"...
На С++, в данном случае, будет как-то так выглядеть:
bool find_solution( field_t& f, deque<move_t>& solution )
{
    vector<move_t> candidates;
    find_correct_moves( f, candidates );
    for( vector<move_t>::size_type i = 0; i < candidates.size(); i++ ) {
        const move_t& current = candidates[i];
        field.do_move( current );
        bool res = find_solution( field, solution );
        field.undo_move( current );
        if( !res )
            continue;
        solution.push_front( current );
        return true;
    }
    return false;
}

deque<move_t> find_solutuon()
{
    deque<move_t> result;
    field_t start_position;
    bool res = find_solution( start_position, result );
    assert( res && start_position == field_t() );
    return result;
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Детская головоломка - как решить?
От: PaulMinelly  
Дата: 28.05.08 10:26
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, PaulMinelly, Вы писали:


PM>>Как написать такой алгоритм?

E>Ключевые слова: "рекурсия" или "дерево перебора"...
E>На С++, в данном случае, будет как-то так выглядеть: [c]

Хотелось бы понять КАК строить такой алгоритм. Что считать ходом, откуда начинать, какой инвариант, что куда передвигать, какая сложность и т.п.?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Детская головоломка - как решить?
От: Erop Россия  
Дата: 28.05.08 10:43
Оценка:
Здравствуйте, PaulMinelly, Вы писали:

PM>Здравствуйте, Erop, Вы писали:


PM>Хотелось бы понять КАК строить такой алгоритм. Что считать ходом, откуда начинать, какой инвариант, что куда передвигать, какая сложность и т.п.?


А что не понятно? Ход -- перемещение одной фигуры на одну позицию.
Алгоритм очень простой -- полный перебор. Я же тебе сказал чего гуглить
Сложность -- объём дерева достижимых позиций.

На самом деле такой алгоритм, конечно, работать не будет, так как не гарантировно отсутсиве циклов. Но это тоже не сложно приделать, вообще-то. Типа в field_t хранить хыш на то, что уже в этой ветке встречалось, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: Детская головоломка - как решить?
От: PaulMinelly  
Дата: 28.05.08 12:08
Оценка:
PM>>Хотелось бы понять КАК строить такой алгоритм. Что считать ходом, откуда начинать, какой инвариант, что куда передвигать, какая сложность и т.п.?

E>А что не понятно? Ход -- перемещение одной фигуры на одну позицию.

Как построить такое дерево, как закодировать позициии, по ним передвигать?
Догадываюсь надо будет выкинуть циклы из дерева (минимум O(n^2)), выбросить дубликаты-пути. Для этого надо хотя бы понять как все это должно быть представлено что есть интересная задача.

Сколько здесь возможных расстановок на доске?

E>Алгоритм очень простой -- полный перебор. Я же тебе сказал чего гуглить


Ага, спасибо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Детская головоломка - как решить?
От: Erop Россия  
Дата: 28.05.08 13:23
Оценка:
Здравствуйте, PaulMinelly, Вы писали:

PM>Догадываюсь надо будет выкинуть циклы из дерева (минимум O(n^2)), выбросить дубликаты-пути. Для этого надо хотя бы понять как все это должно быть представлено что есть интересная задача.


Блин! Что тут сложного?
Ты не можешь придумать как задать какую-то конкретную позицию? Или не знаешь как по позиции сгенерить доступные ходы?
Если не можешь, то я не знаю как тебе помочь, а если можешь, то, типа осталось решить всего одну задачу -- научиться хранить множество уже посещённых позиций. Я бы использовал хэш-таблицу. Ну и всё. Ответ генератора фильтруем по уже посещённым позициям и вперёд...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: Детская головоломка - как решить?
От: PaulMinelly  
Дата: 28.05.08 13:37
Оценка:
E>Ты не можешь придумать как задать какую-то конкретную позицию? Или не знаешь как по позиции сгенерить доступные ходы?
Да. Как задать конкретную позицию и как сгенерировать доступные ходы?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Детская головоломка - как решить?
От: Erop Россия  
Дата: 28.05.08 14:34
Оценка:
Здравствуйте, PaulMinelly, Вы писали:

E>>Ты не можешь придумать как задать какую-то конкретную позицию? Или не знаешь как по позиции сгенерить доступные ходы?

PM>Да. Как задать конкретную позицию и как сгенерировать доступные ходы?

Ну придумай какой-нибудь представление...
Ты про эту конеретно гловоломку? Ну можешь иметь масиив NxM клеток, например, и в каждой клетке хранить номер фишки, которая её сейчас покрывает (либо 0, там, или -1, для пустой позиции).
Соответсвенно ход будет -- номер фигуры + направление смещения. А хэш сам как-нибудь родишь...

Но я думаю, что можно предложить и более эффективные представления. Сам теперь подумай немного, да?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.