Codice Anagramming


10

Proviamo di nuovo.

Lo scopo di questo concorso è quello di creare due pezzi di codice che siano anagrammi l'uno dell'altro (i due devono contenere gli stessi byte in un ordine diverso) e faranno i seguenti compiti:

  • Uno deve verificare se un numero immesso è felice o primo e emettere se il numero è uno (ad esempio, 7deve emettere happy primee 4deve emettere sad non-prime).

  • L'altro deve emettere la sua dimensione di codice in byte come una parola (un programma da 60 byte emetterebbe sixty, un programma da 39 byte emetterebbe thirty-nine).

Se è necessario chiarire le regole, non esitate a dirmelo.

Questa è una competizione di codice golf, quindi vince il programma più breve!


Cosa impedisce di fare /*program1*/program2e quindi program1/*program2*/? Penso che dovresti rifiutare i commenti.
William Barbosa,

@WilliamBarbosa Perché? Non sarà certo una soluzione ottimale.
Martin Ender,

Ma potresti anche condividere alcune parti e non condividerne altre, il che rende molto più facile
orgoglioso haskeller il

1
@proudhaskeller Il divieto di commenti non lo risolve però. Puoi sempre inserire i caratteri in stringhe, nomi di variabili o parti del codice che non vengono eseguiti per altri motivi.
Martin Ender,

1
FWIW, non credo che avresti dovuto cancellare la tua richiesta. OP o no, è stata una risposta interessante.
Dennis,

Risposte:


6

CJam, 80 49 48 caratteri

AGGIORNAMENTO : ispirato dall'implementazione di Dennis per calcolare la somma dei quadrati delle cifre, ecco una versione più breve

Felice / Triste Prime / Non prime:

ri:T{Ab2f#:+}G*X="happy""sad"?STmp4*"non-prime">

Come funziona:

ri:T                                "Read input as integer and store it in T"
    {       }G*                     "Run this code block 16 times"
     Ab                             "Convert the number into base 10"
       2f#                          "Calculate square of each digit"
          :+                        "Sum all the squared digits and put the sum on stack"
X=                                  "Compare the sum after 16th iteration to 1"
  "happy""sad"?                     "If sum is 1, put `happy` to stack, otherwise `sad`"
               ST                   "Put space on stack then put the value of T on stack"
                 mp4*               "Put 4 to stack if input is prime, otherwise 0"
                     "non-prime">   "Put `non-prime` to stack and slice out first four characters if the input number is prime"

quarantotto

""A"forTy-eiGhT""ri:{b2#:+}*X=appsadSmp4*nnpm>"?

Come funziona:

""                                  "Push empty string to stack"
  A                                 "Push 10 to stack"
   "forTy-eiGhT"                    "Push `forTy-eiGhT` to stack"
                "ri:....pm>"        "Push this string to stack too"
                            ?       "Keep `forTy-eiGhT` on stack and pop the other string"

Provalo online

Il primo programma legge il numero da STDIN


La mia soluzione originale di 80 caratteri

Felice / Triste Prime / Non prime:

r:N{1/~]{i_*T+:T;}/T_s\1=:H!X):XK<&0:T;}g;H"happy""sad"?SNimp"prime"_"non-"\+?:Y

ottanta

"eigHTY""r:N{1/~]{i_*T+:T}/_s\1=:H!X):XK<&0:T}happysad?SNmp";"prim_";"non-\?:+";

4

CJam, 50 49 byte

Test di felicità e primalità

li_{Ab2f#:+}30*(T="happy""sad"?S@mp4*"non-prime">

Legge un numero da STDIN. Entrambi i test funzionano solo per numeri interi a 64 bit.

Provalo online.

Propria lunghezza

A"forTy-nine""l_{b2#:+}30*(=happsadS@mp4*pim>"?""

Stampa per le nove .


+1 per il miglioramento a 31 byte e "forTy-nine".
Josiah Winslow,

3

Golfscript - 81

Questo programma verifica se un numero è felice e / o primo.

~.:a;0.{).a\%!@+\}a*;2="""non-"if"prime"@ {`0\{48-.*+}/}9*("sad ""happy "if@@#get

Questo programma, un anagramma dell'ultimo, produce "ottantuno" (il suo byte come una parola).

;"eighty-one"#   !""""""""%()***++-..../002489:;=@@@@\\\`aaaaadffiimnppprs{{{}}}~

Questo dovrebbe servire da esempio.


2
Hm, fornire un'implementazione di riferimento per una sfida del golf del codice in GolfScript potrebbe non essere la migliore idea. Credo che questo sia abbastanza difficile da battere e quindi leggermente scoraggiante per i partecipanti.
Martin Ender,

Vedo che le persone non si accorgono che hai scritto la domanda e ti hanno votato ... Sono totalmente d'accordo con Martin.
orgoglioso haskeller,

@proudhaskeller Non c'è assolutamente nulla di sbagliato nell'auto-risposta.
Justin,

Dico che non c'è nulla di sbagliato nel rispondere a me stesso o nel commentare il codice.
Josiah Winslow,

2
@JosiahWinslow Non c'è niente di sbagliato in questo. Sto solo dicendo che potresti perdere alcune interessanti risposte più lunghe se pubblichi subito un'ottima soluzione.
Martin Ender,

1

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è.


Questa è una buona soluzione.
Josiah Winslow,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.