elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 09:00  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  [RETO] Matriz Bidimensional {FrogMatrix algorithm}
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] Matriz Bidimensional {FrogMatrix algorithm}  (Leído 1,527 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
[RETO] Matriz Bidimensional {FrogMatrix algorithm}
« en: 29 Noviembre 2010, 01:48 »

Bueno, aqui traigo un reto bastante fácil digo yo, la idea es armar una matriz de las dimensiones indicadas siguendo las explicaciones:

Si introduzco 5 en la función:
Citar
0     1     2     3     4    
1     3     5     7     4    
9    15    16    7     4    
47   42    16    7    4    
116   42    16    7    4

Cada numero viene dado de la suma del que tenga arriba mas tantas columnas a la derecha como el numero fila actual.
En caso de sobrepasar el limite de columnas es igual a el numero de arriba.
Si no me explico bien postea o mándame un MP. :silbar:

El reto ha sido pensado por mi... :rolleyes:

Mucha suerte, yo me pongo ya a hacerlo!! ;)

DoEvents! :P

EDIT: Ya lo tengo, mañana posteo... ;)


« Última modificación: 29 Noviembre 2010, 02:44 por Mr. Frog © » En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #1 en: 29 Noviembre 2010, 06:17 »

 * Cada numero viene dado de la suma del que tenga arriba mas tantas columnas a la derecha como el numero fila actual.
 * En caso de sobrepasar el limite de columnas es igual a el numero de arriba.

Describe mejor mas claro y mucho mas entendible (espesifica el que con el que por que asi no te entiendo... quizas entienda algo pero es muy pobre lo entendido asi y nadamas no me da con las pruebas de escritorio)... y aun que sea pon 1, 2 o mas ejemplos para ver un patron congruente, por que asi como lo expones nadamas no me da!¡.

Dulces Lunas!¡.


« Última modificación: 29 Noviembre 2010, 08:56 por BlackZeroX▓▓▒▒░░ » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #2 en: 29 Noviembre 2010, 09:17 »

Ook, lo siento tienes razón... :P
Es que me resulta dificil de explicar, dejo un ejemplo de 7:
Citar
0       1      2      3     4     5     6   
1       3      5      7     9     11    6   
9       15     21     27    26    11    6   
72      89     85     70    26    11    6   
342     281    198    70    26    11    6   
928     592    198    70    26    11    6   
1831    592    198    70    26    11    6 

Código:
El Item (1,0) [el 1] = (0,0) [0] + (0,1) [1]
El Item (1,1) [el 3] = (0,1) [1] + (0,2) [2]
...
El Item (2,0) [el 9] = (1,0) [1] + (1,1) [3] + (1,2) [5]
El Item (2,1) [el 15] = (1,1) [3] + (1,2) [5] + (1,3) [7]
...
El Item (3,0) [el 72] = (2,0) [9] + (2,1) [15] + (2,2) [21] + (2,3) [27]
El Item (3,1) [el 89] = (2,1) [15] + (2,2) [21] + (2,3) [27] + (2,4) [26]
...

¿Se entiende la lógica?
Y si nos encontramos en casos en los que no tenemos más columnas a la derecha entonces se baja el número de arriba.

Ej:

Código:
El Item (2,5) [el 11] = (0,5) [11] ' Puesto que 5 + 2 se excede del número de columnas

Espero haberme explicado bien...  :-\

Un Saludo y suerte... :D

DoEvents! :P
En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #3 en: 29 Noviembre 2010, 09:40 »

ya entendi me a costado

Se tiene que hacer algo similar a esto:


Código:

0       1      2      3     4     5     6   
1       3      5      7     9     11    6   
9       15(|)     21(|)     27(|)    26(|)    11    6   
72      89(X)     85     70    26    11    6   
342     281    198    70    26    11    6   
928     592    198    70    26    11    6   
1831    592    198    70    26    11    6 


Donde Solo se suman los  que tienen el signo (|) y donde la cantidad y la posicion inicial de los mismos dependen del lugar Destinatario es decir es descripciones Simples

X <-- esta en la la coordenada {1,3} (Fila,Columna) [Iniciando columna y filas en 0's], el origen de los (|) empiesan en la expresion {1,3-1}.

es decir

X = Sumatoria de Celdas (F+1) empesando en (F,C-1)  , Solo si (F+1) es es menor o igual a (C+1)

* El +1 es solo un auxiliar ya que las matrices empesarian desde 0's.

Lo siento pero en BBcode no salen expresiones matematicas si no las ponia como deberia de ser ¬¬"...

Sangriento Infienro Lunar!¡.
En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #4 en: 29 Noviembre 2010, 10:32 »

Exacto BlackZer0x, es exactamente eso!  ;-)
Voy a esperar unas horas más para poner mi forma, que sino no tiene gracia (a parte que no estoy en mi pc ahora mismo)... :xD

