Мои проблемы, как правило, немного сложны и непривлекательны. Так что тут что-то легкое и веселое.
Последовательность Алкуина
Последовательность Алкуина A(n)
определяется путем подсчета треугольников. A(n)
это число треугольников с целыми сторонами и периметром n
. Эта последовательность названа в честь Алкуина Йоркского.
Первые несколько элементов этой последовательности, начиная с n = 0
:
0, 0, 0, 1, 0, 1, 1, 2, 1, 3, 2, 4, 3, 5, 4, 7, 5, 8, 7, 10, 8, ...
Например A(9) = 3
, потому что единственными треугольниками с целыми сторонами и периметром 9
являются 1 - 4 - 4
, 3 - 3 - 3
и 2 - 3 - 4
. Вы можете увидеть 3 действительных треугольника внизу.
В этой последовательности есть довольно интересный паттерн. Например A(2*k) = A(2*k - 3)
.
Для получения дополнительной информации см. A005044 на OEIS.
Вызов
Но ваша задача заключается в двоичном представлении этих чисел. Если мы преобразуем каждый порядковый номер в его двоичное представление, помещаем их в векторы столбцов и выстраиваем их в линию, это создает довольно интересную двоичную картину.
На следующем рисунке вы можете увидеть двоичное представление порядковых номеров A(0), A(1), ..., A(149)
. В первом столбце вы можете увидеть двоичное представление A(1)
, во втором столбце представление A(1)
и так далее.
Вы можете увидеть какой-то повторяющийся узор на этой картинке. Это даже выглядит как фракталы, если вы посмотрите, например, на изображение с порядковыми номерами A(600), A(601), ..., A(899)
.
Ваша задача - создать такой образ. Ваша функция, ваш скрипт получит два целых числа 0 <= m < n
, и он должен сгенерировать двоичное изображение последовательности Алкуина A(m), A(m+1), A(m+2), ..., A(n-2), A(n-1)
. Таким образом, на входе 0, 150
генерируется первое изображение, на входе 600, 900
- второе изображение.
Вы можете использовать любой популярный графический формат, который вы хотите. Скажем, каждый формат, который можно преобразовать в png, используя image.online-convert.com . Кроме того, вы можете отобразить изображение на экране. Не допускаются первые белые ряды!
Это код-гольф. Таким образом, самый короткий код (в байтах) выигрывает.
white=1 and black=0
или наоборот?
white=0 and black=1
. Так что наоборот. A(0)
создает белый столбец, A(9)=3
создает белый столбец с двумя черными пикселями внизу.
0,0,0,1,0,2
пока список в начале вопроса говорит 0,0,0,1,0,1
.