Это мой первый вызов!
Задний план
Совершенное число - это положительное целое число, равное сумме всех его делителей, кроме него самого.
Так 6
это совершенное число, так как 1 + 2 + 3 = 6
.
С другой стороны 12
нет, потому что 1 + 2 + 3 + 4 + 6 = 16 != 12
.
задача
Ваша задача проста, написать программу, которая, для данного n
момента, напечатает одно из следующих сообщений:
Я идеальный номер, потому что
d1 + d2 + ... + dm = s == n
я не идеальный номер, потому чтоd1 + d2 + ... + dm = s [<>] n
Где
d1, ... dm
все делители, n
кроме n
.
s
это сумма всех делителей d1, ..., dm
(опять же, без n
).
[<>]
либо <
(если s < n
), либо >
(если s > n
).
Примеры
Для того, n
чтобы быть 6
: «Я идеальное число, потому что 1 + 2 + 3 = 6 == 6»
Для того, n
чтобы быть 12
: «Я не идеальное число, потому что 1 + 2 + 3 + 4 + 6 = 16> 12»
Для n
того, чтобы быть 13
: «Я не идеальное число, потому что 1 = 1 <13»
правила
n
не больше, чем стандарт вашего языкаint
.- Вы можете читать
n
из стандартного ввода, из аргументов командной строки или из файла. - Выходное сообщение должно быть напечатано на стандартном выводе, и никакие дополнительные символы не могут появляться в выводе (оно может содержать пробел или перевод строки)
- Вы не можете использовать какие-либо встроенные функции или библиотечные функции, которые бы решали задачу (или ее основную часть) за вас. Нет
GetDivisors()
или что-то в этом роде. - Все остальные стандартные лазейки применимы.
победитель
Это код-гольф, поэтому выигрывает самый короткий код в байтах !
источник
=
и==
в том же уравнении? Это бессмысленно. Это должно бытьd1 + d2 + ... + dm = s = n
ИМО.Ответы:
Pyth, 81 байт
Попробуйте онлайн: демонстрация или тестовый набор
Объяснение:
источник
Java,
255270 байт (все еще FF в базе 17)И более читаемая версия:
Раньше не работал на нечетные числа, поэтому мне пришлось подправить несколько вещей. По крайней мере, мне снова повезло с количеством байтов. :)
источник
R
158163157153143141 байтДумаю, еще есть место для игры в гольф.
Редактировать: заменено
if(b<n)'<'else if(b>n)'>'else'=='
наc('<'[b<n],'>'[b>n],'=='[b==n])
.paste(...)
Заменяетсяrbind(...)[-1]
. Спасибо @plannapus за еще пару байтов.Ungolfed
Тестовый забег
источник
+
Между делителями должен быть знак.rbind
трюк! Вы можете сохранить 2 дополнительных байта, если вы присваиваете2:n-1
переменную, скажемa
:which(!n%%1:(n-1))
таким образом, становитсяa[!n%%a]
. (Полный код будет тогдаn=scan();a=2:n-1;b=sum(w<-a[!n%%a]);cat('I am','not'[b!=n],'a perfect number, because',rbind('+',w)[-1],'=',b,c('<'[b<n],'>'[b>n],'==')[1],n)
)Python 2,
183173170 байтПримеры:
Спасибо xnor за сохранение 13 байт!
источник
'=<>'[cmp(b,d)]
- Присоединяйся к революции!b%i<1
дляb%i==0
. Для['not ',''][int(d==b)]
вас не нужноint
, потому что Python будет конвертировать автоматически. Кроме того, вы можете использовать строковую мультипликацию"not "*(d!=b)
."=<>="[cmp(b,d)%3::3]
.Юлия,
161157 байтUngolfed:
источник
CJam, 90 байтов
Для сравнения, печать одного
=
может быть достигнута в 83 байта.Попробуйте онлайн в интерпретаторе CJam .
Как это работает
источник
Perl, 148 байт
С переносами строк:
источник
'not '
и'==','>','<'
отчетности и перехода от.
к,
(так как ничего не добавляется , когдаprint
ИНГ список). Кроме того, двигая задания в круглые скобки в первый раз , они используются экономишь пару, а если немного изменить логикуgrep$a%_<1,1..($a=<>)-1
и$a!=($s=eval)&&'not '
вы должны сбрить несколько больше! Надеюсь, что все имеет смысл!Луа,
244231 байтGolfed:
Ungolfed:
источник
JavaScript (ES6), 146
Используя шаблоны строк, он работает в Firefox и последней версии Chrome.
источник
Рубин,
174160155136134128122 байтСохранено еще 6 байт :)
Спасибо Tips за игру в гольф в Ruby
источник
C #, 252 байта
источник
Калий , 285 байт
Отказ от ответственности: работает только с последней версией Hodium из-за проблем с аргументами командной строки.
Более читаемая версия:
}
источник
mono src/Hassium/bin/Debug/Hassium.exe t.hs 6
, это говоритSystem.ArgumentException: The file 6 does not exist.
. 2. Это не работает с этой версией , которая является последним коммитом перед публикацией этого вызова. Пожалуйста, добавьте заявление об отказе от ответственности, в котором говорится, что ваша заявка не является конкурентной.@Dennis
в свой комментарий. В противном случае, я не получу уведомление о вашем ответе.)МАТЛАБ, 238
Никогда не буду самым коротким из всех языков, но вот моя попытка с MATLAB:
И это в несколько более читаемой форме:
Мне удалось сохранить еще 2 байта, не используя функцию. Вместо этого вы запускаете строку кода, и она запрашивает число в качестве ввода. После запуска он отображает вывод в конце.
источник
Perl 6 , 138 байт
(Счетчик игнорирует переводы строки и отступы, потому что они не нужны)
@d
массив, содержащий делители$s
содержит сумму делителей.$c
является значением сравнения между входом и суммой делителей.(Фактически
$c
это один из-1
,0
,1
, но на самом деле один изOrder::Less
,Order::Same
илиOrder::More
)В
'not 'x?$c
,?$c
в этом случае фактически такой же , какabs $c
иx
оператор строки повторения.«> == <»
это сокращение от( '>', '==', '<' )
.Так как
$c
имеет одно из-1,0,1
, мы должны сдвинуть его на единицу, чтобы иметь возможность использовать его для индексации в списке.Технически это будет работать для чисел значительно выше 2⁶⁴, но занимает слишком много времени для чисел выше 2¹⁶.
источник
Pyth, 84 байта
Неверный ответ, потому что я отказываюсь реализовать
=
и==
в том же уравнении.источник
Рубин, 164 байта
Тест
источник
Emacs Lisp, 302 байта
Безголовая версия:
источник
Powershell, 164 байта
Несколько распространенных и не очень распространенных трюков с PoSh;
источник
awk, 150
Потрачено впустую несколько байтов, чтобы исправить это для ввода
1
. Я не уверен, что это ожидается.источник
05AB1E , 58 байт
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Посмотрите этот мой совет 05AB1E (раздел Как использовать словарь? ), Чтобы понять, почему
„I€Ü
есть"I am"
,'€–
есть"not"
и“€…íÀ‚³,ƒ«“
есть"a perfect number, because"
.источник