Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 41 по 60 из 86

Тема: Помогите понять задачку в блок схеме за 9 класс. Спор с мамой, она считает я не прав.

  1. #41
    Я буду выражатся наиболее популярным языком будющего

    // Сразу выключаем свет в предидущем вагоне (для простоты пока )
    current.prev.isOn = false

    // Вот функция для решения
    function solve(x,y){

    // идём в следующий вагон
    const next = x.next

    // проверяем включён ли в нём свет
    if(next.isOn){

    // если включён, то идём в следующем вагон и запомним что для того чтобы вернутся назад нужно пройти ещё один вагон и как бы вызваем эту функцию снова
    return solve(next.next,y+1)
    } else {

    // если выключен, то возвращаемся на столько вагонов назад, сколько мы прошли до этого и проверяем включён ли он
    if(vagon(-y-1).isOn === false) {

    // если он выключен, то снова как бы вызываем эту функцию, только последний вагон теперь начальный, а текущий - последний (ну мы типа начали идти с конца ) и при этом включаем там свет
    vagon(-y-1).isOn = true
    solve(vagon(-y).prev, y)

    // если он включён, то поздравляем себя и испытываем чувство гордости - мы везде включили свет и количство вагонов которое мы прошли является длиной этого рекурсивного поезда
    } else {return y}
    }
    }

    const result = solve(vagon(0),0)

    если кто-то будет выключать свет, то мы можем просто включать его по пути пока идём до конца, это не влияет тут не на что
    5.11.17

  2. #42
    Активный участник
    Регистрация
    17.05.2010
    Сообщений
    1,220
    Цитата Сообщение от Revvy Посмотреть сообщение
    да это понятно, только когда ты пройдёшь все вагоны то получится так ты ещё до возвращения на это самое количество вагонов один раз круг уже прошёл и получится так что в первом вагоне когда ты его увидишь свет будет включён, но ты не будешь знать что это первый вагон, а потом пойдёшь круг обратно, и тут вопрос если триггер срабатывает не один раз и не только на включение то когда ты вернёшься в первый вагон он всё равно будет выключен если же он срабатывает одноразово, то тогда да, это решение :frog:
    Ты делаешь моему мозгу больно. мне трудно понять твой текст.

  3. #43
    забанен навсегда Аватар для Konstantin.V
    Регистрация
    16.02.2014
    Сообщений
    0
    Цитата Сообщение от Hibonicus Посмотреть сообщение
    return solve(next.next,y+1)
    Так ты ограничишь длину возможного состава размером стека, причем, на ровном месте

    Цитата Сообщение от Hibonicus Посмотреть сообщение
    if(vagon(-y-1).isOn === false) {
    Если вагоны можно индексировать, задача во многом теряет смысл, не так ли

  4. #44
    Цитата Сообщение от Konstantin.V Посмотреть сообщение
    Если вагоны можно индексировать, задача во многом теряет смысл, не так ли
    Мы не индексируем, мы просто считаем количество которое нужно пройти
    а vagon(-y-1) это просто я как бы координаты так написал для простоты ну типо нужно пройти у+1 вагонов назад
    Цитата Сообщение от Konstantin.V Посмотреть сообщение
    Так ты ограничишь длину возможного состава размером стека, причем, на ровном месте
    Ващето из-за хвостовой рекурсии ограничения стека не будет
    5.11.17

  5. #45
    Новобранец
    Регистрация
    08.11.2010
    Сообщений
    54
    Цитата Сообщение от Funyoka Посмотреть сообщение
    Ты делаешь моему мозгу больно. мне трудно понять твой текст.
    круг проходится 2 раза, первый раз когда ты идёшь вперёд и второй раз когда идёшь обратно чтобы проверить включился ли свет в первом вагоне, если свет в первом вагоне переключается при проходе полного круга то сколько ты не возвращайся он всегда будет выключен в первом вагоне, если переключение срабатывает только один раз, тогда да, так можно найти вагоны.

  6. #46
    забанен навсегда Аватар для Konstantin.V
    Регистрация
    16.02.2014
    Сообщений
    0
    Цитата Сообщение от Hibonicus Посмотреть сообщение
    Мы не индексируем, мы просто считаем количество которое нужно пройти
    а vagon(-y-1) это просто я как бы координаты так написал для простоты ну типо нужно пройти у+1 вагонов назад
    Oops, пардон, я поленился разобраться до конца в том, что ты пишешь, перед тем, как комментировать. Но тогда vagon нужен еще параметр -- относительно чего ходим

    И вот здесь:

    Цитата Сообщение от Hibonicus Посмотреть сообщение
    if(vagon(-y-1).isOn === false) {

    // если он выключен, то снова как бы вызываем эту функцию, только последний вагон теперь начальный, а текущий - последний (ну мы типа начали идти с конца ) и при этом включаем там свет
    vagon(-y-1).isOn = true
    solve(vagon(-y).prev, y)
    Ты точно с индексами не намудрил? Зачем нам специально включать свет в самом первом вагоне?

    Цитата Сообщение от Hibonicus Посмотреть сообщение
    Ващето из-за хвостовой рекурсии ограничения стека не будет
    А вот здесь молодец. Аргумент, конечно, не железобетонный, но я, например, про такие приколы сейчас не вспомнил. Стыдно
    Последний раз редактировалось Konstantin.V; 13.02.2016 в 18:33.

  7. #47
    Цитата Сообщение от Konstantin.V Посмотреть сообщение
    Ты точно с индексами не намудрил? Зачем нам специально включать свет в самом первом вагоне?
    Для простоты объясненения, на самом деле это конечно не обязательно Ну и если во всех вагонах свет изначально включён, то всё сломается
    Цитата Сообщение от Konstantin.V Посмотреть сообщение
    Но тогда vagon нужен еще параметр -- относительно чего ходим
    Ну да, но тогда уж не относительно чего ходим, а направлиние, т.е. при разворотах .next меняется на .prev и наоборот
    5.11.17

  8. #48
    забанен навсегда Аватар для Konstantin.V
    Регистрация
    16.02.2014
    Сообщений
    0
    Hibonicus, Не, что-то мне всё равно не нравится. Почему у тебя и под if и в присвоении стоят одинаковые индесы: -y-1

    - - - Добавлено - - -

    Цитата Сообщение от Hibonicus Посмотреть сообщение
    тогда уж не относительно чего ходим, а направлиние
    В смысле? А наша текущая точка? Глобальная переменная? Зачем тогда первый параметр в solve?
    Последний раз редактировалось Konstantin.V; 13.02.2016 в 18:37.

  9. #49
    Цитата Сообщение от Konstantin.V Посмотреть сообщение
    Hibonicus, Не, что-то мне всё равно не нравится. Почему у тебя и под if и в присвоении стоят одинаковые индесы: -y-1
    Ну vagon это как состояние же я имел ввиду что нужно пройти назад y-1 шагов и посмотреть, включён ли он там, если включён, то мы закончили, если выключен, то мы разворачиваемся и идём в обратную сторону
    5.11.17

  10. #50
    забанен навсегда Аватар для Konstantin.V
    Регистрация
    16.02.2014
    Сообщений
    0
    Цитата Сообщение от Hibonicus Посмотреть сообщение
    Ну vagon это как состояние же я имел ввиду что нужно пройти назад y-1 шагов и посмотреть, включён ли он там, если включён, то мы закончили, если выключен, то мы разворачиваемся и идём в обратную сторону
    Вот тут конкретно что происходит, можешь объяснить?

    if(vagon(-y-1).isOn === false) {
    vagon(-y-1).isOn = true

  11. #51
    Освоившийся
    Регистрация
    17.05.2010
    Сообщений
    241
    Цитата Сообщение от Konstantin.V Посмотреть сообщение
    Зря сомневаешься. Можно улучшить
    Ну кстати я могу попробовать за O(n*log(n)).
    Сначала идём на 1 вагон влево включаем свет, возвращаемся проверяем, потом на 2, везде включаем, возвращаемся проверяем, потом на 4, везде включаем, возвращаемся, проверяем, потом на 8, везде включаем, возвращаемся проверяем и так далее. Через O(n) операций мы обнаружим, что свет в первом вагоне включен, и мы знаем, что на последнем шаге мы включали свет в k вагонах, где n/2 <= k <= n. То есть теперь нам нужно найти один из k вагонов, и после каждой операции нужно возвращаться назад максимум на n+k вагонов, чтобы проверять, горит ли свет в первом. Двоичный поиск вроде подходит. То есть пробегаемся по всем k вагонам, в половине зажигаем свет, в половине гасим. Возвращаемся назад, смотрим, в какой из половин находится первый вагон, эту половину также разбиваем пополам и так далее. На пробегание по k элементам тратим O(n), на возвращение тратим O(n), количество таких итераций O(log(n)), плюс первые O(n), в итоге получаем O(n)+[O(n)+O(n)]*O(log(n))=O(n*log(n)).
    Последний раз редактировалось A_K; 13.02.2016 в 18:43.

    Содержание комментария может не совпадать с позицией автора.

  12. #52
    забанен навсегда Аватар для Konstantin.V
    Регистрация
    16.02.2014
    Сообщений
    0
    Цитата Сообщение от A_K Посмотреть сообщение
    O(n*log(n))
    Умница!

  13. #53
    Цитата Сообщение от Konstantin.V Посмотреть сообщение
    В смысле? А наша текущая точка? Глобальная переменная? Зачем тогда первый параметр в solve?
    ну считай что вместо vagon(x) должно быть
    for (let i =0; i!==x; i++){
    current = current.prev
    }
    5.11.17

  14. #54
    Новичок
    Регистрация
    18.05.2014
    Сообщений
    0
    Цитата Сообщение от Hibonicus Посмотреть сообщение
    Ну vagon это как состояние же я имел ввиду что нужно пройти назад y-1 шагов и посмотреть, включён ли он там, если включён, то мы закончили, если выключен, то мы разворачиваемся и идём в обратную сторону
    Не ломай голову в реальности такой задачи не будет, а что-то похожее ты сможешь решить проще.

  15. #55
    забанен навсегда Аватар для Konstantin.V
    Регистрация
    16.02.2014
    Сообщений
    0
    Цитата Сообщение от A_K Посмотреть сообщение
    O(n*log(n))
    Я бы даже сказал... Умница!!!
    Последний раз редактировалось Konstantin.V; 13.02.2016 в 18:48.

  16. #56
    А ваще самый простой вариант это просто напахомить в первом вагоне
    5.11.17

  17. #57
    забанен навсегда Аватар для Konstantin.V
    Регистрация
    16.02.2014
    Сообщений
    0
    Цитата Сообщение от Hibonicus Посмотреть сообщение
    ну считай что вместо vagon(x) должно быть
    for (let i =0; i!==x; i++){
    current = current.prev
    }
    OK. Т.е. current таки глобальная переменная? А что тогда такое х?

    - - - Добавлено - - -

    То, которое
    solve(x

  18. #58
    Активный участник
    Регистрация
    17.05.2010
    Сообщений
    1,220
    Цитата Сообщение от Revvy Посмотреть сообщение
    круг проходится 2 раза, первый раз когда ты идёшь вперёд и второй раз когда идёшь обратно чтобы проверить включился ли свет в первом вагоне, если свет в первом вагоне переключается при проходе полного круга то сколько ты не возвращайся он всегда будет выключен в первом вагоне, если переключение срабатывает только один раз, тогда да, так можно найти вагоны.
    Я не понимаю, что ты хочешь мне сказать.
    Мы отсчитываем каждый раз сколько вагонов прошли и запоминаем каждый раз это число.
    Да один круг сначала мы пройдем в одну сторону, потом вернемся. Увидим, что свет в вагоне изменился, значит мы сделали круг. Всё, задача решена.

  19. #59
    Konstantin.V,
    Я имел ввиду
    function vagon(current, x){
    for (let i =0; i!==y; i++){
    current = current.prev
    }
    }
    и внутри той штуки
    vagon(x,y+1)
    5.11.17

  20. #60
    Освоившийся Аватар для Kawaii Worm
    Регистрация
    17.05.2010
    Сообщений
    130
    Вы все думаете не о том - почему у него мама подписана как Марина и с какой радости мама - взрослый человек закусилась с сыном из-за такой фигни.

    На основе вышеприведенных условий можем сделать 2 вывода:

    Мама - не мама
    Мама девочку хотела

    Нужно больше данных для продолжения

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Помогите понять работу кода
    от Спалланцани в разделе Софт
    Ответов: 29
    Последнее сообщение: 16.08.2017, 15:15
  2. Помогите выбрать системный блок !!!
    от Merew в разделе Железо
    Ответов: 15
    Последнее сообщение: 10.10.2013, 20:39
  3. Помогите собрать системный блок
    от cks в разделе Железо
    Ответов: 15
    Последнее сообщение: 15.07.2012, 10:24
  4. Помогите понять PvZ!
    от boogie в разделе Протоссы
    Ответов: 36
    Последнее сообщение: 23.12.2011, 18:08
  5. Помогите понять смысл анекдота >___<
    от Hells012 в разделе Юмор
    Ответов: 31
    Последнее сообщение: 14.05.2011, 18:10

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •