Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - amaldonado

Páginas: [1]
1
General / Re:Desafío Algoritmico
« en: Junio 28, 2015, 03:28:23 am »
Mmm no, no era necesario. Bastaba con resolver el desafío ALGORÍTMICO.
Nos vemos en el próximo.

2
General / Re:Desafío Algoritmico
« en: Junio 28, 2015, 03:18:07 am »
Si leí tu PDF, un poco exagerado porque no era el caso, no se pedía una demostración matemática (que por cierto de inducción no tiene nada, simplemente usaste un poco de lógica y ya está).

Para ser inducción matemática necesitas construir el caso base, y luego generalizar para un n +1. Presentar una hipótesis inductiva y luego demostrarla, pero eso no lo haces en el PDF.

Lo siento amigo "coco" pero esto te lo digo sin animo de ofensa ni ningún tipo de bronca.
¡Que tengas un buen día! :)

P.d. No era un problema matemático, era un desafío algorítmico, un poco de comprensión lectora no estaría mal eh?

3
General / Re:Desafío Algoritmico
« en: Junio 28, 2015, 02:57:04 am »
Hola "coco"

Un poco tarde tu explicación no crees?, claro después de haberlo explicado yo eficientemente.
Bueno, suerte en el próximo desafío :)

Por cierto, te contradices un poquito cuando dices "mi respuesta es más válida" para luego decir "la matemática es la misma", como evalúas algo más valido que otro?

4
General / Re:Desafío Algoritmico
« en: Junio 28, 2015, 01:47:09 am »
Coco estaba tibio con la respuesta, pero parte de la respuesta es explicar de una manera concreta como solucionarlo y como estaba muy cerca, les regalo la solución:

La clave para resolver este problema es "recursión", veamos porque:

Vamos a generar una tabla de números para observar el patrón de generación:

1   A
2   B
3   AA
4   BA
5   AB
6   BB
7   AAA
8   BAA
9   ABA
10   BBA
11   AAB
12   BAB
13   ABB
14   BBB
15   AAAA
16   BAAA
17   ABAA
18   BBAA
19   AABA
.
.
.

Ok, lo primero que notamos es que hay un patrón y está clarísimo.
Lo primero más obvio es notar que cuando un número es par, empieza en B, y cuando es impar empieza en A.
Lo que quizás tome un poco más de tiempo descubrir es que un patrón viejo se repite agregándole una A o una B segun sea par o impar, observemos el patrón generado por ejemplo por el número 4 = BA, ahora miremos el patrón del número 9 = ABA y ahora el del número 19 = AABA.

Si queremos resolver el patrón para el 19 (AABA), primero ponemos una "A" (porque es impar) y luego ponemos a continuación el patrón del 9 (ABA), para resolver el patrón del 9 (ABA) ponemos una "A" (porque es impar) y ponemos a continuación el patrón del 4 (BA). Para resolver el patrón del 4 (BA) ponemos una "B" (porque es par) y luego ponemos el patrón del 1 (A). Y ya sabemos resolver el patrón del 1 a ojos cerrados.

Es decir, para el patrón de cualquier número, primero debemos resolver patrones de números anteriores, y luego concatenarlos hasta llegar al caso base. Para este algoritmo el caso base (a ojos cerrados) es cuando es 1 = A y 2 = B.

Por lo tanto necesitamos una función que se llame a sí misma (recursiva) para que calcule los valores pasados, hasta que sea tan obvio de calcular que tire la respuesta inmediata (caso base).

Pero como saber que numero le corresponde calcular previamente para resolver por ejemplo 19?

Aqui otra vez pensamos si hay alguna relación:

En el ejemplo anterior:

Para calcular el 19, necesitamos el 9.      (19=AABA y 9=ABA)
Para calcular el 9, necesitamos el 4.      (9=ABA y 4=BA)
Y por ejemplo para calcular el 17 necesitamos el 8.   (17=ABAA y 8=BAA)

Entonces la relación es (n-1)/2
Nótese que esto funciona para los números impares... y para los pares? veamos la tabla y observamos que:

Para calcular el 8, necesitamos el 3.      (8=BAA y 3=AA)
Para calcular el 10, necesitamos el 4.      (10=BBA y 4=BA)
Para calcular el 16, necesitamos el 7.      (16=BAAA y 7=AAA)

Entonces la relación es (n-2)/2

Ok entonces ya tenemos un algoritmo, pero como hacemos la función recursiva? De la siguiente manera:

A tener en cuenta:
* El caso base: cuando n =1 o n =2 vale A y B respectivamente
* Si n es impar, calcula primero el valor de (n-1)/2 y luego concaténalo con "A".
* Si n es par, calcula primero el valor de (n-2)/2 y luego concaténalo con "B".

El pseudocódigo:
Funcion calcula(entero n)
inicio_funcion
   si (n = 1) retorna "A"
   si (n = 2) retorna "B"
   si (n>=3)
      si (n es impar)
         retorna "A" concatenado con calcula((n-1)/2)
      si (n es par)
         retorna "B" concatenado con calcula((n-2)/2)
   
fin_funcion

5
General / Re:Desafío Algoritmico
« en: Junio 27, 2015, 04:00:41 pm »
HOLA!!!

No le veo la dificultad, ya que con un bin2dec y todas A el problema estaria resuelto.

GRACIAS POR LEER!!!

No, el problema no dice que codifiques en binario y luego reemplaces unos por A y ceros por B.
Esta es una codificación totalmente diferente a la codificación binaria (por ello es un desafío algorítmico)

Para ilustrártelo mejor, verifica el ejemplo que te proporcionaron:

El número 49 está codificado como ABAAB (longitud 5)
El número 49 en binario es: 110001 (longitud 6)

Páginas: [1]