Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/11/2014, 09:38
alemaxxx
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 11 años
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