bawię się właśnie JsHacker 1.0 :) ale niestety JavaScript znam tylko "z widzenia" i mam problem z trzecim etapem. Kod wygląda tak:
Kod
<script type="text/javascript" language="JavaScript">
<!--
function rome(N,s,R,b,a,o) {
R='IVXLCDM'.split(s=''),b=0,a=2;
while(N) {
o=N%(a=7-a);
N=N/a^0;
while(o)
s=R[o-->3?b+N%2+(N&=~1,o=1):b]+s;
b++;
}
return s;
}
function check_passwd(v) { with(top)
rome(v) == MCMXXXIX ? location.href = 'p4_'+v+'.html' : alert('Hasło niepoprawne !!! ');
return false;
}
//-->
</script>
<!--
function rome(N,s,R,b,a,o) {
R='IVXLCDM'.split(s=''),b=0,a=2;
while(N) {
o=N%(a=7-a);
N=N/a^0;
while(o)
s=R[o-->3?b+N%2+(N&=~1,o=1):b]+s;
b++;
}
return s;
}
function check_passwd(v) { with(top)
rome(v) == MCMXXXIX ? location.href = 'p4_'+v+'.html' : alert('Hasło niepoprawne !!! ');
return false;
}
//-->
</script>
Oczywiście wywoływany jest poprzez:
Rzecz jasna, nie chcę prosić o podanie wyniku ;) tylko o wytłumaczenie paru elementów bym mógł sobie dalej kombinować:
- czy dobrze się domyślam, że wywołanie funkcji, która w definicji ma kilka parametrów, z jednym z parametrem, powoduje, że parametr ten odczytywany jest jako pierwszy z listy parametrów z definicji, a pozostałe są puste (tj, że wywołanie rome(v) wykona funkcję z parametrem N == v);
- czy pierwsza linia funkcji rome() oznacza, że najpierw jest wywoływana instrukcja split dla 'IVXLCDM' z parametrem s='' , której wynik jest zapisywany w R (co w praktyce, jak rozumiem, oznacza zapisanie w kolejnych rekordach tablicy R ciągów zawierających kolejne znaki I, V, X, ...) natomiast b=0,a=2 to po prostu ustalenie wartości tych zmiennych?
- jedna z instrukcji to N=N/a^0 - z informacji w książce, którą mam wynika, że najpierw wykonuje się operację dzielenia; chciałem się natomiast dowiedzieć czy słusznie mi się wydaje, że XOR z 0 może dawać co najwyżej... 0?
- co oznacza zapis R[o-->...] ?- mam oczywiście na myśli "strzałkę";
- co oznacza with(top) w funckji check_passwd()?
Pozdrawiam.
Bartek