Вступление
В математике многоугольное число - это число, представленное точками или камешками, расположенными в форме правильного многоугольника. Точки считаются альфами (единицами). Это один тип двумерных фигурных чисел.
Например, число 10 может быть организовано в виде треугольника:
* ** *** ****
Но 10 не может быть организовано как квадрат. Число 9, с другой стороны, может быть:
*** *** ***
Некоторые числа, например 36, могут быть расположены как в виде квадрата, так и в виде треугольника:
****** * ****** ** ****** *** ****** **** ****** ***** ****** ******
По соглашению, 1 является первым многоугольным числом для любого числа сторон. Правило увеличения многоугольника до следующего размера состоит в том, чтобы вытянуть два соседних плеча на одну точку, а затем добавить необходимые дополнительные стороны между этими точками. На следующих диаграммах каждый дополнительный слой показан красным цветом.
Треугольные числа:
Квадратные числа:
Полигоны с большим числом сторон, такие как пятиугольники и шестиугольники, также могут быть построены в соответствии с этим правилом, хотя точки больше не будут образовывать совершенно правильную решетку, как описано выше.
Пятиугольные числа:
Шестиугольные числа:
Источник: Википедия
Твое задание
Учитывая положительное целое число N (1 <= N <= 1000), выведите в печать каждый тип полигонального числа N , начиная с треугольных чисел и заканчивая икосагональными (20-гоновыми) числами.
Например, число 10 - это треугольное число и десятичное число, поэтому выходные данные должны быть примерно такими (вы можете выбрать свой собственный выходной формат, но он должен выглядеть примерно так):
3 10
Контрольные примеры
1 -> 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 -> (None)
3 -> 3
6 -> 3 6
36 -> 3 4 13
Для справки n
-го- k
го числа это:
Кредит: xnor
Помните, это код-гольф , поэтому выигрывает код с наименьшим количеством байтов.
источник
n
k-го числа является(k-2)*n*(n-1)/2 + n
.Ответы:
Python 3, 68 байт
Для каждого потенциального числа сторон
s+2
, решает квадратичную формулуR=s*n*(n-1)/2 + n
для тогоn
чтобы увидеть если результат является целым числом.Сравните (73 байта):
Альтернативный подход к решению
s
дает 62 байта в Python 3, но не работаетR=1
.источник
JavaScript (ES6), 90 байт
Решает квадратное уравнение. 73 байта на достаточно новых версиях Firefox:
источник
> <>, 62 + 3 = 65 байт
Ожидается ввод в верхней части стека, поэтому +3 байта для
-v
флага.Я впервые программирую на> <>, поэтому я могу упустить некоторые очевидные приемы, чтобы сократить код.
Объяснение:
инициализация
Перемещает N в регистр, помещает счетчик в стек (начиная с
1
, что соответствует треугольным числам) и запускает последовательность со значениями0
и1
.Основной цикл
Сравнивает вершину стека с регистром. Если оно равно, перейдите к процедуре печати. Если оно больше, перейдите к процедуре сброса. В противном случае возьмите разницу между двумя верхними элементами стека, добавьте счетчик и добавьте к предыдущему верхнему элементу стека. Это вычисляет следующее многоугольное число.
Распечатать
Печатает счетчик + 2, за которым следует новая строка, затем переходит к процедуре сброса.
Сброс настроек
Удаляет два верхних элемента стека и увеличивает счетчик. Завершает программу , если счетчик больше , чем 18, в противном случае толкает начальные числа ,
0
и1
в стек и возвращается в основной цикл.источник
Желе , 22 байта
Попробуйте онлайн!
объяснение
источник
Аксиома 203 байта
здесь меньше игры в гольф и рутины, которые показывают цифры
источник
AWK , 67 байт
Попробуйте онлайн!
Я пытался на самом деле решить квадратичный, но проверка каждого значения, чтобы увидеть, работает ли оно короче (и менее подвержен ошибкам для меня)
источник
R
68 68байтЧитает
N
со стандартного ввода. Вычисляет первыеN
k-угольные числа и получает их,k
где они равныN
, используя формулу xnor; однако, сохраняет байты в скобках, используя1:18
вместо3:20
и добавляя2
в конце.expand.grid
по умолчанию имена столбцовVar1
,Var2
..., если имя не дано.$
индексы путем частичного сопоставления, поэтомуm$V
соответствуетm$Var2,
второму столбцу.старая версия:
Попробуйте онлайн!
источник
Пари / ГП , 34 байта
Pari / GP имеет встроенную функцию проверки, является ли число многоугольным числом.
Попробуйте онлайн!
источник
Желе , 20 байт
Я только начал писать эффективный обман этой задачи (хотя охватывая все k> 1, а не только [1,20]) ... так что вместо этого я отвечу!
Полная программа распечатки представления результатов желе в виде списка *
Попробуйте онлайн!
* Без результатов ничего не печатает;
один результат печатает только это число;
множественные результаты распечатывает
[]
вложенный,,
отдельный список чиселКак?
источник