Задачка

vott.ru — в первом комменте
Новости, Разное | Utgart 15:03 15.09.2014
74 комментария | 52 за, 1 против |
#1 | 15:03 15.09.2014 | Кому: Всем
Вы находитесь в пустом поезде. Это даже не поезд, а просто вагоны, они сцеплены друг с другом. Все вагоны внутри одинаковы, двери на выход из вагона закрыты, через окна ничего не видно. Вы можете включать и выключать свет в вагоне в котором находитесь, можете сходить в соседний вагон, там тоже можно включать или выключать свет. Вам известно, что вагоны стоят на кольце и сами сцеплены в кольцо, первый вагон сцеплен с последним, ходить по кругу можно сколько угодно. В момент начала решения задачи в каких-то вагонах свет уже горит, в каких-то — не горит.

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

В вагонах ничего отставлять нельзя.. не знаю почему. просто нельзя)

Ваша задача при помощи управления светом в вагонах и перемещения по ним узнать сколько в этом кольце вагонов.
#2 | 15:08 15.09.2014 | Кому: Всем
Все выключить. Включить одну.
#3 | 15:08 15.09.2014 | Кому: hoboton
> Все выключить. Включить одну.

как ты узнаешь, что выключил всё? Ведь это задачка абстрактная, может тебе встретится 500+ вагонов подряд без света :)
#4 | 15:09 15.09.2014 | Кому: Всем
глупая задачка. нужно сначала сделать круг и добиться чтобы свет был включен через вагон. потом сделать второй круг и выключать(или включать) за собой свет. так и посчитаешь.
#5 | 15:09 15.09.2014 | Кому: Всем
включить свет во всех вагонах, а затем перемещаясь по вагонам - выключать.
#6 | 15:10 15.09.2014 | Кому: tazuja
никак не узнать, когда все наступят ;)
#7 | 15:11 15.09.2014 | Кому: tazuja
так можешь ошибиться на вагон
#8 | 15:11 15.09.2014 | Кому: Всем
необходимо еще одно условие - границы количества вагонов (от 20 до 30 например), ибо если вагонов сильно много или мало, то не получится обеспечить базу для решения задачи (включение/выключение света в определенной последовательности.)
#9 | 15:11 15.09.2014 | Кому: честный
> необходимо еще одно условие - границы количества вагонов (от 20 до 30 например), ибо если вагонов сильно много или мало, то не получится базу для решения задачи (включение/выключение света в определенной последовательности.)

условий достаточно ;)
#10 | 15:12 15.09.2014 | Кому: tazuja
> включить свет во всех вагонах, а затем перемещаясь по вагонам - выключать.

А как узнать, что свет включен во ВСЕХ вагонах?
#11 | 15:12 15.09.2014 | Кому: Utgart
да ответил я ужо епт
#12 | 15:13 15.09.2014 | Кому: Всем
Включаем одну.
Идем вперед, считая вагоны, пока не встретим включенную (в N-ном вагоне).
Выключаем ее и возвращаемся назад в первый вагон.
Если в первом вагоне лампочка не горит - значит, длина состава N-1. Если все равно горит - снова идем вперед, считая вагоны.
#13 | 15:13 15.09.2014 | Кому: abrvalg
> да ответил я ужо епт

задачка абстрактная. Вагонов может быть тыща. И в них быть сотня подряд со включённым светом. Как ты узнаешь, что круг твой замкнулся?
#14 | 15:13 15.09.2014 | Кому: Белый Клык
> Включаем одну.
> Идем вперед, считая вагоны, пока не встретим включенную (в N-ном вагоне).
> Выключаем ее и возвращаемся назад в первый вагон.
> Если в первом вагоне лампочка не горит - значит, длина состава N-1. Если все равно горит - снова идем вперед, считая вагоны.

бинго :)
#15 | 15:14 15.09.2014 | Кому: Utgart
не достаточно.

ибо вагонов может быть миллион, или вообще два. в условиях это не прописано.

и если не знать пределы количества вагонов, то не сможешь создать уникальную последовательность включенного и выключенного света в вагонах.
#16 | 15:14 15.09.2014 | Кому: честный
[censored]
#17 | 15:15 15.09.2014 | Кому: Utgart
> никак не узнать, когда все наступят ;)

даже если количество вагонов довольно большое, нас не ограничивают во времени. соответственно, идя по вагонам бесконечное количество времени - мы включим свет во всех вагонах.
#18 | 15:15 15.09.2014 | Кому: Всем
Включаем свет в вагоне, где находимся и идем в заранее выбранном направлении, запоминая пройденное количество вагонов, когда встречаем вагон с включенным светом, выключаем там свет, возвращаемся на пройденное количество вагонов (в изначальный вагон) и смотрим, горит ли там свет, если горит, значит идем еще раз, на этот раз дальше, если погас, значит то кол-во вагонов, которое мы прошли обратно (или туда) и будет искомым.

