| |
|
2981
|
Foros Generales / Foro Libre / Re: "Estad preparados para la guerra", el panfleto que está llegando a todos los hog
|
en: 29 Mayo 2018, 04:46 am
|
La idea de usar ondas para derribar un pepino nuclear no es tan descabellado, pero el problema es que actualmente no hay tecnología para lanzar un "láser" lo suficientemente potente que atraviese el blindaje de las ojivas nucleares, y por supuesto a cuanta mayor la distancia más potencia necesitas.
Los hay srWhiteSkull, lo que pasa es que el señor #!drvy es tan inocente que cree que le van a dar los planos de todo, o si no, no existe... Los rusos no tienen N1 PU74 1D34 de jugar al póker, y el señor #!drvy, parece que tampoco... si tienes un as bajo la manga, TE LO GUARDAS hasta que realmente lo necesites, que será cuando todos vacíen su bolsillo e hipotequen su casa y lo pongan sobre la mesa, para llevarte todo, no para llevarte 4 cochinas monedas... como dice sobre Corea N.
|
|
|
|
|
2982
|
Programación / .NET (C#, VB.NET, ASP) / Re: Variaciones de La Quiniela y números en base 3
|
en: 29 Mayo 2018, 04:30 am
|
Podrías ser más específico y no poner equilicuá, un enlace y ya está. http://dle.rae.es/?id=FznyqURAsí a ojo viendo el enlace no veo que puedas saber por ejemplo qué lugar ocupa esta variación: XXXX12111222XX Sin haber generado ni una sola variación. No vale por ejemplo crear X variaciones o combinaciones que están en una matriz o en memoria o crear un bucle y establecer una condición y decir, vale esta variación y está en tal lugar. Está todo allí, bastante claro, si te tomas la molestia de leerlo... entresaco un par de párrafos que inicialmente resumen bastante. vamos con el primero, el algoritmo-A.
El algoritmo-A, es el más simple de todos en cuanto a líneas de código y como dije es solo un cambio de base de numeración a la base cuyo tamaño representa el alfabeto usado. Es el algoritmo al que todo el mundo (que sepa un mínimo de programación debiera llegar... - Su fuerte, la extrema sencillez de entenderlo... (y programarlo). - Su defecto, que no es el más óptimo en cuanto a velocidad. ... El conjunto de caracteres puede optarse por todo el ASCII (o una parte definiendo un punto de inicio y una cantidad de caracteres), o restringido a los caracteres: 0-9, A-Z, a-z, o cualquier combinación de ellas (pero siempre en el orden en que aparecen. También permite recibir un alfabeto personalizado (básicamente un array con los caracteres que se desee y en el orden que se quiera). Para el propósito de este texto es suficiente ... (una interfaz sencilla basada en A-Z, 0-9, etc..) En el primer pedazo de código se definen funcionalidad previa, enumeraciones y tal, como se indica aquí: ... - Luego hay 4 constructores de clase, para permitir invocar el tipo de alfabeto de que se quiere generar en base a las opciones que permite. (para ! X " habría que elegir Custom, y pasar la cadena ("1X2") - Finalmente hay un método que construye el alfabeto. La idea de esta clase, es que el alfabeto sea definido una sola vez y pueda ser usada como parámetro para enumerar. Así se evita que mientras se enumere se modifique el alfabeto (o el tamaño del mismo) y dé lugar a errores durante la ejecución. Ya que se construye y luego es de solo lectura, no puede modificarse mientras se usa. El siguiente código, copiado de allí: El bucle interno que realiza toda la operatoria, para generar una permutación y el bucle externo para iterar entre ttodas las permutaciones. Do v = k n = Numchars Do x = (v Mod p_Sizealfabeto) Clave(n) = p_Alfabeto(x) ' convertir el byte a char. v \= p_Sizealfabeto ' división entera. n -= 2 Loop While (n >= 0) ' USAR la clave desde aquí ' llamada a FuncionX(Clave) k += 1 Loop While (k < s_MaxPermutaciones)
Muéstrame un sistema diferente al mío donde puedas obtener el orden que ocupa dentro de un orden lógico único de menor a mayor (ya que solo hay uno para cada tipo) sin bucles, sin generar variaciones. Tal como así: De 2X2XXX1 a 2121110 y después 2121110= 0·3^0 + 1·3^1 + 1·3^2 + 1·3^3 + 2·3^4 + 1·3^5 + 2·3^6 = 1902 (+1) ya lo tienes. Equilicuá... si ya has visitado el enlace para saber lo que significa, tu pregunta sobra... Justo las líneas antes del bucle, señalé esto: If (.PermutacionInicialLng < 0) Then .PermutacionInicialLng = 0 If (.PermutacionInicialStr.Length > 0) Then ' FALTA: código para convertir la clave a la enésima permutación. ' es el proceso inverso al seguido en el algoritmo y debiera facilitarse como una función pública. ' k= EnesimaPermutacion(.PermutacionStr) ' La función que devolvería el índice de la permutación reclamada. Else k = .PermutacionInicialLng End If
Convertir una clave-apuesta (permutación) a un número indexado de permutación dentro de todas las permutaciones, es (como señalo en dicho texto) la operación inversa... Resulta tan obvio, que ni me molesté en hacerlo. En general con ese algoritmo (el primero de 4), la única forma de parar en una permutación específica para poder continuar desde donde se dejó en otro momento, exije precisamente convertir una permutación a su valor numérico (el enésimo en la permutación, justamente para luego sumar 1 y seguir generando permutaciones partiendo de ese valor)... Más arriba al comentar sobre ese algoritmo, describiía que es el más sencillo, pero también el más lento de los 4. Todas las permutaciones de la quiniela (3^14= 4'7millones), en éste equipo desde el que escribo, que data del 2008, las genera en 3'99 segundos, en tanto los otros algoritmos, los generan 2-3 órdenes más rápidos (cientos-miles de veces más rápido)... no se requieren multiplicaciones, divisiones, módulo... solo suma 1 para un único carácter (de toda la palabra) para generar la siguiente permutación. En los otros no puedo computar el tiempo exacto, siempre da 0 TICKS (frente a los casi 40millones de ticks). En definitiva, lo que te decía al principio es que esto es pura combinatoria, tratarlo como algo distinto, aleja el sentido matemático de un problema conocido, hacia algo que pueda parecer 'raro'... generar claves = generar las apuestas de la quiniela. Es lo mismo, solo cambia el alfabeto usado ("1X2", para la quiniela) y el tamaño de 'palabras' a generar (para la quiniela una palabra de 14 caracteres). Cambiando el nombre porque el dominio social sea diferente, no lo convierte en ningún problema nuevo ni distinto, de ahí que cuando señalaste que no habías encontrado 'fuentes', sin estar errado, no llega a ser cierto... es solo porque has buscado por un nombre específico, en vez del genérico del problema.
Si quieres hacer algo interesante sobre las quinielas (y de lo que no hay apenas literatura), te comento por ejemplo que intentes lograr cuántas y cuáles permutaciones para 4 partidos, son las mínimas necesarias para asegurar siempre que se aciertan al menos 3 (de los 4 partidos). Es decir que jugando x apuestas para 4 partidos, tengas asegurado (al menos) 3 aciertos... y cuáles son, o mejor dicho, como obtener las combinaciones de dichas apuestas... teniendo en cuanta que todas las permutaciones posibles para esas 4partidos, son al menos 3 triples (27 apuestas) y un partido fijo en las 27 apuestas, que lógicamente son costosas (los triples), ¿...se puede asegurar 3 aciertos con menos apuestas que las 27?... Esto es algo conocido, aunque te comento que existen muchas combinaciones (y curiosamente la ONLAE, solo contempla 1), más aún esto se puede ampliar a 5, 6, 7, etc... partidos, que lo hace todavía más interesante... Saludos.
|
|
|
|
|
2985
|
Foros Generales / Foro Libre / Re: "Estad preparados para la guerra", el panfleto que está llegando a todos los hog
|
en: 28 Mayo 2018, 05:03 am
|
... ¿O acaso creéis que los ICBM con cabezas nucleares están ahí para decorar?...
el qué...? la mitad o más fueron desmantelados por acuerdos en los 90. Sin embargo la gran mayoría estaban repartidos en los países integrantes del Pacto de Varsovia, que con la disgregación de la URSS, perdieron sus 'derechos' y se quedaron 'en casa' de cada páis... Los restantes que aún quedaren, sin el debido mantenimiento durante 15-20 años estarán tan oxidados que no funcionarían y dudo que se hayan atrevido a andar toqueteándolos... Y todo eso contando con que fueran auténticos y no de juguete (cartón piedra)... Los que Rusia pueda tener, serán los que hayan fabricado en los últimos 10 años, si es que han fabricado alguno desde entonces... De verdad Rusia, perdió todo su potencial de terror, cuando desapareció la URSS y sus misiles se largaron de Cuba. Por supuesto sin importar lo previo Ucrania no es rival para Rusia... Ni que decir que si lograran salir a la atmósfera unos pocos misiles nucleares (poco importa que sean o no balísticos), pierde todo el planeta... y no gana nadie, solo se podrá decir quien pierde más, más rápido... Y olvidaros de que un misil balístico vuele a 1.000km de distancia desde el origen los sistemas de alerta temprana se disparan demasiado rápido, demasiados satélites apuntando a territorio enemigo escrutan a cada instante la firma de los misisles... ya no se trata de interceptar un misil en el aire con puntería y velocidad, se trata simplemente de derribar un aparato por ondas, ya está probado y archidemostrado hace más de una década, la puntería ya no es un punto 3D de 1 metro cuadrado, es un arco (probablemente no mayor de 30º y no menor de 15º), realmente un cono (tridimensional) la distancia es enorme decenas de km... derribarse sería derribado, el problema es si a pesar de ello, la carga nuclear se activaría o no, si se activa, no importa demasiado donde caiga... (si hablamos de solo 1,2,3 sí, claro, si caen en el desierto o apartados en el mar, si hablamos de una docena ya ni así importa).
|
|
|
|
|
2987
|
Foros Generales / Foro Libre / Re: "Estad preparados para la guerra", el panfleto que está llegando a todos los hog
|
en: 27 Mayo 2018, 22:00 pm
|
|
mmm... mejor que los reparta Putin en Rusia.
Que yo sepa, nadie va a a ir allá (ni ganas) a guerrear... pero si se pasa de listo, puede que suceda así... y a día de hoy, la cosa no se saldraría como en todas las ocasiones previas, donde el frío extremo era un aliado contra las invasiones extranjeras.
La URSS era una potencia. Rusia es un potentado, algo muy ditintio incluso en el terreno militar.
|
|
|
|
|
2988
|
Programación / Programación C/C++ / Re: Proyecto de Estructura de datos.... GRAFOS!!! :c
|
en: 27 Mayo 2018, 21:00 pm
|
Antes que nada, debes decidir/indicar, si es admisible que se revisite un nodo dos ó x veces, ó solo una como máximo... sino, por ejemplo sería valido la ruta: A->C, B, D, H, F, C, L ...Que, como se puede ver, revisita el nodo C dos veces... Una vez decidido, y dando por supuesto que no se admitite revisitar nodos, puede tratarse como un automata finito determinista (AFD), donde el alfabeto es el conjunto de nodos (A, B, C, D, F, H, L) donde el estado inicial es A y el estado final es L, entonces puede establecerse el resto de nodos como estados de transición entre uno y otro. Así desde A solo puede accederse a F y a C, lo que por ejemplo tratado como un autómata finito determinista , se señalaría en BNF como: A = C|F y desde C, se puede acceder a los nodos C = A|F|B|L El resto d eproducciones: F = A|H H = F|D D = H|B B = C|D L = C <--- esta no interesa, se trata de llegar a L, no pasar po él (es el estado final, no un estadode transición) Como se puede ver, las producciones BNF, son las adyacencias de un nodo, la cantidad de nodos a los que se accede (por ejemplo A|F|B|L) son las aristas que salen de dicho nodo (en el ejemplo del nodo C, en C = A|F|B|L). Entonces una vez en el estado inicial (A, pongamos estado 1), solo puede transitar hacia un estado 2, y desde un estado 2 a otro estado 2 o al estado de transición 3, si no tiene otro nodo que sea visitable que uno ya visitado, va al estado de error y por tanto ese camino no tiene solución, debe volverse un paso atrás cada vez que esto suceda... el estado de transición 3 (L), es el estado final, y señal de que admite ese 'token', para la gramática del alfabeto propuesto... Puede tratarse como un automata de pila, porque un nodo no puede visitarse más de una vez... A diferencia claro, de por ejemplo cuando se hace un compilador que en la entrada viene un texto y se trata de ver si un token pertenerce o no a la gramática, en tu caso haces algo distinto, la entrada es nula y tratas de averguar todas las salidas válidas (para una gramática libre de contexto serían incontables), pero para el caso de un grafo como el del ejemplo, es finito... ...de entrada se sabe que como máximo la longitud de palabra es la del alfabeto (ó menor)... Por cuestiones de rendimiento, la pila realmente puede ser remplazada por un array de bytes donde cada letra del alfabeto tenga un valor true (no visitado ún, esto es, es Visitable), y una vez usado (pop si fuera una pila) su valor se ponga a false (nodo visitado, no visitable ya)... la velocidad de usar el array sobre una pila, está en el acceso aleatorio. al no exigir tener que extraer lo de encima de la pila... para acceder a un nodo. Aquí un pseudocódigo casi completo... la función donde ba todo el trabajo lo dejo a tu esfuerzo... funcion TodasLasRutasDeUnGrafo(string alfabeto) // sin repetir nodo. array bytes pila() // realmente no es una pila, pero acomoda llamarlo así. array string prod= GetProducciones //las producciones BNF, como un array de strings.
// Albabeto = ABCDFHL la primera letra debe ser el estado inicial Bucle k desde 2letra de alfabeto hasta última-1 //y la última debe ser el estado final. x = alfabeto(k) //letra enésima del alfabeto c= caracter kesimo en alfabeto Hacer pila = LlenarPila(alfabeto) //vuelve visitable todos sus nodos. //pila(ASCII(c)) = FALSE // excepto la letra inicial de la que partimos esta vez, // pero esto mejor se traslada a la función invocada. token = SiguienteToken(prod, pila, c) Si token <> "" imprimir "A --> " + token sino salir del bucle interno fin si Repetir //mientras token distinto de nulo Siguiente
// el array es fijo según el grafo, y tal como se indico en las producciones. // al caso se 'montan' en un array de strings, array de String = Funcion GetProducciones array de string p(0 a 255)
//Cada valor está en la casilla cuyo ASCII representa y su contenido son la representación de cada nodo al que se accede desde él, // cada letra representa un nodo, al caso se han ordenado alfabéticamente, pero puede seguirse el orden en que aparecen sobre el grafo girando en uno u otro sentido, no importa... p(ASCII(A)) = CF p(ASCII(B)) = CD p(ASCII(C)) = ABLF p(ASCII(D)) = BH p(ASCII(F)) = AH p(ASCII(H)) = DF //p(ASCII(L)) devolver p fin funcion array de bytes = funcion LlenarPila(string alfabeto) array de bytes x(0 a 255) byte k
Por cada letra en Alfabeto x(ASCII(letra)) = TRUE //por ejemplo si letra es A: x(65) = TRUE, porque A es el carácter ASCII 65 siguiente devolver X fin funcion Y la función final que lleva todo el trabajo, la dejo a tu esfuerzo... pero con algunas anotaciones. enumeracion Estados ESTADO_ERROR = 0 ESTADO_INICIAL = 1 ESTADO_TRANSICION = 2 ESTADO_FINAL = 3 fin enumeracion
// de entrada sabemos que el estado inicial es 1, y el primer carácter-nodo es A, que puede obviarse. string = funcion SiguienteToken(array string P(), array bytes Pila(), char letra) Estados e= ESTADO_INICIAL string t = letra // la letra inicial, para esta vez. letra = siguiente letra en p(ASCII(letra)) // esto exige recursión ya que una producción engloba a otra. // Si pila(ASCII(letra)) = TRUE si el nodo de dicha letra es visitable // t += letra // Si letra = "L" // e = ESTADO_FINAL // devolver t // sino // e = ESTADO_TRANSICION // marcar letra no visitable pila(ASCII(letra)) = False // fin si // sino // volver atras, si es recursivo, implica devolver // fin si // Si un nodo no es visitable, volver atrás, y si ya no quedan más nodos hacia adelante devolver false. fin funcion Finalmente decirte que casi siempre verás una solución con un cuerpo más matemático, tirando de árboles... , la solución (incompleta) que te aporto, es... no más cercana, sino íntima a la programación... pués entra en la parte de la teoría de compiladores. Aunque al caso ha habido una discreta variación... a medias entre un análisis léxico y sintáctico. Otra solución es recurrir a la combinatoria... generar (ir generando y probando sobre la marcha cada una si es un camino, esto es si el siguiente nodo es accesible desde el actual) todas las permutaciones sin repetición de largo máximo el alfabeto ABCDFHL (menos la letra inicial). Como algoritmo es mucho más simple, pero es más lento en ejecución, especialmente si el alfabeto fuera mucho más largo, para este cortito, todavía no es significativo. string permutacion, ruta array de string p() // el array de producciones que se generó el en otro pseudocódigo... traer la función aquí. por cada permutacion sobre el alfabeto //BCDFHL, nota que retiramos la A, pués siempre es el nodo inicial ruta = Substring(permutacion, hasta "L") // obtenemos la subcadena hasta L, lo que tenga detrás sobra si EsCamino(ruta, p ) = TRUE imprimir "A" + ruta fin si siguiente
buleano = EsCamino(string ruta, array strings p) // p son el array de las producciones generadas en el otro pseudocódigo char c = ruta(0) char n //... recorrer todo el string, viendo si desde la letra actual, hay conexión al otro nodo (siguiente letra) bucle para k desde 1 hasta largo de ruta n = ruta(k) si p(ASCII(c)) contiene n c = n sino devolver false fin si siguiente devolver TRUE // c = "L" fin funcion
// OJO: Alfabeto aquí deja fuera la letra A, no queremos que cambie de posición porque sabemos que siempre ha de ser el primero, no cabe en otra posición. // alfabeto = "BCDFHL" string = SiguientePermutacion(string alfabeto , string permutacion) ... calcula y devuelve la siguiente permutacion a la recibida. inicialmente permutacion = alfabeto fin funcion
|
|
|
|
|
2989
|
Foros Generales / Dudas Generales / Re: como puedo adivinar apuestas deportivas
|
en: 26 Mayo 2018, 23:02 pm
|
...una pequeña ayuda ... ...solo queria saber si habra algun truco para poder adivinarlo al 100%
...nada mas...
¿una pequeña ayuda?. ¿Truco?. ¿Adivinarlo al 100%?. ¿Nada más?. ¿Qué edad tienes?. ¿Has ido a la escuela?. No cabe otra posibilidad para semejante ~~~~~~~~~~
|
|
|
|
|
2990
|
Programación / Java / Re: Problemas con los array
|
en: 26 Mayo 2018, 22:55 pm
|
|
No está bien pedir que "te miren" el código.
Señala que te falla,que precisa mejora, donde te pierdes, que no te sale, que te falta y uno se ciñe justo al punto concreto...
|
|
|
|
|
|
| |
|