| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
DCelso

Registrado: 28 Abr 2004 Mensajes: 112
| Publicado: 20/09/2007 5:30 am | | | Título: Algoritmo para mostrar los dígitos misteriosos del DNI |
| Hola os dejo un algoritmo para mostrar los dígitos misteriosos de la parte de atrás del DNI. Probadlo, ya me contareis. Esto resuelve negativamente el enigma de la leyenda urbana de que el último de los números equivale a las veces que está repetido tu nombre y apellidos en España.
| Código: | #define n char #include <ctype.h> #define e isdigit #include <iostream.h> #define a isalpha char cd(char *); #define o toupper #include <string.h> #define u int #define c cd #define i endl int main()///// {n r[255];cout <<"Introduce tu NIF: ";cin>> &r[1];r[0]=cd(&r[1]);cout <<"Introduce fecha de nacimiento (AAMMDD): ";cin>> &r[11];cout <<"Introduce fecha de caducidad (AAMMDD): ";cin>> &r[21];sprintf(&r[31], "%s%d%s%d%s%d", &r[1], r[0], &r[11], cd(&r[11]), &r[21],cd(&r[21]));cout <<" El primer dígito misterioso es:"<<(u)r[0]<<endl;cout <<" El segundo dígito misterioso es:"<<(u)cd(&r[31]);}n c(n*h)/// {int f[5]={7,3,1,0,0};for(;h[f[4]]!=0;f[4]++)// if(e(h[f[4]]))// {f[3]+=(h[f[4]]-48)*f[f[4]%3];}else if(a(h[f[4]]))// {f[3]+=(o(h[f[4]])-65)*f[f[4]%3];}else return-1;return f[3]%10;}
|
NOTA: he puesto a prueba mi nivel de código ofuscado, si teneis sugerencias para ofuscarlo mas son bienvenidas. Si alguien lo quiere desofuscado que lo comente. Salu2. |
| | Volver arriba | |  | cheroky
Registrado: 22 Sep 2005 Mensajes: 1331 Ubicación: En ecx esperando un call
| Publicado: 20/09/2007 6:50 am | | | Título: |
| Critica constructiva:
Ofuscar un codigo no es darle la espalda al estandar de C++, ahi hay un huevo de errores.
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
| | Volver arriba | |  | DCelso

Registrado: 28 Abr 2004 Mensajes: 112
| Publicado: 20/09/2007 4:33 pm | | | Título: |
| Yo uso g++ y compila de p... madre, si va con el g++ casi que debería ir en cualquier otro.
¿Que compilador usas tu y que errores te da? A ver si puedo ayudar a compilarlo en tu entorno.
¿En qué parte estoy saltandome el standard C++?
Nunca viene de mal una crítica constructiva .
De todas formas eso de decir que ofuscar no es saltarse el standard es discutiblie, no se en qué te basas, porque en todas las competiciones de código ofuscado la única norma era que compilase el código fuente y el binario cumpliera con el objetivo final. Si lo piensas es lógico si lo estás ofuscando para que sea ininteligible, si te saltas normativas lo consigues aún más. Si quisieras ensuciarte ¿te mancharías con agua?
http://www.ioccc.org/
Venga, saludos. |
| | Volver arriba | |  | | cheroky
Registrado: 22 Sep 2005 Mensajes: 1331 Ubicación: En ecx esperando un call
| Publicado: 21/09/2007 12:45 am | | | Título: |
| | DCelso escribió: | | Yo uso g++ y compila de p... madre, si va con el g++ casi que debería ir en cualquier otro. |
| Código: | $g++ dc.cpp In file included from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/iostream.h:31, from dc.cpp:4: C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/backward_warning.h:32:2: warning: #warnin g This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes , or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. In file included from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstdio:52, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++locale.h:43,
from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iosfwd:46, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ios:44, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ostream:45, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iostream:45, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/iostream.h:32, from dc.cpp:4: C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h:216: error: extraneous `char' ignored C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h:219: error: extraneous `char' ignored C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h: In function `int vsnprintf(char*, size_t, const cha r*, char*)': C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h:219: error: expected primary-expression before "char " In file included from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstdio:52, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++locale.h:43,
from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iosfwd:46, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ios:44, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ostream:45, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iostream:45, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/iostream.h:32, from dc.cpp:4: C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h: At global scope: C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h:465: error: extraneous `char' ignored C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h:468: error: extraneous `char' ignored C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h: In function `int vsnwprintf(wchar_t*, size_t, const wchar_t*, char*)': C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/stdio.h:468: error: expected primary-expression before "char " In file included from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cwchar:54, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/postypes.h:46, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iosfwd:50, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ios:44, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ostream:45, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iostream:45, from C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/iostream.h:32, from dc.cpp:4: C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wchar.h: At global scope: C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wchar.h:280: error: extraneous `char' ignored C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wchar.h:281: error: extraneous `char' ignored C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wchar.h:282: error: extraneous `char' ignored C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wchar.h:284: error: extraneous `char' ignored C:/Mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/wchar.h:285: error: extraneous `char' ignored |
| DCelso escribió: | | ¿En qué parte estoy saltandome el standard C++? |
En la inclusion de headers propios de C++ con la extension *.h, en la inclusion de headers de C con la (tambien) llamada obsoleta *.h y por ende en la omision del namespace estandar std
| DCelso escribió: | De todas formas eso de decir que ofuscar no es saltarse el standard es discutiblie, no se en qué te basas, porque en todas las competiciones de código ofuscado la única norma era que compilase el código fuente y el binario cumpliera con el objetivo final. Si lo piensas es lógico si lo estás ofuscando para que sea ininteligible, si te saltas normativas lo consigues aún más. Si quisieras ensuciarte ¿te mancharías con agua? |
Ese es el problema, que no compila. He participadoen alguna compe de ofuscate code y salvo las de golf (minimal bytes code), era requisito imprescindible no tener warnings. No dudo que no las haya de otro modo. Para un servidor la gracia esta en ofuscarlo sin lanzar un solo warning. Y sobre la web que posteas... que se va a esperar de un grupo de hippies que no ven mas alla del POSIX. No te imaginas lo ofuscadas que pueden llegar a ser las apis de windows.
Y ya para terminar y como curiosidad hay en la red bastantes ofuscudores (si no quieres hacerte uno propio) que respetan los estandares.
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso.
Ultima edición por cheroky el 21/09/2007 4:22 am; editado 1 vez |
| | Volver arriba | |  | DCelso

