Pues visto el "éxito" del otro thread, me he decidido a crear otro. En este la prueba es crear un programa que, pasándole como argumento un número de DNI, te diga la letra. La gracia está en ver quién hace el programa más corto.
La entrada sería así :
$ ./dni 12345678
C:> dni 12345678 (Para los Windowseros )
Siendo 12345678 el número de DNI.
La salida deberá ser :
- Si la entrada es válida devolver el número del DNI seguido de un guión y la letra. Ejemplo : 12345678-Z. Además main deberá devolver 0 (return 0.)
- Se la entrada es incorrecta (El DNI no tiene exactamente 8 caracteres. No hace falta comprobar si son números y tal, con comprobar la longitud vale.) deberá escribir "Usage: dni <8 digits number>". Main debe devolver 1 (return 1.)
Toda salida debe seguir de un salto de línea (\n)
Solo vale C a secas, nada de includes (Ni siquiera si vienen con todos los compiladores), ni CPP, ni nada... Si necesitas declarar una función que viene con C (Como printf) declárala en el programa.
Ejemplo: int printf(const char *format, ...);
No seáis cabrones y usad C válido, sin warnings en el compilador ni nada. Mejor si usáis GCC para compilar xD
Al final del fichero debe haber una línea en blanco, que eso ya es un byte en Linux y dos en Windows (Los de Windows avisad que estáis programando ahí para poneros un byte menos.)
Para el que se pregunte como se saca la letra del DNI, decir que es símplemente el resto del número del DNI entre 23, y según el resultado que de el resto, coger ese caracter de una cadena especial. La cadena especial es "TRWAGMYFPDXBNJZSQVHLCKE".
Ejemplo: 12345678/23, el resto da 14. Se debería coger el carácter 14 de la cadena, que en este caso es la Z.
Por cierto, la medida del tamaño del programa se realiza sobre el código, no sobre el binario Yo he conseguido acortarlo hasta los 227 bytes. A ver si alguien hace código más corto. No pongáis de momento el código, que cada uno se saque las castañas del fuego, que habrá más de uno que se "inspire" en código de otro xD
Linuxeros, poned esto en la carpeta donde tengáis el código :
echo "echo \"-------------\"; gcc -o dnin dni.c; echo \"Size File\"; echo \"-------------\"; du -b dni.c dnin; echo \"-------------\"; ./dnin 12345678; echo \"-------------\"; ./dnin error; echo \"-------------\"" > dni; chmod +x ./dni
Creará un archivo que, asumiendo que el fichero fuente se llame dni.c, os mostrará la salida si es bueno y si es malo el DNI, y el tamaño del source y el binario. Además autocompilará el programa cada vez que ejecutes ./dni (Con el nombre del binario "dnin"), con lo que no habrá que andar compilando todo el rato.
Cuando yo pongo ./dni me sale :
-------------
Size File
227 dni.c
7484 dnin
12345678-Z
Usage: dni <8 digits number>
-------------
Si lo habéis hecho bien, os debería salir lo mismo que a mi, aunque con diferentes tamaños de archivo, claro.