Теорема Ничомачуса связывает квадрат суммы с суммой кубов:
и имеет красивую геометрическую визуализацию:
Задача: Создать 2-ую часть этой визуализации в ascii.
Вам необходимо убедиться, что все ваши визуальные границы поддерживаются вашей диаграммой. Это проще всего сделать с четырьмя «цветами», хотя можно добиться только с тремя (см. Последний пример ниже). С четырьмя цветами вы используете два, чтобы различать области внутри «полосы» (т. Е. Различные части, составляющие один куб), и два, чтобы различать соседние полосы. Вы также можете использовать более четырех цветов, если хотите. Если что-то из этого сбивает с толку, приведенный ниже пример должен прояснить ситуацию.
Ввод, вывод
Входные данные - это одно целое число, большее 0. Выходные данные - это сетка ascii, аналогичная приведенным ниже примерам, соответствующая сплюснутой сетке для этого входного числа на изображении выше. Лидирующие и конечные пробелы в порядке.
Это код гольф, со стандартными правилами.
Пример выходов
N = 1
#
N = 2
#oo
o@@
o@@
N = 3
#oo+++
o@@+++
o@@+++
+++###
+++###
+++###
N = 4
#oo+++oooo
o@@+++oooo
o@@+++@@@@
+++###@@@@
+++###@@@@
+++###@@@@
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
N = 5
#oo+++oooo+++++
o@@+++oooo+++++
o@@+++@@@@+++++
+++###@@@@+++++
+++###@@@@+++++
+++###@@@@#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
Трехцветная версия для N = 4, благодаря @BruceForte:
#oo+++oooo
o##+++oooo
o##+++####
+++ooo####
+++ooo####
+++ooo####
oo####++++
oo####++++
oo####++++
oo####++++
Ответы:
MATL ,
302827 байтПопробуйте онлайн!
Бонусные возможности:
Для 26 байтов следующая модифицированная версия производит графический вывод :
Попробуйте это в MATL Online!
Изображение требует цвета и стоит всего 7 байт:
Попробуйте это в MATL Online!
Или используйте более длинную версию (37 байт), чтобы увидеть, как постепенно строится матрица символов :
Попробуйте это в MATL Online!
Пример выходов
Для ввода
8
ниже показаны базовая версия, графический вывод и цветной графический вывод.объяснение
Общая процедура
Числовая матрица строится от внешнего к внутренним слоям
N
поэтапно, гдеN
вводится. Каждый шаг перезаписывает внутреннюю (верхнюю левую) часть предыдущей матрицы. В конце числа в полученной матрице изменяются на символы.пример
Для ввода
4
первая матрицаВ качестве второго шага матрица
перезаписывается в верхнюю половину последнего. Затем то же самое делается с
и наконец с
Полученная матрица
Наконец,
30
добавляется к каждой записи, и результирующие числа интерпретируются как кодовые точки и преобразуются в символы (начиная с33
, соответственно!
).Построение промежуточных матриц
Для ввода
N
рассмотрим уменьшение значенийk
отN
до1
. Для каждого генерируетсяk
вектор целых чисел от1
доk*(k+1)
, а затем каждая запись делится наk
и округляется в большую сторону . Как пример, дляk=4
этого дает (все блоки имеют размер,k
кроме последнего):тогда как для
k=3
результата будет (все блоки имеют размерk
):Этот вектор добавляется поэлементно с трансляцией к транспонированной копии самого себя; и затем
k
добавляется к каждой записи. Заk=4
это даетЭто одна из промежуточных матриц, показанных выше, за исключением того, что она перевернута горизонтально и вертикально. Таким образом, все, что остается, - это перевернуть эту матрицу и записать ее в верхний левый угол «накопленной» матрицы до сих пор, инициализированной в пустую матрицу для первого (
k=N
) шага.Код
источник
Python 2 ,
187178164162152 байта-8 байт благодаря Mr.Xcoder
-1 байт благодаря Стивену
-10 байт благодаря Джонатану Фреху
Попробуйте онлайн!
источник
sum(range(y))%y
->y*~-y/2%y
Древесный уголь ,
5046 байтовПопробуйте онлайн!Ссылка на подробную версию кода. Предыдущая 50-байтовая версия с объяснением: попробуйте онлайн!
Примечание: я зацикливаюсь на символе, а не пытаюсь назначить символ непосредственно
l
потому что вы не можете напрямую присвоить результат индексации строки переменной, поскольку это неоднозначная конструкция в Charcoal. К счастью, количество байтов одинаково.источник
C (gcc) ,
135128120 байтовПопробуйте онлайн!
Использует только три цвета.
Концептуально работает на сетке, повернутой на 180 градусов:
И вычисляет цвета по формуле:
источник
gcc -O2
.g(i%m,i/m,n)%3
)?x/k&&y/k
вместоx>=k&y>=k
R ,
131126123 байт3 байта сохранены благодаря @Giuseppe
Попробуйте онлайн!
При этом используется тот же алгоритм, что и в ответе @LuisMendo на MATL . Единственная разница состоит в том, что вместо преобразования в символы матрица выводится со всеми значениями mod4, чтобы каждый элемент представлял собой один символ ascii.
источник
for
цикл на -1 байт :)Python 2 ,
176175 байтовПопробуйте онлайн!
источник
J="".join;
(+10 байт) и заменяете оба"".join
s (-2 * 7 = -14 байт) наJ
(+2 байт), вы можете сохранить байт (так как послеprint
; +1 байт должен быть дополнительный пробел ) ,