@gbianchi no tengo idea de lo que estás haciendo, lo poco que he visto de tus comentarios en el chat, parece que estás intentando hacer una especie de spotlight, me equivoco?
el saltear funciona.. ahora deberia iluminar el menu de la izquierda.. despues el centro... y despues unos botones que estan mas abajo hasta tendria que hacer scroll de ser necesario
No se que parte de: revisa tu variable no entiende.
Hola amigo hice la implementación tal cual me comentas, pero el resultado es una hoja de texto, sin mostrar ningún resultado. — Dominic A.Villanueva1 hour ago
@JoseAntonyMundacaAngeles ya casi lo tengo listo, pero quiero saber exactamente los pasos que estás ejecutando para usar el websocket. Quieres abrir la conexión al momento de hacer login? hay muchos factores a tomar en cuenta, yo estoy haciendo algo muy sencillo sin saber lo que realmente tu necesitas.
Uf ya me ha pasado varias veces que me pongo a responder una pregunta sobre pytho, y justo cuando terminé de escribirla, aparece una respuesta de otro usuario (casi siempre FJSevilla :-)) diciendo más o menos lo mismo pero de otra forma
¿qué debería hacer? ¿retirar mi respuesta o ponerla de todas formas?
Entiendo que lo segundo sería lo correcto en el espíritu del sitio, y que el OP decida, pero por otro lado puede parecer un intento oportunista de copiar la respuesta de otro. Y en todo caso el otro puede verlo como una especie de "guerrita personal"
Oh @abulafia sensei del javascript. ¿Podrías echarle un ojo a la pregunta Funciones recursivas en Javascript ¿Buena o mala práctica?? ¿Y comentarme que respuesta esta mas encaminada? Las 2 me han ayudado a entender la recursión y conocer mas de ella, pero en una especifica un uso para el cual las recursiones son mejores y en la otra se indica que no lo tiene.
@x3k_js Gracias por lo que me toca pero ¿me confundirás con otro? Lo mío es python, no JS, aunque el concepto de recursión es el mismo. Le echo un ojo a esas respuestas
@x3k_js Casualmente hoy mismo respondí a una sobre recursión en Python. Quizás la última parte de la respuesta te sirva
Listas y rebanadas
El operador lista[1:] te devuelve siempre otra lista y no el segundo elemento de la misma (para lo cual se usaría lista[1]). La lista devuelta por lista[1:] es la formada por el segundo elemento y todos los siguientes.
Es decir, si lista=[1,2,3,4,5], entonces lista[1:] será [...
@x3k_js Hm, por cierto, veo en tu pregunta: "He buscado información, y he encontrado que las funciones recursivas pueden servir para optimizar Tail Call Optimization" pero lo has entendido al revés
El Tail Call Optimization puede usarse para optimizar las llamadas recursivas, que no es lo mismo
El principal problema de la recursión es que cada nueva llamada rercursiva incrementa la pila de llamadas. Normalmente todos los lenguajes tienen limitado el tamaño máximo de la pila, lo que implica que tienes un máximo de llamadas anidadas que puedes hacer
Cuando una función llama a otra, y esa a otra, y esa a otra, etc... vas anidando más y más llamadas. No obstante es raro que pases de una docena de llamadas una dentro de otra antes de empezar a retornar de la más profunda. Salvo que uses recursividad. En ese caso puedes tener a priori cientos de llamadas anidadas, y por tanto agotar la pila
el Tail Call Optimization es un mecanismo que tienen algunos lenguajes para evitar que la pila se llene aún cuando usas recursividad, por el método de que si la función termina con una llamada a otra para luego retornar el resultado, el "compilado" lo que implementa en vez de una llamada es un salto
eso puede mitigar los problemas que la recursividad puede causar
@x3k_js Bueno, tengo claros algunos conceptos que son válidos para cualquier lenguaje y eso me permite responder de vez en cuando a preguntas de JavaScript. Quizás podría haber respondido también a esta sobre recursividad. Pero no creo que me corresponda el título de "sensei del JS" :-) Otros por aquí lo merecen mucho más
@x3k_js Está demostrado que cualquier código recursivo se puede convertir en iterativo (bucle) y viceversa. En muchos casos la versión iterativa es incluso más clara de comprender. Por ejemplo, la suma de elementos de una lista que aparece en la pregunta a la que te acabo de enlazar, es mucho más intuitiva en su versión bucle que en su versión recursiva
la recursividad en ese caso solo tiene desventajas, pues es más lenta (las llamadas a funciones requieren un tiempo) y consume más memoria (la pila de las llamadas), y encima es más difícil de entender
en otros casos en cambio la versión recursiva es infinitamente más simple de comprender, y esa sería su principal ventaja ya que desde el punto de vista del tiempo de ejecución y de la memoria usada, siempre será mejor la versión iterativa
ejemplos de funciones recursivas que son más fáciles de entender que la versión iterativa son aquellos en los que el propio problema está definido de forma recursiva
por ejemplo, la solución al problema de las "Torres de Hanoi", o el recorrer un árbol en una búsqueda first-depth
@x3k_js Conoces el problema de las torres de Hanoi, supongo?
Ah, pues es un ejemplo clásico que te ayudará a apreciar la elegancia y sencillez de la recursividad
El problema es: tienes tres agujas y varios discos de tamaño decreciente pinchados en una de las agujas
formando una especie de "pirámide"
El tema es mover la pirámide a la aguja de la derecha, siguiendo unas reglas
solo puedes mover un disco de cada vez
no puedes colocar un disco grande encima de uno pequeño
puedes usar la aguja que sobra como "almacén temporal"
¿cómo lo resolverías? Intentarlo "de cabeza" es complicado y no digamos ya escribir un algoritmo iterativo (en bucle)
de forma recursiva en cambio es trivial. Te doy un rato para que asimiles el problema y me preguntes lo que no tengas claro, y luego te vuelo la cabeza :-)
No es difícil resolverlo "físicamente" con los discos y los palitos. No tienes a fin de cuentas tantos movimientos posibles. Por ejemplo, el único posible movimiento inicial es tomar el disco pequeñito de la cúspide y moverlo a una de las agujas vacías
una vez has movido eso, el único movimiento siguiente es llevar el siguiente disco de la pirámide a la otra aguja libre
y después el pequeñito quitarlo de la aguja en que estaba y moverlo encima del segundo
Si lo intentas un rato, con una pirámide pequeña (3 discos) verás lo que te quiero decir
no está claro al principio qué aguja usar de almacén
y en todo caso, ¿cómo harías un programa que te dé la solución?
por ejemplo, las agujas se numeran 1, 2, 3 y el programa tiene que escribir por pantalla algo como
1->2
1->3
2->3
...
indicando de qué aguja tomo el disco (superior) y a qué aguja lo muevo
no sabría muy bien por dónde empezar el algoritmo si intento hacerlo con un bucle iterativo normal
pero la versión recursiva es tan sencilla que parece imposible. Parece magia. Sería así:
Imaginemos que tenemos una función que nos imprime la solución para una torre de N discos, imprimiendo todos los pasos necesarios para mover los N discos desde la aguja "a" a la aguja "b". Los parámetros de esa función serían a, b, y N
para mover una torre de tamaño N+1, la solución sería:
- Mueve el disco más pequeño de la cúspide de "a" a la aguja intermedia (la que no es "b") - Llama a la función que te da la solución para la torre de tamaño N, pasándole "a" y "b" como parámetros - Mueve el disco pequeño de la aguja intermedia, a la aguja "b"
¡Fin!
y lo curioso es que esa función que mueve la pila de tamaño N, es esta misma que acabo de describir, salvo por un caso que habría que verificar con un if, que es el caso en que N=1, que se resuelve trivialmente moviendo el disco de "a" a "b"
yo intento resolverlo y me salen 200 lineas de código seguro XDDDDD. Si me esta explotando la cabeza para resolverlo a mano con uno de 5 discos uterra.com/juegos/torre_hanoi.php
Cuidado, cuantos más discos la cosa crece exponencialmente
yo no intentaría resolverlo a mano con más de cuatro
bueno, todo esto al final era para ilustrar que, con la cabeza clara e inspirada, una implementación recursiva de un problema puede hacerse en muy pocas líneas de código. Y que esta es la utilidad de la recursividad. Su potencia expresiva. Pero que debería limitarse a problemas que lo requieran
el ejemplo que pones en tu pregunta claramente no necesita ser recursivo
Por cierto, que aquí puse mal el algoritmo recursivo:
- Mueve el disco más pequeño de la cúspide de "a" a la aguja intermedia (la que no es "b") - Llama a la función que te da la solución para la torre de tamaño N, pasándole "a" y "b" como parámetros - Mueve el disco pequeño de la aguja intermedia, a la aguja "b"
Debería ser así: - Usa la función para mover los N-1 primeros discos a la aguja intermedia - Mueve el disco que queda a la aguja destino - Usa de nuevo la función para mover la torre de N-1 discos que está en la aguja intermedia, sobre el disco gordo de la aguja destino
Mi dilema viene a ser. Nunca he usado la recursividad, y la evito. Por lo que incluso, entiendo mejor un bucle que una funcion recursiva. Entonces, ¿me puede interesar darles una oportunidad a las funciones recursivas? ¿O las sigo mirando con cara de asco abrazando los loops?
@AlvaroMontoro estarias orgulloso de mi.. he logrado iluminar la pantalla y mover el bendito circulo por la pantalla.. no tengo muy claro como.. pero funciona jjajajaja
La operación matematica, la estoy haciendo en el front con js, pero a la hora de querer, que ese resultado, se actualice en la base de datos, no sé, como hacer, alguna sugerencia por favor?
archivo html
{% extends "plantillas/base.html" %}
{% block content %}
{% load staticfiles %}
{% now "Y-m-...