Código de Python - Generar particiones de un número (suma de otros números)

Imágen de perfil
Val: 1.139
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Generar particiones de un número (suma de otros números)gráfica de visualizaciones


Python

estrellaestrellaestrellaestrellaestrella(1)
Publicado el 8 de Marzo del 2017 por kip
2.598 visualizaciones desde el 8 de Marzo del 2017
Clase que ayuda a generar as particiones de un numero es decir que a partir de un numero se generan las combinaciones de posibles números cuya suma entre si es el total del numero dado.

Su uso es simple:

Instanciamos la clase enviandole como parametro el numero del cual se hara la particion

1
particiones = NParticiones(5)

Luego tenemos dos opciones en la clase para obtener los resultados:

Acceder a la propiedad particiones que es una lista de todas las particiones del numero

1
print particiones.particiones

Aquella propiedad mencionada anteriormente tendría una estructura como la siguiente:

1
[[4, 1], [3, 2], [3, 1, 1], [2, 2, 1], [2, 1, 1, 1], [1, 1, 1, 1, 1]]

Llamar al metodo print_particiones(), aquel metodo se encargara de imprimir por pantalla lo siguiente:

1
particiones.print_particiones()

Mostrara:

1
2
3
4
5
6
5 = 4 + 1
5 = 3 + 2
5 = 3 + 1 + 1
5 = 2 + 2 + 1
5 = 2 + 1 + 1 + 1
5 = 1 + 1 + 1 + 1 + 1

Requerimientos

Python 2.X
Python 3.X

1.0
estrellaestrellaestrellaestrellaestrella(1)

Actualizado el 7 de Julio del 2017 (Publicado el 8 de Marzo del 2017)gráfica de visualizaciones de la versión: 1.0
2.599 visualizaciones desde el 8 de Marzo del 2017
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class NParticiones:
 
    particiones = []
 
    def __init__(self, num):
        self.num = num
        self.particiones = self.__gen_particiones(self.num)
        self.__order_particiones()
 
    def print_particiones(self):
        string_particiones = ''
        for serie in self.particiones:
            string_particiones += str(self.num) + ' = ' + ' + '.join([str(num) for num in serie]) + '\n'
        print (string_particiones)
 
    def __order_particiones(self):
        order_particiones = []
        for serie in self.__gen_particiones(self.num):
            order_particiones.append(sorted(serie, reverse=True))
        self.particiones = order_particiones
 
    def __gen_particiones(self, num, limit = False):
        if limit == False: limit = num
        if num == 1:
            yield [1]
        elif num < 1:
            yield []
        else:
            for x in range(min(num, limit), 0, -1):
                if self.num == x: continue
                for i in self.__gen_particiones(num - x, x):
                    i.append(x)
                    yield i



Comentarios sobre la versión: 1.0 (1)

4 de Julio del 2017
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s3897