J - 87 символов
Наивная попытка сделать это в J. Не использовать стандартную библиотеку, хотя я сомневаюсь, что с ее использованием она станет еще короче.
((sad`happy{~1 e.(,[:+/@:*:,.&.":@{:)^:(1-{:e.}:)^:_);@,' ';'gtv]non-prime'}.~4+4*1&p:)
'((ad`app{~1 .(,[:+/@:*:,.&.":@{:)^:(1-{:.}:)^:_);@, ;onprm}.~4+4*1&p:)']'eighty-seven'
('(ad`app{~1 .(,[:+/@:*:,.&.:@{:)^:(1-{:.}:)^:);@, ;onprm}.~4+4*1&p:']'eighty-seven'"_)
Строка вверху - это глагол, принимающий целое число и определяющий его счастье и первичность в качестве выходной строки. Вторая строка - это выражение, возвращающее строку eighty-seven
, а третья - постоянная функция, выполняющая то же самое. Я включил оба, потому что они оба были возможны, и потому что я не знаю, какое будет правление для ответов на функции, в отличие от программных, и у J нет такого понятия, как функции без аргументов - вы просто даете функции фиктивный аргумент.
Мы теряем большинство символов, проверяя на счастье. (,[:+/@:*:,.&.":@{:)
является основным телом, которое суммирует квадраты цифр числа, и (1-{:e.}:)
является проверкой того, произошло ли это число еще. sad`happy{~1 e.
превращает это в слово-результат, и мы присоединяем его к non-prime
началу строки , потенциально обрезая четыре символа, если число было на самом деле простым.
В анаграмме мы просто скрываем все биты, которых нет 'eighty-seven'
в строке, которую мы игнорируем. Я мог бы сделать лучше, если бы у J было больше букв для повторного использования, но это не так, ну да ладно.
/*program1*/program2
а потомprogram1/*program2*/
? Я думаю, что вы должны запретить комментарии.