diff --git a/23 Checkers/javascript/checkers.html b/23 Checkers/javascript/checkers.html new file mode 100644 index 00000000..61839e25 --- /dev/null +++ b/23 Checkers/javascript/checkers.html @@ -0,0 +1,9 @@ + + +CHECKERS + + +

+
+
+
diff --git a/23 Checkers/javascript/checkers.js b/23 Checkers/javascript/checkers.js
new file mode 100644
index 00000000..4d406e0e
--- /dev/null
+++ b/23 Checkers/javascript/checkers.js	
@@ -0,0 +1,300 @@
+// CHECKERS
+//
+// Converted from BASIC to Javascript by Oscar Toledo G. (nanochess)
+//
+
+function print(str)
+{
+    document.getElementById("output").appendChild(document.createTextNode(str));
+}
+
+function input()
+{
+    var input_element;
+    var input_str;
+    
+    return new Promise(function (resolve) {
+                       input_element = document.createElement("INPUT");
+                       
+                       print("? ");
+                       input_element.setAttribute("type", "text");
+                       input_element.setAttribute("length", "50");
+                       document.getElementById("output").appendChild(input_element);
+                       input_element.focus();
+                       input_str = undefined;
+                       input_element.addEventListener("keydown", function (event) {
+                                                      if (event.keyCode == 13) {
+                                                      input_str = input_element.value;
+                                                      document.getElementById("output").removeChild(input_element);
+                                                      print(input_str);
+                                                      print("\n");
+                                                      resolve(input_str);
+                                                      }
+                                                      });
+                       });
+}
+
+function tab(space)
+{
+    var str = "";
+    while (space-- > 0)
+        str += " ";
+    return str;
+}
+
+// x,y = origin square
+// a,b = movement direction
+function try_computer()
+{
+    u = x + a;
+    v = y + b;
+    if (u < 0 || u > 7 || v < 0 || v > 7)
+        return;
+    if (s[u][v] == 0) {
+        eval_move();
+        return;
+    }
+    if (s[u][v] < 0)	// Cannot jump over own pieces
+        return;
+    u += a;
+    u += b;
+    if (u < 0 || u > 7 || v < 0 || v > 7)
+        return;
+    if (s[u][v] == 0)
+        eval_move();
+}
+
+// x,y = origin square
+// u,v = target square
+function eval_move()
+{
+    if (v == 0 && s[x][y] == -1)
+        q += 2;
+    if (Math.abs(y - v) == 2)
+        q += 5;
+    if (y == 7)
+        q -= 2;
+    if (u == 0 || u == 7)
+        q++;
+    for (c = -1; c <= 1; c += 2) {
+        if (u + c < 0 || u + c > 7 || v + g < 0)
+            continue;
+        if (s[u + c][v + g] < 0) {	// Computer piece
+            q++;
+            continue;
+        }
+        if (u - c < 0 || u - c > 7 || v - g > 7)
+            continue;
+        if (s[u + c][v + g] > 0 && (s[u - c][v - g] == 0 || (u - c == x && v - g == y)))
+            q -= 2;
+    }
+    if (q > r[0]) {	// Best movement so far?
+        r[0] = q;	// Take note of score
+        r[1] = x;	// Origin square
+        r[2] = y;
+        r[3] = u;	// Target square
+        r[4] = v;
+    }
+    q = 0;
+}
+
+function more_captures() {
+    u = x + a;
+    v = y + b;
+    if (u < 0 || u > 7 || v < 0 || v > 7)
+        return;
+    if (s[u][v] == 0 && s[x + a / 2][y + b / 2] > 0)
+        eval_move();
+}
+
+var r = [-99, 0, 0, 0, 0];
+var s = [];
+
+for (x = 0; x <= 7; x++)
+    s[x] = [];
+    
+var g = -1;
+var data = [1, 0, 1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, -1, 0, -1, 15];
+var p = 0;
+var q = 0;
+
+// Main program
+async function main()
+{
+    print(tab(32) + "CHECKERS\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    print("THIS IS THE GAME OF CHECKERS.  THE COMPUTER IS X,\n");
+    print("AND YOU ARE O.  THE COMPUTER WILL MOVE FIRST.\n");
+    print("SQUARES ARE REFERRED TO BY A COORDINATE SYSTEM.\n");
+    print("(0,0) IS THE LOWER LEFT CORNER\n");
+    print("(0,7) IS THE UPPER LEFT CORNER\n");
+    print("(7,0) IS THE LOWER RIGHT CORNER\n");
+    print("(7,7) IS THE UPPER RIGHT CORNER\n");
+    print("THE COMPUTER WILL TYPE '+TO' WHEN YOU HAVE ANOTHER\n");
+    print("JUMP.  TYPE TWO NEGATIVE NUMBERS IF YOU CANNOT JUMP.\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    for (x = 0; x <= 7; x++) {
+        for (y = 0; y <= 7; y++) {
+            if (data[p] == 15)
+                p = 0;
+            s[x][y] = data[p];
+            p++;
+        }
+    }
+    while (1) {
+
+        // Search the board for the best movement
+        for (x = 0; x <= 7; x++) {
+            for (y = 0; y <= 7; y++) {
+                if (s[x][y] > -1)
+                    continue;
+                if (s[x][y] == -1) {	// Piece
+                    for (a = -1; a <= 1; a += 2) {
+                        b = g;	// Only advances
+                        try_computer();
+                    }
+                } else if (s[x][y] == -2) {	// King
+                    for (a = -1; a <= 1; a += 2) {
+                        for (b = -1; b <= 1; b += 2) {
+                            try_computer();
+                        }
+                    }
+                }
+            }
+        }
+        if (r[0] == -99) {
+            print("\n");
+            print("YOU WIN.\n");
+            break;
+        }
+        print("FROM " + r[1] + "," + r[2] + " TO " + r[3] + "," + r[4]);
+        r[0] = -99;
+        while (1) {
+            if (r[4] == 0) {	// Computer reaches the bottom
+                s[r[3]][r[4]] = -2;	// King
+                break;
+            }
+            s[r[3]][r[4]] = s[r[1]][r[2]];	// Move
+            s[r[1]][r[2]] = 0;
+            if (Math.abs(r[1] - r[3]) == 2) {
+                s[(r[1] + r[3]) / 2][(r[2] + r[4]) / 2] = 0;	// Capture
+                x = r[3];
+                y = r[4];
+                if (s[x][y] == -1) {
+                    b = -2;
+                    for (a = -2; a <= 2; a += 4) {
+                        more_captures();
+                    }
+                } else if (s[x][y] == -2) {
+                    for (a = -2; a <= 2; a += 4) {
+                        for (b = -2; b <= 2; b += 4) {
+                            more_captures();
+                        }
+                    }
+                }
+                if (r[0] != -99) {
+                    print(" TO " + r[3] + "," + r[4]);
+                    r[0] = -99;
+                    continue;
+                }
+            }
+            break;
+        }
+        print("\n");
+        print("\n");
+        print("\n");
+        for (y = 7; y >= 0; y--) {
+            str = "";
+            for (x = 0; x <= 7; x++) {
+                if (s[x][y] == 0)
+                    str += ".";
+                if (s[x][y] == 1)
+                    str += "O";
+                if (s[x][y] == -1)
+                    str += "X";
+                if (s[x][y] == -2)
+                    str += "X*";
+                if (s[x][y] == 2)
+                    str += "O*";
+                while (str.length % 5)
+                    str += " ";
+            }
+            print(str + "\n");
+            print("\n");
+        }
+        print("\n");
+        z = 0;
+        t = 0;
+        for (l = 0; l <= 7; l++) {
+            for (m = 0; m <= 7; m++) {
+                if (s[l][m] == 1 || s[l][m] == 2)
+                    z = 1;
+                if (s[l][m] == -1 || s[l][m] == -2)
+                    t = 1;
+            }
+        }
+        if (z != 1) {
+            print("\n");
+            print("I WIN.\n");
+            break;
+        }
+        if (t != 1) {
+            print("\n");
+            print("YOU WIN.\n");
+            break;
+        }
+        do {
+            print("FROM");
+            e = await input();
+            h = parseInt(e.substr(e.indexOf(",") + 1));
+            e = parseInt(e);
+            x = e;
+            y = h;
+        } while (s[x][y] <= 0) ;
+        do {
+            print("TO");
+            a = await input();
+            b = parseInt(a.substr(a.indexOf(",") + 1));
+            a = parseInt(a);
+            x = a;
+            y = b;
+            if (s[x][y] == 0 && Math.abs(a - e) <= 2 && Math.abs(a - e) == Math.abs(b - h))
+                break;
+            print("WHAT?\n");
+        } while (1) ;
+        i = 46;
+        do {
+            s[a][b] = s[e][h]
+            s[e][h] = 0;
+            if (Math.abs(e - a) != 2)
+                break;
+            s[(e + a) / 2][(h + b) / 2] = 0;
+            while (1) {
+                print("+TO");
+                a1 = await input();
+                b1 = parseInt(a1.substr(a1.indexOf(",") + 1));
+                a1 = parseInt(a1);
+                if (a1 < 0)
+                    break;
+                if (s[a1][b1] == 0 && Math.abs(a1 - a) == 2 && Math.abs(b1 - b) == 2)
+                    break;
+            }
+            if (a1 < 0)
+                break;
+            e = a;
+            h = b;
+            a = a1;
+            b = b1;
+            i += 15;
+        } while (1);
+        if (b == 7)	// Player reaches top
+            s[a][b] = 2;	// Convert to king
+    }
+}
+
+main();
diff --git a/24 Chemist/javascript/chemist.html b/24 Chemist/javascript/chemist.html
new file mode 100644
index 00000000..c65d7821
--- /dev/null
+++ b/24 Chemist/javascript/chemist.html	
@@ -0,0 +1,9 @@
+
+
+CHEMIST
+
+
+

+
+
+
diff --git a/24 Chemist/javascript/chemist.js b/24 Chemist/javascript/chemist.js
new file mode 100644
index 00000000..8d6aabf5
--- /dev/null
+++ b/24 Chemist/javascript/chemist.js	
@@ -0,0 +1,82 @@
+// CHEMIST
+//
+// Converted from BASIC to Javascript by Oscar Toledo G. (nanochess)
+//
+
+function print(str)
+{
+    document.getElementById("output").appendChild(document.createTextNode(str));
+}
+
+function input()
+{
+    var input_element;
+    var input_str;
+    
+    return new Promise(function (resolve) {
+                       input_element = document.createElement("INPUT");
+                       
+                       print("? ");
+                       input_element.setAttribute("type", "text");
+                       input_element.setAttribute("length", "50");
+                       document.getElementById("output").appendChild(input_element);
+                       input_element.focus();
+                       input_str = undefined;
+                       input_element.addEventListener("keydown", function (event) {
+                                                      if (event.keyCode == 13) {
+                                                      input_str = input_element.value;
+                                                      document.getElementById("output").removeChild(input_element);
+                                                      print(input_str);
+                                                      print("\n");
+                                                      resolve(input_str);
+                                                      }
+                                                      });
+                       });
+}
+
+function tab(space)
+{
+    var str = "";
+    while (space-- > 0)
+        str += " ";
+    return str;
+}
+
+// Main program
+async function main()
+{
+    print(tab(33) + "CHEMIST\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    print("THE FICTITIOUS CHECMICAL KRYPTOCYANIC ACID CAN ONLY BE\n");
+    print("DILUTED BY THE RATIO OF 7 PARTS WATER TO 3 PARTS ACID.\n");
+    print("IF ANY OTHER RATIO IS ATTEMPTED, THE ACID BECOMES UNSTABLE\n");
+    print("AND SOON EXPLODES.  GIVEN THE AMOUNT OF ACID, YOU MUST\n");
+    print("DECIDE WHO MUCH WATER TO ADD FOR DILUTION.  IF YOU MISS\n");
+    print("YOU FACE THE CONSEQUENCES.\n");
+    t = 0;
+    while (1) {
+        a = Math.floor(Math.random() * 50);
+        w = 7 * a / 3;
+        print(a + " LITERS OF KRYPTOCYANIC ACID.  HOW MUCH WATER");
+        r = parseFloat(await input());
+        d = Math.abs(w - r);
+        if (d > w / 20) {
+            print(" SIZZLE!  YOU HAVE JUST BEEN DESALINATED INTO A BLOB\n");
+            print(" OF QUIVERING PROTOPLASM!\n");
+            t++;
+            if (t == 9)
+                break;
+            print(" HOWEVER, YOU MAY TRY AGAIN WITH ANOTHER LIFE.\n");
+        } else {
+            print(" GOOD JOB! YOU MAY BREATHE NOW, BUT DON'T INHALE THE FUMES!\n");
+            print("\n");
+        }
+    }
+    print(" YOUR 9 LIVES ARE USED, BUT YOU WILL BE LONG REMEMBERED FOR\n");
+    print(" YOUR CONTRIBUTIONS TO THE FIELD OF COMIC BOOK CHEMISTRY.\n");
+}
+
+main();
diff --git a/25 Chief/chief.bas b/25 Chief/chief.bas
index bcf8dd88..d3157e73 100644
--- a/25 Chief/chief.bas	
+++ b/25 Chief/chief.bas	
@@ -47,5 +47,5 @@
 450 PRINT:PRINT"#########################":PRINT
 470 PRINT "I HOPE YOU BELIEVE ME NOW, FOR YOUR SAKE!!"
 480 GOTO 520
-510 PRINT "BYE!!!"
+500 PRINT "BYE!!!"
 520 END
diff --git a/25 Chief/javascript/chief.html b/25 Chief/javascript/chief.html
new file mode 100644
index 00000000..cf272f9b
--- /dev/null
+++ b/25 Chief/javascript/chief.html	
@@ -0,0 +1,9 @@
+
+
+CHIEF
+
+
+

+
+
+
diff --git a/25 Chief/javascript/chief.js b/25 Chief/javascript/chief.js
new file mode 100644
index 00000000..98fde419
--- /dev/null
+++ b/25 Chief/javascript/chief.js	
@@ -0,0 +1,105 @@
+// CHIEF
+//
+// Converted from BASIC to Javascript by Oscar Toledo G. (nanochess)
+//
+
+function print(str)
+{
+    document.getElementById("output").appendChild(document.createTextNode(str));
+}
+
+function input()
+{
+    var input_element;
+    var input_str;
+    
+    return new Promise(function (resolve) {
+                       input_element = document.createElement("INPUT");
+                       
+                       print("? ");
+                       input_element.setAttribute("type", "text");
+                       input_element.setAttribute("length", "50");
+                       document.getElementById("output").appendChild(input_element);
+                       input_element.focus();
+                       input_str = undefined;
+                       input_element.addEventListener("keydown", function (event) {
+                                                      if (event.keyCode == 13) {
+                                                      input_str = input_element.value;
+                                                      document.getElementById("output").removeChild(input_element);
+                                                      print(input_str);
+                                                      print("\n");
+                                                      resolve(input_str);
+                                                      }
+                                                      });
+                       });
+}
+
+function tab(space)
+{
+    var str = "";
+    while (space-- > 0)
+        str += " ";
+    return str;
+}
+
+// Main program
+async function main()
+{
+    print(tab(30) + "CHIEF\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    print("I AM CHIEF NUMBERS FREEK, THE GREAT INDIAN MATH GOD.\n");
+    print("ARE YOU READY TO TAKE THE TEST YOU CALLED ME OUT FOR");
+    a = await input();
+    if (a.substr(0, 1) != "Y")
+        print("SHUT UP, PALE FACE WITH WIE TONGUE.\n");
+    print(" TAKE A NUMBER AND ADD 3. DIVIDE THIS NUMBER BY 5 AND\n");
+    print("MULTIPLY BY 8. DIVIDE BY 5 AND ADD THE SAME. SUBTRACT 1.\n");
+    print("  WHAT DO YOU HAVE");
+    b = parseFloat(await input());
+    c = (b + 1 - 5) * 5 / 8 * 5 - 3;
+    print("I BET YOUR NUMBER WAS " + Math.floor(c + 0.5) + ". AM I RIGHT");
+    d = await input();
+    if (d.substr(0, 1) != "Y") {
+        print("WHAT WAS YOUR ORIGINAL NUMBER");
+        k = parseFloat(await input());
+        f = k + 3;
+        g = f / 5;
+        h = g * 8;
+        i = h / 5 + 5;
+        j = i - 1;
+        print("SO YOU THINK YOU'RE SO SMART, EH?\n");
+        print("NOW WATCH.\n");
+        print(k + " PLUS 3 EQUALS " + f + ". THIS DIVIDED BY 5 EQUALS " + g + ";\n");
+        print("THIS TIMES 8 EQUALS " + h + ". IF WE DIVIDE BY 5 AND ADD 5,\n");
+        print("WE GET " + i + ", WHICH, MINUS 1, EQUALS " + j + ".\n");
+        print("NOW DO YOU BELIEVE ME");
+        z = await input();
+        if (z.substr(0, 1) != "Y") {
+            print("YOU HAVE MADE ME MAD!!!\n");
+            print("THERE MUST BE A GREAT LIGHTNING BOLT!\n");
+            print("\n");
+            print("\n");
+            for (x = 30; x >= 22; x--)
+                print(tab(x) + "X X\n");
+            print(tab(21) + "X XXX\n");
+            print(tab(20) + "X   X\n");
+            print(tab(19) + "XX X\n");
+            for (y = 20; y >= 13; y--)
+                print(tab(y) + "X X\n");
+            print(tab(12) + "XX\n");
+            print(tab(11) + "X\n");
+            print(tab(10) + "*\n");
+            print("\n");
+            print("#########################\n");
+            print("\n");
+            print("I HOPE YOU BELIEVE ME NOW, FOR YOUR SAKE!!\n");
+            return;
+        }
+    }
+    print("BYE!!!\n");
+}
+
+main();