Verifica se un determinato numero è un numero di vampiro


14

EDIT: Nell'interesse di aumentare la complessità, ho aggiunto di più alla sfida.

In matematica, un numero di vampiro (o vero numero di vampiro) è un numero naturale composto v, con un numero pari di cifre n, che può essere scomposto in due numeri interi xey ciascuno con n / 2 cifre e non entrambi con zero finali, dove v contiene precisamente tutte le cifre di xe di y, in qualsiasi ordine, contando la molteplicità. xey sono chiamate zanne.

Maggiori informazioni sul numero di vampiri

Numeri di pseudovampiro

I numeri di pseudovampiri sono simili ai numeri di vampiri, tranne per il fatto che le zanne di un numero di pseudovampiri a n cifre non devono necessariamente essere lunghe n / 2 cifre. I numeri di pseudovampiri possono avere un numero dispari di cifre, ad esempio 126 = 6 × 21.

Ingresso

Accetta i numeri dalla riga di comando o dallo stdin

Produzione

  • "1260 = 21 * 60" (prima una zanna più piccola se il numero è un vampiro.)
  • "1261 non è un numero di vampiro." (se il numero non è un numero di vampiro)
  • "126 = 6 * 21". (se il numero è un numero Pseudovampire)

EDIT: se il numero ha più zanne, visualizzalo in questo modo.

x = fang1a * fang1b = fang2a * fang2b

Ho deciso di non includere Prime vampire, non esagererò.
via

Forse dovrei aggiungere la stampa se è un vampiro o uno pseudo-vampiro, che ne dite ragazzi?
via

Che dire di più paia di zanne?
Gnibbler,

@gnibbler, lo ammetterò.
via

1
@Nakilon, stampali in ordine crescente. fang1aappare prima fang2aquandofang1a < fang2a
st0le

Risposte:


5

Python - 188 caratteri

Non fa i numeri di Pseudovampire

from itertools import*
n=input()
a=[]
for i in map("".join,permutations(`n`)):x,y=int(i[::2]),int(i[::-2]);a+=[(x,y)]*(x*y==n)
print n,a and"=%s*%s"%min(a)or"is not a Vampire Number"

Inoltre non gestisce più coppie (per 125460) e lo spazio perso dopo =.
Nakilon,

(controllato qui )
Nakilon,

@Nakilon, questa risposta precede l'emendamento per più coppie
gnibbler

4

Rubino, 190 caratteri

o=[]
[*x.chars].permutation{|r|a=r.pop(x.size/2).join.to_i
r=r.join.to_i
o|=[[a,r]]if a<=r&&a*r==x.to_i}
puts x+(o.any? ? o.map{|i|" = "+i*" * "}*"":" is not a Vampire Number.")
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.