function hledej1(inp) { byloX = false; // promenne udavajici byloY = false; // stav resene ulohy zac = 0; kon = 0; //for (i in inp) { // MSIE ani Opera neumi foreach, jenom Konqueror a FF for (i = 0; i != inp.length; i++) { //ch = inp[i] // tohle zase neumi MSIE, Opera i zbytek OK ch = inp.charAt(i); if (!byloX && !byloY && ch != "x" && ch != "y") { continue; } if (!byloX && !byloY && ch == "x") { byloX = true; zac = i; } if (!byloX && !byloY && ch == "y") { byloY = true; zac = i; } if ( byloX && !byloY && ch == "y") { byloY = true; } if ( byloX && byloY && ch != "y") { break;} kon++; } msg1 = "hledej1(\""+inp+"\") --> x*y+ "; msg3 = "\n"; if (!byloY) { msg2 = "nenalezen"; } else { msg2 = "nalezen (" + zac + ", " + kon + ")";} return msg1+msg2+msg3; } function hledej2(inp) { states = { S : 0, X : 1, Y : 2, F : 3 } st = states.S; zac = kon = 0; //for (i in inp) { // MSIE ani Opera neumi foreach, jenom Konqueror a FF for (i = 0; i != inp.length; i++) { //ch = inp[i] // tohle zase neumi MSIE, Opera i zbytek OK ch = inp.charAt(i); switch (st) { case states.S: if (ch == "x") { st = states.X; zac = i;} if (ch == "y") { st = states.Y; zac = i;} break; case states.X: if (ch == "y") { st = states.Y; } else if (ch != "x") { st = states.S; } break; case states.Y: if (ch != "y") { kon = i - 1; st = states.F;} break; default: break; }; kon++; if (st == states.F) { st = states.Y; break;} } msg1 = "hledej2(\""+inp+"\") --> x*y+ "; msg3 = "\n"; if (st != states.Y) { msg2 = "nenalezen";} else { msg2 = "nalezen (" + zac + ", " + kon + ")";} return msg1+msg2+msg3; } strings = ["x", "y", "xy","xxyy", "axyb", "ayxb"]; function testHledej(strings, hledej_f) { document.write("\n"); for (i in strings) { document.write((hledej1(strings[i]))); } } function zobrazHledej(jmeno) { var inp = document.getElementById(jmeno+"_i"); var out = document.getElementById(jmeno+"_o"); var code = jmeno + '("'+inp.value+'")'; out.innerHTML = eval(code); }