최근 방문자들
풀이
Find the Self Number(Python)
2008. 07. 17. 19:37 | 조회수(129)
http://club.filltong.net/codingdojo/4691
def generate(n):
return sum(map(lambda c : int(c), str(n))) + n
def findSelfNumbers(to):
return list(set(range(1, to+1)) - set([generate(n) for n in range(1, to+1)]))
class TestSelfNumber(unittest.TestCase):
def testGenerator(self):
self.assertEqual(9+1+91, generate(91))
def testSelfNumber(self):
self.assertEqual([1, 3, 5, 7, 9, 20, 31], findSelfNumbers(31))
if __name__ == '__main__':
print "Sum of Self Numbers from 1 to 5000 = %d" % sum(findSelfNumbers(5000))
# unittest.main(argv=('','-v'))
어째 아샬님 코드랑 너무 흡사한데...(..)
이건 걍 심심해서 만들어 본 한 줄 코드(..)
print "Sum of Self Numbers from 1 to 5000 = %d" % sum(list(set(range(1, 5000+1)) - set(map(lambda n : sum(map(lambda c : int(c), str(n))) + n, range(1, 5000+1)))))
댓글(3)
-
홍민희:
list comprehension이나 map/filter보다 generator expression을 쓰면 좀 더 짧게 표현 가능할 것 같습니다.
N = 5000
print "Sum of Self Numbers from 1 to 5000 = %d" % sum(list(set(xrange(1, N + 1)) - set(sum(int(c) for c in str(n)) + n for n in xrange(1, N + 1)))) 2008. 07. 17. 20:09 -
달룟:
스몰토크로는 요렇게...
(1 to: 5000) copyWithoutAll: ((1 to: 5000) collect: [: number | (number asString asArray collect: [: character | character digitValue ]) sum + number ]) 2008. 07. 18. 07:27 -
강성희:
홍민희 // 그래서인지 요즘은 lambda보다 List comprehension을 더 자주 사용하러고 노력하고 있습니다. ;ㅂ;
달룟 // 오오오...만만치 않군요. +_+ 2008. 07. 22. 10:56







