<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=MineSweeper%2FLeonardong</id>
	<title>MineSweeper/Leonardong - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=MineSweeper%2FLeonardong"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=MineSweeper/Leonardong&amp;action=history"/>
	<updated>2026-05-14T19:35:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=MineSweeper/Leonardong&amp;diff=34662&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=MineSweeper/Leonardong&amp;diff=34662&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; # 3h 2m 51s&lt;br /&gt;
 class MineGround:&lt;br /&gt;
     def __init__(self, aRowSize, aColSize, aInfo ):&lt;br /&gt;
         self.ground = list()&lt;br /&gt;
         self.rowSize = aRowSize&lt;br /&gt;
         self.colSize = aColSize&lt;br /&gt;
         for row in range( aRowSize ):&lt;br /&gt;
             self.ground.append( [None] * aColSize )&lt;br /&gt;
         for row in range( aRowSize ):&lt;br /&gt;
             for col in range( aColSize ):&lt;br /&gt;
                 self.ground[row][col] = Room( aInfo[row][col] )&lt;br /&gt;
         &lt;br /&gt;
     def getZone( self, aRow, aCol ):&lt;br /&gt;
         if aRow &amp;amp;lt; 0 or aRow &amp;amp;gt;= self.rowSize or\&lt;br /&gt;
            aCol &amp;amp;lt; 0 or aCol &amp;amp;gt;= self.colSize:&lt;br /&gt;
             return Room.safyZone()&lt;br /&gt;
         return self.ground[aRow][aCol]&lt;br /&gt;
     &lt;br /&gt;
 class Room:&lt;br /&gt;
     def __init__(self, aKind):&lt;br /&gt;
         self.kind = aKind&lt;br /&gt;
     def equals( self, aRoom ):&lt;br /&gt;
         return self.kind is aRoom.kind&lt;br /&gt;
     def mine(): # static method&lt;br /&gt;
         return Room(&amp;quot;*&amp;quot;)&lt;br /&gt;
     mine = staticmethod( mine )&lt;br /&gt;
     def safyZone(): # static method&lt;br /&gt;
         return Room(&amp;quot;.&amp;quot;)&lt;br /&gt;
     safyZone = staticmethod( safyZone )&lt;br /&gt;
 &lt;br /&gt;
 class MineSweeper:&lt;br /&gt;
     def __init__(self, aGround):&lt;br /&gt;
         self.ground = aGround&lt;br /&gt;
         self.direction =\&lt;br /&gt;
             ( (-1,-1),  (-1,0), (-1,1),\&lt;br /&gt;
               (0,-1),           (0, 1),\&lt;br /&gt;
               (1,-1),   (1,0),  (1,1))&lt;br /&gt;
 &lt;br /&gt;
     def computeMineCount( self, aRow, aCol ):&lt;br /&gt;
         count = 0&lt;br /&gt;
         for d in self.direction:&lt;br /&gt;
             if Room.mine().equals(self.ground.getZone( aRow + d[0], aCol + d[1])):&lt;br /&gt;
                 count = count + 1&lt;br /&gt;
         return count&lt;br /&gt;
     &lt;br /&gt;
     def sweep( self ):&lt;br /&gt;
         result = [&amp;quot;&amp;quot;] * self.ground.rowSize&lt;br /&gt;
         for row in range( self.ground.rowSize ):&lt;br /&gt;
             for col in range ( self.ground.colSize ):&lt;br /&gt;
                 if Room.safyZone().equals( self.ground.getZone(row,col) ):&lt;br /&gt;
                     result[row] = result[row] + str( self.computeMineCount(row, col) )&lt;br /&gt;
                 else:&lt;br /&gt;
                     result[row] = result[row] + &amp;quot;*&amp;quot;&lt;br /&gt;
         return result&lt;br /&gt;
     def run():&lt;br /&gt;
         rowSize = input()&lt;br /&gt;
         colSize = input()&lt;br /&gt;
         info = [&amp;quot;&amp;quot;] * rowSize&lt;br /&gt;
         for i in range(rowSize):&lt;br /&gt;
             info[i] = input()&lt;br /&gt;
         &lt;br /&gt;
         afterSweep = MineSweeper( MineGround(rowSize, colSize, info) ).sweep()&lt;br /&gt;
         for line in afterSweep:&lt;br /&gt;
             print line&lt;br /&gt;
     run = staticmethod(run)&lt;br /&gt;
             &lt;br /&gt;
 #########################################################################           &lt;br /&gt;
 import unittest&lt;br /&gt;
 &lt;br /&gt;
 class MineSweeperTestCase(unittest.TestCase):&lt;br /&gt;
     def test3x5example(self):&lt;br /&gt;
         info = [&amp;quot;**...&amp;quot;,\&lt;br /&gt;
                 &amp;quot;.....&amp;quot;,\&lt;br /&gt;
                 &amp;quot;.*...&amp;quot;]&lt;br /&gt;
         sweeper = MineSweeper(MineGround(3,5, info))&lt;br /&gt;
         &lt;br /&gt;
         expected = [&amp;quot;**100&amp;quot;,\&lt;br /&gt;
                     &amp;quot;33200&amp;quot;,\&lt;br /&gt;
                     &amp;quot;1*100&amp;quot;]&lt;br /&gt;
         self.assertEquals( expected, sweeper.sweep() )&lt;br /&gt;
         &lt;br /&gt;
     def testComputeMineCount(self):&lt;br /&gt;
         sweeper = MineSweeper(MineGround(1,1, [&amp;quot;.&amp;quot;]))&lt;br /&gt;
         self.assertEquals( 0, sweeper.computeMineCount(0,0) )&lt;br /&gt;
         sweeper = MineSweeper(MineGround(1,2, [&amp;quot;*.&amp;quot;]))&lt;br /&gt;
         self.assertEquals( 1, sweeper.computeMineCount(0,1) )&lt;br /&gt;
         self.assertEquals( 0, sweeper.computeMineCount(0,0) )&lt;br /&gt;
         &lt;br /&gt;
 class MineGroundTestCase(unittest.TestCase):        &lt;br /&gt;
     def testGetZone(self):&lt;br /&gt;
         ground = MineGround(1,1, [&amp;quot;*&amp;quot;])&lt;br /&gt;
         self.failUnless( Room.mine().equals( ground.getZone(0,0) ) )&lt;br /&gt;
         ground = MineGround(1,1, [&amp;quot;.&amp;quot;])&lt;br /&gt;
         self.failUnless( Room.safyZone().equals( ground.getZone(0,0) ) )&lt;br /&gt;
         self.failUnless( Room.safyZone().equals( ground.getZone(-1,0) ))&lt;br /&gt;
 &lt;br /&gt;
 #########################################################################&lt;br /&gt;
 if __name__ == &amp;#039;__main__&amp;#039;: &lt;br /&gt;
 ##    unittest.main()&lt;br /&gt;
     MineSweeper.run()&lt;br /&gt;
&lt;br /&gt;
== Thread ==&lt;br /&gt;
작은 단계를 밟아가면서 TDD를 적용하다 보니까 시간이 많이 걸렸다. 게다가 모르는 파이선 문법 찾는데도 시간이 걸렸다. 파이선의 새로운 기능을 알게 되어 신기하다. 다음 문제를 풀어볼까나. --[[Leonardong]]&lt;br /&gt;
----&lt;br /&gt;
[[MineSweeper]], [[AOI]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>