armstrong.rb
· 2.2 KiB · Ruby
Bruto
KNOWN_ARMSTRONG = [
1,
2,
3,
4,
5,
6,
7,
8,
9,
153,
370,
371,
407,
1634,
8208,
9474,
54748,
92727,
93084,
548834,
1741725,
4210818,
9800817,
9926315,
24678050,
24678051,
88593477,
146511208,
472335975,
534494836,
912985153,
4679307774,
32164049650,
32164049651,
40028394225,
42678290603,
44708635679,
49388550606,
82693916578,
94204591914,
28116440335967,
4338281769391370,
4338281769391371,
21897142587612075,
35641594208964132,
35875699062250035,
1517841543307505039,
3289582984443187032,
4498128791164624869,
4929273885928088826,
63105425988599693916,
128468643043731391252,
449177399146038697307,
21887696841122916288858,
27879694893054074471405,
27907865009977052567814,
28361281321319229463398,
35452590104031691935943,
174088005938065293023722,
188451485447897896036875,
239313664430041569350093,
1550475334214501539088894,
1553242162893771850669378,
3706907995955475988644380,
3706907995955475988644381,
4422095118095899619457938,
121204998563613372405438066,
121270696006801314328439376,
128851796696487777842012787,
174650464499531377631639254,
177265453171792792366489765,
14607640612971980372614873089,
19008174136254279995012734740,
19008174136254279995012734741,
23866716435523975980390369295,
1145037275765491025924292050346,
1927890457142960697580636236639,
2309092682616190307509695338915,
17333509997782249308725103962772,
186709961001538790100634132976990,
186709961001538790100634132976991,
1122763285329372541592822900204593,
12639369517103790328947807201478392,
12679937780272278566303885594196922,
1219167219625434121569735803609966019,
12815792078366059955099770545296129367,
115132219018763992565095597973971522400,
115132219018763992565095597973971522401
]
class Integer
def is_armstrong?
digits = self.to_s.chars.map(&:to_i)
self == digits.map{_1**digits.count}.inject(&:+)
end
end
def test
numbers = KNOWN_ARMSTRONG
KNOWN_ARMSTRONG.count.times{numbers << rand(KNOWN_ARMSTRONG.last)}
numbers.sort.each do |x|
puts "#{x} is #{'not ' unless x.is_armstrong?}an Armstrong number"
end
end
test
| 1 | KNOWN_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 | |
| 92 | class 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 | end |
| 98 | |
| 99 | def test |
| 100 | numbers = KNOWN_ARMSTRONG |
| 101 | KNOWN_ARMSTRONG.count.times{numbers << rand(KNOWN_ARMSTRONG.last)} |
| 102 | numbers.sort.each do |x| |
| 103 | puts "#{x} is #{'not ' unless x.is_armstrong?}an Armstrong number" |
| 104 | end |
| 105 | end |
| 106 | |
| 107 | test |