#include #include #include /** * Comprobaria si la palabra es correcta. */ void checkIfValid(char* word) { printf("%s\n", word); } /** * Genera el siguiente caracter basandose en la tecla pulsada. * Devuelve 0 si el caracter generado es el siguiente, * Devuelve 1 si el caracter siguiente "saltaría" de tecla, * por lo que la reinicia. */ int next(char *c, char pressed) { if (((*c - pressed) + 1) % 3 == 0) { *c = pressed; return 1; } ++(*c); return 0; } /** * Genera palabras en funcion de un teclado de movil imaginario. * Funcionamiento: * - Genera la siguiente palabra avanzando el siguiente caracter. * - La funcion next() indica si se * - Si se da el caso, se avanzan letras hasta que no se "desborde". * * Ejemplo: ./main AAA * 1 Valida AAA * 2 Valida BAA * 3 Valida CAA * 4 Cómo el siguiente carácter vuelve a ser A, avanza hasta la siguiente * letra que no 'reinicia', y valida ABA * 5 Valida BBA * 6 Valida CBA * 7 Como el siguiente carácter vuelve a ser A, avanza hasta la siguiente * letra que no 'reiniciar', y valida ACA * ... * * Autor: Sergio Garcia Moratilla */ int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "%s [pressedKeys]\n", argv[0]); return -1; } char* pressedKeys = argv[1]; int size = strlen(pressedKeys); /* Skip the '\n' */ char* generated = (char*)malloc(sizeof(char) * (size +1)); int i = 0; for(i = 0; i < size + 1; ++i) { generated[i] = pressedKeys[i]; } i = 0; int j = 0; while (i < size) { checkIfValid(generated); if (next(generated+j, pressedKeys[j]) != 0) { for(i = j + 1; i < size && next(generated+i, pressedKeys[i]) == 1; ++i) { /* do nothing inside */ } } } free(generated); return 0; }