Название: Симпатичная задачка Отправлено: Igors от Февраль 24, 2016, 13:35 Добрый день
Между пунктами A и B есть путь - рельсы по которым поезда могут ходить только в одну сторону. Т.е. напр 10 (или сколько угодно) поездов могут одновременно ехать из A в B, но движение в противоположную сторону может начаться только когда все они прибудут в B и путь освободится. Нужно написать симулятор такого движения поездов, учитывая при этом что какое-то время возможна перегрузка. Напр новые и новые поезда прибывают в A извне и теперь все время едут в B, путь занят и поезда из В в A придется ждать хз сколько долго. Эта ситуация должна разруливаться, как - Ваше дело [off] Не, наверное сложновато для детей ассыстентского подземелья... Ну посмотрим.. [/off] Название: Re: Симпатичная задачка Отправлено: ViTech от Февраль 24, 2016, 14:36 Решение тривиальное: если на пути нет встречного поезда, то поезд может выезжать из своего пункта. Если поезда прибывают в А извне и все время едут в В, то и пускай едут. А поезда в В пускай стоят, судьба у них такая. Это если исходить из текущей постановки задачи. И не понятно, какую тут ситуацию разруливать нужно. Но подозреваю, что скоро подтянутся дополнительные требования, типа обеспечить равномерное движение поездов, не допускать застаивания поездов в В и т.п.
Название: Re: Симпатичная задачка Отправлено: kambala от Февраль 24, 2016, 14:43 звучит как стандартная задача СМО
Название: Re: Симпатичная задачка Отправлено: qate от Февраль 24, 2016, 15:29 а почему на такой оживленной линии только одни рельсы ? )
Название: Re: Симпатичная задачка Отправлено: Racheengel от Февраль 24, 2016, 17:09 do{
while (!railway.isEmpty()) { B.trains.wait(); A.trains.go(); } B.trains.go(); while (!railway.isEmpty()) { A.trains.wait(); B.trains.go(); } } while (!raiway.isExploded()); Название: Re: Симпатичная задачка Отправлено: Old от Февраль 24, 2016, 17:18 Здесь смысл как раз в том, что бы разрулить непрерывный поток поездов из одной точки в другую. Через какое то время нужно приостановить этот поток, дождаться его завершения и запустить реверсное движение.
Название: Re: Симпатичная задачка Отправлено: Bepec от Февраль 24, 2016, 17:50 Если так посудить, то накапливание и последующий коллапс неостановим :) Ибо пропускная способность будет ниже нужной :)
Название: Re: Симпатичная задачка Отправлено: Racheengel от Февраль 24, 2016, 19:07 Здесь смысл как раз в том, что бы разрулить непрерывный поток поездов из одной точки в другую. Через какое то время нужно приостановить этот поток, дождаться его завершения и запустить реверсное движение. Дополнительно, если движение из А в В не закончилось, и в В еще не собралось ни одного поезда (чтоб ехать из В в А), то это время нужно будет продлить (чтоб путь зря не простаивал). Либо же забить на время и, как только появился поезд на ожидании в пункте назначения (В), прекращать движение из А в В, а как только все поезда приедут, пускать движение из В в А. И теперь ждать, пока не появится поезда в А. И т.д. Название: Re: Симпатичная задачка Отправлено: ViTech от Февраль 24, 2016, 19:25 Это уже домыслы пошли, про время, очереди, переполнения и так далее :). А если в пункт А/В прибудет литерный поезд, и надо его по пути вне очереди пропустить? ;) А если диверсанты рельсы подорвали, и надо ремонтную бригаду отправлять? К исходной постановке задачи теперь много всего интересного додумать можно :).
Название: Re: Симпатичная задачка Отправлено: Racheengel от Февраль 24, 2016, 19:49 А если в пункт А/В прибудет литерный поезд, и надо его по пути вне очереди пропустить? ;) Литерный - это с синей мигалкой? :) Будет стоять, пока дорога не освободится. А то ишь, без очереди как всем хочется :) А если диверсанты рельсы подорвали, и надо ремонтную бригаду отправлять? А это я уже предусмотрел :) while (!raiway.isExploded()); Название: Re: Симпатичная задачка Отправлено: Igors от Февраль 25, 2016, 04:53 Ну давайте начнем писать симулятор
Код И запускаем напр 50 таких ниток. И вот они должны ходить и не пересекаться. Можно заводить любые переменные и примитивы синхронизации. Ну вот, осталось только написать RunTrain :) Решение тривиальное: если на пути нет встречного поезда, то поезд может выезжать из своего пункта. Если поезда прибывают в А извне и все время едут в В, то и пускай едут. А поезда в В пускай стоят, судьба у них такая. Это если исходить из текущей постановки задачи. Ну если "тривиальное" - милости просим с реализацией :)И не понятно, какую тут ситуацию разруливать нужно. Вот эту самуюучитывая при этом что какое-то время возможна перегрузка. Напр новые и новые поезда прибывают в A извне и теперь все время едут в B, путь занят и поезда из В в A придется ждать хз сколько долго. Здесь смысл как раз в том, что бы разрулить непрерывный поток поездов из одной точки в другую. Через какое то время нужно приостановить этот поток, дождаться его завершения и запустить реверсное движение. Да, совершенно верно. Только точнее "в какой-то момент" или "при каких-то условиях". Через какое-то время можно понять как "раз в час" Название: Re: Симпатичная задачка Отправлено: Igors от Февраль 26, 2016, 07:12 Ну вот, я так и знал - пошумели маленько, и тишина... Готовых классов нет - и сразу приплыли :)
Ладно, чуть копнем. На первый взгляд может показаться что "если поезда прибывают чаще чем успевают пройти" - то через некоторое время крах системы неизбежен, не хватает пропускной способности. В действительности это не так - ведь N поездов (в одном напр-и) проходят за то же время что и один. Название: Re: Симпатичная задачка Отправлено: Авварон от Февраль 26, 2016, 13:01 Как же ты заебал с "готовыми классами"
Название: Re: Симпатичная задачка Отправлено: Old от Февраль 26, 2016, 13:24 Как же ты заебал с "готовыми классами" Не мешайте человеку тешить свое самолюбие. Он для этого такие темы и создает - "по-финдреплейсить". :)Вы ему лучше предложите сделать что-то посложней (хотя-бы со строками поработать без QString) - спесь (как и человек) тут-же исчезнут из темы. :) Название: Re: Симпатичная задачка Отправлено: Авварон от Февраль 26, 2016, 13:33 Не мешайте человеку тешить свое самолюбие. Он для этого такие темы и создает - "по-финдреплейсить". :) Вы ему лучше предложите сделать что-то посложней (хотя-бы со строками поработать без QString) - спесь (как и человек) тут-же исчезнут из темы. :) К сожалению, мне не платят за придумывание псевдоакадемических задачек:) А те, что решаются с "готовыми классами" по работе плохо абстрагируются для форума. Название: Re: Симпатичная задачка Отправлено: Igors от Февраль 26, 2016, 14:46 Как же ты заебал с "готовыми классами" Не мешайте человеку тешить свое самолюбие. Ну и чего бьемся в бессильной злобе? :) Неужели у таких "сеньоров" трудности со студенческой лабой? Не может быть, ведь они знают так много классов :)Название: Re: Симпатичная задачка Отправлено: Old от Февраль 26, 2016, 14:52 Неужели у таких "сеньоров" трудности со студенческой лабой? У нас нет. А у вас? :)Не может быть, ведь они знают так много классов :) Зависть плохое чувство. :)Название: Re: Симпатичная задачка Отправлено: Авварон от Февраль 26, 2016, 17:00 Неужели у таких "сеньоров" трудности со студенческой лабой? Даже не читал. Если у меня появится свободное время, я пойду займусь своим проектом. Или на гитаре поиграю. |