Name:
Anonymous
2013-02-16 15:52
OK YOU FUQIN ANGERED AN EXPERT STATE MACHINE PROGRAMMER
#include <stdio.h>
// ((#\A 65 (4 1)) (#\E 69 (4 5)) (#\I 73 (4 9)) (#\O 79 (4 15)) (#\U 85 (5 5))
// (#\a 97 (6 1)) (#\e 101 (6 5)) (#\i 105 (6 9)) (#\o 111 (6 15)) (#\u 117 (7 5)))
int transition_table[5][256] = {
/*
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
{ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // 0
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // 1
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // 2
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // 3
_, A, _, _, _, E, _, _, _, I, _, _, _, _, _, O, // 4
_, _, _, _, _, U, _, _, _, _, _, _, _, _, _, _, // 5
_, a, _, _, _, e, _, _, _, i, _, _, _, _, _, o, // 6
_, _, _, _, _, u, _, _, _, _, _, _, _, _, _, _, // 7
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // 8
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // 9
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // A
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // B
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // C
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // D
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // E
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ }, // F
*/
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 2
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3
0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, // 4
0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 5
0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, // 6
0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 7
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // F
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3
1, -1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 3, // 4
1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5
1, -1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 3, // 6
1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // F
// 0 1 2 3 4 5 6 7 8 9 a b c d e f
{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 1
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 2
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 3
2, -1, 2, 2, 2, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, // 4
2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 5
2, -1, 2, 2, 2, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, // 6
2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 7
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 8
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 9
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // a
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // b
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // c
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // d
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // e
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, // f
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 1
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 2
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 3
3, -1, 3, 3, 3, -1, 3, 3, 3, -1, 3, 3, 3, 3, 3, 3, // 4
3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 5
3, -1, 3, 3, 3, -1, 3, 3, 3, -1, 3, 3, 3, 3, 3, 3, // 6
3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 7
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 8
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 9
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // A
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // B
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // C
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // D
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // E
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, // F
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 0
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 1
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 2
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 3
4, -1, 4, 4, 4, -1, 4, 4, 4, -1, 4, 4, 4, 4, 4, -1, // 4
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 5
4, -1, 4, 4, 4, -1, 4, 4, 4, -1, 4, 4, 4, 4, 4, -1, // 6
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 7
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 8
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 9
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // A
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // B
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // C
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // D
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // E
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 } // F
};
int accept_states[] = { 0, 0, 0, 0, 0 };
int read(char* data) {
int state = 0;
while(*data) {
state = transition_table[state][*data];
if(state == -1) return state;
data++;
}
return accept_states[state];
}
int main(int argc, char** argv) {
if(argc != 2) {
fprintf(stderr, "%s: usage: %s phrase\n", argv[0], argv[0]);
return 2;
}
int state = read(argv[1]);
return state == 0 ? 0 : 1;
}