J - 87 znak
Naiwna próba tego w J. Nie ma zastosowania standardowej biblioteki, choć wątpię, by przy jej użyciu byłaby krótsza.
((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'"_)
Linia na górze to czasownik przyjmujący liczbę całkowitą i diagnozujący jej szczęście i pierwotność jako ciąg wyjściowy. Druga linia to wyrażenie zwracające ciąg znaków eighty-seven, a trzecia to stała funkcja, która robi to samo. Dołączyłem oba, ponieważ były one możliwe i ponieważ nie wiem, jakie będą rozstrzygnięcia w odpowiedziach funkcji w przeciwieństwie do odpowiedzi programowych, a J nie ma czegoś takiego jak funkcje bez argumentu - po prostu dajesz funkcji fałszywy argument.
Tracimy większość znaków, sprawdzając szczęście. (,[:+/@:*:,.&.":@{:)jest głównym ciałem, które sumuje kwadraty cyfr liczby i (1-{:e.}:)jest testem, czy ta liczba już się pojawiła. sad`happy{~1 e.zamienia to w wynik słowny, a my dołączamy to z przodu łańcucha non-prime, potencjalnie usuwając cztery znaki, jeśli liczba rzeczywiście była liczbą pierwszą.
Na anagramie po prostu ukrywamy wszystkie bity, które nie są 'eighty-seven'w ciągu, który ignorujemy. Mógłbym zrobić lepiej, gdyby J miał więcej listów do ponownego wykorzystania, ale tak nie jest, więc cóż.
/*program1*/program2tegoprogram1/*program2*/? Myślę, że powinieneś zabronić komentarzy.