ทดสอบว่าตัวเลขที่ระบุเป็น Vampire Number หรือไม่


14

แก้ไข:เพื่อเพิ่มความซับซ้อนฉันได้เพิ่มความท้าทายมากขึ้น

ในคณิตศาสตร์หมายเลขแวมไพร์ (หรือหมายเลขแวมไพร์จริง) เป็นจำนวนธรรมชาติประกอบ v, ด้วยจำนวนเลข n, ที่สามารถแยกออกเป็นสองจำนวนเต็ม x และ y แต่ละตัวมี n / 2 หลักและไม่ใช่ทั้งสองต่อท้ายศูนย์ โดยที่ v ประกอบด้วยตัวเลขทั้งหมดอย่างแม่นยำจาก x และ y ในลำดับใด ๆ การนับหลายหลาก x และ y เรียกว่าเขี้ยว

เพิ่มเติมเกี่ยวกับหมายเลขแวมไพร์

หมายเลข Pseudovampire

หมายเลข Pseudovampire นั้นคล้ายกับหมายเลข vampire ยกเว้นว่าเขี้ยวของหมายเลข pseudovampire n หลักนั้นไม่จำเป็นต้องมีความยาว n / 2 หลัก หมายเลข Pseudovampire สามารถมีตัวเลขเป็นเลขคี่ได้เช่น 126 = 6 × 21

อินพุต

ยอมรับ Numbers จาก command line หรือ stdin

เอาท์พุต

  • "1260 = 21 * 60" (ฝางเล็กกว่าก่อนหากจำนวนนั้นเป็นแวมไพร์)
  • "1261 ไม่ใช่หมายเลขแวมไพร์" (ถ้าไม่ใช่หมายเลขแวมไพร์)
  • "126 = 6 * 21" (ถ้าหมายเลขนั้นเป็นหมายเลข Pseudovampire)

แก้ไข: หากหมายเลขมีเขี้ยวหลายตัวให้แสดงเช่นนั้น

x = fang1a * fang1b = fang2a * fang2b

ฉันตัดสินใจที่จะไม่รวม Prime vampire ไว้ด้วยฉันจะไม่ไปลงน้ำด้วย
st0le

บางทีฉันควรเพิ่มการพิมพ์ถ้าเป็น Vampire หรือ PseudoVampire พวกคุณพูดว่าอะไร
st0le

แล้วเขี้ยวหลายคู่ล่ะ?
gnibbler

@gnibbler ฉันจะทำลายมัน
st0le

1
@Nakilon พิมพ์ตามลำดับที่เพิ่มขึ้น fang1aปรากฏก่อนfang2aเมื่อfang1a < fang2a
st0le

คำตอบ:


5

Python - 188 ตัวอักษร

ไม่ทำหมายเลข 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"

ยังไม่ได้จัดการหลายคู่ (สำหรับ 125460) และพื้นที่ที่พลาด=ไป
Nakilon

(ตรวจสอบที่นี่ )
Nakilon

@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.")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.