J - 87 caratteri
Un ingenuo tentativo in questo in J. Nessun uso della libreria standard, anche se dubito che sarebbe più breve usando quello.
((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 linea in alto è un verbo che prende un numero intero e ne diagnostica la felicità e la primalità come stringa di output. La seconda riga è un'espressione che restituisce la stringa eighty-seven
, mentre la terza è una funzione costante che fa lo stesso. Ho incluso entrambi perché erano entrambi possibili e perché non so quale sarà la sentenza sulle risposte delle funzioni rispetto a quelle del programma, e J non ha una funzione come nessuna discussione - date semplicemente una funzione a argomento fittizio.
Perdiamo la maggior parte dei caratteri per verificare la felicità. (,[:+/@:*:,.&.":@{:)
è il corpo principale che somma i quadrati delle cifre di un numero ed (1-{:e.}:)
è il test per verificare se quel numero si è ancora verificato. sad`happy{~1 e.
trasforma questo in un risultato di parola e lo alleghiamo all'inizio della stringa non-prime
, eliminando potenzialmente quattro caratteri se il numero fosse effettivamente primo.
Nell'anagramma nascondiamo solo tutti i bit che non sono 'eighty-seven'
in una stringa che ignoriamo. Potrei fare di meglio se J avesse più lettere da riutilizzare, ma non è così, quindi vabbè.
/*program1*/program2
e quindiprogram1/*program2*/
? Penso che dovresti rifiutare i commenti.