DoEvents! :P
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #5 en: 29 Noviembre 2010, 15:09 »

Mi solución:

Código
Option Explicit
Option Base 1
 
Public Function FrogMatrix(ByVal lSize&) As Long()
Dim lTempArr&()
Dim lSum&, lRepeat&
Dim lCol&, lRow&
   If lSize& > 0 Then
       ReDim lTempArr&(lSize&, lSize&)
       For lCol& = 0 To (lSize& - 1)
           lTempArr&(1, (lCol& + 1)) = lCol&
       Next lCol&
       lRepeat& = 1
       For lRow& = 2 To lSize&
           For lCol& = 1 To lSize&
               lSum& = FrogSum&(lTempArr&(), (lRow& - 1), lCol&, lRepeat&, lSize&)
               lTempArr&(lRow&, lCol&) = IIf((lSum& > 0), lSum&, lTempArr&((lRow& - 1), lCol&))
           Next lCol&
           lRepeat& = lRepeat& + 1
       Next lRow&
       FrogMatrix = lTempArr&()
   End If
End Function
 
Private Function FrogSum&(ByRef lArray&(), ByVal lRow&, ByVal lCol&, ByVal lRepeat&, ByVal lLimit&)
Dim Q&
   If Not (lCol& + lRepeat& > lLimit&) Then
       For Q& = 0 To lRepeat&
           FrogSum& = FrogSum& + lArray&(lRow&, lCol& + Q&)
       Next Q&
   End If
End Function
 
' º Un ejemplo :

Private Sub Form_Load()
Const vbBigSpace$ = "    "
Dim x&, y&
Dim sRow$
Dim lSize&
 
   lSize& = 10
 
   For x& = 1 To lSize&
       For y& = 1 To lSize&
           sRow$ = sRow$ & FrogMatrix(lSize)(x&, y&) & vbBigSpace$
       Next y&
 
       Debug.Print sRow$
       sRow$ = vbNullString
   Next x&
End Sub

Devuelve:
Código:
0    1    2    3    4    5    6    7    8    9    
1    3    5    7    9    11    13    15    17    9    
9    15    21    27    33    39    45    41    17    9    
72    96    120    144    158    142    112    41    17    9    
590    660    676    597    470    321    112    41    17    9    
3314    2836    2217    1558    970    321    112    41    17    9    
11328    8055    5236    3028    970    321    112    41    17    9    
29091    17780    9734    3028    970    321    112    41    17    9    
61094    32012    9734    3028    970    321    112    41    17    9    
107338    32012    9734    3028    970    321    112    41    17    9  

DoEvents! :P
« Última modificación: 29 Noviembre 2010, 15:17 por Mr. Frog © » En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 693


Seguime


Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #6 en: 29 Noviembre 2010, 17:06 »

hola no se puede poner valores grandes solo hasta 17

Código:
Option Explicit

Private Sub Form_Load()
 Dim M() As Long
 Dim lVal As Long, x As Long, y As Long
 
 lVal = 7
 
 M = CreateMatrix(lVal)
 
 For y = 0 To lVal - 1
 For x = 0 To lVal - 1
 Debug.Print M(x, y),
 Next
 Debug.Print
 Next

End Sub


Private Function CreateMatrix(ByVal Val As Long) As Long()
 Dim M() As Long
 Dim x As Long, y As Long, i As Long
 Dim lSum As Long, lSize As Long
 
 If Val > 17 Or Val < 1 Then Exit Function
 
 lSize = Val - 1
 
 ReDim M(lSize, lSize)
 
 For x = 0 To lSize
 M(x, 0) = x
 Next
 
 For y = 1 To lSize
 For x = 0 To lSize
 If x + y > lSize Then
 M(x, y) = M(x, y - 1)
 Else
 lSum = 0
 For i = x To y + x
 lSum = lSum + M(i, y - 1)
 Next
 M(x, y) = lSum
 End If
 
 Next
 Next
 
 CreateMatrix = M

End Function

saludos.
« Última modificación: 1 Diciembre 2010, 19:16 por Novlucker » En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #7 en: 29 Noviembre 2010, 17:42 »

 :¬¬
