| ||||
#include <math.h> #include <stdio.h> #include <stdlib.h> #define MIN(a,b) ((a)<(b)?(a):(b)) #define THRESHOLD 0.15 #define N_AR 26 #define N_COUR 25 #define N_TNR 25 #define INF 10000000 #define TOP 0 #define BOTTOM 1 #define LEFT 2 #define RIGHT 3 #define TOPLEFT 4 #define TOPRIGHT 5 #define BOTLEFT 6 #define BOTRIGHT 7 #define INPUT_H 200 #define INPUT_W 200 #define HEIGHT 20 char s[INPUT_H][INPUT_W]; char rgn[2*INPUT_H][2*INPUT_H]; double tilt, angle; double Mx, My, min_Mx, min_My, max_Mx, max_My; double Sq, min_Sq; FILE *f; struct Point { int x; int y; }; struct Rectangle { struct Point c1; struct Point c2; }; struct RectData { double angle; double min_Mx; double max_Mx; double min_My; double max_My; int w; int h; int sgn; }; struct RectData rdata; struct Point corners[8]; char vals_arial[N_AR] = "ZYXWVUTSRQPONMLKJIHGFEDCBA"; char vals_courier[N_COUR] = "ZYXWVUTSRPONMLKJIHGFEDCBA"; char vals_tnr[N_TNR] = "ZYXWVUTSRPONMLKJIHGFEDCBA"; char **let; char *let_val; int N; char *arial[N_AR] = { "000..............000" "X00..............0XX" "XXX0.............0XX" "XXXX0............0XX" "XX0XX0...........0XX" "XX00XX00.........0XX" "XX0000XX0........0XX" "XX0...0XX00......0XX" "XX0....00X00.....0XX" "XX0.....00XX0....0XX" "XX0......00XX0...0XX" "XX0........0XX00.0XX" "XX0.........0XXX00XX" "XX0..........0XXX0XX" "XX0............0XXXX" "000.............0XXX" "....................", "...................." "00.................." "0X00................" "0XXX0..............." "00XXX00............." "..0XXXX00..........." "...00XXXX0.........." ".....00XXX0000000000" ".......00XXXXXXXXXX0" ".......00XXXXXXXXXX0" ".....00XXX0000000000" "....0XXXX0.........." "..00XX000..........." ".0XXXX0............." "0XXX00.............." "0X00................" "00.................." "....................", "...................." "00...............000" "XX0............00XXX" "XXX00.........0XXXX0" "0XXXX0......00XXX00." ".00XXX00...0XXXX0..." "...0XXXX000XXX00...." "....00XXXXXX00......" "......00XXX00......." "....00XXXXXXX0......" "...0XXXX000XXX00...." "..0XXX00...0XXXX00.." ".0XX00......00XXXX0." "0XX00.........0XXXX0" "XX0............00XXX" "X0..............00XX" "0.................00", "...................." "0000................" "XXXX00000..........." "000XXXXXX0000......." "...0000XXXXXX0000..." ".......0000XXXXXX000" "...........0000XXXXX" "..............00XXXX" "...........000XXXXXX" "........000XXXXX0000" ".....000XXXXX000...." "...00XXXXXX00......." "000XXXX0000........." "XXXXX00............." "XXX00..............." "XXXXX000............" "000XXXXX000........." "...000XXXXX000......" "......000XXXXX000..." ".........00XXXXXX000" "...........000XXXXXX" "..............000XXX" "...........0000XXXXX" "......00000XXXXX0000" "..0000XXXXXXX000...." "00XXXXXXX0000......." "XXXX00000..........." "0000................", "00000..............." "0XXXX00............." "00XXXXX000.........." "..000XXXXX00........" ".....00XXXXX000....." ".......000XXXXX00..." "..........00XXXXX000" "............000XXXXX" "...............00XXX" "............0000XXXX" "..........00XXXXXX00" ".......000XXXX0000.." "....000XXXXXX0......" "..00XXXXXX000......." "000XXXX000.........." "0XXXX00............." "00000..............." "....................", "...................." "0000000000000000...." "0XXXXXXXXXXXXXXXX0.." "0000000000000000XX0." "...............00XX0" "...............00XXX" "................00XX" "................00XX" "................00XX" "................00XX" "................00XX" "................00XX" "...............00XX0" "000000000000000XXXX0" "0XXXXXXXXXXXXXXXX00." "0000000000000000...." "....................", "000................." "XX0................." "XX0................." "XX0................." "XX0................." "XX0................." "XX000000000000000000" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX000000000000000000" "XX0................." "XX0................." "XX0................." "XX0................." "XX0................." "000.................", "...................." "..00000....0000000.." ".00XXX0...0XXXXXXX0." ".0XX00...0XX0000XX0." "0XX0....00XX0...0XX0" "0X0.....00X0....0XX0" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0....00XX0.....0XX" "XX0....00X0......0XX" "XX0....0XX0......0XX" "0X0....0XX0......0XX" "0XX0..0XXX0.....0XX0" "0XX0000XX0.....0XX00" ".0XXXXXX00...00XX00." "..00XXX00...00XX00.." "....000.....0XX00..." "............0000....", "....0000............" "..00XXXX0........000" ".0XXXXXX00.....00XXX" "0XXX000XXX0...0XXXX0" "XXX0...0XX0..0XXX00." "0X0.....0X000XX00..." "XX0.....0XXXXXX0...." "XX0.....0XXXX00....." "XX0.....0XXX0......." "XX0.....0XX0........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0000000XX000000000" "XXXXXXXXXXXXXXXXXXXX" "00000000000000000000" "....................", "...................." ".....00000000000..0X" "...00XXXXXXXXXXX00XX" "..0XXXX0000000XXXXXX" ".0XX000.......00XXX0" ".0XX0..........0XXX0" "0XX0...........0XXX0" "0XX0..........0XXXXX" "XX0...........0XX0X0" "XX0...........0X00XX" "XX0............0.0XX" "XX0..............0XX" "XX0..............0XX" "0X0..............0X0" "0XX0............0XX0" "0XX00...........0X0." ".0XXX0........00XX0." "..0XXX00000000XXX0.." "...00XXXXXXXXXXX0..." ".....00000000000...." "....................", "...................." "..0XXXXX00.........." ".0XXXXXXXX0........." "0XX000000XX0........" "XXX0....0XX0........" "0X0......0XX0......." "XX0......0XX0......." "XX0......0XX0......." "XX0......0XX0......." "XX0......0XX0......." "XX0......0XX0......." "XX0......0XX0......." "XX00000000XX00000000" "XXXXXXXXXXXXXXXXXXXX" "00000000000000000000" "....................", "........00000......." ".....000XXXXX000...." "....0XXXXXXXXXX000.." "..0XXX00000000XXX00." ".0XX000......00XXX0." "0XX00.........000X0." "0X00...........00XX0" "0X00...........00XX0" "XX00............00XX" "XX00............00XX" "XX00............00XX" "XX00............00XX" "XX00............00XX" "0X00............00XX" "0XX00..........00XX0" "0XX000........00XX0." "00XXX00......00XXX0." "..0XXX00000000XXX00." "...00XXXXXXXXXXX00.." ".....00XXXXXX0000..." "......00000000......", "...................." "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "0000000000000000XXX0" ".............00XX00." "............0XXX0..." "..........00XX00...." ".........0XXX0......" ".......00XX00......." ".....00XXX0........." "....0XXX00.........." "..00XX00............" ".0XXX0.............." "0XX00000000000000000" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "....................", "...................." "00000000000000000000" "0XXXXXXXXXXXXXXXXXX0" "0XX00000000000000000" "00XXXX000..........." "..00XXXXX0000......." "....0000XXXXX0000..." "........000XXXXXX000" "...........000XXXXX0" ".............000XXX0" "..........000XXXXXX0" "........00XXXXXX000." ".....000XXXX0000...." ".0000XXXXX00........" "0XXXXXX000.........." "0XX00000000000000000" "0XXXXXXXXXXXXXXXXXX0" "00000000000000000000" "....................", "...................." ".................0X0" ".................0X0" ".................0X0" ".................0X0" ".................0X0" ".................0X0" ".................0X0" ".................0X0" ".................0X0" "000000000000000000X0" "0XXXXXXXXXXXXXXXXXX0" "0XXXXXXXXXXXXXXXXXX0" "....................", "...................." "X0...............0XX" "XX0.............0XXX" "0XX0..........00XXX0" "0XXX0........0XXXX0." ".0XXX0.....00XXXX0.." "..0XXX0...0XXXX00..." "...00X00.0XXXX0....." "....0XXX0XXX00......" ".....0XXXXX0........" "......0XXX0........." ".......0XXX0........" "........0XX0........" "0000000000XXX0000000" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "....................", "...................." "XXXXXXXXXXXXXXXX000." "XXXXXXXXXXXXXXXXXXX0" "00000000000000000XX0" ".................0XX" ".................0XX" ".................0XX" "................00XX" "..............000XX0" ".............0XXXXX0" "..............0XX0.." "...............000..", "...................." "00000000000000000000" "0XXXXXXXXXXXXXXXXXX0" "0XXXXXXXXXXXXXXXXXX0" "00000000000000000000" "....................", "...................." "00000000000000000000" "XXXXXXXXXXXXXXXXXXXX" "000000000XX000000000" "........0XX0........" "........0XX0........" "........0XX0........" "........0XX0........" "........0XX0........" "........0XX0........" "........0XX0........" "........0XX0........" "........0XX0........" "000000000XX000000000" "XXXXXXXXXXXXXXXXXXXX" "00000000000000000000" "....................", "...................." "...000...0XXXXXXX..." "..0XXX0..0XXXXXXXX.." ".0XXX0...0XX0000XX.." "0XX00....0XX0...0XX." "0XX0.....0XX0....0X." "0X0......0XX0....0XX" "XX0......0000....0XX" "XX0......0000....0XX" "XX0..............0XX" "XX0..............0XX" "0X0..............0XX" "XX0.............0XX0" "0XX0............0XX0" ".0XX0..........0XXX0" ".0XX00.......00XX00." "..0XXX0000000XXXX0.." "...00XXXXXXXXXX00..." "....00X0XXXXX00.....", "...................." "000................." "XX0.....0000........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0.....0XX0........" "XX0000000XX000000000" "XXXXXXXXXXXXXXXXXXXX" "00000000000000000000" "....................", "...................." "XX0..............0XX" "XX0.....0000.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0000000XX0000000XX" "XXXXXXXXXXXXXXXXXXXX" "00000000000000000000" "....................", "...................." "....00000000000....." "..00XXXXXXXXXXX00..." ".0XXXX0000000XXXX0.." ".0XX00.......000XX0." "0XX0............0XX0" "0X0.............0XX0" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0000000000000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "....................", "...................." "...00X0......0X00..." "..0XXX0.....0XXXX0.." ".0XXX0.......00XX0.." "0XX00..........0XX0." "0XX0............0XX0" "XX0.............0XXX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "0XX0............0XXX" ".0X00...........0XX0" ".0XXX0.......000XX0." "..0XX00000000XXXX0.." "...0XXXXXXXXXXX00..." "....00XXXXXXX00....." ".......000000.......", "...................." "...0000....00XXX00.." "..0XXXX00.0XXXXXXX0." ".0XXXXXXX0XX0000XXX0" "0XXX0000XXXX0...00X0" "0X00....0XX0.....0X0" "0X0.....0XX0.....0X0" "0X0.....0XX0.....0X0" "0X0.....0XX0.....0X0" "0X0.....0XX0.....0X0" "0X0.....0XX0.....0X0" "0X0.....0XX0.....0X0" "0X0.....0XX0.....0X0" "0X0000000XX0000000X0" "0XXXXXXXXXXXXXXXXXX0" "00000000000000000000" "....................", "..................00" "................0000" ".............000XXX0" "..........000XXXXX00" "........00XXXXX000.." ".....000XXX0XX0....." "..000XXXX000XX0....." "00XXXX0000.0XX0....." "0XXX000....0XX0....." "0X00.......0XX0....." "0XX0000....0XX0....." "00XXXX0000.0XX0....." "..000XXXX000XX0....." ".....000XXX0XX0....." "........00XXXXX000.." "..........000XXXXX00" ".............00XXXX0" "...............00000" ".................000" }; char *courier[N_COUR] = { "000.........00000000" "0000........0XXXXXXX" "XXX00.......00XXXXXX" "XXXX00.......00000XX" "XX00XX0..........0XX" "XX0.0XX000.......0XX" "XX0..0XXXX0......0XX" "XX0...000XX00....0XX" "XX0......0XXX0...0XX" "XX0.......0XXX0..0XX" "XX0........00XX000XX" "XX000000.....0XXX0XX" "XXXXXXX0......00XXXX" "00000000........0XXX" ".................000", "000................." "XX0................." "XX0................." "XXX00............000" "XXXXX00..........0XX" "XX00XXX00........0XX" "00..0XXXX0.......0XX" ".....00XXX00000000XX" ".......000XXXXXXXXXX" ".......00XXXXXXXXXXX" ".....00XXX00000000XX" "00..0XXXX0.......0XX" "XX00XX000........0XX" "XXXXX0...........0XX" "XXX00............000" "XX0................." "0X0................." ".0..................", "00................00" "XX0..............0XX" "XX0.............00XX" "XXX00..........0XXXX" "XX0XX0........0XX0XX" "XX00XX0.....00XX00XX" "00..0XX000.0XXX0..00" ".....0XXXX0XX00....." "......000XXX0......." "......000XXX00......" ".....0XXXX0XXX0....0" "00..0XX000.00XX0..0X" "XX00XX0......0XX00XX" "XXXXX0........0XXXXX" "XXX00..........00XXX" "XX0..............0XX" "XX0..............0XX" "00................00", "...................." "00.................." "XX00000000000......." "XXXXXXXXXXXXX0000000" "XX00000XXXXXXXXXXXXX" "XX0...0XXXXXXXXXXXXX" "XX0....0000000000XXX" "XX0........0000XXXXX" "00.....0000XXXXX0000" ".....00XXXXXX000...." "....0XXXX0000......." "...0XXX00000........" "....00XXXXXX000....." "00....0000XXXXX0000." "XX0.......0000XXXXX0" "XX0........000000XXX" "XX000000000XXXXXXXXX" "XXXXXXXXXXXXXXX00000" "XXXXX0000000000....." "XX000...............", "00.................." "XX0................." "XX0................." "XXX000.............." "XXXXXX0000.........." "XX000XXXXX00........" "XX0..00XXXXX000....." "0X0....0000XXXX00..." ".0.........000XXX000" "..............00XXXX" "...............000XX" ".............00XXXX0" "000.......000XXXX00." "0X0....000XXXX000..." "XX0.000XXXX000......" "XX00XXXXX00........." "XXXXX0000..........." "XXX00..............." "XX0................." "00..................", "000................." "0X0................." "XX00000000000000...." "XXXXXXXXXXXXXXXX00.." "XXXXXXXXXXXXXXXXXX0." "XX000000000000000XX0" "XX0..............0XX" "XX0..............0XX" "000..............0XX" "..................0X" "..................0X" "..................0X" "000...............0X" "XX0..............0XX" "XX0...........000XX0" "XX000000000000XXXX0." "XXXXXXXXXXXXXXXX00.." "XX00000000000000...." "XX0................." "000.................", "00000000............" "0XXXXXX0............" "XXXXXXX0............" "XX000000.........000" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0000000000000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX000000.........000" "XXXXXXX0............" "00000000............", "...................." "000000......0XXXX0.." "XXXXXX0....0XXXXXX0." "0XXX00....0XX0000XX0" "0XX0.....0XX0....0XX" "XX0......0XX0.....0X" "XX0......0X0......0X" "X0.......0X0......0X" "X0......0XX0......0X" "X0......0XX0......0X" "XX0.....0XX0......0X" "XX0....00X0......0XX" "0XX0000XXX0......0XX" ".0XXXXXXX0.....00XX0" "..0XXXX00.....0XXXXX" "...0000.......0XXXX0" "...............0000.", "..................00" ".................0XX" ".................0XX" "...000000......00XXX" "..0XXXXXX0....0XXX00" ".0XX000XXX0..0XX00.." "0XX0...00XX00XX0...." "0X0.....0XX0XX0....." "XX0......0XXX0......" "XX0......0XX0......." "XX0......0XX0......0" "XX0......0XX0.....0X" "XX0......0XX0....0XX" "XX00000000XX000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "XX0..............0XX" "000..............000", "...................." "..0XXXXXX00........." ".0XX000XXXX0........" "0XX0...000X0........" "0X0......0XX0......." "0X0.......0X0......." "XX0.......0X0.....0X" "XX0.......0X0....0XX" "XX0.......0X0....0XX" "XX0.......0X0....0XX" "XX000000000X000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "XX0..............0XX" "....................", ".....0000000000....." "...00XXXXXXXXXX00..." "..0XXXXXXXXXXXXXX0.." ".0XX000000000000XX0." "0XX0............0XX0" "0X0..............0XX" "XX0..............00X" "XX0..............00X" "X00..............00X" "XX0..............00X" "XX0..............00X" "0X0..............0XX" "0XX0............0XX0" ".0XX00.........0XX0." "..0XXX000000000XX0.." "...0XXXXXXXXXXXX0..." "....00XXXXXXXX00...." "......00000000......" "....................", "00.................." "XX000000000000000000" "XXXXXXXXXXXXXXXXXXX0" "XXXXXXXXXXXXXXXXXXXX" "XX000000000000000XX0" "XX0..........00XXX0." "00.........00XXX00.." "..........0XXX00...." ".......000XX00......" ".....00XXXX0........" "....0XXXX00.......00" "..00XX000........0XX" ".0XXX0...........0XX" "0XX000000000000000XX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "XX0..............0XX" "00................00", "..................00" "00...............0XX" "XX0000000000000000XX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "0XXXX0...........0XX" ".00XXXX000.......0XX" "...000XXXX000.....00" "......000XXXX0......" ".........00XXX0....." ".........000XX0....." "......000XXXX0......" "....00XXXX000.....00" ".000XXX000.......0XX" "0XXXX00..........0XX" "XXX000000000000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "00................00", ".............0000000" "............0XXXXXX0" "...........0XXXXXXXX" "............000000XX" ".................0XX" ".................0XX" ".................0XX" "00...............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0000000000000000XX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "00................00", "..................00" "00...............0XX" "XX0..............0XX" "XXX0...........00XXX" "XXX0.........00XXXX0" "XX0X0.......0XXX000." "XX0XX0.....0XX00...." "00.0XX0...0XX0......" "....0XX000XX0......." ".....0XXXXX0........" "00....0XXX0.......00" "XX0....00XX0.....0XX" "XX0......0XX0....0XX" "XX00000000XXX00000XX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "XX0..............0XX" "00................00", "00.................." "XX0................." "XX0................." "XX0................." "XX0000000000000....." "XXXXXXXXXXXXXXX000.." "XXXXXXXXXXXXXXXXXX0." "XX000000000000000XX0" "XX0..............0XX" "XX0..............0XX" "XX0...............0X" "XX0...............0X" "XX0...............0X" "00...............0XX" ".................0XX" "............00000XX0" "...........0XXXXXX0." "...........0000000.." "............00000...", "000..............000" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0000000000000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "000..............000", "...................0" "00................0X" "XX0000000000000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000XX0000000XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "00......0XX0......00" "........0XX0........" "........0XX0........" "00......0XX0......00" "XX0.....0XX0.....0XX" "XX0000000XX0000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "00...............0XX" "..................00", "...........000......" ".0000......0X000000." "0XXXX0.....XXXXXXXX0" "0XXXX0.....XXXXXXXX0" "0XX00......XX00000XX" "0X0........XX0...0XX" "XX0........XX0....0X" "XX0........XX0....0X" "X0.........X00....0X" "X0................0X" "XX0...............0X" "XX0..............0XX" "0XX0.............0X0" "0XX00...........0XX0" ".0XXX00......000XX0." "..0XXXX000000XXXX0.." "...000XXXXXXXXX00..." "......000000000.....", ".0000000............" "0XXXXX00............" "XXXXX000............" "XX000..............." "XX0................." "XX0................." "XX0..000000000....00" "XX0..0XXXXXXX0...00X" "XX0..0000XX000...0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0000000XX0000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "XX0..............0XX" "000...............00", "...................." "000000.......0000000" "XXXXX0.......0XXXXXX" "XX000.........0000XX" "XX0..............0XX" "XX0..............0XX" "XX0...0000000....0XX" "XX0..0XXXXXXX0...0XX" "XX0...000XX00....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0000000XX0000000XX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "XX0..............0XX" "00...............000", "...................." "...00XXXXXXXXXX00..." "..0XXX00000000XXX0.." ".0XX00........00XX0." "0XX0............0XX0" "0X0..............0X0" "0X0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0..............0XX" "XX0000000000000000XX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "000..............000" "....................", "...................." "XXXXXX0........0XX0." "0XXXX0..........0XX0" "0XX00............0X0" "0X0..............0XX" "XX0..............00X" "XX0..............00X" "X0...............00X" "X0...............00X" "XX0..............00X" "XX0..............0XX" "0XX0............00X0" ".0X00..........00X0." ".0XXX0000000000XX0.." "..00XXXXXXXXXXXX0..." "....000000000000...." "....................", "..............00...." "............00XX00.." "...000000..0XXXXXX00" "..0XXXXXX00XX0000XX0" ".0XX00XXXXXX0....0X0" "0XX0..000XX0.....0XX" "0X0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0.....0XX0.....0XX" "XX0000000XX0000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "XX0..............0XX" "XX0..............0XX" "00................00", "...................." ".................000" ".................0XX" "..............000XXX" "............00XXXXXX" ".........000XXX000XX" ".....0000XXXXX0..0XX" "..000XXXXX00XX0...0X" "00XXXX0000.0XX0....0" "XXXX00.....0XX0....." "XX00.......0XX0....." "XXXX000....0XX0....." "XX0XXXX000.0XX0..000" "XX000XXXXX00XX0..0XX" "XX0..0000XXXXX00.0XX" "XX0......000XXXX00XX" "0X0.........000XXXXX" ".0.............00XXX" ".................0XX" "..................00" }; char *tnr[N_TNR] = { "0..............00000" "X00.............XXXX" "XXX0..............XX" "XXXX00............0X" "XXXXXX0...........0X" "X000XXX0..........0X" "X0..0XXX00........0X" "XX...00XXX0.......0X" "X0.....0XXX00.....0X" "XX......0XXXX0....0X" "X0.......00XXX00..0X" "XX.........0XXXX0.0X" "X0..........00XXX00X" "XXX...........0XXXXX" "XXX00..........00XXX" ".................0XX" "..................00", "X..................." "X0.................." "X00................." "XXX00..............." "XX0XX0.............." "XX.0XX00............" "X...00XX0..........." "......00X0.........0" "........0XX0......0X" ".........00X0000000X" "........00XXXXXXXXXX" ".......0XXX00000000X" "0....00XXX0........X" "X...0XXX00.........0" "X000XXX0............" "XXXXX00............." "XXXX0..............." "XX00................" "X0.................." "X0.................." "0...................", "0..................0" "X0.................X" "XX0..............00X" "XX00............0XXX" "X0XX00.........0XXXX" "0..0X00......00XXX0X" "0...0XX0....0XXX00.0" "......0X0.00XXX0...0" ".......XXXXXX00....." ".......0XXXX0......." "0....00XXX0XX......." "X...0XXX00.0X0......" "X000XXX0....0XX0...." "XXXXX00......00X0000" "XXXX0.........00X00X" "XXX0............0XXX" "XX0..............0XX" "X0................0X" "0..................X" "0..................0", "0..................." "X0.................." "XX0................." "XXXX00.............." "X000XXX0............" "0...00XXXX0........." "0......00XXXX0......" "..........00XXXX0..." ".............00XXX00" "............00XXXXX0" "..........00XXXXX000" "0......000XXXX000..." "00..000XXXXX00......" "XX00XXXXX000........" "XXXXXXXX0..........." "XXX00000XXX0........" "XX0......0XXXX0....." "00..........0XXXX0.." "0.............0XXXX0" "...........00XXXXXX0" "0.......00XXXXX000.." "0....00XXXXXX00....." "X000XXXXXX000......." "XXXXXXX000.........." "XXXX000............." "XX00................" "00.................." "0...................", "00.................." "XX0................." "XX000..............." "XXXXXX00............" "00..0XXX00.........." "0.....00XXX0........" "........00XXX0......" "...........00XXX0..." ".............00XXX00" "..............0XXXX0" "...........000XXXXX0" ".........000XXX000.." "0.....000XXXX00....." "00..00XXXXX00......." "XX000XXX000........." "XXXXXX00............" "XXXX00.............." "XX00................" "X0.................." "0...................", "0..................." "X..................." "XX0XX0XXX0XX0XX....." "XXX0XXX0XXX0XXXXXX.." "XX.............XXXX." "0................XXX" "0.................XX" "..................XX" "..................0X" "..................0X" "..................0X" "..................0X" "0.................XX" "0.................XX" "X0..............0XXX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXX." "XXXXXXXXXXXXXXXXX..." "X0.................." "0..................." "0...................", "00000..............." "XXX00..............." "XX0................." "X0.................." "XX.................." "XX.................0" "X0.................X" "XX0000000000000000XX" "XXXXXXXXXXXXXXXXXXXX" "XX000000000000000XXX" "X0................XX" "XX.................X" "X0.................0" "XX.................." "X0.................." "XXX................." "X0XX0...............", ".............0000..." "XXXXX00....00XXXX00." "XXXX000....0XXX00X00" ".XXX......0XXX00.0XX" "XXX......0XXX0....XX" "XX.......0XX0.....0X" "XX......0XXX0.....0X" "X0......0XX0......0X" "X0.....0XXX.......0X" "XX....0XXX0.......0X" "XXX..0XXX0........XX" ".0XX0XXX0........0XX" "..0XXXX0......0XXXX0" "....000.......000000", "...................0" "...................0" "..................0X" "....000..........0XX" "..00XXX00.......0XXX" ".0XXXXXXX0....00XX00" ".0XX000XX0...0XXX0.." "XXX0...00XX.0XXX0..." "XX0......0X0XX00...." "X0.......0XXX0......" "XX........XX0......." "X0........X0.......0" "XX........X........X" "XX0000000XXX000000XX" "XXXXXXXXXXXXXXXXXXXX" "XX00000000000000XXXX" "XX................XX" "X..................X" "0..................0", "...000000..........." "..0XXXXXX0.........." ".0XXXXXXXX0........." ".XXX0000XX0........." "0XX0....0XX........." "XX0......0X0........" "0X.......0X0........" "X0.......0X0.......0" "XX.......0X0.......0" "XX00000000X00000000X" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "X000000000000000000X" "0..................0" "0..................0", "...................." "......XXXXXXXXX....." "....0XXXXXXXXXXX0..." "...0XXXXXXXXXXXXX0.." "..0XXXXXXXXXXXXXXX0." ".0XXX...........XXX." "0XX..............XX0" "XX................XX" "XX................0X" "X0................0X" "X0................0X" "X0................0X" "XX................0X" "XX................XX" "0XX..............XXX" ".0XXX...........XXX0" "..0XXXXXXXXXXXXXXX0." "...0XXXXXXXXXXXXX0.." "....0XXXXXXXXXXX0..." ".....0XXXXXXXX0....." ".........000........", "0..................." "0..................." "0X000000000000000000" "0XXXXXXXXXXXXXXXXXX0" "0XXXXXXXXXXXXXXXXXX0" "0X000000000000XXX00." "0...........0XXX0..." "...........0XXX0...." "..........0XXX0....." ".........0XXX0......" ".......0XXX00......." "......0XXX0........." ".....0XXX0.........." "....0XXX0..........." "..0XXXX0...........0" ".0XXXX00000000000000" "0XXXXXXXXXXXXXXXXXX0" "0XXXXXXXXXXXXXXXXXX0" "0X0000000000000000X0" "00.................0" "0..................0", "0..................0" "0X.................0" "0X000000000000000000" "0XXXXXXXXXXXXXXXXXX0" "0XXXXXXXXXXXXXXXXXX0" "000XXX000000000000X0" "...0XX0............0" ".....0XX0..........0" ".......0XXX0........" ".........0XXX0......" "...........0XXX0...." "..............0XX0.." "..............0XXXX0" "............00XXXXX0" "..........00XXXX00.." "........00XXXX00...." "......00XXXX00......" "....00XXXX00........" ".000XXXX00.........0" "0XXXXX00...........0" "0XXXX000000000000XX0" "0XXXXXXXXXXXXXXXXXX0" "0XXXXXXXXXXXXXXXXXX0" "0X000000000000000000" "0..................0", "...............00000" "................00XX" "..................XX" "..................XX" "..................0X" "..................0X" "..................0X" "..................0X" "0.................0X" "0.................0X" "0X................XX" "0X00X0000X00000X00XX" "0XXXXXXXXXXXXXXXXXXX" "0X0000X00000X00000XX" "0X................XX" "0..................X" "0..................0", "...................0" "...................0" "0.................00" "00...............0X0" "00..............0XX0" "0X0............0XXX0" "0XX0..........0XXX00" "000X0........0XXX0.0" "0..0X0......0XXX0..0" "....0X0....0XXX0...." ".....0X0..0XXX0....." "......0X0XXXX0......" "0......0XXXX0......0" "00......0XX0.......0" "000000000XX000000000" "0XXXXXXXXXXXXXXXXXX0" "0XXXXXXXXXXXXXXXXXX0" "00000000000000000000" "00.................0" "0..................0", "0..................." "0..................." "0X.................." "0X0XX0XXX0XXXX0XXX.." "0XXXXXXXXXXXXXXXXXX." "0XXXXXX0XXX0XXX0XXXX" "0X................0X" "0.................0X" "0................XXX" ".................XX0" ".................000", "...................." "0..................0" "00................0X" "X000000000000000000X" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "X000000000000000000X" "00................0X" "0..................0" "0...................", "...................." "0..................0" "X0.................X" "XX00000000000000000X" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "X00000000XX00000000X" "X.......0XX0.......X" "0.......0XX0.......0" "........0XX0........" "........0XX0........" "........0XX0........" "........0XX0........" "0.......0XX0.......0" "00......0XX0.......0" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX0000000000000000XX" "X0................0X" "0..................0" "0..................0", ".........0.........." ".........X00000000.." "XXXXXX...XXXXXXXXX00" ".XXX.....XXXXXXXXXXX" ".XX......XXXXXXXXXXX" "XX.......XX.......0X" "XX.......X........0X" "X0.......X........0X" "X0................0X" "X0................0X" "XX................0X" "XX0...............XX" "XX0...............XX" ".XX..............0XX" ".XXX0..........0XXXX" "..0XXX00....00XXXX0." "...0XXXX0000XXXXX0.." "....00XXXXXXXXXX0..." "......00XXXXXX00...." "........00000.......", "XXXX0..............." "XXX0................" "XX0................." "XX....0XXXXX0......." "XX......XXX0........" "XX......0XX0........" "XX......0XX0........" "XX......0XX0.......0" "XX......0XX0.......0" "XX0000000XX000000000" "XXXXXXXXXXXXXXXXXXX0" "XXXXXXXXXXXXXXXXXXX0" "X0000000000000000000" "X..................0" "0..................0", "...............00..." "...............0XXXX" "XXX00............XXX" "XX0...0XXXXX0.....XX" "XX0.....XXXX......0X" "XX0.....0XX0......0X" "XX0.....0XX0......0X" "XX0.....0XX0......0X" "XX0.....0XX0......0X" "XX0.....0XX0......0X" "XX0.....0XX0......0X" "XXX000000XX0000000XX" "XXXXXXXXXXXXXXXXXXXX" "XXX000000000000000XX" "000...............00" "0..................0" "0..................0", "...................." ".....00XXXXXX00....." "....0XXXXXXXXXX00..." "...0XXXXXXXXXXXXX0.." "..0XXX00000000XXXX0." ".0XX00.........0XXX." ".XX0............0XXX" ".XX..............0XX" "XX0...............XX" "XX................XX" "XX................0X" "XX................0X" "XX................0X" "XX................0X" "XX................XX" "XXXXXXXXXXXXXXXXXXXX" "XXXXXXXXXXXXXXXXXXXX" "XX00000000000000000X" "00.................0" "0..................0", "...................." "XXXXXXX........XX..." "XXXXXX..........XX.." ".XXX.............XX." ".XX...............XX" "XX................0X" "XX................0X" "X0................0X" "X0................0X" "X0................0X" "X0................XX" "XX................XX" "XX0..............XXX" ".XXX0...........0XXX" "..XXXXX0.....0XXXXX." "...XXXXXX000XXXXXX.." "....XXXXXXXXXXXXX..." ".....XXXXXXXXXXX...." "........00000.......", "...................." "............000000.." "...000000..0XXXXXX0." "..0XXXXXXX.XXXXXXXXX" ".0XX000XXXXXX0000XXX" ".XXX...0XXXX0....0XX" "XXX......XX0......0X" "XX.......XX.......0X" "XX.......XX.......0X" "XX.......XX.......0X" "XX.......XX.......0X" "XX.......XX.......0X" "XX.......XX.......XX" "XX0000000XX0000000XX" "XXXXXXXXXXXXXXXXXXXX" "XX00000000000000000X" "XX.................X" "X..................X" "0...................", "...................0" "...................0" "..................00" "................00X0" "..............00XXX0" "...........00XXXXX00" ".........00XXXXX00.0" ".......00XXXXXX0...0" "....00XXXXX0XX......" "..00XXXX000.XX......" "0XXXXX00....XX......" "0XXXXX......XX......" "...0XXX0....XX......" ".....0XXX00.XX......" ".......0XXXXXX......" "..........0XXX00...0" "............0XXX00.0" "...............0XX00" ".................0X0" "...................0" "...................0" }; double dist(struct Point p1, struct Point p2) { return sqrt((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y)); } /* int round(double v) { double d = floor(v); if(v-d > 0.5) return d+1; else return d; } */ void extractRectangle() { int i, j, real_i, real_j; double scale; double start_x = (rdata.sgn*rdata.angle*rdata.min_My + rdata.min_Mx)/(1.0+pow(rdata.angle,2)); double start_y = -rdata.sgn*rdata.angle*start_x + rdata.min_My; rdata.w = ceil((rdata.max_Mx-rdata.min_Mx)*cos(atan(rdata.angle))); rdata.h = ceil((rdata.max_My-rdata.min_My)*cos(atan(rdata.angle))); scale = (double)HEIGHT/MIN(rdata.w, rdata.h); if(rdata.w < rdata.h) { rdata.w = HEIGHT; rdata.h = rdata.h*scale; rdata.h += 2; for(i = 1; i < rdata.h-1; i++) { for(j = 0; j < rdata.w; j++) { rgn[0][j] = '.'; rgn[rdata.h-1][j] = '.'; real_i = round(start_y + i*cos(atan(rdata.angle))/scale - rdata.sgn*j*sin(atan(rdata.angle))/scale); real_j = round(start_x + j*cos(atan(rdata.angle))/scale + rdata.sgn*i*sin(atan(rdata.angle))/scale); rgn[i][j] = s[real_i][real_j]; } } } else { rdata.h = rdata.w*scale; rdata.w = HEIGHT; rdata.h += 2; for(i = 0; i < rdata.w; i++) { rgn[0][i] = '.'; rgn[rdata.h-1][i] = '.'; for(j = 1; j < rdata.h-1; j++) { real_i = round(start_y + i*cos(atan(rdata.angle))/scale - rdata.sgn*j*sin(atan(rdata.angle))/scale); real_j = round(start_x + j*cos(atan(rdata.angle))/scale + rdata.sgn*i*sin(atan(rdata.angle))/scale); rgn[rdata.h-j-1][i] = s[real_i][real_j]; } } } } void outputRectangle() { int i, j; for(i = 0; i < rdata.h; i++) { for(j = 0; j < rdata.w; j++) printf("%c", rgn[i][j]); printf("\n"); } } void outputAll() { FILE *F = fopen("filtered_data.txt", "w"); int i, j; for(i = 0; i < INPUT_H; i++) { for(j = 0; j < INPUT_W; j++) fprintf(F, "%c", s[i][j]); fprintf(F, "\n"); } fclose(F); } void readData() { int i, j; for(i = 0; i < INPUT_H; i++) for(j = 0; j < INPUT_W; j++) do { fscanf(f, "%c", &s[i][j]); } while(s[i][j] != '.' && s[i][j] != 'X'); } void prepareData() { int i, j, sgn, a, b, k; for(i = 0; i < INPUT_H; i++) s[i][0] = s[0][i] = s[i][INPUT_W-1] = s[INPUT_H-1][i] = '.'; corners[TOP].y = corners[LEFT].x = INF; corners[BOTTOM].y = corners[RIGHT].x = 0; corners[TOPLEFT].y = corners[TOPLEFT].x = INF; corners[BOTRIGHT].y = corners[BOTRIGHT].x = 0; corners[TOPRIGHT].y = INF; corners[TOPRIGHT].x = 0; corners[BOTLEFT].y = 0; corners[BOTLEFT].x = INF; for(i = 1; i < INPUT_H-1; i++) { for(j = 1; j < INPUT_W-1; j++) { if(s[i][j] == '.') continue; k = 0; for(a = -1; a <= 1; a++) for(b = -1; b <= 1; b++) k = k + (s[i+a][j+b] == 'X'); if(k <= 3) s[i][j] = '.'; if(s[i][j] == 'X') { if(i < corners[TOP].y) { corners[TOP].x = j; corners[TOP].y = i; } if(j > corners[RIGHT].x) { corners[RIGHT].x = j; corners[RIGHT].y = i; } if(i > corners[BOTTOM].y) { corners[BOTTOM].y = i; corners[BOTTOM].x = j; } if(j < corners[LEFT].x) { corners[LEFT].x = j; corners[LEFT].y = i; } if(i+j < corners[TOPLEFT].y+corners[TOPLEFT].x) { corners[TOPLEFT].x = j; corners[TOPLEFT].y = i; } if(i+j > corners[BOTRIGHT].y+corners[BOTRIGHT].x) { corners[BOTRIGHT].x = j; corners[BOTRIGHT].y = i; } if(i-j > corners[BOTLEFT].y-corners[BOTLEFT].x) { corners[BOTLEFT].x = j; corners[BOTLEFT].y = i; } if(i-j < corners[TOPRIGHT].y-corners[TOPRIGHT].x) { corners[TOPRIGHT].x = j; corners[TOPRIGHT].y = i; } } } } min_Sq = INF; for(i = 0; i < 7; i++) { for(j = i+1; j < 8; j++) { if(dist(corners[i],corners[j]) < 10) continue; if(abs(corners[i].x-corners[j].x) <= abs(corners[i].y-corners[j].y)) { angle = (corners[i].x-corners[j].x)/(double)(corners[i].y-corners[j].y); sgn = 1; } else { angle = (corners[i].y-corners[j].y)/(double)(corners[i].x-corners[j].x); sgn = -1; } min_Mx = min_My = INF; max_Mx = max_My = -INF; for(k = 0; k < 8; k++) { My = corners[k].y + sgn*corners[k].x*angle; if(My < min_My) { min_My = My; } if(My > max_My) { max_My = My; } Mx = corners[k].x - sgn*corners[k].y*angle; if(Mx < min_Mx) { min_Mx = Mx; } if(Mx > max_Mx) { max_Mx = Mx; } } Sq = (max_Mx-min_Mx)*(max_My-min_My)*cos(atan(angle))*cos(atan(angle)); if(Sq < min_Sq) { min_Sq = Sq; rdata.angle = angle; rdata.min_Mx = min_Mx; rdata.max_Mx = max_Mx; rdata.min_My = min_My; rdata.max_My = max_My; rdata.sgn = sgn; } } } extractRectangle(); } unsigned int mem[400]; char res[7]; char opt_res[7]; int minm, opt_m; void adjust(int offset, int mismatches, int letters) { int m, i, j, l, a, opta, optm, m1, n; if(mismatches > MIN(opt_m,minm)) return; if(offset + 4 >= rdata.h) { while(offset < rdata.h) { for(i = 0; i < HEIGHT; i++) mismatches = mismatches+(rgn[offset][i] != '.'); if(mismatches > MIN(opt_m,minm)) return; offset++; } } if(offset >= rdata.h && mismatches < MIN(opt_m,minm)) { minm = mismatches; res[letters] = 0; strcpy(opt_res, res); return; } if(mem[offset/4] < mismatches) return; mem[offset/4] = mismatches; if(mismatches > THRESHOLD*offset*HEIGHT) return; if(letters >= 6) return; for(l = 0; l < N; l++) { m = mismatches; optm = INF; n = strlen(let[l])/HEIGHT; for(a = -2; a < 6; a++) { m1 = 0; for(i = 0; i < HEIGHT; i++) { for(j = 0; j < n; j++) { if(a + offset + j > rdata.h) m1 = m1 + ('X' == let[l][j*HEIGHT+i]); else if(rgn[a+offset+j][i] == 'X' && let[l][j*HEIGHT+i] == '.') m1++; else if(rgn[a+offset+j][i] == '.' && let[l][j*HEIGHT+i] == 'X') m1++; } } if(m1+m < optm) { optm = m1+m; opta = a; } // if(m1 < 0.1*n*HEIGHT) break; if(a < 0) continue; for(i = 0; i < HEIGHT; i++) m = m+(rgn[offset+a][i] != '.'); } res[letters] = let_val[l]; adjust(offset+n+opta, optm, letters+1); } } void adjust1(int offset, int mismatches, int letters) { int m, i, j, l, a, opta, optm, m1, n; if(mismatches > MIN(opt_m,minm)) return; if(offset + 4 >= rdata.h) { while(offset < rdata.h) { for(i = 0; i < HEIGHT; i++) mismatches = mismatches+(rgn[offset][i] != '.'); if(mismatches > MIN(opt_m,minm)) return; offset++; } } if(offset >= rdata.h && mismatches < MIN(opt_m,minm)) { minm = mismatches; res[letters] = 0; strcpy(opt_res, res); return; } if(mem[offset/4] < mismatches) return; mem[offset/4] = mismatches; if(mismatches > THRESHOLD*offset*HEIGHT) return; if(letters >= 6) return; for(l = 0; l < N; l++) { m = mismatches; optm = INF; n = strlen(let[l])/HEIGHT; for(a = -2; a < 6; a++) { m1 = 0; for(i = 0; i < HEIGHT; i++) { for(j = 0; j < n; j++) { if(a + offset + j > rdata.h) m1 = m1 + ('X' == let[l][(n-j)*HEIGHT-i-1]); else m1 = m1 + (rgn[a+offset+j][i] != let[l][(n-j)*HEIGHT-i-1]); } } if(m1+m < optm) { optm = m1+m; opta = a; } //if(m1 < 0.1*n*HEIGHT) break; if(a < 0) continue; for(i = 0; i < HEIGHT; i++) m = m+(rgn[offset+a][i] != '.'); } res[letters] = let_val[l]; adjust1(offset+n+opta, optm, letters+1); } } char recognized[10]; void recognize() { int i, l; opt_m = INF; recognized[0] = 0; memset(mem, 0xFE, sizeof(mem)); let = arial; let_val = vals_arial; N = N_AR; minm = INF; adjust(0, 0, 0); // printf("%d\n", minm); if(minm < opt_m) { opt_m = minm; l = strlen(opt_res); for(i = l-1; i >= 0; i--) recognized[l-i-1] = opt_res[i]; recognized[l] = 0; } minm = INF; adjust1(0, 0, 0); // printf("%d\n", minm); if(minm < opt_m) { opt_m = minm; l = strlen(opt_res); for(i = l-1; i >= 0; i--) recognized[i] = opt_res[i]; recognized[l] = 0; } memset(mem, 0xFE, sizeof(mem)); let = courier; let_val = vals_courier; N = N_COUR; minm = INF; adjust(0, 0, 0); // printf("%d\n", minm); if(minm < opt_m) { opt_m = minm; l = strlen(opt_res); for(i = l-1; i >= 0; i--) recognized[l-i-1] = opt_res[i]; recognized[l] = 0; } minm = INF; adjust1(0, 0, 0); // printf("%d\n", minm); if(minm < opt_m) { opt_m = minm; l = strlen(opt_res); for(i = l-1; i >= 0; i--) recognized[i] = opt_res[i]; recognized[l] = 0; } memset(mem, 0xFE, sizeof(mem)); let = tnr; let_val = vals_tnr; N = N_TNR; minm = INF; adjust(0, 0, 0); // printf("%d\n", minm); if(minm < opt_m) { opt_m = minm; l = strlen(opt_res); for(i = l-1; i >= 0; i--) recognized[l-i-1] = opt_res[i]; recognized[l] = 0; } minm = INF; adjust1(0, 0, 0); // printf("%d\n", minm); if(minm < opt_m) { opt_m = minm; l = strlen(opt_res); for(i = l-1; i >= 0; i--) recognized[i] = opt_res[i]; recognized[l] = 0; } l = strlen(recognized); if(l == 0) { printf("XXX\n"); return; } printf("%s\n", recognized); } int main() { int n, n_tests; //f = fopen("test3.txt", "r"); f = stdin; fscanf(f, "%d", &n_tests); for(n = 0; n < n_tests; n++) { readData(); prepareData(); //outputRectangle(); //outputAll(); recognize(); //printf("XXX\n"); } return 0; } |
||||
|