Вы должны написать программу или функцию, которая с N
помощью N
одинаково разнесенной квадратной сетки и сплошного вписанного круга выводит или возвращает количество квадратов сетки, которые частично или полностью перекрываются сплошным кругом.
Наложения 0 (то есть когда круг касается только линии) не учитываются. (Эти совпадения происходят, например, в N = 10
.)
пример
N = 8 (64 squares), Slices = 60
вход
- Целое число
N > 0
. (Сетка будет иметьN * N
квадраты.)
Выход
- Целое число, количество сплошных круговых срезов.
Примеры
(пары ввода-вывода)
Inputs: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Outputs: 1 4 9 16 25 36 45 60 77 88 109 132 149 172 201
Это код-гольф, поэтому выигрывает самый короткий вход.
N^2
.Ответы:
Пиф,
2726Попробуйте онлайн: Pyth Compiler / Executor
Я использую
2Nx2N
сетку и считаю перекрытие2x2
квадраты. Это немного короче, так как я уже знаю радиусN
.И на самом деле я не считаю перекрывающиеся квадраты. Я считаю непересекающиеся квадраты второго квадранта, умножаю число на 4 и вычитаю результат из
N*N
.Объяснение для 27 решения:
Объяснение для 26 решения:
Я заметил, что я использую координаты только один раз и сразу же вычти координаты из
Q
. Почему бы просто не генерировать значенияQ - coords
напрямую?Это происходит в
%2_UtQ
. Только один символ больше, чем в предыдущем решении, и сохраняет 2 символа, потому что мне не нужно вычитать-Q
.источник
Python 2, 72
Ungolfed:
Сетка указывает на
(n+1)*(n+1)
квадрат. Ячейка перекрывает круг, если ее ближайшая к центру точка сетки находится внутри круга. Таким образом, мы можем считать точки сетки, за исключением того, что пропущены2*n+1
точки сетки на осях (как для четных, так и для нечетныхn
), поэтому мы исправляем это вручную.Код сохраняет символы, используя сложные расстояния для вычисления расстояния до центра и коллапс цикла для итерации по одному индексу.
источник
CJam,
36 35 3427 байтЭто оказался тот же алгоритм, что и у xnor, но мне интересно, есть ли лучший.
Объяснение кода :
ОБНОВЛЕНИЕ : использование трюка 2N от Jakube вместе с некоторыми другими приемами для экономии 7 байт!
Попробуйте онлайн здесь
источник
Pyth,
4436Пытаюсь немного почистить на случай, если я смогу побрить несколько байтов.
объяснение
Я должен явно проверить
n = 1
, так как мой алгоритм проверяет только угол квадрата, ближайшего к центру (и ни один не покрытn = 1
).источник
Октава
(74) (66)(64)Здесь октавная версия. По сути, находя все вершины внутри круга, а затем находя все квадраты с одной или несколькими действительными вершинами посредством свертки. 64 байта:
66 байт:
74 байта:
источник
R - 64
источник