Сигналом того, что мы сделали полный круг будет изменение положения выключателя в начальном вагоне, когда мы туда вернемся, идя назад.
#19 | 15:16 15.09.2014 | Кому: Всем
Идти по вагонам, включая и выключая свет, создавая из лампочек некую конкретную сигнатуру. Когда она полностью повторится - кольцо пройдено. Как-то так.
#20 | 15:16 15.09.2014 | Кому: Utgart
тыща так тыща. не бесконечность же?

а то что она асрактная предупреждать надо.
pks_ru
шутник »
#21 | 15:18 15.09.2014 | Кому: Всем
Если мы можем включать лампочки - то и вагонное радио доступно! Связаться с начальником поезда.

Включить свет. Идти на n вагонов в одну сторону выключая свет, потом в другую на столько же. Пока не встретим свет снова.
#22 | 15:20 15.09.2014 | Кому: Utgart
я мыслю слишком сложно.
#23 | 15:21 15.09.2014 | Кому: korvackx
> Идти по вагонам, включая и выключая свет, создавая из лампочек некую конкретную сигнатуру. Когда она полностью повторится - кольцо пройдено. Как-то так.

Случайно выбранная сигнатура уже может присутствовать на момент начала задания и даже может повторятся энное число раз.
#24 | 15:23 15.09.2014 | Кому: Белый Клык
да, я механизм "развернуться и пойти назад" не додумался использовать.
#25 | 15:30 15.09.2014 | Кому: Utgart
1) Идем по вагонам, записывая ситуацию (0 - темно, 1 - светло) до тех пор, пока не получим первый цикл (2к вагонов, первый отрезок длины к совпадает во вторым).
2) Возвращаемся в первый вагон и выключаем свет в первых к вагонах.
3) Идем дальше и если оказывается, что первый светлый вагон во втором отрезке погашен, значит вагонов всего к.
4) Если оказывается, что во втором отрезке вагоны освещены также, как и до выключения первого отрезка, возвращаемся в первый вагон и переходим к п 1).
#26 | 15:36 15.09.2014 | Кому: Всем
кто помнит срач на тему "сломают ли канарейки ось"?
#27 | 15:37 15.09.2014 | Кому: Семен
Прямо автокорелляция какая-то..
#28 | 15:39 15.09.2014 | Кому: Всем
Включаем в соседнем вагоне в направлении А свет. Бежим в направлении Б до вагона со светом, считая количество вагонов. Выключаем. Бежим в направлении А и проверяем не выключен ли свет. Если выключен, дано кол-во вагонов. Если нет бежим в направлении Б выключаем первый попавшийся, и считаем до следующего включенного. Цикл повторяется.
#29 | 15:39 15.09.2014 | Кому: господин ПЖ
А как по-другому, если число вагонов не ограниченно сверху? Если внутри цепи вложенных циклов нет, сразу выйдем на ответ.
И зацикливание невозможно, если число вагонов конечно.
#30 | 15:41 15.09.2014 | Кому: foton
В моем методе меньше беготни :)
#31 | 15:44 15.09.2014 | Кому: Всем
идём по вагонам и оставляем включеный свет через 1, 2...n вагонов пока не начнут попадаться вагоны с включеным светом через 1,2..n вагонов.
#32 | 15:47 15.09.2014 | Кому: Заключенный перат
> идём по вагонам и оставляем включеный свет через 1, 2...n вагонов пока не начнут попадаться вагоны с включеным светом через 1,2..n вагонов.

Так могло быть изначально. То есть Вы не зациклились, как Вам кажется, а просто попали н такой участок. И заранее предсказать, какие могут быть участки, невозможно.
#33 | 15:49 15.09.2014 | Кому: Семен
> Так могло быть изначально. То есть Вы не зациклились, как Вам кажется, а просто попали н такой участок. И заранее предсказать, какие могут быть участки, невозможно.

Провернуть тоже самое в обратном порядке.
#34 | 15:51 15.09.2014 | Кому: shadoff74
> Случайно выбранная сигнатура уже может присутствовать на момент начала задания и даже может повторятся энное число раз.

Это понятно. Но все равно не верится, что невозможен алгоритм эффективней предложенного "пуш-пульного" тык-мыканья.
#35 | 15:53 15.09.2014 | Кому: korvackx
Белый Клык предложил единственный способ который на 100% позволяет узнать включал ты свет или нет. В условии количество вагонов любое, т.е. стремящееся к бесконечности, а следовательно может встретиться любая комбинация включено\выключено которую пассажир попытается оставить в кач-ве "метки".
akold42
дурачок »
#36 | 15:56 15.09.2014 | Кому: Всем
Если это вагоны электропоезда, то номера вагонов написаны над дверьми. если нет, берём кусок угля в котловой и вперёд подписывать тамбура.
#37 | 15:56 15.09.2014 | Кому: Всем
А если в "кольце" 2 (два) вагона (ну, вот пространство такое искривлённое)?????

