U E D R , A S I H C RSS

Jolly Jumpers/Leonardong

~cpp 
import sys
class JollyJumper:
    def statementForSeries( self, aSeries ):
        if self.checkJolly( aSet = self.getSetOfDiffence( aSeries[1:] ),
                            aN = aSeries[0] ):
            return "Jolly"
        return "Not Jolly"
    def checkJolly( self, aSet, aN ):
        for i in range( 1, aN ):
            if i not in aSet:
                return False
        return True
    def getSetOfDiffence( self, aSeries ):
        resultSet = {}
        for i in range( len(aSeries) - 1 ):
            resultSet[abs(aSeries[i + 1]-aSeries[i])] = "exist"
        return resultSet
    def run():
        while True:
            inputString = sys.stdin.readline()
            seriesChar = inputString.split()
            if seriesChar[0] is '0':
                break
            seriesInt = []
            for char in seriesChar:
                seriesInt.append( int(char) )
            print JollyJumper().statementForSeries( seriesInt )
    run = staticmethod(run)
#########################################################################           
import unittest

class JollyJumperTestCase(unittest.TestCase):
    def setUp(self):
        self.jj = JollyJumper()
    def test12(self):
        self.assertEquals("Jolly",
                          self.jj.statementForSeries( aSeries = [2,6,7] ) )
    def test13(self):
        self.assertEquals("Not Jolly",
                          self.jj.statementForSeries( aSeries = [2,1,3] ) )
    def testCheckJolly(self):
        self.assertEquals(True,
                          self.jj.checkJolly(
                              aSet = {3:"exist", 2:"exist", 1:"exist"},
                              aN = 4) )
        self.assertEquals(True,
                          self.jj.checkJolly(
                              aSet = {1:"exist"},
                              aN = 2) )
    def testGetSetOfDiffernce(self):
        self.assertEquals( str(self.jj.getSetOfDiffence( aSeries = [5,6,8] )),
                           str({2:"exist", 1:"exist"}) )
        self.assertEquals( str(self.jj.getSetOfDiffence( aSeries = [7,6,4] )),
                           str({2:"exist", 1:"exist"}) )
    def testSample(self):
        series = [4, 1,4,2,3]
        self.assertEquals("Jolly", self.jj.statementForSeries( series ) )
        series = [4, 5, 1, 4, 2, 3]
        self.assertEquals("Jolly", self.jj.statementForSeries( series ) )
        series = [5, 5, 1, 4, 2, -1, 6]
        self.assertEquals("Not Jolly", self.jj.statementForSeries( series ) )

#########################################################################
if __name__ == '__main__': 
##    unittest.main()
    JollyJumper.run()

Thread

처음에 리스트에 차를 집어넣은 후 정렬하려 했다가 집합 개념 떠올라 그 쪽으로 해결했다. statementForSeries메서드 부분에 있던 CheckJolly메서드를 따로 테스트하면서 ExtractMethod를 하게 되었고, 차가 음수인 경우도 테스트를 통해 알게되었다. 보폭 아직 좁지만 술술 진행한 문제다.

바뀐 요구사항에 맞게 수정하는데 1분 30초가 걸렸다. 파 상당히 유연하다는 느낌 강하게 들었다. 러너부분은 마음에 안 든다.

실제 코딩에 들어가기 전에 생각하는 시간을 가진다. 생각하는프로그래밍에서 읽은 게으른 프로그래머가 될 필요가 있겠다. 가능한 디자인 공간을 5분라도 탐구하고 그 가운데 가장 괜찮은 놈으로 시도해봐야겠다. --Leonardong

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:34
Processing time 0.0092 sec