Danilo Cabello avatar Danilo Cabello committed 57b778e

#1 Coding Dojo Unicamp - Campo Minado

Comments (0)

Files changed (3)

2008_08_18_campo_minado/README

+Campo minado
+============
+
+Dado um campo minado com as posições das minas, retornar para as posições vazias, quantas minas são vizinhas à ela.
+
+Exemplo:
+
+Entrada        Saída        Legenda
+__*_           01*1         _ - Espaço disponível
+____           1221         * - Mina
+_*__           1*10
+____           1110
+

2008_08_18_campo_minado/campo_minado.py

+def campo_minado(mapa):
+    resultado = mapa.replace("_","0")
+
+    if "*" in mapa:
+        linhas = resultado.split()
+        matriz = [list(i) for i in linhas]
+        for linha, conteudo in enumerate(matriz):
+            for coluna, caracter in enumerate(conteudo):
+                if caracter == "*":
+                    try:
+                        if linha-1 < 0:
+                            raise IndexError
+                    
+                        norte = matriz[linha-1][coluna]
+                        if norte != "*":
+                            matriz[linha-1][coluna] = str(int(norte) + 1)
+                    except IndexError: 
+                        pass
+                        
+                    try:
+                        if linha-1 < 0:
+                            raise IndexError
+                        if coluna-1 < 0:
+                            raise IndexError
+                    
+                        noroeste = matriz[linha-1][coluna-1]
+                        if noroeste != "*":
+                            matriz[linha-1][coluna-1] = str(int(noroeste) + 1)
+                    except IndexError: 
+                        pass
+                        
+                    try:
+                        if linha-1 < 0:
+                            raise IndexError
+                        nordeste = matriz[linha-1][coluna+1]
+                        if nordeste != "*":
+                            matriz[linha-1][coluna+1] = str(int(nordeste) + 1)
+                    except IndexError:
+                        pass 
+                      
+                    try:
+                        leste = matriz[linha][coluna+1]
+                        if leste != "*":
+                            matriz[linha][coluna+1] = str(int(leste) + 1)
+                    except IndexError: 
+                        pass
+                        
+                    try:    
+                        sul = matriz[linha+1][coluna]
+                        if sul != "*":
+                            matriz[linha+1][coluna] = str(int(sul) + 1)
+                    except IndexError: 
+                        pass
+                        
+                    try:    
+                        sudeste = matriz[linha+1][coluna+1]
+                        if sudeste != "*":
+                            matriz[linha+1][coluna+1] = str(int(sudeste) + 1)
+                    except IndexError:
+                        pass
+                 
+                    try:
+                        if coluna-1 < 0:
+                            raise IndexError
+                        oeste = matriz[linha][coluna-1]
+                        if oeste != "*":
+                            matriz[linha][coluna-1] = str(int(oeste) + 1)
+                    except IndexError:
+                        pass
+                 
+                    try:    
+                        if coluna-1 < 0:
+                            raise IndexError
+                        sudoeste = matriz[linha+1][coluna-1]
+                        if sudoeste != "*":
+                            matriz[linha+1][coluna-1] = str(int(sudoeste) + 1)
+                    except IndexError:
+                        pass
+                       
+        return "\n".join(["".join(line) for line in matriz])
+    return resultado

2008_08_18_campo_minado/campo_minado_test.py

+import unittest
+from campo_minado import campo_minado
+
+
+class CampoMinadoTestCase(unittest.TestCase):
+    def test_mapa_1_por_1(self):
+        self.assertEquals(campo_minado("*"), "*") 
+        self.assertEquals(campo_minado("_"), "0")
+
+    def test_mapa_1_por_2(self):
+        self.assertEquals(campo_minado("**"), "**") 
+        self.assertEquals(campo_minado("*_"), "*1")
+        self.assertEquals(campo_minado("_*"), "1*")
+        self.assertEquals(campo_minado("__"), "00")
+
+    def test_mapa_2_por_2(self):
+        self.assertEquals(campo_minado("**\n**"), "**\n**")
+        self.assertEquals(campo_minado("_*\n**"), "3*\n**")
+        self.assertEquals(campo_minado("_*\n*_"), "2*\n*2")
+        
+    def test_mapa_3_por_3(self):
+        self.assertEquals(campo_minado("***\n***\n***"), "***\n***\n***")
+        self.assertEquals(campo_minado("*__\n___\n___"), "*10\n110\n000")
+        
+    def test_mapa_apresentacao(self):
+        self.assertEquals(campo_minado("__*_\n" \
+                                       "____\n" \
+                                       "_*__\n" \
+                                       "____"),
+                                       "01*1\n" \
+                                       "1221\n" \
+                                       "1*10\n" \
+                                       "1110")
+   
+
+if __name__ == "__main__":
+    unittest.main()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.