juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2007-08-02 01:12 pm

задача

На прямую высаживаются два робота с идентичной программой. Свои координаты они не знают. Как их запрограммировать так, чтобы они обязятельно встретились?

Кто-нибудь знает эту задачу? Или её решение? Мое решение было такое - случайные блуждания. Но мой коллега, [livejournal.com profile] malaya_zemlya, заметил, что совершенно неочевидно, что роботы имеют доступ к датчику случайных чисел, а внутренний генератор... ну вы поняли, он их синхронизирует.

Есть идейки? Мне эту задачку задавали года три назад; я предложил случайные блуждания, но интервьюёры моё решение не поняли. Ну не учили их вероятности. Неважно, однако. Меня больше интересует наличие решения.

[identity profile] ded-maxim.livejournal.com 2007-08-02 08:19 pm (UTC)(link)
А сообщения они друг другу посылать могут?

[identity profile] luzhin.livejournal.com 2007-08-02 08:22 pm (UTC)(link)
Или метки, скажем, на прямой оставлять.
Как мальчик-с-пальчик.

(no subject)

[identity profile] piggymouse.livejournal.com - 2007-08-03 08:32 (UTC) - Expand

[identity profile] cmm.livejournal.com 2007-08-02 08:21 pm (UTC)(link)
пущай ходят туда-сюда с увеличивающейся раз от раза амплитудой, и пущай у первого робота амплитуда растёт быстрее чем у второго.

или я чего недопонял?
nine_k: A stream of colors expanding from brain (Default)

[personal profile] nine_k 2007-08-02 08:24 pm (UTC)(link)
+1

Как я понял, вопрос в том, как заставить амплитуду одного расти быстрее чем у второго, если они идентичны.

(no subject)

[identity profile] cmm.livejournal.com - 2007-08-02 20:24 (UTC) - Expand

(no subject)

[identity profile] piggymouse.livejournal.com - 2007-08-03 08:30 (UTC) - Expand

(no subject)

[identity profile] spamsink.livejournal.com - 2007-08-02 20:25 (UTC) - Expand

(no subject)

[identity profile] dpak0h.livejournal.com - 2007-08-03 10:20 (UTC) - Expand

[identity profile] spamsink.livejournal.com 2007-08-02 08:24 pm (UTC)(link)
Случайные блуждания не гарантируют обязательности. Эту задачу я видел на форуме головоломок http://wu.webhop.org/ но уже не помню, как она называлась.

[identity profile] spamsink.livejournal.com 2007-08-02 08:27 pm (UTC)(link)
У задачи есть существенное дополнение. На месте высадки роботы оставляют парашют. Тогда никаких случайных чисел не надо, а решение довольно прямолинейно, пардон за каламбур.

[identity profile] ex-ex-zhuzh.livejournal.com 2007-08-02 08:36 pm (UTC)(link)
именно-именно. если нет никаких меток, они так и будут всегда на одном и том же расстоянии друг от друга.

(no subject)

[identity profile] ivan-gandhi.livejournal.com - 2007-08-02 21:13 (UTC) - Expand

(no subject)

[identity profile] itman.livejournal.com - 2007-08-02 21:32 (UTC) - Expand

(no subject)

[identity profile] ex-ex-zhuzh.livejournal.com - 2007-08-02 22:46 (UTC) - Expand

(no subject)

[identity profile] itman.livejournal.com - 2007-08-03 01:41 (UTC) - Expand

(no subject)

[identity profile] ivan-gandhi.livejournal.com - 2007-08-02 23:00 (UTC) - Expand

(no subject)

[identity profile] spamsink.livejournal.com - 2007-08-02 23:17 (UTC) - Expand

(no subject)

[identity profile] ivan-gandhi.livejournal.com - 2007-08-02 23:56 (UTC) - Expand

(no subject)

[identity profile] spamsink.livejournal.com - 2007-08-03 00:03 (UTC) - Expand

(no subject)

[identity profile] ivan-gandhi.livejournal.com - 2007-08-03 03:59 (UTC) - Expand

(no subject)

[identity profile] spamsink.livejournal.com - 2007-08-03 04:33 (UTC) - Expand

(no subject)

[identity profile] glocka.livejournal.com - 2007-08-03 07:29 (UTC) - Expand

(no subject)

[identity profile] alexcohn.livejournal.com - 2007-08-09 08:08 (UTC) - Expand

(no subject)

[identity profile] spamsink.livejournal.com - 2007-08-03 20:17 (UTC) - Expand

(no subject)

[identity profile] spamsink.livejournal.com - 2007-08-03 22:00 (UTC) - Expand

(no subject)

[identity profile] spamsink.livejournal.com - 2007-08-03 22:19 (UTC) - Expand

(no subject)

[identity profile] os80.livejournal.com - 2007-08-03 13:49 (UTC) - Expand

