Цель состоит в том, чтобы вычислить все квадраты до x
сложения и вычитания.
Правила:
- Код должен быть функцией, которая берет общее число квадратов для генерации и возвращает массив, содержащий все эти квадраты.
- Вы не можете использовать строки, структуры, умножение, деление или встроенные функции для вычисления квадратов.
- Вы можете использовать только массивы, целые числа (целые числа), сложение, вычитание. Другие операторы не допускаются!
Это вопрос кода-гольфа , поэтому выигрывает самый короткий код в байтах!
Ответы:
APL - 10
Пример использования:
демо-версия ngn APL
источник
+\1+⍳+⍳
C
5552 байтапросто суммы нечетных чисел
n
: количество квадратов для вычисленияr
: выходной массив для хранения результатовj
: принимает последовательные значения 1, 3, 5, 7, ...i
: увеличиваетсяj
на каждую итерациюредактировать
4 символа могут быть сохранены с помощью неявного объявления int (> C99), но это стоит 1 символ, потому что
for
инициализаторы не могут содержать объявление в> C99. Тогда код становитсяиспользование
Выход
источник
GolfScript, 17 символов
Использование (см. Также примеры онлайн ):
Примечание:
*
это цикл, а не оператор умножения.источник
,
принимает входные данные и преобразует их в массив[0 1 ... n-1]
. Затем*
внедряет данный блок кода в массив. Этот блок сначала удваивает текущий item (.+
), вычитает один ((
), а затем добавляет предыдущий результат1$+
(другими словами, добавляет2j-1
к предыдущему квадратному числу).[]
заключает в себе все, чтобы вернуть новый массив.Пакет Windows, 115 байт
Это должно быть помещено в командный файл вместо запуска из cmd, и оно выводит список на консоль. Требуется количество квадратов для создания из первого аргумента командной строки. По большей части он использует
&
вместо новых строк, однако один все еще необходим, и он считается как два байта.Необходимо включить отложенное расширение переменной, это можно сделать с помощью
cmd /v:on
. Предполагая, что это не так,setlocal enabledelayedexpansion&
в начале потребовалось дополнительное (без него скрипт будет 83 байта).источник
Хаскелл - 30
Это использует тот факт, что
(n+1)^2=n^2+2n+1
источник
Perl, 27 байт
Математика:
Скрипт для вызова функции для печати 10 квадратов:
Результат:
Редактирование:
pop
вместоshift
(-2 байта, спасибо скибирански )источник
JavaScript - 32 символа
Предполагается, что переменная
x
существует, и создает массивa
квадратов для значений1..x
.ECMAScript 6 - 27 символов
Вызов
f(x)
заполнит массивb
квадратами для значений0..x
.источник
i+++i
в конце ...?k+=i+++i
это то же самое,k += i + (++i)
что и то, чтоk+=i+i+1
следует заi=i+1
b=[f=i=>b[i]=i&&i+--i+f(i)]
).Юлия - 33
Любое квадратное число может быть записано суммированием нечетных чисел:
источник
С ++
9981788078моя первая попытка в код-гольфе
этот код основан на
a = 2 xn - 1,
где n - количество терминов, а a - n- й термин в следующих сериях
1, 3, 5, 9, 11, 13, .....
сумма первых 2 терминов = 2 квадрат
сумма первых 3 слагаемых = 3 в квадрате
и так далее ...
источник
{}
послеfor
цикла, так как есть только одно утверждение. Это может уменьшить количество ваших символов на 2addition, subtraction
, я использую только этиСборка DCPU-16 (90 байт)
Я написал это в сборке для вымышленного процессора, потому что почему бы и нет?
Ожидается, что число будет в регистре X, а другие регистры должны быть равны 0. Результаты помещаются в стек, и он сломается, как только достигнет 65535 из-за 16-битной архитектуры. Вы можете добавить
SUB PC, 1
в конец, чтобы проверить это. Скомпилированная программа должна составлять 20 байт (10 слов).источник
Haskell
Это в основном изобретает умножение, использует его сам и отображает все числа.
f 10
=[0,1,4,9,16,25,36,49,64,81]
. Такжеf 91
=[0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600,1681,1764,1849,1936,2025,2116,2209,2304,2401,2500,2601,2704,2809,2916,3025,3136,3249,3364,3481,3600,3721,3844,3969,4096,4225,4356,4489,4624,4761,4900,5041,5184,5329,5476,5625,5776,5929,6084,6241,6400,6561,6724,6889,7056,7225,7396,7569,7744,7921,8100]
.источник
Хаскелл, 34/23
или, если импорт в порядке:
Выход:
источник
Javascript 47
function f(n,a){return a[n]=n?f(n-1,a)+n+n-1:0}
r=[];f(12,r);console.log(r)
возвращает:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144]
источник
f=(n,a)=>a[n]=n?f(n-1,a)+n+n-1:0
.Smalltalk, 52
Возвращает новый массив (т.е. не заполняет или не добавляет к существующему).
вызов:
значение f: 10
-> # (1 4 9 16 25 36 49 64 81 100)
источник
питон - 39
Заменить
5
на любое значение. Какие-либо предложения?источник
Баш -
928562615957Результат:
Изменить: я заменил внутренний цикл с алгоритмом из решения Haskell @ mniip.
источник
Тот же метод, что и выше, в APL и J:
APL:
F←{+\1+V+V←¯1+⍳⍵}
(17 символов) работает с большинством вариантов APL (попробуйте здесь )и даже меньше (всего 14 символов) с APL NGN:
F←{+\1+V+V←⍳⍵}
(см. здесь )J:
f=:+/\@(>:@+:@:i.)
(18 символов)редактировать: лучшее решение в APL:
F←{+\¯1+V+V←⍳⍵}
(15 символов)источник
C # (82)
источник
C # - 93
При вызове из другого метода того же класса вернет массив -
[1,4,9,16,25,36...]
доl
элемента th.источник
int[]
иsq
? Я не знаю C #, но я думаю, что это должно работать.int[]sq
вместоint[] sq
иint[]res
вместоint[] res
. Это поможет вам сохранить два символа, и я не получил никаких ошибок компиляции с этим. Также вы должны использовать одиночные символьные идентификаторы дляsq
иres
как вы предложили.Фортран II | IV | 66 | 77,
134122109105Редактировать: удалить внутренний цикл и использовать алгоритм Haskell @ mniip вместо.
Изменить: Проверено, что подпрограмма и драйвер действительны Fortran II и IV
Водитель:
Результат:
источник
Python - 51
Здесь я определяю функцию в соответствии с правилами.
Использование
sum
нечетных чисел:Это только использует
sum
(встроенный, который выполняет сложение) иrange
(встроенный, который создает массивы, используя сложение). Если вы возражаетеsum
, мы можем сделать это сreduce
:источник
PHP, 92 байта
Конечно, для этого нужно включить опцию «короткие метки» (чтобы сбрить 3 байта в начале).
Выход:
источник
Далее - 48 байт
Использование:
Выход:
источник