El que faltaba... :silbar: :laugh: :laugh:
hola no se puede poner valores grandes solo hasta 17
En el reto no hice ninguna referencia fálica creo yo :laugh: , queria poner algo con lo que pudierais competir conmigo :xD
Encima en tu función solo se pueden meter valores menores de edad :laugh:
Citar
Código:
Val > 17

Yo mirare a ver si hago más rapida la mia, que no la hice para correr... :P

DoEvents! :P
« Última modificación: 1 Diciembre 2010, 19:17 por Novlucker » En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #8 en: 29 Noviembre 2010, 20:59 »

Mi versión 2 :
Código
Option Explicit
Option Base 1
 
Public Function FrogMatrix(ByVal lSize&) As Long()
Dim lTempArr&()
Dim lSum&, lRepeat&, Q&
Dim lCol&, lRow&
   If lSize& > 1 And lSize& < 18 Then
       ReDim lTempArr&(lSize&, lSize&)
       For lCol& = 0 To (lSize& - 1)
           lTempArr&(1, (lCol& + 1)) = lCol&
       Next lCol&
       lRepeat& = 1
       For lRow& = 2 To lSize&
           For lCol& = 1 To lSize&
               If Not ((lCol& + lRepeat&) > lSize&) Then
                   For Q& = 0 To lRepeat&
                       lSum& = lSum& + lTempArr&((lRow& - 1), (lCol& + Q&))
                   Next Q&
               End If
               'lTempArr&(lRow&, lCol&) = IIf((lSum& > 0), lSum&, lTempArr&((lRow& - 1), lCol&))
               If CBool(lSum&) Then
                   lTempArr&(lRow&, lCol&) = lSum&
                   lSum& = 0
               Else
                   lTempArr&(lRow&, lCol&) = lTempArr&((lRow& - 1), lCol&)
               End If
           Next lCol&
           lRepeat& = lRepeat& + 1
       Next lRow&
       FrogMatrix = lTempArr&()
   End If
End Function

DoEvents! :P
« Última modificación: 29 Noviembre 2010, 21:54 por Mr. Frog © » En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #9 en: 30 Noviembre 2010, 05:04 »

.
Madre que codigos aqui dejo el mio es lo mas rapido que he podido hacerlo, y con la mejor velocidad posible (Solo calculo un triangulo).

Código
 
Option Explicit
 
Private Declare Sub RtlMoveMemory Lib "kernel32" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
 
Private Function CreateMatriXBZeroX(ByVal vNum&, ByRef OutArray&()) As Boolean
Dim lng_f&, lng_c&, lng_fa&
 
   CreateMatriXBZeroX = vNum& > 0 And vNum& < 18
 
   If CreateMatriXBZeroX Then
       vNum& = vNum& - 1
       ReDim OutArray&(0 To vNum&, 0 To vNum&)
       For lng_f& = 0 To vNum&
           OutArray&(lng_f&, lng_c&) = lng_f&
       Next
       For lng_c& = 1 To vNum&
           For lng_f& = 0 To vNum& - lng_c&
               For lng_fa& = lng_f& To lng_c& + lng_f&
                   OutArray&(lng_f&, lng_c&) = OutArray&(lng_f&, lng_c&) + OutArray&(lng_fa&, lng_c& - 1)
               Next
           Next
           RtlMoveMemory ByVal VarPtr(OutArray&(lng_f&, lng_c&)), ByVal VarPtr(OutArray&(lng_f&, lng_c& - 1)), 4 * lng_c&
       Next
   End If
End Function
 
 

Prueba:

Código
 
Private Sub Form_Load()
Dim OutArray&()
Dim lng_f&, lng_c&, lng_vNum&
   lng_vNum& = 5
   If CreateMatriXBZeroX(lng_vNum&, OutArray&) Then
       For lng_f& = 0 To lng_vNum& - 1
           For lng_c& = 0 To lng_vNum& - 1
               Debug.Print OutArray&(lng_c&, lng_f&),
           Next
           Debug.Print
       Next
   End If
End Sub
 
 

Sangriento Infierno Lunar!¡.
En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #10 en: 30 Noviembre 2010, 09:14 »

.
Muy buena Black, no se me había ocurrido! :D
mmmmmm
Haces la función Boolean y introduces en los argumentos el array donde se guardara para no tener que hacer esto? :huh:
Código
CreateMatriXBZeroX=OutArray& ' Es por ganar tiempo ?

