Loading collection data...
Collections are a way for you to organize kata so that you can create your own training routines. Every collection you create is public and automatically sharable with other warriors. After you have added a few kata to a collection you and others can train on the kata contained within the collection.
Get started now by creating a new collection.
fuck me this is sick
Very pretty. Great application of "set"
Теперь дошло. Только не "вправо", а "влево" должно быть, раз индекс уменьшается на 1, да?
Я так понял, на 1-м проходе однозначно определеляется минимум при заходе сверху или слева, а на 2-м - ещё и при заходе снизу или справа, то есть уже при всех возможных случаях. Спасибо, надеюсь, пригодится этот алгоритм!
При проходе вперед заполняем результат по наименьшему значению расстояний вверх и вправо - относительно текущей клетки:
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]});
Как так происходит, что при обратном проходе получаются верные значения? По идее, для этого нужно знать, что в соседних клетках точно определены значения - если идти от границы объекта внутрь, сужая кольцо поиска, так и будет. А здесь всего лишь проход по рядам, и он работает правильно! Вот мне и интересно, почему. Мне понятно, что для ближайших к верхней и нижней границам клеток это работает, а вот для средних... неясно.
что именно не понятно?
На русском говорю.
Do you speak Russian? I barely speak English.
Could you explain why this works, please?
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 :)
My brain just exploded reading this