Utoljára aktív 1 month ago

armstrong.rb Eredeti
1KNOWN_ARMSTRONG = [
2 1,
3 2,
4 3,
5 4,
6 5,
7 6,
8 7,
9 8,
10 9,
11 153,
12 370,
13 371,
14 407,
15 1634,
16 8208,
17 9474,
18 54748,
19 92727,
20 93084,
21 548834,
22 1741725,
23 4210818,
24 9800817,
25 9926315,
26 24678050,
27 24678051,
28 88593477,
29 146511208,
30 472335975,
31 534494836,
32 912985153,
33 4679307774,
34 32164049650,
35 32164049651,
36 40028394225,
37 42678290603,
38 44708635679,
39 49388550606,
40 82693916578,
41 94204591914,
42 28116440335967,
43 4338281769391370,
44 4338281769391371,
45 21897142587612075,
46 35641594208964132,
47 35875699062250035,
48 1517841543307505039,
49 3289582984443187032,
50 4498128791164624869,
51 4929273885928088826,
52 63105425988599693916,
53 128468643043731391252,
54 449177399146038697307,
55 21887696841122916288858,
56 27879694893054074471405,
57 27907865009977052567814,
58 28361281321319229463398,
59 35452590104031691935943,
60 174088005938065293023722,
61 188451485447897896036875,
62 239313664430041569350093,
63 1550475334214501539088894,
64 1553242162893771850669378,
65 3706907995955475988644380,
66 3706907995955475988644381,
67 4422095118095899619457938,
68 121204998563613372405438066,
69 121270696006801314328439376,
70 128851796696487777842012787,
71 174650464499531377631639254,
72 177265453171792792366489765,
73 14607640612971980372614873089,
74 19008174136254279995012734740,
75 19008174136254279995012734741,
76 23866716435523975980390369295,
77 1145037275765491025924292050346,
78 1927890457142960697580636236639,
79 2309092682616190307509695338915,
80 17333509997782249308725103962772,
81 186709961001538790100634132976990,
82 186709961001538790100634132976991,
83 1122763285329372541592822900204593,
84 12639369517103790328947807201478392,
85 12679937780272278566303885594196922,
86 1219167219625434121569735803609966019,
87 12815792078366059955099770545296129367,
88 115132219018763992565095597973971522400,
89 115132219018763992565095597973971522401
90]
91
92class Integer
93 def is_armstrong?
94 digits = self.to_s.chars.map(&:to_i)
95 self == digits.map{_1**digits.count}.inject(&:+)
96 end
97
98 def skippable?
99 self.to_s.size > 31 && self.to_s.chars.uniq.size != 10
100 end
101end
102
103def test
104 numbers = KNOWN_ARMSTRONG
105 KNOWN_ARMSTRONG.count.times{numbers << rand(KNOWN_ARMSTRONG.last)}
106 numbers.sort.each do |x|
107 puts "#{x} is #{'not ' unless x.is_armstrong?}an Armstrong number"
108 end
109end
110
111(1..115132219018763992565095597973971522401).each{|i| next if i.skippable?; puts i if i.is_armstrong?}