Для заданного целого числа n> 2 выведите или верните наименьшее неотрицательное целое число k, такое что a (n, k) = 9 , где a (n, k) определяется как:
- a (n, 0) = n
- a (n, k + 1) =
- a (n, k) / 2 + 1, если a (n, k) четное
- сумма цифр a (n, k) ² (в базе 10), если a (n, k) нечетное
Примеры
Для n = 5 ожидаемый результат равен k = 4 :
a(5, 0) = 5
a(5, 1) = 7 (5² = 25 and 2 + 5 = 7)
a(5, 2) = 13 (7² = 49 and 4 + 9 = 13)
a(5, 3) = 16 (13² = 169 and 1 + 6 + 9 = 16)
a(5, 4) = 9 (16 / 2 + 1)
Для n = 40 ожидаемый результат равен k = 2 :
a(40, 0) = 40
a(40, 1) = 21 (40 / 2 + 1)
a(40, 2) = 9 (21² = 441 and 4 + 4 + 1 = 9)
Разъяснения и правила
- Входное значение гарантированно будет больше 2.
- Ваша программа теоретически должна работать для любого значения n . (На практике это может быть ограничено максимальным целочисленным размером, поддерживаемым вашим языком.)
- k может быть либо 0-индексированным, либо 1-индексированным. Пожалуйста, укажите это в своем ответе.
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
Первые значения
Ниже приведены первые значения от n = 3 до n = 422 с индексом k 0. (Для 1-индексации просто добавьте 1
к этим значениям.)
1 2 4 3 3 5 0 4 3 4 2 6 1 1 6 5 5 4 1 5 2 3 3 7 6 2 3 2 2 7
6 6 5 6 6 5 1 2 2 6 6 3 1 4 3 4 4 8 1 7 6 3 5 4 6 3 2 3 3 8
7 7 3 7 4 6 6 7 5 7 6 6 6 2 4 3 3 3 6 7 3 7 2 4 7 2 6 5 6 4
7 5 2 5 6 9 6 2 3 8 2 7 1 4 6 6 6 5 1 7 4 4 3 3 7 4 3 4 2 9
6 8 6 8 6 4 6 8 2 5 3 7 6 7 3 8 2 6 7 8 6 7 5 7 6 7 4 3 3 5
6 4 3 4 4 4 6 7 6 8 3 4 6 8 7 3 6 5 6 8 3 3 2 7 6 6 5 7 6 5
7 8 2 6 3 3 6 6 6 7 4 10 6 7 3 3 6 4 1 9 2 3 3 8 7 2 6 5 2 7
7 7 6 7 3 6 7 2 4 8 3 5 6 5 6 4 2 4 6 8 3 5 6 4 7 5 2 3 6 10
7 7 3 9 2 7 1 9 5 7 6 5 6 7 4 9 6 3 6 6 3 4 2 8 7 7 6 8 6 4
7 9 4 3 3 7 7 8 3 9 4 7 6 8 3 6 6 8 7 7 7 8 6 5 7 4 6 4 2 6
7 7 6 5 3 4 7 5 4 5 3 5 7 7 6 8 2 7 1 9 6 4 6 5 7 7 2 9 6 8
7 4 3 7 4 6 6 7 6 9 3 4 6 4 2 3 3 8 1 7 6 7 2 6 7 8 3 7 5 6
7 8 2 9 3 3 6 7 6 4 4 4 6 7 6 7 6 7 6 8 7 5 6 11 7 7 3 8 4 4
7 4 6 7 3 5 6 2 2 10 6 3 6 4 3 4 4 9 7 8 3 3 6 7 7 6 4 3 6 8
9! ≠ 9
an opinion or conclusion formed on the basis of incomplete information.
Ответы:
Шелуха , 13 байт
Это 1-индексированный. Попробуйте онлайн!
объяснение
Здесь нет ничего особенного.
источник
Lω
это решили.Perl 6 , 41 байт (40 символов)
Попробуйте онлайн!
При этом используется 1-индексирование k, поэтому оно дает на 1 ответ выше, чем в примерах из OP. Если это не то, что означает 1-индексирование, мне придется добавить еще 1 байт.
Пояснение : это анонимная функция. Мы просто используем средство Perl 6 для генерации списков с использованием рекурсии :—). Это выглядит следующим образом :
(first element),(block that takes the previous element and gives the next)...(end condition)
. В этом случае первый элемент - это$_
(аргумент основной функции), а конечное условие -9
(выполняется, когда мы генерируем 9). В среднем блоке мы используем$_
ссылку на его аргумент (= предыдущий элемент последовательности). Это?? !!
старый троичный оператор (более известный как? :
). Наконец, мы берем длину этого списка, форсируя числовой контекст с помощью+(...)
.Последняя странная вещь здесь - это сумма цифр. Числа
Cool
(ведут себя как строки и числа), поэтому мы используем строковый метод.comb
для$_²
(дать список символов = цифры), затем добавляем символы вверх (что преобразует их обратно в числа).источник
Желе , 17 байт
Попробуйте онлайн!
Прямой подход. Использует индексирование на основе 0.
объяснение
источник
do-while n != 9
вместоwhile n!= 9
Python 2 ,
129126766867645453 байта-3 байта благодаря Джонатану Фреху. -8 байт благодаря Maltysen. -7 байт благодаря Джонатану Аллану. -1 байт благодаря мистеру Xcoder.
Попробуйте онлайн!
От кого-то, кто, вероятно, не знает достаточно математики, это кажется совершенно произвольным. :П
источник
)%2and sum
с)%2*sum
, экономя три байта.k
полностью избавиться и сохранить еще семь байтовMathematica, 58 байт
1-индексированных
Попробуйте онлайн! (чтобы работать на Mathics,
Tr
заменяется наTotal
)здесь -1-байтовая версия @JungHwanMin (но она не работает на математике, поэтому я сохранил оба)
Mathematica, 57 байт
источник
2∣#
вместоOddQ@#
и поменяйте местами два выраженияIf
.JavaScript (ES6),
5950 байт0 индексированные.
Попытайся
объяснение
Первое, что мы делаем, это вычисляем
n-9
. Еслиn==9
тогда это, очевидно, дает,0
и все на этом останавливается. Еслиn!=9
затемn-9
даст ненулевое значение, которое, будучи правдивым, означает, что мы можем продолжать через логическое И. Мы снова вызываем функцию, передавая ей новуюn
, вычисляемую следующим образом:Если
n
по модулю2
верно, тоn
есть странно.Умножьте
n
само по себе, преобразуйте его в строку и деструктурируйте эту строку в массив отдельных символов (цифр).Присоедините символы к строке с
+
помощью математического выражения.Оцените это выражение, дав нам сумму цифр
n*n
.Если
n%2
фальси (т. Е. Четноn
), то мы просто делимn
на2
и добавляем1
.К результату повторного вызова функции добавим
1
. Итак, используя начальный ввод5
, процесс идет следующим образом:источник
Желе ,
1615 байт-1 байт благодаря миль (использование троичного если)
Монадическая ссылка, берущая и возвращающая числа.
1-индексированных
Попробуйте онлайн! или посмотрите набор тестов (принуждает результаты индексироваться 0 и форматируется как кодовый блок OP)
Как?
источник
²DSµH‘$Ḃ?n9$пL
Haskell,
6259 байтПопробуйте онлайн!
Изменить: -3 байта благодаря @ Örjan Йохансен.
источник
last$x:[y|odd a]
можно сократить доcycle[x,y]!!a
.Perl 5 , 56 + 1 (-n) = 57 байт
Попробуйте онлайн!
источник
9
.05AB1E , 16 байтов
Попробуйте онлайн!
объяснение
источник
VB.NET (.NET 4.5.2), 107 + 20 (импорт) = 117 байт
требует
Imports System.Linq
Функция, которая принимает
n
в качестве целочисленного ввода и возвращает 0 на основеk
.Ungolfed:
источник
Golfscript, 34 байта
Попробуйте онлайн!
Мне действительно нужен лучший способ, чем суммировать цифры номера.
источник
Pyth ,
2322 байтаПока это рекурсивная функция,
но я попытаюсь переключиться на..W
(функциональное время), чтобы вместо этого сохранить байтыПопробуй это здесь! (с дополнительным кодом для вызова функции - используйте- без пробелов)
y
<your_number>
источник
Java 8,
11098 байт0 индексированные
Объяснение:
Попробуй это здесь.
источник
Clojure v1.8,
124113112 байтов0 индексированные
Попробуйте онлайн!
объяснение
источник
Pyth, 18 байт
Попробуйте онлайн: демонстрация
Объяснение:
источник
Джапт,
2221 байт0 индексированные.
Попытайся
объяснение
Неявный ввод целого числа
U
.Создайте массив целых чисел от и
0
доU-1
каждого из них через функцию.Установите значение
U
.Если
U
делится на 2.U
делится на 2 плюс 1 (Ä
).Иначе:
U
до степени 2 (²
), делится на массив цифр (ì
) и уменьшается на сложение (x
).Добавьте полученный массив к массиву входов.
Найти индекс первого появления
9
в массиве. Неявно вывести результат.источник
@¥9}a@=u ?U²ìx :U/2Ä;°T
если бы существовал метод, который возвращал количество итераций до тех пор, пока значение не перестало изменяться ...