Skip to content

Instantly share code, notes, and snippets.

@rubydoc
Created September 5, 2013 04:17
Show Gist options
  • Save rubydoc/6446036 to your computer and use it in GitHub Desktop.
Save rubydoc/6446036 to your computer and use it in GitHub Desktop.
Self Number
source 'https://rubygems.org'
gem 'rspec'
# 어떤 자연수 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
@spearsky
Copy link

spearsky commented Sep 5, 2013

이문제 보면 볼수록 재밌어요 ㅋㅋ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment