Foros del Web » Programando para Internet » Python »

Patrones en Python

Estas en el tema de Patrones en Python en el foro de Python en Foros del Web. Hola que tal amigos , escribo para ver si me pueden ayudar a resolver este problema de SPOJ --> http://www.spoj.com/BSCPROG/problems/CPTTRN5/ Empece por está vía: @import ...
  #1 (permalink)  
Antiguo 18/11/2014, 09:38
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 5 meses
Puntos: 0
Patrones en Python

Hola que tal amigos , escribo para ver si me pueden ayudar a resolver este problema de SPOJ --> http://www.spoj.com/BSCPROG/problems/CPTTRN5/

Empece por está vía:
Código Python:
Ver original
  1. for i in range(t):
  2.     a = raw_input().split()
  3.     l = int(a[0])
  4.     c = int(a[1])
  5.     s = int(a[2])
  6.     M = (s+1)* l +1
  7.     N = (s+1)*c + 1
  8.  
  9. Matrix = [[' ' for x in range(N)] for x in range(M)]
  10. for z in range(N):
  11.   Matrix[0][z] = '*'
  12. for i in range( 1, M ):
  13.  
  14.   Matrix[i][0] = '*'
  15.   for j in range( 1, N ):
  16.     ( m_i, m_j ) = ( (i-1)/(s+1) , (j+1)/(s+1) )
  17.     ( k , l ) = ( i - 1 + (s+1)*m_i , j - 1 + (s+1)*m_j )
  18.     palito = '\\'
  19.     if m_i % 2 and m_j % 2 == 0:
  20.      palito = '/'
  21.     elif m_i%2 == 0 and m_j%2:
  22.      palito = '/'
  23.     if j == N-1:
  24.             Matrix[i][j] = '*'
  25.     # Ya sabemos pa onde va palito
  26.     if palito == '\\':
  27.         if j == N-1:
  28.             Matrix[i][j] = '*'
  29.         else:
  30.             if k == l:
  31.                 Matrix[i][j] = palito
  32.             else:
  33.                 Matrix[i][j] = '.'
  34.     else:
  35.         if k == l:
  36.             Matrix[i][j] = palito
  37.         else:
  38.             Matrix[i][j] = '.'
  39.  
  40. for a in Matrix:
  41. #    for b in a:
  42. #        c = map(int, b)
  43.         print a

Pero luego preferi hacerlo de esta forma:
Código Python:
Ver original
  1. t = input()
  2. for i in range(t):
  3.     a = raw_input().split()
  4.     l = int(a[0])
  5.     c = int(a[1])
  6.     s = int(a[2])
  7.     #M = (s+1)
  8.     N = (s+1)*c + 1
  9.     result = ''
  10.     tapa = (s+1)*c*'*'+'*'
  11.     for y in range(l):
  12.         print tapa
  13.         for i in range(1,s+1):
  14.             start = 1
  15.             result += '*'
  16.             for j in range(1,N-1):
  17.                     ( m_i, m_j ) = ( (i+1)/(s+1) , (j+1)/(s+1) )
  18.                     ( k , l ) = ( i - 1 + (s+1)*m_i , j - 1 + (s+1)*m_j )
  19.                     if y % 2 == 0:
  20.                         if k ==l:
  21.                             if start == 1:
  22.                                 palito = '\\'
  23.                                 start = 0
  24.                             else:
  25.                                 palito = '/'
  26.                                 start = 1
  27.                             result += palito
  28.                         else:
  29.                             result += '.'
  30.                     else:
  31.                         if k ==l:
  32.                             if start == 1:
  33.                                 palito = '/'
  34.                                 start = 0
  35.                             else:
  36.                                 palito = '\\'
  37.                                 start = 1
  38.                             result += palito
  39.                         else:
  40.                             result += '.'
  41.  
  42.             result += '*'
  43.             print result
  44.             result = ''
  45.     print tapa

En el último lo que me falta es el orden cuando es '/' que el orden al contrario de la primera fila.
Gracias los que puedan ayudarme.
Saludos
  #2 (permalink)  
Antiguo 19/11/2014, 23:21
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: Patrones en Python

No estoy orgulloso de esto, porque abuse del lenguaje (mas especifico del scope) en ciertas partes.

Código Python:
Ver original
  1. def make_square(n, direction):
  2.     square = [['.' for _ in xrange(n)] for _ in xrange(n)]
  3.     if direction:
  4.         for i in xrange(n):
  5.             square[i][i] = '\\'
  6.     else:
  7.         for i in xrange(n):
  8.             square[i][n-1-i] = '/'
  9.     return [''.join(line) for line in square]
  10.  
  11. def make_grid(m, n, s):
  12.     squares = [make_square(s, True), make_square(s, False)]
  13.     grid = [[squares[(i+j)&1] for i in range(n)] for j in range(m)]
  14.     return grid
  15.  
  16.  
  17. N = int(raw_input())
  18. for i in range(N):
  19.     m, n, s = map(int, raw_input().split())
  20.     grid = []
  21.     for row in make_grid(m, n, s):
  22.         for x in zip(*row):
  23.             line = '*%s*' % '*'.join(x)
  24.             grid.append(line)
  25.         grid.append('*'*len(line))
  26.     grid.insert(0, '*'*len(line))
  27.  
  28.     for line in grid:
  29.         print line
  30.     if i != (N-1):
  31.         print

Puedes ver como hago los cuadros en la función make_square. En make_grid se empieza a complicar un poco pero sigue entedible. Despues de grid = [] es donde puedes tener un gran y largo WTF.

Mi código fue aceptado :D

Última edición por razpeitia; 19/11/2014 a las 23:26
  #3 (permalink)  
Antiguo 20/11/2014, 06:17
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Patrones en Python

Muchas gracias amigo, voy a tomarme un tiempo para probarlo y analizar la lógica, y de verdad muy agradecido

Etiquetas: funcion
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 05:10.