[identity profile] goshen.livejournal.com 2007-08-02 08:35 pm (UTC)(link)
один стоит на месте, другой начинает бродить влево-вправо с экспоненциально увеличивающейся амплитудой.

[identity profile] ex-ex-zhuzh.livejournal.com 2007-08-02 08:37 pm (UTC)(link)
по условию они идентичны.

(no subject)

[identity profile] ded-maxim.livejournal.com - 2007-08-02 20:38 (UTC) - Expand

(no subject)

[personal profile] nine_k - 2007-08-02 20:40 (UTC) - Expand

(no subject)

[identity profile] ded-maxim.livejournal.com - 2007-08-02 20:44 (UTC) - Expand

(no subject)

[personal profile] nine_k - 2007-08-02 20:48 (UTC) - Expand

(no subject)

[identity profile] goshen.livejournal.com - 2007-08-02 21:07 (UTC) - Expand

(no subject)

[identity profile] goshen.livejournal.com - 2007-08-02 21:08 (UTC) - Expand

(no subject)

[identity profile] goshen.livejournal.com - 2007-08-02 20:37 (UTC) - Expand

(no subject)

[identity profile] ded-maxim.livejournal.com - 2007-08-02 20:37 (UTC) - Expand

(no subject)

[identity profile] goshen.livejournal.com - 2007-08-02 20:39 (UTC) - Expand

(no subject)

[identity profile] dpak0h.livejournal.com - 2007-08-03 10:36 (UTC) - Expand

[identity profile] selfmade.livejournal.com 2007-08-02 08:43 pm (UTC)(link)
Так что, парашут-то остаётся, или они в потьмах бродят?

[identity profile] ygam.livejournal.com 2007-08-02 08:58 pm (UTC)(link)
Я знаю эту задачу.

[identity profile] spamsink.livejournal.com 2007-08-02 10:44 pm (UTC)(link)
В каком варианте - с парашютом или с неодновременной высадкой?

[identity profile] arkanoid.livejournal.com 2007-08-02 08:59 pm (UTC)(link)
Очевидно что задача решается если по условию они высаживаются не строго одновременно.

[identity profile] itman.livejournal.com 2007-08-02 09:10 pm (UTC)(link)
Эта задача имеет несколько вариаций. Все зависит от того, какие ограничения на программу, и скорость передвижения.

[identity profile] opegs.livejournal.com 2007-08-02 09:14 pm (UTC)(link)
variant: programmy raznye, parashutov net ==
tochka na ploskosti dolzhna peresech prjamuju x=y,
t.e. hodit' archimedovoj spiralju.

[identity profile] birdwatcher.livejournal.com 2007-08-02 09:32 pm (UTC)(link)
Надо поставить в них батарейки разной емкости.

[identity profile] igorsereda.livejournal.com 2007-08-02 09:56 pm (UTC)(link)
Если это чисто математическая задачка, то очевидно что роботы с идентичной программой будут вести себя идентично, следовательно встретятся только если высадились в одной точке.

Если задачка практическая, то она сводится к разделению программ на первую и вторую за счет какого-то инпута/аутпута, типа оставления пахучих меток на прямой.

Случайные числа -- это тоже инпут. Если есть физический генератор случайных чисел, или скажем часы для сидинга генератора псевдослучайных чисел, то это существенное условие.

[identity profile] igorsereda.livejournal.com 2007-08-02 09:58 pm (UTC)(link)
Да, согласен с предыдущим оратором -- если они высаживаются не одновременно, тогда задача решается.

[identity profile] kot-ivanovich.livejournal.com 2007-08-03 12:16 am (UTC)(link)
For any given robot it's easy: it has some hardware, which has some UID (say, MAC address of a NIC), which can be used to initialize random numbers generator. Otherwise it's tough...

[identity profile] malaya-zemlya.livejournal.com 2007-08-03 01:09 am (UTC)(link)
You need an _infinite_ number of random bits for the solution to work at an arbitrarily large distance between robots. The 64 bits of MAC aren't enough.





[identity profile] jusio.livejournal.com 2007-08-03 04:57 am (UTC)(link)
Прикрутить к роботам GPS и узнать их координаты. Либо узнать координаты роботов относительно обьекта, координаты которого известны и плясать от этого. Либо связать их верёвкой (крепкой) и заставить вращаться каждого робота вокруг своей оси. Вариантов куча.

[identity profile] glocka.livejournal.com 2007-08-03 06:17 am (UTC)(link)
- На прямую высаживаются два робота с идентичной программой. Свои координаты они не знают. Как их запрограммировать так, чтобы они обязятельно встретились? Итак, ваша первая мысль - ...
- О пиве.

