Напишите программу или функцию для вывода суммы нечетных квадратных чисел (OEIS # A016754) меньше, чем вход n
.
Первые 44 числа в последовательности:
1, 9, 25, 49, 81, 121, 169, 225, 289, 361, 441, 529, 625, 729, 841, 961, 1089,
1225, 1369, 1521, 1681, 1849, 2025, 2209, 2401, 2601, 2809, 3025, 3249, 3481,
3721, 3969, 4225, 4489, 4761, 5041, 5329, 5625, 5929, 6241, 6561, 6889, 7225, 7569
Формула для последовательности есть a(n) = ( 2n + 1 ) ^ 2
.
Примечания
- Поведение вашей программы может быть неопределенным для
n < 1
(то есть все допустимые входные данные>= 1
.)
Контрольные примеры
1 => 0
2 => 1
9 => 1
10 => 10
9801 => 156849
9802 => 166650
10000 => 166650
code-golf
arithmetic
Томас
источник
источник
Ответы:
Желе, 6 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Фон
Для всех натуральных чисел k имеем 1² + 3² + ⋯ + (2k - 1) ² = k (2k - 1) (2k +1) ÷ 3 .
Так как есть m C r = m! ÷ ((mr)! R!) R -комбинации из набора из m элементов. Выше можно рассчитать как (2k + 1) C 3 = (2k + 1) 2k (2k - 1) ÷ 6 = k (2k - 1) (2к + 1) ÷ 3.
Чтобы применить формулу, мы должны найти самое высокое 2k + 1 такое, что (2k - 1) ² <n . Не обращая внимания на четность на мгновение, мы можем вычислить наибольшее значение m таким образом, чтобы (m - 1) ² <n при m = ceil (srqt (n)) . Чтобы условно увеличить m, если оно четное, просто вычислите m | 1 (побитовое ИЛИ с 1 ).
Как это устроено
источник
JavaScript (ES6), 30 байт
31 байт, если
f(1)
необходимо вернуть ноль вместо false:источник
05AB1E ,
108 байтКод:
Объяснение:
Может пригодиться
t;L·<nO
.Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
Haskell, 30 байт
Удивительно нормально выглядящий.
источник
C #,
126131 байтОтредактированная версия, чтобы соответствовать новому вопросу:
Используя жестко заданный лимит:
источник
# Language name, number bytes
для согласованности.Console.Read
в конце?namespace
s не требуются для отдельных файлов.System.Console.Write(s);
если он работает, и если вам не нуженConsole.Read
.Желе, 7
Попробуйте онлайн или попробуйте модифицированную версию для нескольких значений
Тсс ... Денис спит ...
Спасибо Sp3000 в чате за помощь!
Объяснение:
источник
R,
3836 байт@Giuseppe сохранил два байта, перейдя
x
в список аргументов, чтобы сохранить фигурные скобки. Классная идея!Ungolfed
Попробуйте онлайн!
источник
x
в аргумент функции по умолчанию, а затем вы можете удалить фигурные скобки.C
51, 5048 байтовПотому что почему бы не сыграть в гольф на одном из самых многословных языков? (Эй, по крайней мере, это не Java!)
Попробуйте онлайн!
Полноценная программа без тестов, с тестовым вводом / выводом:
источник
most verbose languages
Больше гольфа, чем Python, C #, LISP, Forth и т. Д., C на самом деле довольно хорош для гольфа< 50 bytes
. Кроме того , есть соответствующий мета пост здесь .На самом деле 7 байтов
Попробуйте онлайн!
Также для 7 байтов:
Попробуйте онлайн!
Здесь используется та же формула, что и в ответе Денниса на желе.
Объяснение:
источник
Literally
?Октава, 23 байта
Тестирование:
источник
CJam, 15 байт
Попробуйте онлайн!
Твердо закодированные 10000 решений:
12-байтовое решение Мартина:
Мое оригинальное 13-байтовое решение:
Попробуйте онлайн!
источник
Pyth, 10 байт
Тестирование
Объяснение:
источник
s<#Q%2t^R2
Mathcad, 31 "байт"
Обратите внимание, что Mathcad использует сочетания клавиш для ввода нескольких операторов, включая определение и все операторы программирования. Например, ctl-] входит в цикл while - он не может быть набран и может быть введен только с помощью сочетания клавиш или с панели инструментов программирования. «Байт» - это количество операций клавиатуры, необходимых для ввода элемента Mathcad (например, имя переменной или оператора).
Поскольку у меня нет шансов на победу в этом конкурсе, я подумал, что добавлю немного разнообразия в версию с прямой формулой.
источник
Ракетка, 57 байт
источник
MATL , 10 байт
РЕДАКТИРОВАТЬ (30 июля 2016 г.): связанный код заменяется
9L
на,1L
чтобы адаптироваться к последним изменениям в языке.Попробуйте онлайн!
источник
Python, 39 байт
Если, для
n=1
, это действительно для вывода,False
а не0
, то мы можем избежать преобразования базового случая, чтобы получить 37 байтовЭто странно , что я не нашел более короткий путь , чтобы получить
0
дляi*i>=n
и ноль в противном случае. В Python 2 каждый по-прежнему получает 39 байт систочник
bool
является подклассомint
в Python, что означаетFalse
приемлемое значение для0
.Python,
4238 байтисточник
Python 2, 38 байт
Исходя из формулы Денниса , с
s==-2*k
. Выводит поплавок. Фактически, ввод имеет квадратный корень, уменьшается, затем округляется до следующего четного числа.источник
PARI / GP ,
333226 байтАдаптировано из кода Денниса :
Моя первая идея (30 байт), использующая простую формулу полинома:
Это эффективная реализация, на самом деле не сильно отличающаяся от версии, которую я бы написал:
Альтернативная реализация (37 байт), которая зацикливается на каждом из квадратов:
Другое альтернативное решение (35 байт), демонстрирующее суммирование без временной переменной:
Еще одно решение, не особенно конкурентоспособное (40 байт), использующее норму L 2 . Это было бы лучше, если бы была поддержка векторов с индексами размера шага. (Можно представить синтаксис,
n->norml2([1..((n-1)^.5+1)\2..2])
который будет отбрасывать 8 байтов.)источник
Haskell,
3231 байтПример использования:
(#1) 9802
->166650
.Редактировать: @xnor сохранил байт, с умным пониманием списка. Благодарность!
источник
n#x=sum[x^2+n#(x+2)|x^2<n]
Юлия, 29 байт
Это рекурсивная функция, которая принимает целое число и возвращает целое число.
Мы начинаем индекс с 1, и если его квадрат меньше входного, мы берем квадрат и добавляем результат повторного использования в индекс + 2, который гарантирует, что четные числа пропускаются, в противном случае мы возвращаем 0.
источник
Oracle SQL 11.2, 97 байт
источник
Юлия, 26 байт
Это строит диапазон всех нечетных, положительных целых чисел ниже n и массив квадратов целых чисел в этом диапазоне, а затем вычисляет сумму целых чисел в обоих итерациях.
Попробуйте онлайн!
источник
Reng v.3.3, 36 байт
Попробуй это здесь!
объяснение
1: инициализация
Устанавливает
c
в0
(счетчик) и входI
вm
топор.1ø
переходит на следующую строку.2: петля
:
дублирует текущее значение (нечетное число в квадрате) и [Im
кладетm
топор вниз. Я использовал менее чем трюк в другом ответе , который я использую здесь.%:1,e
проверяет, если STOS <TOS. Если это так,q^
идет вверх и выходит из цикла. В противном случае:c
кладет счетчик вниз,2*
удваивает его,1+
добавляет один и²
возводит в квадрат.c1+#C
увеличиваетсяc
, и цикл повторяется.3: финал
$
сбрасывает последнее значение (больше желаемого),a+¡
добавляет, пока длина стека не станетn~
равной 1, выводит и завершает работу.источник
Clojure, 53 байта
Вы можете проверить это здесь: https://ideone.com/WKS4DA
источник
Mathematica 30 байтов
Эта безымянная функция возводит в квадрат все нечетные числа меньше, чем input (
Range[1,Sqrt[#-1],2]
), и добавляет их.источник
PHP, 64 байта
Expanded:
На каждой итерации
for
цикла, он добавит 2 к и проверить , если к 2 меньше$i
, если добавить к 2 к$a
.источник
R, 60 байтов
Делает точно так же, как описано в вызове, в том числе возвращает 0 для случая n = 1. Дегольфед, ';' представляет разрыв строки в R, игнорируется ниже:
источник
Java 8,
12811911711149 байтовНа основе решения C # @Thomas .
Объяснение:
Попробуйте онлайн.
источник
Python 2, 49 байт
Это оказалось короче, чем
lambda
.Попробуйте онлайн
Мой самый короткий
lambda
, 53 байта :источник