@@ -0,0 +1,2013 @@
+from collections import Counter%0A%0Apokemon =%7B0:%5B0%5D%7D%0Adef soma_quadrados(n):%0A    if n==0:%0A        return %5B0%5D%0A    quadrados=%5B%5D%0A    maximo=1%0A    while(maximo*maximo%3C=n):%0A        quadrados.append(maximo*maximo)%0A        maximo+=1%0A    while len(quadrados)%3E0:%0A        num=n%0A%0A        quad=quadrados.copy()%0A        a=quad.pop()%0A        resp=%5B%5D%0A        while(num%3E0):%0A            if num in pokemon.keys() and num is not n:%0A                resp=resp+pokemon%5Bnum%5D%0A                num=0%0A            else:%0A                if len(quad)%3E0:%0A                    if num-a%3C0:%0A                       a=quad.pop()%0A                    else:%0A                        num-=a%0A                        resp.append(a)%0A                        if(num%3Cquad%5B-1%5D):%0A                            a=quad.pop()%0A                else:%0A                    num-=a%0A                    resp.append(a)%0A        if n not in pokemon.keys():%0A            pokemon%5Bn%5D=resp.copy()%0A        elif len(resp)%3Clen(pokemon%5Bn%5D):%0A            pokemon%5Bn%5D=resp.copy()%0A        quadrados.pop()%0A%0A    return pokemon%5Bn%5D%0A%0A%0A%0A%0Aimport unittest%0A%0A%0Aclass SomaQuadradosPerfeitosTestes(unittest.TestCase):%0A    def teste_0(self):%0A        self.assert_possui_mesmo_elementos(%5B0%5D, soma_quadrados(0))%0A%0A    def teste_01(self):%0A        self.assert_possui_mesmo_elementos(%5B1%5D, soma_quadrados(1))%0A%0A    def teste_02(self):%0A        self.assert_possui_mesmo_elementos(%5B1, 1%5D, soma_quadrados(2))%0A%0A    def teste_03(self):%0A        self.assert_possui_mesmo_elementos(%5B1, 1, 1%5D, soma_quadrados(3))%0A%0A    def teste_04(self):%0A        self.assert_possui_mesmo_elementos(%5B4%5D, soma_quadrados(4))%0A%0A    def teste_05(self):%0A        self.assert_possui_mesmo_elementos(%5B4, 1%5D, soma_quadrados(5))%0A%0A    def teste_11(self):%0A        self.assert_possui_mesmo_elementos(%5B9, 1, 1%5D, soma_quadrados(11))%0A%0A    def teste_12(self):%0A        self.assert_possui_mesmo_elementos(%5B4, 4, 4%5D, soma_quadrados(12))%0A%0A%0A    def assert_possui_mesmo_elementos(self, esperado, resultado):%0A        self.assertEqual(Counter(esperado), Counter(resultado))%0A

Create quadrados_soma.py