Ваше N не может быть <1 значит вы никогда не поймёте сколько их!!!
#38 | 15:57 15.09.2014 | Кому: Всем
Надо вставить гвоздь в розетку!!!
#39 | 16:01 15.09.2014 | Кому: Всем
[вспоминает коллективное зависание контингента в библиотеке КонтрАдмирала]
#40 | 16:04 15.09.2014 | Кому: боцман
> Это понятно. Но все равно не верится, что невозможен алгоритм эффективней предложенного "пуш-пульного" тык-мыканья.

У него 100% гарантия результата. При этом используется всего один счетчик, значение которого в конце будет являться ответом на заданную задачу. Другие предложенные тут варианты не дают стопроцентной гарантии и предполагают наличие массивов с мусорными данными, которые в результате будут выброшены. Размеры массивов при этом не определены и могут бесконтрольно увеличиваться в размерах - это зло в чистом виде, пусть лучше процессор маслает проходы туда-сюда, он кремниевый, че ему будет.

Есть вопрос по поводу того, как будет эффективнее, ходить все время в одну сторону или при встрече вагона с включенным светом возвращаться и от нулевого идти в противоположную сторону. Вообще эффективность этих двух алгоритмов можно сравнить умными математическими методами и уйдет на это примерно один-два тетрадных листа, но я уже забыл как это делать.
#41 | 16:10 15.09.2014 | Кому: shadoff74
> У него 100% гарантия результата.

У сортировки пузырьком тоже 100% гарантия результата, что не мешает ей быть самым дерьмовым способом сортировки.

>Другие предложенные варианты тут не дают стопроцентной гарантии


Это очевидно. Но ключевые слова "предложенные тут". Отсюда никак не следует, что более эффективных вариантов не существует в природе.
#42 | 16:17 15.09.2014 | Кому: боцман
> > У него 100% гарантия результата.
>
> У сортировки пузырьком тоже 100% гарантия результата, что не мешает ей быть самым дерьмовым вариантом сортировки.

Так точно. Помню была даже у нас специальная лекция, где мы рассчитывали затраты времени на тот или иной алгоритм сортировки. Хотя не, вру, уже не помню :)

> >Другие предложенные варианты тут не дают стопроцентной гарантии

>
> Это очевидно. Но ключевые слова "предложенные тут". Отсюда никак не следует, что более эффективных вариантов не существует в природе.

Ну головастые люди постоянно что-то придумывают для оптимизации различных алгоритмов. А говнокодеры потом все равно используют пузырьковые алгоритмы сортировки!!! Думать лень, от этого голова болит, а процессор кремниевый, пусть маслает, че ему будет!!!!
#43 | 16:30 15.09.2014 | Кому: Всем
удостоверяемся что в текущем -1 вагоне свет выключен, и идем в сторону + включая свет и считая вагоны, каждый раз
при включении света добавляем к счетчику число пройденных вагонов после последнего включения.
По кругу конечно можно ходить бесконечно но вагоны будут посчитаны.
#44 | 16:34 15.09.2014 | Кому: боцман
> >Другие предложенные варианты тут не дают стопроцентной гарантии
>
> Это очевидно. Но ключевые слова "предложенные тут". Отсюда никак не следует, что более эффективных вариантов не существует в природе.

Простите, возможно я что-то упустиk, если общество так легко согласилось с тем, что "другие предложенные тут варианты не дают стопроцентной гарантии".
Был бs весьма признателен товарищам за описание ситуации, в которой не работает метод, предложенный в посте #25/
#45 | 16:39 15.09.2014 | Кому: Семен
> Был бs весьма признателен товарищам за описание ситуации, в которой не работает метод, предложенный в посте #25/

если вагонов 2
#46 | 16:39 15.09.2014 | Кому: Семен
> Простите, возможно я что-то упустиk, если общество так легко согласилось с тем, что "другие предложенные тут варианты не дают стопроцентной гарантии".
> Был бs весьма признателен товарищам за описание ситуации, в которой не работает метод, предложенный в посте #25/

Он работает, но предполагает хранение массива данных неизвестного размера, который будет бесконтрольно увеличиваться. Если бы в условиях задачи стояло требование после подсчета вагонов вернуть взад состояние всех лампочек, он был бы бесспорно рабочим. А так он экономит процессорное время и жрет память. Как бы не праздный вопрос что нам нужнее процессорное время или память.
#47 | 16:42 15.09.2014 | Кому: Yashka
> если вагонов 2

Два резиновых вагона состыкованных друг с другом обоими концами!!!
#48 | 16:42 15.09.2014 | Кому: shadoff74
> Как бы не праздный вопрос что нам нужнее процессорное время или память.

Он не праздный, он диалектический.
Но, вы правы.
#49 | 16:44 15.09.2014 | Кому: Yashka
И что?
Если Вагонов два, то:
1) если они оба горят, или оба выключены, то получается внутренний цикл, который к решению не приводит, и мы идём дальше
2) если их состояние разное, то решение за один проход.
#50 | 16:46 15.09.2014 | Кому: shadoff74
> Два резиновых вагона состыкованных друг с другом обоими концами!!!

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