int reg_match(int[] str, int[] reg, int p1, int p2, int last) { if (str[p1] == 0 & reg[p2] == 0) { return 1; } if (str[p1] == 0 & reg[p2] != 0) { return 0; } if (str[p1] != 0 & reg[p2] == 0) { return 0; } if (reg[p2+1] == 42) { return reg_match(str, reg, p1, p2+1, reg[p2]); } if (reg[p2] == 42) { var result = reg_match(str, reg, p1, p2+1, 0); if (result == 1) { return 1; } if (str[p1] == last | last == 46) { return reg_match(str, reg, p1+1, p2, last); } return 0; } if (str[p1] == reg[p2] | reg[p2] == 46) { return reg_match(str, reg, p1+1, p2+1, 0); } return 0; } int program(int argc, string[] argv) { var str = new int[]{97, 98, 99, 99, 99, 99, 99, 100, 101, 102, 0}; var reg = new int[]{97, 103, 42, 46, 99, 42, 99, 42, 100, 101, 42, 102, 0}; return reg_match(str, reg, 0, 0, 0); }