Thru the Java Door
18 February 1998
which I must confess took me more than a little bit of time
to solve... here's how I got in
1. Realized I could shut off JAVA in Netscape. Captured source
to file so I could play off line.
2. Learned from your code how to write/input variables. Cut and
pasted from your code into the array building loop so I could
record the alpha-numeric values as they were computed. Next I
did the same thing in the loop that "builds up" the final value
of the entered string and is compared to 25834242042. Realized
that char 1 is ignored. (A very nice little trick)
3. The final value is an integer product of the number of characters
entered. A little calculator work shows 9 is the only reasonable
integer number of characters that can generate the final value.
4. I actually started to code up a brute force attack. About 1/2
way thru that effort I did the 62 to the 9th thing as a sanity check.
5. So I wrote a simple little loop in Qbasic that would "test"
if an alpha-numeric guess was a legal guess and list all legal
preceeding characters. ...Legal being definded here as a letter
that produces an integer in the next lower order loop of the
"build up" calculation.
6.Using this little tool (5 above) I began to investigate (on paper)
likely character sequences and throw out those that didn't make
"sense". You said for example right from the beginning that the
NAME was related to the page....so a scrambled/random sequence
didn't seem likely. Besides...your intent wasn't to prevent
everyone from gaining access.
7.Via this thought process I got "ther" as the last 4 characters.
They seemed "right". Then I took my little Qbasic tool and cloned
it,nested 5 deep. The essence of the code follows:
Set up data/arrays etc....then...
Found# = 0
Count = 0
char9 = 53
char8 = 40
char7 = 43
char6 = 55
REM char5 = 56...8522430 is what remains after unwinding "ther"
code5# = 8522430#
FOR char5 = 10 TO 61
code4# = (code5# / 5) - pram(char5)
code4rem# = code4# / 4
IF CLNG(code4rem#) = code4rem# THEN
FOR char4 = 10 TO 61
code3# = (code4# / 4) - pram(char4)
code3rem# = code3# / 3
IF CLNG(code3rem#) = code3rem# THEN
FOR char3 = 10 TO 61
code2# = (code3# / 3) - pram(char3)
code2rem# = code2# / 2
IF CLNG(code2rem#) = code2rem# THEN
FOR char2 = 10 TO 61
code1# = (code2# / 2) - pram(char2)
code1rem# = code1# / 1
IF CLNG(code1rem#) = code1# THEN
FOR char1 = 10 TO 61
IF code1rem# - pram(char1) = 0 THEN
Count = Count + 1
Found# = Found# + 1
Buffer(Count) = alpha(char1) + alpha(char2) + ........ alpha(char9)
REM groups of seven (full screen and eliminates a lot of disk work)
IF Count = 7 THEN
PRINT USING "##########.#"; Found#
PRINT #1, Buffer(1); " "; Buffer(2); " "; ............ Buffer(7)
PRINT ; Buffer(1); " "; Buffer(2); " "; ............ Buffer(7)
Count = 0
What we're doing here is checking ahead by one character each time, ie
does it lead to an integer solution? If not back up out of that
branch and take another path. This eliminates the testing of
many combinations which only lead to a non-solution anyway.
8.The two possiblities stood out from the trash very clearly.
Got back to the entrance..entered my "solution" and entered the
dreaded 404 zone. hmmm....what/where did I go wrong ?
9.Did I miss code ?...am I getting nonsense etc ?. Looked at my
notes and concluded I've made no mistakes and what I've done
thus far "feels" right (Zen?). Did this for a few evenings.
10.Back to entrance ...retried my previous solution and at 1st try
here I am.! Turns out I was correct. Either I had misstyped or
the mirror was "under construction". I think the latter having
read the Friday the 13th massacre posting.
Clearly no exhaustive search in a reasonable amount of time will
yield results. Qbasic is not noted for it's speed but even so
the above code will give all valid 5 character sequences
(approx 140)in 10 minutes at 200 MHz. Note however that for
all practical purposes I used the computer as a calculator and
"thought" my way back thru the last four characters. Only after
having reduced the problem to a manageable size did I let it do
the tedious dirty work. And that to me is THE lesson here...
Shut the computer off and THINK through the problem.
Don't rely upon processor speed.
Girl Friend: You still working on that Fravia thing ??
Girl Friend: What do you get if you figure it out ??
Responce: I get to do another puzzle :)