Определим f n (k) как сумму первых k членов натуральных чисел [1, ∞), где каждое число повторяется n раз.
k | 0 1 2 3 4 5 6 7 8 9
--------+-------------------------------------------------
f_1(k) | 0 1 3 6 10 15 21 28 36 45
deltas | +1 +2 +3 +4 +5 +6 +7 +8 +9
--------+-------------------------------------------------
f_2(k) | 0 1 2 4 6 9 12 16 20 25
deltas | +1 +1 +2 +2 +3 +3 +4 +4 +5
--------+-------------------------------------------------
f_3(k) | 0 1 2 3 5 7 9 12 15 18
deltas | +1 +1 +1 +2 +2 +2 +3 +3 +3
Анти-диагонали этого в виде квадратного массива аналогичны последовательности OEIS A134546 .
Вызов
Напишите программу / функцию, которая принимает два неотрицательных целых числа n и k и выдает f n (k) .
Характеристики
- Применяются стандартные правила ввода / вывода .
- Стандартные лазейки будут запрещены .
- Ваше решение может быть либо проиндексировано 0, либо индексировано 1 для n и / или k, но, пожалуйста, укажите, какое именно.
- Эта задача заключается не в том, чтобы найти кратчайший подход на всех языках, а в том, чтобы найти кратчайший подход на каждом языке .
- Ваш код будет оцениваться в байтах , обычно в кодировке UTF-8, если не указано иное.
- Разрешены встроенные функции, которые вычисляют эту последовательность, но приветствуется решение, которое не зависит от встроенного.
- Пояснения, даже для «практических» языков, приветствуются .
Контрольные примеры
В этих тестовых случаях n индексируется 1, а k индексируется 0.
n k fn(k)
1 2 3
2 11 36
11 14 17
14 21 28
21 24 27
24 31 38
31 0 0
В нескольких лучших форматах:
1 2
2 11
11 14
14 21
21 24
24 31
31 0
1, 2
2, 11
11, 14
14, 21
21, 24
24, 31
31, 0
Ссылочная реализация
Это написано на Хаскеле .
f n k = sum $ take k $ replicate n =<< [1..]
f_n(0) = 0
дляk
0-index?k
слагаемые из списка повторяющихся натуральных чисел, а не первыеn*k
слагаемые.Ответы:
Рубин ,
32 2823 байтаПопробуйте онлайн!
объяснение
Давайте представим сумму как площадь треугольника, например, с n = 3 и k = 10:
Затем мы суммируем по столбцам вместо строки: первый столбец
k
, а затемk-n
,k-2n
и так далее.источник
Python 2 ,
3428 байтПопробуйте онлайн!
Спасибо Мартину Эндеру, Нилу и мистеру Кскодеру за помощь.
источник
k/n
все равно не нужно -k-(k/n)*n
это простоk%n
. Смотрите мой пакетный ответ.Шелуха , 4 байта
Попробуйте онлайн!
объяснение
Это просто заканчивается прямым переводом эталонной реализации задачи:
источник
APL (Dyalog) ,
12108 байтПопробуйте онлайн!
n
слеваk
(0 проиндексировано) справа.источник
Mathematica, 40 байт
Попробуйте онлайн!
Попробуйте онлайн!
Mathematica, 18 байт
Мартин Эндер
Попробуйте онлайн!
Попробуйте онлайн!
источник
Tr@Range[#2,0,-#]&
илиn~Sum~{n,#2,0,-#}&
используя трюк из ответа Ruby GB.MATL ,
1211 байтПопробуйте онлайн!
k
0 индексируется. Принимает ввод в обратном порядке.Сохранено 1 байт благодаря @Giuseppe
источник
Желе , 5 байт
Еще один байт, чем решение @ Mr.Xcoder's Jelly, но это моя первая заявка в Jelly, и я все еще не понимаю, как молчание Jelly выбирает операнды, поэтому я все еще доволен. Обратите внимание на порядок входов
k
тогдаn
.объяснение
Попробуйте онлайн!
источник
Желе , 4 байта
1-индексированных
Попробуйте онлайн! или посмотрите набор тестов .
источник
Ḷ:S
также работаетJavaScript (ES6),
2421 байтПринимает ввод в синтаксисе карри
(n)(k)
. Возвращаетfalse
вместо0
.Контрольные примеры
Показать фрагмент кода
Как?
Это похоже на ответ Ruby от @ GB .
Задача описывает, как построить «лестницу» слева направо, в то время как эта рекурсивная функция строит ее снизу вверх. С n = 2 и k = 11 :
источник
Пакет, 34 байта
Формула замкнутой формы, которую я нашел. Первый аргумент
n
индексируется 1, второй аргументk
индексируется 0.источник
Python 2 , 29 байт
Попробуйте онлайн!
Спасибо полностью человеческим за -3 байта!
Python 2 , 30 байт
Попробуйте онлайн!
источник
Haskell , 28 байт
Попробуйте онлайн!
Подход, который я нашел, просто поковырявшись с некоторыми параметрами диапазона. Определенно не самый короткий, но довольно круто, как много разных подходов.
источник
C,
3834 байтаРекурсивное определение.
-4 байта благодаря Steadybox .
Попробуйте онлайн!
32 байта от Mr. Xcoder , GB
Попробуйте онлайн!
источник
f(n,k){return k--?1+f(n,k)+k/n:0;}
попробуйте онлайн!R ,
373331 байт-6 байт благодаря Джузеппе
Попробуйте онлайн!
Ничего фантастического.
В[0:k]
обрабатывает случай , когда к = 0.источник
rep.default
, вы можете избавиться[0:k]
с помощью,rep(1:k,,k,n)
но тогда ваш ответ в основном будет rturnbull, но с базовым R, а неR + pryr
{}
C ++, 53 байта
Просто используйте формулу.
n
1 индексируется иk
0 индексируется.Попробуйте онлайн!
источник
~
оператором.[](int n,int k){return-k/n*~(k/n)/2*n-k%n*~(k/n);};
J , 13 байт
Как это устроено:
Левый аргумент - n, правый - k.
i.
генерирует список 0..k-11+
добавляет один к каждому номеру списка, кричащий 1,2, ..., k#
образует зацепку с вышеперечисленным, поэтому копируются n копий каждого элемента списка.]{.
возьмите первые n из них1#.
найти их сумму по базовой конверсии.Попробуйте онлайн!
источник
Сетчатка ,
2926 байтПопробуйте онлайн! Ссылка включает в себя тестовые случаи и заголовок, чтобы переформатировать их в свой предпочтительный ввод (0-индексированный
k
первый, 1-индексированныйn
второй). Я был вдохновлен ответом Ruby от @ GB. Объяснение:Преобразовать в одинарный.
Сопоставьте каждую строку в
n
пределахk
и замените совпадение всем после совпадения. Этоk-n
,k-2n
,k-3n
, ноn
также после матча, так что вы получитеk
,k-n
, иk-2n
т.д. Это также соответствуетn
, который просто удаляется (он больше не нужен).Суммируйте результаты и конвертируйте обратно в десятичную.
источник
Pyth , 5 байт
Попробуй это здесь!
Порт GB ответ Руби. Порт моего желе 1 будет 6 байтов:
+s/Rvz
источник
Perl 6 , 39 байт
Проверь это
n и k оба основаны на 1
Expanded:
источник
Котлин , 40 байт
Попробуйте онлайн!
источник
Java (OpenJDK 8) , 23 байта
Попробуйте онлайн!
Порт GB Python 2 ответа .
источник
05AB1E , 9 байтов
Попробуйте онлайн!
объяснение
источник
Python 2 , 44 байта
Попробуйте онлайн!
источник
Python 2 , 38 байт
Попробуйте онлайн!
источник
Clojure, 54 байта
2-й аргумент
k
имеет индекс 0, а также(f 14 20)
28.источник
APL + WIN, 13 байт
Запрашивает ввод с экрана для n и затем для k. Индекс происхождения = 1.
источник
Brain-Flak , 78 байт
Попробуйте онлайн!
Я уверен, что это можно сделать лучше, но это только начало.
источник
Japt ,
76 байтПервоначально вдохновлен решением GB и превратился в порт!
Принимает
k
как первый вход, так иn
второй.Попытайся
объяснение
Неявный ввод целых чисел
U=k
&V=n
. Создайте массив целых чисел (õ
) из1
вU
с шагомV
отрицается (n
) и уменьшите его сложением (x
).источник
р , 27 байт
Анонимная функция, которая принимает
k
иn
в этом порядке. Создает список длиныk
(третий аргумент вrep
), который состоит из1
сквозногоk
(первый аргумент вrep
), повторяя каждый элементn
раз (четвертый аргумент вrep
). Затем берет сумму этого списка.n
1 индексируется иk
0 индексируется. Возвращает ошибку дляn<1
.Попробуйте онлайн!
источник
Befunge, 27 байт
Попробуйте онлайн
Принимает k затем n в качестве ввода. Использует ответ ГБ в качестве своей математической основы.
источник