Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Un problema mas

Estas en el tema de Un problema mas en el foro de Python en Foros del Web. Hola compañeros, la verdad ya me da pena con ustedes, pero llega un momento en que me frustro y por mas que leo y leo ...
  #1 (permalink)  
Antiguo 25/04/2013, 12:17
 
Fecha de Ingreso: agosto-2012
Ubicación: Villahermosa
Mensajes: 26
Antigüedad: 11 años, 8 meses
Puntos: 0
Información Un problema mas

Hola compañeros, la verdad ya me da pena con ustedes, pero llega un momento en que me frustro y por mas que leo y leo no encuentro como.

El problema es el siguiente:

Tengo que formar un rombo, con los números consecutivos anteriores a un numero dado, les dejo una imagen para mayor exlicacion:



logro hacer la parte de arriba, pero al empezar hacia abajo, no encuentro la logica para hacerlos decrecer, les dejo mi codigo:

Código:
n = 4
izq=""
der=""


for i in range(1, n+1):
    espacio = " "*(n-i)
    print espacio + izq + str(i) + der + espacio
    izq = izq+str(i)
    der = str(i)+der
Podrian ayudarme ???... Este curso es basico por lo tanto debe ser una logica sencilla, solo "for" y nada de .append ni nada de eso.

Ayudaaa !!!!
  #2 (permalink)  
Antiguo 25/04/2013, 13:09
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Un problema mas

Este problema esta sencillo cuando usas el algoritmo correcto. En este caso yo use este.
http://en.wikipedia.org/wiki/Breadth-first_search y este http://en.wikipedia.org/wiki/Flood_fill

Código Python:
Ver original
  1. n = int(raw_input())
  2. m = 2 * n  - 1
  3.  
  4. matrix = [[' ' for j in range(m)] for i in range(m)]
  5.  
  6. def bfs(matrix, x, y, n):
  7.     l = [(0, 1), (1, 0), (-1, 0), (0, -1)]
  8.     q = [(x, y, n)]
  9.     matrix[x][y] = str(n)
  10.     while q:
  11.         x, y, n = q.pop(0)
  12.         if n == 1: continue
  13.         for i, j in l:
  14.             try:
  15.                 if matrix[x+i][y+j] == ' ':
  16.                     matrix[x+i][y+j] = str(n - 1)
  17.                     q.append((x+i, y+j, n-1))
  18.             except:
  19.                 continue
  20.  
  21.  
  22. bfs(matrix, n-1, n-1, n)
  23.  
  24. for row in matrix:
  25.     row = ''.join(row)
  26.     print ' %s ' % (row,)

Animación


Por cierto deberías decirnos el nombre de la comunidad que pone estos retos.
  #3 (permalink)  
Antiguo 25/04/2013, 14:03
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 2 meses
Puntos: 18
Respuesta: Un problema mas

Modestamente habia hecho esto:
Código Python:
Ver original
  1. n = 9
  2. z = n+1
  3. s = ''
  4.  
  5. for i in range(1,z):
  6.     s += str(i)
  7.     z -= 1
  8.     print(' '*z +s[:-1] + s[::-1])
  9. for i in range(1,n):
  10.     v = s[:-i]
  11.     print(' '*(z+i)+v[:-1]+ v[::-1])

Saludos.
  #4 (permalink)  
Antiguo 27/04/2013, 02:29
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Un problema mas

Agrego una solución recursiva sin ni un solo for o while.

Código Python:
Ver original
  1. n = 7
  2. m = 2 * n  - 1
  3.  
  4. def g(i, n):
  5.     if i == n: return str(i)
  6.     return str(i) + g(i+1,n) + str(i)
  7.  
  8.  
  9. def f(i):
  10.     row = g(1, i)
  11.     print row.center(m)
  12.     if i == n: return
  13.     f(i + 1)
  14.     print row.center(m)
  15.  
  16. f(1)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:02.