Registrado: 28 Abr 2004 Mensajes: 112
| Publicado: 21/09/2007 4:11 am | | | Título: |
| Tienes mucha razón, no tiene quedar ni errores ni warnigs, debe ser una compilación limpia. Es que uso el eclipse CDT y me abtraía esa información.
Con mi afán de hacer menos pesado el código intenté usar terminología C en C++. Cagada total. He comprobado que devuelve el mismo tamaño final de archivo con los *.h y con la std. Asi que para que ocupe poquito hay que usar C , con gcc.
Pasteo aqui el código en sendos formatos sin warnigns ni errores.
C
| Código: | #define n char #include <ctype.h> #define e isdigit #include <stdio.h> #define a isalpha char cd(char *); #define o toupper #include <string.h> #define u int #define c cd #define i return int main()///// {n r[255];puts("Introduce tu NIF: ");scanf("%s",&r[1]);r[0]=cd(&r[1]);puts("Introduce fecha de nacimiento (AAMMDD): ");scanf("%s",&r[11]);puts("Introduce fecha de caducidad (AAMMDD): ");scanf("%s",&r[21]);sprintf(&r[31], "%s%d%s%d%s%d", &r[1], r[0], &r[11], cd(&r[11]), &r[21],cd(&r[21]));printf(" El primer dígito misterioso es:%d\n",r[0]);printf(" El segundo dígito misterioso es:%d",cd(&r[31]));i 0;}n c(n*h)/// {int f[5]={7,3,1,0,0};for(;h[f[4]]!=0;f[4]++)// if(e(h[f[4]]))// {f[3]+=(h[f[4]]-48)*f[f[4]%3];}else if(a(h[f[4]]))// {f[3]+=(o(h[f[4]])-65)*f[f[4]%3];}else return-1;return f[3]%10;}
|
C++
| Código: | #define n char #include <cctype> #define e isdigit #include <iostream> #define a isalpha char cd(char *); #define o toupper #include <cstring> #define u int #define c cd #define i endl using namespace std; int main()///// {n r[255];cout <<"Introduce tu NIF: ";cin>> &r[1];r[0]=cd(&r[1]);cout <<"Introduce fecha de nacimiento (AAMMDD): ";cin>> &r[11];cout <<"Introduce fecha de caducidad (AAMMDD): ";cin>> &r[21];sprintf(&r[31], "%s%d%s%d%s%d", &r[1], r[0], &r[11], cd(&r[11]), &r[21],cd(&r[21]));cout <<" El primer dígito misterioso es:"<<(u)r[0]<<endl;cout <<" El segundo dígito misterioso es:"<<(u)cd(&r[31]);}n c(n*h)/// {int f[5]={7,3,1,0,0};for(;h[f[4]]!=0;f[4]++)// if(e(h[f[4]]))// {f[3]+=(h[f[4]]-48)*f[f[4]%3];}else if(a(h[f[4]]))// {f[3]+=(o(h[f[4]])-65)*f[f[4]%3];}else return-1;return f[3]%10;}
|
Gracias por la informacion.
Por otra parte. ¿Alguien ha probado la aplicación a ver si funciona con su DNI? |
| | Volver arriba | |  | cheroky
Registrado: 22 Sep 2005 Mensajes: 1331 Ubicación: En ecx esperando un call
| Publicado: 21/09/2007 4:26 am | | | Título: |
| Con el paquete gnu-gcc y mingw cualquier uso de la STL llena de basura innecesaria el codigo ejecutable, aunque no afecta en nada en el runtime.
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
| | Volver arriba | |  | | Killrazor
Registrado: 24 Ene 2006 Mensajes: 1170 Ubicación: Barcelona
| Publicado: 21/09/2007 6:20 am | | | Título: |
| No te ofendas, pero mi pregunta es: para que compartes codigo a modo de tutorial, pero ofuscado? No es un poco incongruente? _________________ I wanna heal i wanna feel like I'm close to something real. I wanna find something I've wanted all along somewhere i belong |
| | Volver arriba | |  | Pantalàimon_
Registrado: 17 Jul 2007 Mensajes: 90
| Publicado: 05/10/2007 10:11 am | | | Título: |
| | Código: | 0 1 2 3 4 5 6 7 8 9 10 11 T R W A G M Y F P D X B
12 13 14 15 16 17 18 19 20 21 22 N J Z S Q V H L C K E |
¿Hay alguna relación entre estos números y las letras o se pueso así porque sí?
Saludos! |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |