Предыстория
Отказ от ответственности: может содержать вымышленную информацию о кенгуру.
Кенгуру пересекают несколько этапов развития. Когда они становятся старше и сильнее, они могут прыгать выше и дольше, и они могут прыгать больше раз, прежде чем проголодаться.
На стадии 1 , кенгуру очень мало и не может прыгать на всех. Несмотря на это, постоянно требует питания. Мы можем представить образец активности кенгуру на стадии 1 , как этот.
o
На стадии 2 , кенгуру может делать небольшие прыжки, но не более чем 2 , прежде чем он проголодается. Мы можем представить стадии 2 образец активности кенгуру , как это.
o o
o o o
После стадии 2 кенгуру быстро улучшается. На каждом последующем этапе кенгуру может прыгать немного выше (1 единица в графическом представлении) и в два раза больше. Например, шаблон активности кенгуру на стадии 3 выглядит следующим образом.
o o o o
o o o o o o o o
o o o o o
Весь этот прыжок требует энергии, поэтому кенгуру требует питания после завершения каждого шаблона деятельности. Точная сумма может быть рассчитана следующим образом.
Присвойте каждому o в схеме активности стадии n кенгуру его высоту, т. Е. Число от 1 до n , где 1 соответствует земле, а n - самой высокой позиции.
Вычислить сумму всех высот в модели деятельности.
Например, шаблон активности кенгуру стадии 3 включает в себя следующие высоты.
3 3 3 3
2 2 2 2 2 2 2 2
1 1 1 1 1
У нас есть пять 1 , восемь 2 и четыре 3 ; сумма равна 5 · 1 + 8 · 2 + 4 · 3 = 33 .
задача
Напишите полную программу или функцию, которая принимает положительное целое число n в качестве входных данных и печатает или возвращает данные о потребностях в питании на действие стадии n кенгуру .
Это код-гольф ; пусть победит самый короткий ответ в байтах!
Примеры
1 -> 1
2 -> 7
3 -> 33
4 -> 121
5 -> 385
6 -> 1121
7 -> 3073
8 -> 8065
9 -> 20481
10 -> 50689
http://www.wolframalpha.com/input/?i=2%5E(n-1)*(n%5E2-1)%2B1
(странная разметка, потому что обычный URL испорчен)Ответы:
Желе , 6 байт
Использует формулу ( n 2 - 1) 2 n - 1 + 1 для вычисления каждого значения. @ Qwerp-Derp's был достаточно любезен, чтобы предоставить доказательство .
Попробуйте онлайн! или Проверьте все контрольные примеры.
объяснение
источник
Coffeescript, 19 байтов
Изменить: Спасибо Деннис за обрезание 6 байтов!
Формула для генерации чисел Кенгуру:
Пояснение формулы:
Число
1
's вK(n)
' окончательная сумма2^(n - 1) + 1
.Число
n
's вK(n)
' является итоговой суммой2^(n - 1)
, поэтому сумма всехn
's' равнаn * 2^(n - 1)
.Номер любого другого числа (
d
) вK(n)
итоговой сумме равен 12^n
, поэтому сумма всех значенийd
будет равнаd * 2^n
.Таким образом, сумма всех других чисел
= (T(n) - (n + 1)) * 2^n
, гдеT(n)
есть функция числа треугольника (который имеет формулуT(n) = (n^2 + 1) / 2
).Подставляя это в, мы получаем окончательную сумму
Когда мы складываем все суммы, мы получаем
K(n)
, что равно... который равен формуле выше.
источник
n=>(n*n-1<<n-1)+1
Java 7, 35 байт
источник
Желе , 4 байта
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Python 2,
2523 байтаИспользуемая формула миль.
Спасибо Джонатану Аллану за -2 байта.
источник
~-x
. Вы также можете использоватьx-1
(не короче), поскольку вычитание имеет более высокий приоритет, чем сдвиг.~-x
, поэтому я решил оставить его без изменений. Ну, кажется, все предпочитаютx-1
, хотя (Деннис также говорил именно это).-~(x*x-1<<~-x)
для записи, но-1
все еще существует, поэтому я не люблю смешивать код ...- 1
.Lua, 105 байт
Де-golfed:
Занимательная проблема!
источник
На самом деле , 8 байт
Попробуйте онлайн!
Объяснение:
Это просто вычисляет формулу
(n**2 - 1)*(2**(n-1)) + 1
.источник
GolfScript , 11 байт
Попробуйте онлайн!
Спасибо Мартину Эндеру (8478) за удаление 4 байтов.
Объяснение:
источник
CJam, 11 байт
Попробуйте онлайн.
Объяснение:
источник
ri
...Mathematica, 15 байт
Оператора смещения по битам нет, поэтому нам нужно выполнить фактическое возведение в степень, но тогда короче делить на 2 вместо уменьшения показателя степени.
источник
C, 26 байтов
Как макрос:
Как функция (27):
источник
f(1+2)
.05AB1E , 7 байтов
Попробуйте онлайн!
объяснение
источник
C #, 18 байт
Анонимная функция, основанная на превосходном математическом анализе Qwerp-Derp .
Полная программа с тестовыми примерами:
источник
Пакетный, 30 байтов
Ну, это все равно лучше, чем Java.
источник
MATL , 7 байт
Использует формулу из других ответов.
Попробуйте онлайн!
источник
Оазис , 9 байт
Я удивлен, что нет встроенного для
2^n
.Попробуйте онлайн!
Объяснение:
источник
m
Экспонирование на нидерландском языке, а также отсутствие творчества. Кроме того, многие операторы еще не были реализованы из-за лени и проволочек.Ракетка 33 байта
Используя формулу, объясненную @ Qwerp-Derp
Ungolfed:
Тестирование:
Выход:
источник
Рубин, 21 байт
@ Qwerp-Derp в основном делал тяжелую работу.
Из-за приоритета в ruby, кажется, нам нужны некоторые парены:
источник
Scala, 23 байта
Использует битовый сдвиг в качестве возведения в степень
источник
Pyth, 8 байт
pyth.herokuapp.com
Объяснение:
источник
R, 26 байт
Бесстыдно применяя формулу
источник
J 11 байт
На основании той же формулы, найденной ранее .
Попробуйте онлайн!
объяснение
источник
Groovy (22 байта)
Не сохраняет
n
, но использует ту же формулу, что и все остальные в этом конкурсе. Сохранено 1 байт с уменьшением из-за необходимости круглых скобок.Тест
источник
JS-Forth, 32 байта
Не супер короткий, но он короче, чем Java. Эта функция помещает результат в стек. Это требует JS-Forth, потому что я использую
<<
.Попробуйте онлайн
источник