J - 87 char
Uma tentativa ingênua disso em J. Nenhum uso da biblioteca padrão, embora eu duvide que seria mais curto usando isso.
((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'"_)
A linha no topo é um verbo pegando um número inteiro e diagnosticando sua felicidade e primalidade como uma sequência de saída. A segunda linha é uma expressão retornando a string eighty-seven
, enquanto a terceira é uma função constante fazendo o mesmo. Incluí os dois porque ambos são possíveis e porque não sei qual será a decisão sobre as respostas das funções em oposição às respostas dos programas, e J não possui funções sem argumentos - você apenas atribui uma função a argumento fictício.
Perdemos a maioria dos caracteres procurando por felicidade. (,[:+/@:*:,.&.":@{:)
é o corpo principal que soma os quadrados dos dígitos de um número e (1-{:e.}:)
é o teste para determinar se esse número já ocorreu. sad`happy{~1 e.
transforma isso em um resultado de palavra e o anexamos à frente da string non-prime
, potencialmente cortando quatro caracteres se o número era realmente primo.
No anagrama, apenas escondemos todos os bits que não estão 'eighty-seven'
em uma string que ignoramos. Eu poderia fazer melhor se J tivesse mais cartas para reutilizar, mas não, então tudo bem.
/*program1*/program2
e depoisprogram1/*program2*/
? Eu acho que você deve proibir comentários.