J - 87 char
Наївна спроба цього в Дж. Немає використання стандартної бібліотеки, хоча я сумніваюся, що вона скориться коротше.
((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'
до рядка, який ми ігноруємо. Я міг би зробити краще, якби у Дж було більше листів для повторного використання, але це не так, так добре.
/*program1*/program2
а потімprogram1/*program2*/
? Я думаю, вам слід заборонити коментарі.