Проверьте, является ли данный номер номером вампира


14

РЕДАКТИРОВАТЬ: В интересах увеличения сложности, я добавил больше к проблеме.

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

Подробнее о номере вампира

Псевдовампир номера

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

вход

Принять номера из командной строки или стандартного ввода

Выход

  • «1260 = 21 * 60» (сначала маленький клык, если число - вампир.)
  • «1261 - это не номер вампира». (если номер не номер вампира)
  • «126 = 6 * 21». (если это номер псевдовампира)

РЕДАКТИРОВАТЬ: Если номер имеет несколько клыков, отобразите его так.

x = fang1a * fang1b = fang2a * fang2b

Я решил не включать прайм-вампиров, я не буду переборщить с этим.
st0le

Может быть, я должен добавить печать, если это вампир или псевдо-вампир, что вы, ребята, говорите?
st0le

А как насчет нескольких пар клыков?
gnibbler

@gnibbler, я исправлю это.
st0le

1
@ Накилон, печатай их в порядке возрастания. 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, этот ответ предшествует поправке для нескольких пар
gnibbler

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.