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