Счастливое число определяется следующим процессом. Начиная с любого положительного целого числа, замените число на сумму квадратов его цифр и повторяйте процесс до тех пор, пока число не станет равным 1 (там, где оно останется), или пока оно не зациклится в цикле, который не содержит 1. Эти числа для которого этот процесс заканчивается в 1, являются счастливыми числами, в то время как те, которые не заканчиваются в 1, являются несчастными числами (или грустными числами). Учитывая число, напечатайте, будет ли он счастлив или несчастлив.
Sample Inputs
7
4
13
Sample Outputs
Happy
Unhappy
Happy
Примечание. Ваша программа не должна занимать более 10 секунд для любого числа ниже 1 000 000 000.
источник
a <= 4
иa <= 1
. Если в цикле есть 1, то он счастлив, а если в нем 4, то он не счастлив. Смотрите раздел википедии о несчастном цикле. Поэтому, если значениеa
равно 4 или меньше, он проверяет, является ли значение a - результатом этого является ваш ответ.С - 115
При этом используется массив размером 2 30 байтов (1 ГБ) в качестве растрового изображения, чтобы отслеживать, какие числа встречались в цикле. В Linux это на самом деле работает, и эффективно, при условии, что включена избыточная загрузка памяти (которая обычно используется по умолчанию). При чрезмерной загрузке страницы массива распределяются и обнуляются по требованию.
Обратите внимание, что при компиляции этой программы в Linux используется гигабайт оперативной памяти.
источник
Haskell - 77
источник
Golfscript,
49 43 41 4039 символовКаждое счастливое число сходится к 1; каждое несчастное число сходится к циклу, содержащему 4. Помимо использования этого факта, это едва ли игра в гольф.
(Спасибо Ventero, из чьего решения на Ruby я выбрал трюк и спас 6 символов).
источник
eTeX, 153
Вызывается как
etex filename.tex 34*23 + 32/2 ?
(включая знак вопроса в конце). Пробелы в выражении не имеют значения.РЕДАКТИРОВАТЬ: я снизился до 123 , но теперь вывод dvi (если скомпилировано с
etex
) или PDF (если скомпилировано сpdfetex
). Поскольку TeX является языком набора текста, я думаю, это справедливо.источник
Питон - 81 символ
Некоторое вдохновение взято от Вентеро и Питера Тейлора.
источник
int(c)
чемord(c)-48
....Javascript (
94928786)Ввод осуществляется путем установки желаемого числа.
Кредиты мелламокб.
источник
n==4?h="Unh":n==1?h="H":a=n+""}alert(h+"appy")
||
на|
.n==4?h...
. Изменить, чтобы сделать ... пока цикл с условиемwhile(n>4)
. Тогда используйте это последнее утверждение:alert(["H","Unh"][n>1?1:0]+"appy")
n=0;
Python (98, но слишком испорчен, чтобы не делиться)
Слишком долго, чтобы быть конкурентоспособным, но, возможно, хорошо для смеха. Это делает "ленивую" оценку в Python. Очень похоже на запись в Haskell, когда я об этом думаю, просто безо всякого шарма.
источник
DC - 47 символов
Краткое описание:
I~
: Получите частное и остаток при делении на 10d*
.: Возведите в квадрат остаток.0<H
: Если частное больше 0, повторить рекурсивно.+
: Суммируйте значения при сжатии рекурсивного стека.4<h
: Повторите бит суммы квадратов, пока значение больше 4.источник
Befunge, 109
Возвращает правильные значения для 1 <= n <= 10 9 -1.
источник
J, 56
Глагол, а не отдельный сценарий, поскольку вопрос неоднозначен.
Использование:
источник
Скала, 145 символов
источник
(n*n)
будет корочеn*n
, или пробелов недостаточно, чтобы отделить выражение if отelse
?def h(s: String):String=if(s=="1")"H"else if(s=="4")"Unh"else h(s.map(_.asDigit).map(a=>a*a).sum+"");print(h(readLine)+"appy")
J (50)
Я уверен, что более компетентный J-er, чем я могу сделать это еще короче. Я относительный новичок.
Новый и улучшенный:
Новые и еще более улучшенные, благодаря ɐɔıʇǝɥʇuʎs:
источник
("."0)
. Это приводит к ошибке ранга, но если я не разделю «Happy» и оставлю результат в рамке, я могу сохранить символ.("."0)
состоит в том, что союзы относятся ко всему предшествующему ряду глаголов, к которым они присоединены, а это не то, что я хочу. Если я скажу+/@:("."0)@":
, это очень отличается от того+/@:"."0@:
, что на самом деле(+/@:".)"0@:
.'Unhappy';'Happy'
наUnhappy`Happy
.Python (91 символ)
источник
Common Lisp 138
Более читабельно:
Короче просто вернуть «Happy» или «Unhappy» прямо из
(do)
, но, возможно, это не будет считаться целой программойисточник
К, 43
источник
Желе , 17 байт (не конкурирует *)
* Язык после даты вызова
Попробуйте онлайн!
Как?
источник
Perl 5 - 77 байт
$ n - входное значение
источник
05AB1E , 21 байт
Попробуйте онлайн или проверьте первые 100 тестовых случаев .
Объяснение:
Каждое число в конечном итоге приведет к одному
1
или4
, так что мы зациклимся на неопределенный срок и остановимся, как только число станет меньше 5.Посмотрите эту подсказку 05AB1E (раздел Как пользоваться словарем? ), Чтобы понять, почему
'ŽØ
это так"happy"
.источник
C ++ 135, 2 строки
Это модифицированная версия той, что я сделал здесь:
/programming/3543811/code-golf-happy-primes/3545056#3545056
источник
&999
делать? И как это работает, еслиj
значение мусора?if(j==999){n = 0;}else{n=n*n +i;}
, j не должно быть мусорным значением, глобальные переменные инициализируются нулями.Да, эта задача имеет три года; да, у него уже есть ответ победителя; но так как мне было скучно и я сделал это для другого испытания, подумал, что мог бы поставить его здесь. Сюрприз-сюрприз, его долго - и в ...
Ява -
280264 байтаUngolfed:
источник
C # 94 байта
Для любого заданного числа (как
int
),h()
вернется правильное значение. Вы можете попробовать код на .NetFiddle .Престижность пользователю неизвестен по оригинальному алгоритму .
источник
Clojure,
10797 байтОбновление: удалена ненужная
let
привязка.Оригинал:
Первый раз с использованием вложенного
for
: oисточник
R,
11791 байт-16 байт благодаря Джузеппе
источник
strtoi
вместоas.numeric
иpaste
вместоas.character
, но есть более короткий подход к получению цифр . Если вы используете`if`(a-1,"unhappy","happy")
вместо этого, это должно сохранить другой байт. Наконец, вы можете сделать это анонимным, чтобы сбрить еще несколько байтов.Perl 5 , 62 + 1 (
-p
) = 63 байтаПопробуйте онлайн!
источник
Python 2 , 71 байт
Попробуйте онлайн!
... или для того же количества байтов:
Попробуйте онлайн!
источник
C: 1092 символа
источник