Created
September 5, 2013 04:17
-
-
Save rubydoc/6446036 to your computer and use it in GitHub Desktop.
Self Number
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source 'https://rubygems.org' | |
gem 'rspec' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 어떤 자연수 n이 있을 때, d(n)을 n의 각 자리수와 n 자신을 더한 숫자라고 정의할 때, | |
# n을 d(n)의 generator라고 한다. 예를 들면 d(91) = 9 + 1 + 91 = 101 일때, | |
# 91은 101의 generator이다. 어떤 숫자는 하나 이상의 generator를 가지는데, | |
# 100 또한 101의 generator이다. | |
# 그런데 generator가 없는 숫자들도 있는데, 이런 숫자를 인도 수학자 Kaprekar가 | |
# self number라고 이름붙였다. 1, 3, 5, 7, 9, 20, 31 등은 self number들이다. | |
# [1,5000] 구간의 모든 self number 들의 합을 구하여라. | |
# 2 1,5000까지 돌면서 generate 된 숫자를 array에서 제거 | |
# arr = 남은것은 self_numbers | |
class SelfNumber | |
def initialize(start, _end) | |
@start = start | |
@end = _end | |
@base_array = make_base_array | |
end | |
def generate(base_number) | |
base_number.to_s.split('').inject(0) { |sum, i| sum += i.to_i} + base_number | |
end | |
def make_base_array | |
(@start..@end).to_a | |
end | |
def iterate! | |
return_arr = @base_array.dup | |
@base_array.each do |i| | |
value = self.generate(i) | |
return_arr = return_arr.delete_if { |i| i == value } | |
end | |
@base_array = return_arr | |
end | |
def base_array | |
@base_array | |
end | |
end | |
p SelfNumber.new(1,5000).iterate! | |
describe SelfNumber do | |
sn = SelfNumber.new(1,2) | |
describe "generate" do | |
it "input 123 should return 129" do | |
sn.generate(123).should == 129 | |
end | |
it "should return integer" do | |
sn.generate(123).class == Fixnum | |
end | |
end | |
describe "base_array" do | |
it "should be return [1,2,3]" do | |
sn = SelfNumber.new(1,3) | |
sn.base_array.should == [1,2,3] | |
end | |
it "should be return [1,2,3,4,5,6]" do | |
sn = SelfNumber.new(1,6) | |
sn.base_array.should == [1,2,3,4,5,6] | |
end | |
end | |
describe "iterate" do | |
it "should return [1,3,5]" do | |
sn = SelfNumber.new(1,5) | |
sn.iterate! | |
sn.base_array.should == [1,3,5] | |
end | |
it "should return [1, 3, 5, 7, 9, 20, 31]" do | |
sn = SelfNumber.new(1,31) | |
sn.iterate! | |
sn.base_array.should == [1, 3, 5, 7, 9, 20, 31] | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
이문제 보면 볼수록 재밌어요 ㅋㅋ