[identity profile] selfmade.livejournal.com 2007-08-03 06:18 am (UTC)(link)
Эх как народ разошёлся добавлять недостающее условие. Если у роботов отличаются только координаты высадки при прочих равных условиях, нет меток на маршруте, и входой параметр окружающей среды один - координаты, то они не встретятся. Если же добавлять условия, при которых алгоритмы выдадут разные последовательности команд, то задача тривиальна.

[identity profile] 109.livejournal.com 2007-08-03 08:14 am (UTC)(link)
и этот человек пенял на то, как я задачи формулирую.

задай ещё про самолёт на беговой дорожке.

(no subject)

[identity profile] 109.livejournal.com - 2007-08-04 18:28 (UTC) - Expand

(no subject)

[identity profile] piggymouse.livejournal.com - 2007-08-05 07:09 (UTC) - Expand

(no subject)

[identity profile] 109.livejournal.com - 2007-08-05 09:18 (UTC) - Expand

интервью

[identity profile] freedom_of_sea.livejournal.com 2007-08-03 08:17 am (UTC)(link)
если вам задали идиотскую задачу - важно не дать правильный ответ, а вслух умно рассуждать.

Re: интервью

[identity profile] ivan-gandhi.livejournal.com 2007-08-05 11:42 pm (UTC)(link)
Мне не очевидно было, что она идиотская. Идиотские вопросы бывают, например, такие: "какой ваш главный недостаток". Правда, на этот вопрос есть хороший ответ.

[identity profile] ex-chrobin.livejournal.com 2007-08-03 11:25 am (UTC)(link)
высадить их на прямую и выдать эту задачу

[identity profile] eslitak.livejournal.com 2007-08-03 07:31 pm (UTC)(link)
Поскольку конструкция роботов не оговорена, можно предлагать разные решения по взаимному опредению их в пространстве. Идея с GPS уже была, могу предложить ещё идеи с локатором, пеленгатором, приёмо-пердатчиком и т.п. Если же использовать исключительно "внутренние" свойства программы, то задача, думаю, неразрешима.

[identity profile] boriskogan.livejournal.com 2007-08-04 03:09 pm (UTC)(link)
Надо чтобы роботы передвигались по спирали, и чтобы первый робот который нашел след другого робота остановился и ждал. У меня не хватает математического словарного запаса чтобы обьяснить, но если они запрограмированны так что промежуток спирали равнялся ширине корпуса робота, второй робот набредет на первого. Или не так?

[identity profile] ivan-gandhi.livejournal.com 2007-08-05 05:54 pm (UTC)(link)
Если след оставлять... то да.

(no subject)

[identity profile] boriskogan.livejournal.com - 2007-08-05 19:43 (UTC) - Expand

(no subject)

[identity profile] ivan-gandhi.livejournal.com - 2007-08-05 23:43 (UTC) - Expand

(no subject)

[identity profile] boriskogan.livejournal.com - 2007-08-06 04:20 (UTC) - Expand

[identity profile] 109.livejournal.com 2007-08-04 06:33 pm (UTC)(link)
так что, могут они следы оставлять?

[identity profile] piggymouse.livejournal.com 2007-08-05 07:12 am (UTC)(link)
Дададад, в конце концов роботы обосрутся от огорчения, после чего задача станет тривиальной.

(no subject)

[identity profile] 109.livejournal.com - 2007-08-05 09:23 (UTC) - Expand

[identity profile] slonopotamus.livejournal.com 2007-08-05 08:26 am (UTC)(link)
Если с парашютами то знаю и даже решил :)

Робот №88

[identity profile] lev-shubnikov.livejournal.com 2007-08-10 09:17 am (UTC)(link)
Простите, читатели, глупость вчера про роботов написал.
Удалю, чтобы не позориться...

А 2 задачки Димы Тихонова оставлю :)
Задача 1: Состав вагонов стоит соединенный в круг на круговом пути. Есть мел, которым можно рисовать на вагонах, но они, возможно, уже изрисованы до нас. Наша задача сосчитать число вагонов.
Задача 2: Линейный список, возможно замкнутый на себя. Как узнать, замкнут он на себя, или имеет конец?

Re: Робот №88

[identity profile] furia-krucha.livejournal.com 2007-08-10 11:10 am (UTC)(link)
Задача 2: Линейный список, возможно замкнутый на себя. Как узнать, замкнут он на себя, или имеет конец?
Надо пустить по списку два бегунка, один из которых движется в два раза быстрее второго. Если список замкнут (даже не обязательно в кольцо, можно "с хвостиком") --- бегунки рано или поздно встретятся. Нечто вроде
(defun cyclic-p (list)
    (let ((slow list)
	  (fast (cdr list))
	  (odd nil))
      (while (not (eq fast slow))
        (set 'fast (cdr fast))
        (if odd (set 'slow (cdr slow)))
        (set 'odd (not odd)))
      slow))