Autor
|
Tema: como hacer un generador?? (Leído 24,812 veces)
|
dato000
Desconectado
Mensajes: 3.034
|
¿7777 combinaciones? Son demasiado pocas. A mí me hace todas (comprobado desde el fichero que genera) y son muchísimas más...
Edito:
Hay 2,75854735 × 1015 combinaciones, creo.
Saludos!
jajaj seeee 7777 es algo minusculo realmente. printf("%s%.5d\n",Letras, i); lo deje a para no imprimir esos numeros, pues no entiendo porque lo dejaste, alguna info sobre el porque debe hacerse seria de gran ayuda. Je en esta tarde me dedique a dormir por el cansancio que tenia, y hasta hace poco tengo que mirar otras cosas, pero me voy a dedicar a hacer este problema, como dices, es algo divertido mirar como podria dejar mejor el funcionamiento, si la recursividad es algo, ummm como decirlo, jodido, pero vale la pena entenderlo.
|
|
|
En línea
|
|
|
|
xiruko
Desconectado
Mensajes: 438
|
una pregunta asi por curiosidad... cuanto os dura el programa ejecutandose y cuanto os ocupa el archivo generado?
lo pregunto porque yo para hacer esta combinacion mas corta "AAAA000 hasta ZZZZ9999" llevaba unos 20 minutos o mas y 35GB de archivo cuando le he dado a cancelar. no se si me he liado haciendo el programa o que...
gracias!
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
te dejo este codigo en vb6... http://foro.elhacker.net/programacion_visual_basic/palabras_aleatorias_sin_repeticion_ayuda-t296715.0.htmlen si la parte que genera las combinaciones es este... muy simple y corto verdad?... Private Sub CombinateString(ByRef Str_String As String, Optional ByRef str_Fix As String, Optional ByRef Cancel As Boolean) Dim Lng_LenStr As Long Dim Lng_LenStrIndex As Long If Cancel Then Exit Sub Lng_LenStr = Strings.Len(Str_String) If Lng_LenStr <> 1 Then For Lng_LenStrIndex = 1 To Lng_LenStr Call CombinateString(Strings.Left$(Str_String, Lng_LenStrIndex - 1) & Strings.Mid$(Str_String, Lng_LenStrIndex + 1), str_Fix & Strings.Mid$(Str_String, Lng_LenStrIndex, 1), Cancel) Next Else RaiseEvent StrOuput(str_Fix & Str_String, Cancel) ' <--- este en C++ seria un callback a un proceso X el cual otendria por un parametro la cadena combinada, se ejecutaria N veces... el segundo parametro seria una variable booleana para cancelar el generador de cadenas (combinaciones)... End If End Sub
En unos segundos te lo subo en C++. Duñlces Lunas.
|
|
« Última modificación: 13 Julio 2012, 06:41 am por BlackZeroX (Astaroth) »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
creo que la cague en mi post anterior... te dejo la funcion que hace lo que tu quieres. #include <iostream> using namespace std; string &AddWord(string &text) { string::reverse_iterator it = text.rbegin(); for (; it != text.rend(); it++) { ++(*it); if (tolower(*it) >= 'a' && tolower(*it) <= 'z') break; (*it) = (islower(*it))? 'a': 'A'; } return text; } int main() { string text = "ZZZx"; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cin.get(); return 0; }
y aquí el de las permutaciones del post anterior... #include <iostream> using namespace std; size_t permutaciones (string text, string textFix, void (*callback)(string, bool), bool cancel = false) { size_t ret = 0; if (cancel) return ret; if (text.size()) { for (register size_t i = 0; i < text.size(); i++) { ret += permutaciones (text.substr(0, i) + text.substr(i + 1), textFix + text.substr(i, 1), callback, cancel); if (cancel) return ret; } } else { callback(textFix + text, cancel); } return ret; } void showWord(string text, bool cancel) { cout << text << endl; } int main() { permutaciones ("hola", "", showWord); cin.get(); return 0; }
Dulces Lunas!¡.
|
|
« Última modificación: 13 Julio 2012, 07:39 am por BlackZeroX (Astaroth) »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
DickGumshoe
|
jajaj seeee 7777 es algo minusculo realmente. printf("%s%.5d\n",Letras, i); lo deje a para no imprimir esos numeros, pues no entiendo porque lo dejaste, alguna info sobre el porque debe hacerse seria de gran ayuda. Je en esta tarde me dedique a dormir por el cansancio que tenia, y hasta hace poco tengo que mirar otras cosas, pero me voy a dedicar a hacer este problema, como dices, es algo divertido mirar como podria dejar mejor el funcionamiento, si la recursividad es algo, ummm como decirlo, jodido, pero vale la pena entenderlo. El %.5d debe ponerse porque en esta versión del código para mejorar la eficiencia hice que los números fueran separados de las letras. una pregunta asi por curiosidad... cuanto os dura el programa ejecutandose y cuanto os ocupa el archivo generado?
lo pregunto porque yo para hacer esta combinacion mas corta "AAAA000 hasta ZZZZ9999" llevaba unos 20 minutos o mas y 35GB de archivo cuando le he dado a cancelar. no se si me he liado haciendo el programa o que...
gracias! El tiempo exacto no lo sé, pero sí que tarda muchísimo en finalizar y ocupa también mucho... ¿Será malo para el ordenador? Gracias por el código, BlackZeroX (Astaroth). Ahora los miro! Saludos! EDITO: Finalmente son 1 188 125 718 624 combinaciones posibles!
|
|
« Última modificación: 13 Julio 2012, 13:17 pm por DickGumshoe »
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
11881125718624 combinaciones a 10 caracteres por combinacion, 118811257186240 x sizeof(char) = 118811257186240 bytes no es asi? Saludos. PD: Si hicieses un programa que crease varios fork() haciendo eso mismo, podrias colapsar un superordenador
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
DickGumshoe
|
Sí... Demasiada memoria ocupa... Ahora me pongo a ver qué puedo hacer para mejorarlo, pero creo que no hay mucho que hacer salvo reducir el código..., porque las combinaciones, queramos o no, van a ser 11881125718624, y como dice daniyo eso serían 11881125718624 bytes... Bueno, ya veré sobre la marcha qué hago Saludos!
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
Sí... Demasiada memoria ocupa... Ahora me pongo a ver qué puedo hacer para mejorarlo, pero creo que no hay mucho que hacer salvo reducir el código..., porque las combinaciones, queramos o no, van a ser 11881125718624, y como dice daniyo eso serían 11881125718624 bytes... Bueno, ya veré sobre la marcha qué hago Saludos! Te ha faltado un cero, piensa que son 10 caracteres por combinacion. 118811257186240 bytes = 116026618345,9375 KB = 113307244,47845459 MB = 110651,605935991 GB = 108,058208922 TB Creo que esta bien...
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
DickGumshoe
|
Sí, copié mal tu resultado, pero sí que lleva el 0. ¿¿¡¡108,058208922 TB!!?? Por lo tanto, es imposible hacer el programa para ejecutarse en un ordenador "normal", ¿no? Aunque el mío sea bastante potente dudo que tenga 108,05 TB xD... Saludos
|
|
|
En línea
|
|
|
|
SXF
|
jejej había compilado el otro còdigo ... con razón ya me parecía extraño...
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
hacer un generador de id con muestras
Ingeniería Inversa
|
robertofd1995
|
4
|
5,131
|
31 Octubre 2013, 15:13 pm
por robertofd1995
|
|
|
Como conseguir un generador de digito de control
Ingeniería Inversa
|
wiredbob
|
3
|
3,130
|
22 Julio 2014, 12:02 pm
por wiredbob
|
|
|
***Como hacer un generador de licencias en python
« 1 2 »
Scripting
|
Arn_dj
|
10
|
10,284
|
22 Diciembre 2014, 16:19 pm
por Arn_dj
|
|
|
MOVIDO: ***Como hacer un generador de licencias en python
Programación General
|
Eleкtro
|
0
|
1,981
|
8 Diciembre 2014, 23:17 pm
por Eleкtro
|
|
|
como hacer un vbs generador de batch
Scripting
|
destructor000
|
4
|
9,098
|
15 Septiembre 2024, 14:22 pm
por Eleкtro
|
|