J - 87 char
Un intento ingenuo de esto en J. Sin uso de la biblioteca estándar, aunque dudo que se acorte más al usar eso.
((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'"_)
La línea en la parte superior es un verbo que toma un número entero y diagnostica su felicidad y primalidad como una cadena de salida. La segunda línea es una expresión que devuelve la cadena eighty-seven
, mientras que la tercera es una función constante que hace lo mismo. Incluí ambos porque ambos eran posibles y porque no sé cuál será la decisión sobre las respuestas de la función en lugar de las del programa, y J no tiene funciones que no contengan argumentos: simplemente le da a una función un argumento ficticio
Perdemos la mayoría de los caracteres que buscan la felicidad. (,[:+/@:*:,.&.":@{:)
es el cuerpo principal que suma los cuadrados de los dígitos de un número, y (1-{:e.}:)
es la prueba de si ese número ya ha ocurrido. sad`happy{~1 e.
convierte esto en un resultado de palabra, y lo adjuntamos al frente de la cadena non-prime
, potencialmente cortando cuatro caracteres si el número era realmente primo.
En el anagrama simplemente ocultamos todos los bits que no están 'eighty-seven'
en una cadena que ignoramos. Podría hacerlo mejor si J tuviera más letras para reutilizar, pero no es así, así que bueno.
/*program1*/program2
y luegoprogram1/*program2*/
? Creo que deberías rechazar los comentarios.