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);
}