Перевірте, чи задане число - вампірський номер


14

EDIT: В інтересах підвищення складності я додав ще більше завдання.

У математиці число вампіра (або справжнє число вампіра) - це складене натуральне число v, з парним числом цифр n, яке можна розділити на два цілі числа x і y, кожне з n / 2 цифр, а не обидва з нульовими нулями, де v містить точно всі цифри від x і від y в будь-якому порядку, рахуючи кратність. x і y називаються іклами.

Більше про номер вампіра

Числа псевдовимпіри

Номери псевдовимпіри схожі на номери вампірів, за винятком того, що ікла n-значного числа псевдовимпіри не повинні мати довжину n / 2 цифри. Числа псевдовимпіри можуть мати непарну кількість цифр, наприклад 126 = 6 × 21.

Вхідні дані

Прийняти номери з командного рядка або stdin

Вихідні дані

  • "1260 = 21 * 60" (перший розмір менший, якщо число вампір.)
  • "1261 - це не номер вампіра." (якщо число не є вампірським номером)
  • "126 = 6 * 21". (якщо число - це псевдоімперське число)

РЕДАКТУВАННЯ: Якщо номер має декілька кнопок, відобразіть його так.

x = fang1a * fang1b = fang2a * fang2b

Я вирішив не включати прем'єр-вампіра, я не буду надто переборювати з цим.
st0le

Можливо, я повинен додати «Друк», якщо це вампір або псевдоВампір, що ви кажете?
st0le

А як щодо кількох пар ікла?
гніблер

@ gnibbler, я його поправлю.
st0le

1
@Nakilon, друкуйте їх у порядку зростання. fang1aз'являється раніше, fang2aколиfang1a < fang2a
st0le

Відповіді:


5

Пітон - 188 символів

Не робить чисел Псевдомімпіра

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"

Також не обробляє кілька пар (для 125460) та пропущений простір після =.
Накілон

(перевірено тут )
Накілон

@Nakilon, ця відповідь передує поправці для декількох пар
гніблер

4

Рубі, 190 ч

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.")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.