Belirli bir sayının bir Vampir Numarası olup olmadığını test edin


14

EDIT: karmaşıklığı artırmak amacıyla, ben meydan daha fazla ekledim.

Matematikte, bir vampir numarası (veya gerçek vampir numarası), her ikisi de sıfır olmak üzere değil, her biri n / 2 basamaklı iki x ve y tamsayı olarak sayılabilen, çift sayıda n içeren bileşik doğal bir v sayısıdır, burada v, x ve y'den gelen tüm basamakları, herhangi bir sırayla, çokluk sayarak içerir. x ve y'ye dişler denir.

Vampir Numarası hakkında daha fazla bilgi

Pseudovampire numaraları

Pseudovampire sayıları vampir sayılarına benzer, ancak n basamaklı bir psödovampir sayısının dişlerinin n / 2 basamak uzunluğunda olması gerekmez. Pseudovampire sayılarının tek bir rakamı olabilir, örneğin 126 = 6 × 21.

Giriş

Komut satırından veya stdin'den Sayıları Kabul Et

Çıktı

  • "1260 = 21 * 60" (sayı Vampirse önce daha küçük diş.)
  • "1261 bir Vampir Numarası değil." (sayı bir Vampir numarası değilse)
  • "126 = 6 * 21". (sayı bir Pseudovampire numarasıysa)

DÜZENLE: Sayıda birden çok diş varsa, bunu görüntüleyin.

x = fang1a * fang1b = fang2a * fang2b

Başbakan vampirlerini dahil etmemeye karar verdim, onunla denize girmeyeceğim.
st0le

Belki bir Vampir veya bir PseudoVampire ise Baskı eklemeliyim, ne diyorsunuz?
st0le

Birden fazla diş çifti ne olacak?
gnibbler

@gnibbler, onu değiştireceğim.
st0le

1
@Nakilon, onları artan sırada yazdırın. fang1adaha önce fang2ane zaman görünürfang1a < fang2a
st0le

Yanıtlar:


5

Python - 188 karakter

Pseudovampire sayıları yapmaz

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"

Ayrıca birden fazla çift (125460 için) ve sonra kaçırılan alanı işlemez =.
Nakilon

( burada işaretlenmiş )
Nakilon

@Nakilon, bu cevap birden fazla çift için değişiklikten önce
gnibbler

4

Ruby, 190 karakter

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.")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.