Citar
Madre que codigos
:xD
?¿

DoEvents! :P

En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #11 en: 30 Noviembre 2010, 18:25 »

.
No se si influya en el tiempo o cosas similares solo se que lo hago directamente en la matrix indicada, lo hago como si fueran apis.

 * Una de las ventajas que veo es que sabre si el array saliente esta inicializado, y no tendre que pedir otra variable extra como salida en el parametro de la funcion, solo utilizo lo de la funcion...

Dulces Lunas!¡.
En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #12 en: 30 Noviembre 2010, 18:47 »

.
No se si influya en el tiempo o cosas similares solo se que lo hago directamente en la matrix indicada, lo hago como si fueran apis.

 * Una de las ventajas que veo es que sabre si el array saliente esta inicializado, y no tendre que pedir otra variable extra como salida en el parametro de la funcion, solo utilizo lo de la funcion...

Dulces Lunas!¡.
.
mmmmmmmmm
Ya veo, muchas gracias, esto lo aplicare de aqui en adelante! ;)

DoEvents! :P
En línea

79137913


Desconectado Desconectado

Mensajes: 780


4 Esquinas


Ver Perfil WWW
Re: [RETO] Matriz Bidimensional {FrogMatrix algorithm}
« Respuesta #13 en: 30 Noviembre 2010, 19:33 »

HOLA!!!

ACA LES DEJO MI CODE, MEJORE EL DE LEANDRO A (10% mas rapido en promedio):
(seguro que se puede mejorar la parte que agregue)
si se continua expresando como funcion e imprimiendo las celdas negativas se toma menos tiempo.

Código
Private tmr As CTiming
 
 
Private Function MatriX7913(ByVal N As Integer) As Long()
   Dim M() As Long
   Dim x As Integer, y As Integer, Z As Integer
   Dim AGRUP As Long, TAM As Integer
 
   If N < 1 Then Exit Function
 
   TAM = N - 1
 
   ReDim M(TAM, TAM)
 
   For x = 0 To TAM
       M(x, 0) = x
       M(TAM, x) = TAM
       If TAM > 0 Then
           If Not x = TAM Then
               M(x, 1) = 1 + (x * 2)
               If x = TAM - 2 Then
                   For a = 1 To TAM
                       M(TAM - 1, a) = (TAM * 2) - 1
                   Next
               End If
           End If
       End If
  Next
If TAM > 1 Then
'GRACIAS LEANDRO A
   For y = 2 To TAM
       For x = 0 To (TAM - 2)
           If x + y > TAM Then
               M(x, y) = M(x, y - 1)
           Else
               AGRUP = 0
               For Z = x To y + x
                   AGRUP = AGRUP + M(Z, y - 1)
               Next
               M(x, y) = AGRUP
           End If
       Next
   Next
'GRACIAS LEANDRO A
End If
   MatriX7913 = M
 
End Function
 
Private Sub Form_Load()
 Dim M() As Long
 Dim TAMX As Integer, x As Integer, y As Integer
 Set tmr = New CTiming
 
 TAMX = 17
 For FAF = 1 To 10
 tmr.Reset
 M = MatriX7913(TAMX)
 MsgBox tmr.sElapsed
 Next
 For y = 0 To TAMX - 1
       For x = 0 To TAMX - 1
           Debug.Print M(x, y),
       Next
       Debug.Print
 Next
 
End Sub
 

MOD: lo baje a un 15%  ;-) ;-) ;-)

GRACIAS POR LEER!!!
« Última modificación: 30 Noviembre 2010, 20:01 por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*                                                          Resumenes Cs.Economicas
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Message Digest Algorithm 5 --> Chr0n05
Criptografía
Newbie´s 0 2,275 Último mensaje 3 Septiembre 2008, 06:54
por Newbie´s
Problema con imprimir diagonales en matriz bidimensional
.NET
greenselves 2 2,282 Último mensaje 19 Marzo 2010, 16:34
por greenselves
Duda - Buscar si existe una matriz dentro de otra matriz
Programación Visual Basic
EddyW 2 1,875 Último mensaje 14 Agosto 2010, 06:18
por EddyW
Friendship Algorithm
Foro Libre
[D4N93R] 3 1,352 Último mensaje 6 Noviembre 2010, 16:53
por KuraraGNU
[RETO] Matriz de Cuenta Circular 7913 « 1 2 »
Programación Visual Basic
79137913 15 1,793 Último mensaje 13 Enero 2011, 15:30
por 79137913
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines