Ad
  • Default User Avatar
  • Default User Avatar

    Very pretty. Great application of "set"

  • Default User Avatar

    Теперь дошло. Только не "вправо", а "влево" должно быть, раз индекс уменьшается на 1, да?
    Я так понял, на 1-м проходе однозначно определеляется минимум при заходе сверху или слева, а на 2-м - ещё и при заходе снизу или справа, то есть уже при всех возможных случаях. Спасибо, надеюсь, пригодится этот алгоритм!

  • Default User Avatar

    При проходе вперед заполняем результат по наименьшему значению расстояний вверх и вправо - относительно текущей клетки:
    res[it] += std::min(res[it - 1], res[it - width]);
    а при проходе назад расстояния вверх и вправо уже есть, поэтому вычисляется наименьшее среди всех направлений:
    res[it] += std::min({res[it - 1], res[it - width], res[it + 1], res[it + width]});

  • Default User Avatar

    Как так происходит, что при обратном проходе получаются верные значения? По идее, для этого нужно знать, что в соседних клетках точно определены значения - если идти от границы объекта внутрь, сужая кольцо поиска, так и будет. А здесь всего лишь проход по рядам, и он работает правильно! Вот мне и интересно, почему. Мне понятно, что для ближайших к верхней и нижней границам клеток это работает, а вот для средних... неясно.

  • Default User Avatar

    что именно не понятно?

  • Default User Avatar

    На русском говорю.

  • Default User Avatar

    Do you speak Russian? I barely speak English.

  • Default User Avatar

    Could you explain why this works, please?

  • Custom User Avatar

    Very nice solution but wrong. It shouldn't pass tests for placements like this (4x0, 3x3, 2x2, 1x4):
    Assert::That(validate_battlefield(vector< vector > {
    vector {1, 0, 0, 0, 0, 1, 1, 0, 0, 0},
    vector {1, 0, 0, 0, 0, 0, 0, 0, 1, 0},
    vector {1, 0, 0, 0, 1, 1, 1, 0, 1, 0},
    vector {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    vector {0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
    vector {1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
    vector {0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
    vector {0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
    vector {0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
    vector {1, 1, 1, 0, 0, 0, 0, 0, 0, 0}
    }), Equals(false));
    There are not enought tests for this kata :)

  • Default User Avatar

    My brain just exploded reading this