diff --git a/37 Football/ftball.bas b/37 Football/ftball.bas index 40a6aa8b..fe6ca68b 100644 --- a/37 Football/ftball.bas +++ b/37 Football/ftball.bas @@ -33,7 +33,7 @@ 500 FOR E=1 TO 2 510 IF A$=L$(E) THEN 550 520 NEXT E -530 PRINT "INCORRECT ANSWER. PLEASE TYPE 'KICK' OR 'RECIEVE'"; +530 PRINT "INCORRECT ANSWER. PLEASE TYPE 'KICK' OR 'RECEIVE'"; 540 GOTO 480 550 IF E=2 THEN 580 560 LET P=1 @@ -149,7 +149,7 @@ 1670 GOTO 1350 1680 REM PLACE KICK 1690 LET Y=INT(100*(R-.5)^3+35) -1700 IF R1>.15 THEN 1740 +1700 IF R1>.15 THEN 1750 1710 PRINT "KICK IS BLOCKED ***" 1720 LET X=X-5*FNF(1) 1730 LET P=1-P diff --git a/37 Football/javascript/football.html b/37 Football/javascript/football.html new file mode 100644 index 00000000..10e1acc1 --- /dev/null +++ b/37 Football/javascript/football.html @@ -0,0 +1,9 @@ + + +FOOTBALL + + +

+
+
+
diff --git a/37 Football/javascript/football.js b/37 Football/javascript/football.js
new file mode 100644
index 00000000..ca990f92
--- /dev/null
+++ b/37 Football/javascript/football.js	
@@ -0,0 +1,504 @@
+// FOOTBALL
+//
+// 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;
+}
+
+var player_data = [17,8,4,14,19,3,10,1,7,11,15,9,5,20,13,18,16,2,12,6,
+                   20,2,17,5,8,18,12,11,1,4,19,14,10,7,9,15,6,13,16,3];
+var aa = [];
+var ba = [];
+var ca = [];
+var ha = [];
+var ta = [];
+var wa = [];
+var xa = [];
+var ya = [];
+var za = [];
+var ms = [];
+var da = [];
+var ps = [, "PITCHOUT","TRIPLE REVERSE","DRAW","QB SNEAK","END AROUND",
+          "DOUBLE REVERSE","LEFT SWEEP","RIGHT SWEEP","OFF TACKLE",
+          "WISHBONE OPTION","FLARE PASS","SCREEN PASS",
+          "ROLL OUT OPTION","RIGHT CURL","LEFT CURL","WISHBONE OPTION",
+          "SIDELINE PASS","HALF-BACK OPTION","RAZZLE-DAZZLE","BOMB!!!!"];
+var p;
+var t;
+
+function field_headers()
+{
+    print("TEAM 1 [0   10   20   30   40   50   60   70   80   90");
+    print("   100] TEAM 2\n");
+    print("\n");
+}
+
+function separator()
+{
+    str = "";
+    for (x = 1; x <= 72; x++)
+        str += "+";
+    print(str + "\n");
+}
+
+function show_ball()
+{
+    print(tab(da[t] + 5 + p / 2) + ms[t] + "\n");
+    field_headers();
+}
+
+function show_scores()
+{
+    print("\n");
+    print("TEAM 1 SCORE IS " + ha[1] + "\n");
+    print("TEAM 2 SCORE IS " + ha[2] + "\n");
+    print("\n");
+    if (ha[t] >= e) {
+        print("TEAM " + t + " WINS*******************");
+        return true;
+    }
+    return false;
+}
+
+function loss_posession() {
+    print("\n");
+    print("** LOSS OF POSSESSION FROM TEAM " + t + " TO TEAM " + ta[t] + "\n");
+    print("\n");
+    separator();
+    print("\n");
+    t = ta[t];
+}
+
+function touchdown() {
+    print("\n");
+    print("TOUCHDOWN BY TEAM " + t + " *********************YEA TEAM\n");
+    q = 7;
+    g = Math.random();
+    if (g <= 0.1) {
+        q = 6;
+        print("EXTRA POINT NO GOOD\n");
+    } else {
+        print("EXTRA POINT GOOD\n");
+    }
+    ha[t] = ha[t] + q;
+}
+
+// Main program
+async function main()
+{
+    print(tab(32) + "FOOTBALL\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    print("PRESENTING N.F.U. FOOTBALL (NO FORTRAN USED)\n");
+    print("\n");
+    print("\n");
+    while (1) {
+        print("DO YOU WANT INSTRUCTIONS");
+        str = await input();
+        if (str == "YES" || str == "NO")
+            break;
+    }
+    if (str == "YES") {
+        print("THIS IS A FOOTBALL GAME FOR TWO TEAMS IN WHICH PLAYERS MUST\n");
+        print("PREPARE A TAPE WITH A DATA STATEMENT (1770 FOR TEAM 1,\n");
+        print( "1780 FOR TEAM 2) IN WHICH EACH TEAM SCRAMBLES NOS. 1-20\n");
+        print("THESE NUMBERS ARE THEN ASSIGNED TO TWENTY GIVEN PLAYS.\n");
+        print("A LIST OF NOS. AND THEIR PLAYS IS PROVIDED WITH\n");
+        print("BOTH TEAMS HAVING THE SAME PLAYS. THE MORE SIMILAR THE\n");
+        print("PLAYS THE LESS YARDAGE GAINED.  SCORES ARE GIVEN\n");
+        print("WHENEVER SCORES ARE MADE. SCORES MAY ALSO BE OBTAINED\n");
+        print("BY INPUTTING 99,99 FOR PLAY NOS. TO PUNT OR ATTEMPT A\n");
+        print("FIELD GOAL, INPUT 77,77 FOR PLAY NUMBERS. QUESTIONS WILL BE\n");
+        print("ASKED THEN. ON 4TH DOWN, YOU WILL ALSO BE ASKED WHETHER\n");
+        print("YOU WANT TO PUNT OR ATTEMPT A FIELD GOAL. IF THE ANSWER TO\n");
+        print("BOTH QUESTIONS IS NO IT WILL BE ASSUMED YOU WANT TO\n");
+        print("TRY AND GAIN YARDAGE. ANSWER ALL QUESTIONS YES OR NO.\n");
+        print("THE GAME IS PLAYED UNTIL PLAYERS TERMINATE (CONTROL-C).\n");
+        print("PLEASE PREPARE A TAPE AND RUN.\n");
+    }
+    print("\n");
+    print("PLEASE INPUT SCORE LIMIT ON GAME");
+    e = parseInt(await input());
+    for (i = 1; i <= 40; i++) {
+        if (i <= 20) {
+            aa[player_data[i - 1]] = i;
+        } else {
+            ba[player_data[i - 1]] = i - 20;
+        }
+        ca[i] = player_data[i - 1];
+    }
+    l = 0;
+    t = 1;
+    do {
+        print("TEAM " + t + " PLAY CHART\n");
+        print("NO.      PLAY\n");
+        for (i = 1; i <= 20; i++) {
+            str = "" + ca[i + l];
+            while (str.length < 6)
+                str += " ";
+            str += ps[i];
+            print(str + "\n");
+        }
+        l += 20;
+        t = 2;
+        print("\n");
+        print("TEAR OFF HERE----------------------------------------------\n");
+        for (x = 1; x <= 11; x++)
+            print("\n");
+    } while (l == 20) ;
+    da[1] = 0;
+    da[2] = 3;
+    ms[1] = "--->";
+    ms[2] = "<---";
+    ha[1] = 0;
+    ha[2] = 0;
+    ta[1] = 2;
+    ta[2] = 1;
+    wa[1] = -1;
+    wa[2] = 1;
+    xa[1] = 100;
+    xa[2] = 0;
+    ya[1] = 1;
+    ya[2] = -1;
+    za[1] = 0;
+    za[2] = 100;
+    p = 0;
+    field_headers();
+    print("TEAM 1 DEFEND 0 YD GOAL -- TEAM 2 DEFENDS 100 YD GOAL.\n");
+    t = Math.floor(2 * Math.random() + 1);
+    print("\n");
+    print("THE COIN IS FLIPPED\n");
+    routine = 1;
+    while (1) {
+        if (routine <= 1) {
+            p = xa[t] - ya[t] * 40;
+            separator();
+            print("\n");
+            print("TEAM " + t + " RECEIVES KICK-OFF\n");
+            k = Math.floor(26 * Math.random() + 40);
+        }
+        if (routine <= 2) {
+            p = p - ya[t] * k;
+        }
+        if (routine <= 3) {
+            if (wa[t] * p >= za[t] + 10) {
+                print("\n");
+                print("BALL WENT OUT OF ENDZONE --AUTOMATIC TOUCHBACK--\n");
+                p = za[t] - wa[t] * 20;
+                if (routine <= 4)
+                    routine = 5;
+            } else {
+                print("BALL WENT " + k + " YARDS.  NOW ON " + p + "\n");
+                show_ball();
+            }
+        }
+        if (routine <= 4) {
+            while (1) {
+                print("TEAM " + t + " DO YOU WANT TO RUNBACK");
+                str = await input();
+                if (str == "YES" || str == "NO")
+                    break;
+            }
+            if (str == "YES") {
+                k = Math.floor(9 * Math.random() + 1);
+                r = Math.floor(((xa[t] - ya[t] * p + 25) * Math.random() - 15) / k);
+                p = p - wa[t] * r;
+                print("\n");
+                print("RUNBACK TEAM " + t + " " + r + " YARDS\n");
+                g = Math.random();
+                if (g < 0.25) {
+                    loss_posession();
+                    routine = 4;
+                    continue;
+                } else if (ya[t] * p >= xa[t]) {
+                    touchdown();
+                    if (show_scores())
+                        return;
+                    t = ta[t];
+                    routine = 1;
+                    continue;
+                } else if (wa[t] * p >= za[t]) {
+                    print("\n");
+                    print("SAFETY AGAINST TEAM " + t + " **********************OH-OH\n");
+                    ha[ta[t]] = ha[ta[t]] + 2;
+                    if (show_scores())
+                        return;
+                    print("TEAM " + t + " DO YOU WANT TO PUNT INSTEAD OF A KICKOFF");
+                    str = await input();
+                    p = za[t] - wa[t] * 20;
+                    if (str == "YES") {
+                        print("\n");
+                        print("TEAM " + t + " WILL PUNT\n");
+                        g = Math.random();
+                        if (g < 0.25) {
+                            loss_posession();
+                            routine = 4;
+                            continue;
+                        }
+                        print("\n");
+                        separator();
+                        k = Math.floor(25 * Math.random() + 35);
+                        t = ta[t];
+                        routine = 2;
+                        continue;
+                    }
+                    touchdown();
+                    if (show_scores())
+                        return;
+                    t = ta[t];
+                    routine = 1;
+                    continue;
+                } else {
+                    routine = 5;
+                    continue;
+                }
+            } else if (str == "NO") {
+                if (wa[t] * p >= za[t])
+                    p = za[t] - wa[t] * 20;
+            }
+        }
+        if (routine <= 5) {
+            d = 1;
+            s = p;
+        }
+        if (routine <= 6) {
+            str = "";
+            for (i = 1; i <= 72; i++)
+                str += "=";
+            print(str + "\n");
+            print("TEAM " + t + " DOWN " + d + " ON " + p + "\n");
+            if (d == 1) {
+                if (ya[t] * (p + ya[t] * 10) >= xa[t])
+                    c = 8;
+                else
+                    c = 4;
+            }
+            if (c != 8) {
+                print(tab(27) + (10 - (ya[t] * p - ya[t] * s)) + " YARDS TO 1ST DOWN\n");
+            } else {
+                print(tab(27) + (xa[t] - ya[t] * p) + " YARDS\n");
+            }
+            show_ball();
+            if (d == 4)
+                routine = 8;
+        }
+        if (routine <= 7) {
+            u = Math.floor(3 * Math.random() - 1);
+            while (1) {
+                print("INPUT OFFENSIVE PLAY, DEFENSIVE PLAY");
+                str = await input();
+                if (t == 1) {
+                    p1 = parseInt(str);
+                    p2 = parseInt(str.substr(str.indexOf(",") + 1));
+                } else {
+                    p2 = parseInt(str);
+                    p1 = parseInt(str.substr(str.indexOf(",") + 1));
+                }
+                if (p1 == 99) {
+                    if (show_scores())
+                        return;
+                    if (p1 == 99)
+                        continue;
+                }
+                if (p1 < 1 || p1 > 20 || p2 < 1 || p2 > 20) {
+                    print("ILLEGAL PLAY NUMBER, CHECK AND\n");
+                    continue;
+                }
+                break;
+            }
+        }
+        if (d == 4 || p1 == 77) {
+            while (1) {
+                print("DOES TEAM " + t + " WANT TO PUNT");
+                str = await input();
+                if (str == "YES" || str == "NO")
+                    break;
+            }
+            if (str == "YES") {
+                print("\n");
+                print("TEAM " + t + " WILL PUNT\n");
+                g = Math.random();
+                if (g < 0.25) {
+                    loss_posession();
+                    routine = 4;
+                    continue;
+                }
+                print("\n");
+                separator();
+                k = Math.floor(25 * Math.random() + 35);
+                t = ta[t];
+                routine = 2;
+                continue;
+            }
+            while (1) {
+                print("DOES TEAM " + t + " WANT TO ATTEMPT A FIELD GOAL");
+                str = await input();
+                if (str == "YES" || str == "NO")
+                    break;
+            }
+            if (str == "YES") {
+                print("\n");
+                print("TEAM " + t + " WILL ATTEMPT A FIELD GOAL\n");
+                g = Math.random();
+                if (g < 0.025) {
+                    loss_posession();
+                    routine = 4;
+                    continue;
+                } else {
+                    f = Math.floor(35 * Math.random() + 20);
+                    print("\n");
+                    print("KICK IS " + f + " YARDS LONG\n");
+                    p = p - wa[t] * f;
+                    g = Math.random();
+                    if (g < 0.35) {
+                        print("BALL WENT WIDE\n");
+                    } else if (ya[t] * p >= xa[t]) {
+                        print("FIELD GOLD GOOD FOR TEAM " + t + " *********************YEA");
+                        q = 3;
+                        ha[t] = ha[t] + q;
+                        if (show_scores())
+                            return;
+                        t = ta[t];
+                        routine = 1;
+                        continue;
+                    }
+                    print("FIELD GOAL UNSUCCESFUL TEAM " + t + "-----------------TOO BAD\n");
+                    print("\n");
+                    separator();
+                    if (ya[t] * p < xa[t] + 10) {
+                        print("\n");
+                        print("BALL NOW ON " + p + "\n");
+                        t = ta[t];
+                        show_ball();
+                        routine = 4;
+                        continue;
+                    } else {
+                        t = ta[t];
+                        routine = 3;
+                        continue;
+                    }
+                }
+            } else {
+                routine = 7;
+                continue;
+            }
+        }
+        y = Math.floor(Math.abs(aa[p1] - ba[p2]) / 19 * ((xa[t] - ya[t] * p + 25) * Math.random() - 15));
+        print("\n");
+        if (t == 1 && aa[p1] < 11 || t == 2 && ba[p2] < 11) {
+            print("THE BALL WAS RUN\n");
+        } else if (u == 0) {
+            print("PASS INCOMPLETE TEAM " + t + "\n");
+            y = 0;
+        } else {
+            g = Math.random();
+            if (g <= 0.025 && y > 2) {
+                print("PASS COMPLETED\n");
+            } else {
+                print("QUARTERBACK SCRAMBLED\n");
+            }
+        }
+        p = p - wa[t] * y;
+        print("\n");
+        print("NET YARDS GAINED ON DOWN " + d + " ARE " + y + "\n");
+        
+        g = Math.random();
+        if (g <= 0.025) {
+            loss_posession();
+            routine = 4;
+            continue;
+        } else if (ya[t] * p >= xa[t]) {
+            touchdown();
+            if (show_scores())
+                return;
+            t = ta[t];
+            routine = 1;
+            continue;
+        } else if (wa[t] * p >= za[t]) {
+            print("\n");
+            print("SAFETY AGAINST TEAM " + t + " **********************OH-OH\n");
+            ha[ta[t]] = ha[ta[t]] + 2;
+            if (show_scores())
+                return;
+            print("TEAM " + t + " DO YOU WANT TO PUNT INSTEAD OF A KICKOFF");
+            str = await input();
+            p = za[t] - wa[t] * 20;
+            if (str == "YES") {
+                print("\n");
+                print("TEAM " + t + " WILL PUNT\n");
+                g = Math.random();
+                if (g < 0.25) {
+                    loss_posession();
+                    routine = 4;
+                    continue;
+                }
+                print("\n");
+                separator();
+                k = Math.floor(25 * Math.random() + 35);
+                t = ta[t];
+                routine = 2;
+                continue;
+            }
+            touchdown();
+            if (show_scores())
+                return;
+            t = ta[t];
+            routine = 1;
+        } else if (ya[t] * p - ya[t] * s >= 10) {
+            routine = 5;
+        } else {
+            d++;
+            if (d != 5) {
+                routine = 6;
+            } else {
+                print("\n");
+                print("CONVERSION UNSUCCESSFUL TEAM " + t + "\n");
+                t = ta[t];
+                print("\n");
+                separator();
+                routine = 5;
+            }
+        }
+    }
+}
+
+main();
diff --git a/37 Football/javascript/ftball.html b/37 Football/javascript/ftball.html
new file mode 100644
index 00000000..92862bde
--- /dev/null
+++ b/37 Football/javascript/ftball.html	
@@ -0,0 +1,9 @@
+
+
+FTBALL
+
+
+

+
+
+
diff --git a/37 Football/javascript/ftball.js b/37 Football/javascript/ftball.js
new file mode 100644
index 00000000..16374bd0
--- /dev/null
+++ b/37 Football/javascript/ftball.js	
@@ -0,0 +1,508 @@
+// FTBALL
+//
+// 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;
+}
+
+var os = [];
+var sa = [];
+var ls = [, "KICK","RECEIVE"," YARD ","RUN BACK FOR ","BALL ON ",
+          "YARD LINE"," SIMPLE RUN"," TRICKY RUN"," SHORT PASS",
+          " LONG PASS","PUNT"," QUICK KICK "," PLACE KICK"," LOSS ",
+          " NO GAIN","GAIN "," TOUCHDOWN "," TOUCHBACK ","SAFETY***",
+          "JUNK"];
+var p;
+var x;
+var x1;
+
+function fnf(x)
+{
+    return 1 - 2 * p;
+}
+
+function fng(z)
+{
+    return p * (x1 - x) + (1 - p) * (x - x1);
+}
+
+function show_score()
+{
+    print("\n");
+    print("SCORE:  " + sa[0] + " TO " + sa[1] + "\n");
+    print("\n");
+    print("\n");
+}
+
+function show_position()
+{
+    if (x <= 50) {
+        print(ls[5] + os[0] + " " + x + " " + ls[6] + "\n");
+    } else {
+        print(ls[5] + os[1] + " " + (100 - x) + " " + ls[6] + "\n");
+    }
+}
+
+function offensive_td()
+{
+    print(ls[17] + "***\n");
+    if (Math.random() <= 0.8) {
+        sa[p] = sa[p] + 7;
+        print("KICK IS GOOD.\n");
+    } else {
+        print("KICK IS OFF TO THE SIDE\n");
+        sa[p] = sa[p] + 6;
+    }
+    show_score();
+    print(os[p] + " KICKS OFF\n");
+    p = 1 - p;
+}
+
+// Main program
+async function main()
+{
+    print(tab(33) + "FTBALL\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("THIS IS DARTMOUTH CHAMPIONSHIP FOOTBALL.\n");
+    print("\n");
+    print("YOU WILL QUARTERBACK DARTMOUTH. CALL PLAYS AS FOLLOWS:\n");
+    print("1= SIMPLE RUN; 2= TRICKY RUN; 3= SHORT PASS;\n");
+    print("4= LONG PASS; 5= PUNT; 6= QUICK KICK; 7= PLACE KICK.\n");
+    print("\n");
+    print("CHOOSE YOUR OPPONENT");
+    os[1] = await input();
+    os[0] = "DARMOUTH";
+    print("\n");
+    sa[0] = 0;
+    sa[1] = 0;
+    p = Math.floor(Math.random() * 2);
+    print(os[p] + " WON THE TOSS\n");
+    if (p != 0) {
+        print(os[1] + " ELECTS TO RECEIVE.\n");
+        print("\n");
+    } else {
+        print("DO YOU ELECT TO KICK OR RECEIVE");
+        while (1) {
+            str = await input();
+            print("\n");
+            if (str == ls[1] || str == ls[2])
+                break;
+            print("INCORRECT ANSWER.  PLEASE TYPE 'KICK' OR 'RECEIVE'");
+        }
+        e = (str == ls[1]) ? 1 : 2;
+        if (e == 1)
+            p = 1;
+    }
+    t = 0;
+    start = 1;
+    while (1) {
+        if (start <= 1) {
+            x = 40 + (1 - p) * 20;
+        }
+        if (start <= 2) {
+            y = Math.floor(200 * Math.pow((Math.random() - 0.5), 3) + 55);
+            print(" " + y + " " + ls[3] + " KICKOFF\n");
+            x = x - fnf(1) * y;
+            if (Math.abs(x - 50) >= 50) {
+                print("TOUCHBACK FOR " + os[p] + ".\n");
+                x = 20 + p * 60;
+                start = 4;
+            } else {
+                start = 3;
+            }
+        }
+        if (start <= 3) {
+            y = Math.floor(50 * Math.pow(Math.random(), 2)) + (1 - p) * Math.floor(50 * Math.pow(Math.random(), 4));
+            x = x + fnf(1) * y;
+            if (Math.abs(x - 50) < 50) {
+                print(" " + y + " " + ls[3] + " RUNBACK\n");
+            } else {
+                print(ls[4]);
+                offensive_td();
+                start = 1;
+                continue;
+            }
+        }
+        if (start <= 4) {
+            // First down
+            show_position();
+        }
+        if (start <= 5) {
+            x1 = x;
+            d = 1;
+            print("\n");
+            print("FIRST DOWN " + os[p] + "***\n");
+            print("\n");
+            print("\n");
+        }
+        // New play
+        t++;
+        if (t == 30) {
+            if (Math.random() <= 1.3) {
+                print("GAME DELAYED.  DOG ON FIELD.\n");
+                print("\n");
+            }
+        }
+        if (t >= 50 && Math.random() <= 0.2)
+            break;
+        if (p != 1) {
+            // Opponent's play
+            if (d <= 1) {
+                z = Math.random() > 1 / 3 ? 1 : 3;
+            } else if (d != 4) {
+                if (10 + x - x1 < 5 || x < 5) {
+                    z = Math.random() > 1 / 3 ? 1 : 3;
+                } else if (x <= 10) {
+                    a = Math.floor(2 * Math.random());
+                    z = 2 + a;
+                } else if (x <= x1 || d < 3 || x < 45) {
+                    a = Math.floor(2 * Math.random());
+                    z = 2 + a * 2;
+                } else {
+                    if (Math.random() > 1 / 4)
+                        z = 4;
+                    else
+                        z = 6;
+                }
+            } else {
+                if (x <= 30) {
+                    z = 5;
+                } else if (10 + x - x1 < 3 || x < 3) {
+                    z = Math.random() > 1 / 3 ? 1 : 3;
+                } else {
+                    z = 7;
+                }
+            }
+        } else {
+            print("NEXT PLAY");
+            while (1) {
+                z = parseInt(await input());
+                if (Math.abs(z - 4) <= 3)
+                    break;
+                print("ILLEGAL PLAY NUMBER, RETYPE");
+            }
+        }
+        f = 0;
+        print(ls[z + 6] + ".  ");
+        r = Math.random() * (0.98 + fnf(1) * 0.02);
+        r1 = Math.random();
+        switch (z) {
+            case 1: // Simple run
+            case 2: // Tricky run
+                if (z == 1) {
+                    y = Math.floor(24 * Math.pow(r - 0.5, 3) + 3);
+                    if (Math.random() >= 0.05) {
+                        routine = 1;
+                        break;
+                    }
+                } else {
+                    y = Math.floor(20 * r - 5);
+                    if (Math.random() > 0.1) {
+                        routine = 1;
+                        break;
+                    }
+                }
+                f = -1;
+                x3 = x;
+                x = x + fnf(1) * y;
+                if (Math.abs(x - 50) < 50) {
+                    print("***  FUMBLE AFTER ");
+                    routine = 2;
+                    break;
+                } else {
+                    print("***  FUMBLE.\n");
+                    routine = 4;
+                    break;
+                }
+            case 3: // Short pass
+            case 4: // Long pass
+                if (z == 3) {
+                    y = Math.floor(60 * Math.pow(r1 - 0.5, 3) + 10);
+                } else {
+                    y = Math.floor(160 * Math.pow((r1 - 0.5), 3) + 30);
+                }
+                if (z == 3 && r < 0.05 || z == 4 && r < 0.1) {
+                    if (d != 4) {
+                        print("INTERCEPTED.\n");
+                        f = -1;
+                        x = x + fnf(1) * y;
+                        if (Math.abs(x - 50) >= 50) {
+                            routine = 4;
+                            break;
+                        }
+                        routine = 3;
+                        break;
+                    } else {
+                        y = 0;
+                        if (Math.random() < 0.3) {
+                            print("BATTED DOWN.  ");
+                        } else {
+                            print("INCOMPLETE.  ");
+                        }
+                        routine = 1;
+                        break;
+                    }
+                } else if (z == 4 && r < 0.3) {
+                    print("PASSER TACKLED.  ");
+                    y = -Math.floor(15 * r1 + 3);
+                    routine = 1;
+                    break;
+                } else if (z == 3 && r < 0.15) {
+                    print("PASSER TACLKED.  ");
+                    y = -Math.floor(10 * r1);
+                    routine = 1;
+                    break;
+                } else if (z == 3 && r < 0.55 || z == 4 && r < 0.75) {
+                    y = 0;
+                    if (Math.random() < 0.3) {
+                        print("BATTED DOWN.  ");
+                    } else {
+                        print("INCOMPLETE.  ");
+                    }
+                    routine = 1;
+                    break;
+                } else {
+                    print("COMPLETE.  ");
+                    routine = 1;
+                    break;
+                }
+            case 5:  // Punt
+            case 6:  // Quick kick
+                y = Math.floor(100 * Math.pow((r - 0.5), 3) + 35);
+                if (d != 4)
+                    y = Math.floor(y * 1.3);
+                print(" " + y + " " + ls[3] + " PUNT\n");
+                if (Math.abs(x + y * fnf(1) - 50) < 50 && d >= 4) {
+                    y1 = Math.floor(Math.pow(r1, 2) * 20);
+                    print(" " + y1 + " " + ls[3] + " RUN BACK\n");
+                    y = y - y1;
+                }
+                f = -1;
+                x = x + fnf(1) * y;
+                if (Math.abs(x - 50) >= 50) {
+                    routine = 4;
+                    break;
+                }
+                routine = 3;
+                break;
+            case 7: // Place kick
+                y = Math.floor(100 * Math.pow((r - 0.5), 3) + 35);
+                if (r1 <= 0.15) {
+                    print("KICK IS BLOCKED  ***\n");
+                    x = x - 5 * fnf(1);
+                    p = 1 - p;
+                    start = 4;
+                    continue;
+                }
+                x = x + fnf(1) * y;
+                if (Math.abs(x - 50) >= 60) {
+                    if (r1 <= 0.5) {
+                        print("KICK IS OFF TO THE SIDE.\n");
+                        print(ls[18] + "\n");
+                        p = 1 - p;
+                        x = 20 + p * 60;
+                        start = 4;
+                        continue;
+                    } else {
+                        print("FIELD GOAL ***\n");
+                        sa[p] = sa[p] + 3;
+                        show_score();
+                        print(os[p] + " KICKS OFF\n");
+                        p = 1 - p;
+                        start = 1;
+                        continue;
+                    }
+                } else {
+                    print("KICK IS SHORT.\n");
+                    if (Math.abs(x - 50) >= 50) {
+                        // Touchback
+                        print(ls[18] + "\n");
+                        p = 1 - p;
+                        x = 20 + p * 60;
+                        start = 4;
+                        continue;
+                    }
+                    p = 1 - p;
+                    start = 3;
+                    continue;
+                }
+                
+        }
+        // Gain or loss
+        if (routine <= 1) {
+            x3 = x;
+            x = x + fnf(1) * y;
+            if (Math.abs(x - 50) >= 50) {
+                routine = 4;
+            }
+        }
+        if (routine <= 2) {
+            if (y != 0) {
+                print(" " + Math.abs(y) + " " + ls[3]);
+                if (y < 0)
+                    yt = -1;
+                else if (y > 0)
+                    yt = 1;
+                else
+                    yt = 0;
+                print(ls[15 + yt]);
+                if (Math.abs(x3 - 50) <= 40 && Math.random() < 0.1) {
+                    // Penalty
+                    p3 = Math.floor(2 * Math.random());
+                    print(os[p3] + " OFFSIDES -- PENALTY OF 5 YARDS.\n");
+                    print("\n");
+                    print("\n");
+                    if (p3 != 0) {
+                        print("DO YOU ACCEPT THE PENALTY");
+                        while (1) {
+                            str = await input();
+                            if (str == "YES" || str == "NO")
+                                break;
+                            print("TYPE 'YES' OR 'NO'");
+                        }
+                        if (str == "YES") {
+                            f = 0;
+                            d = d - 1;
+                            if (p != p3)
+                                x = x3 + fnf(1) * 5;
+                            else
+                                x = x3 - fnf(1) * 5;
+                        }
+                    } else {
+                        // Opponent's strategy on penalty
+                        if ((p != 1 && (y <= 0 || f < 0 || fng(1) < 3 * d - 2))
+                            || (p == 1 && ((y > 5 && f >= 0) || d < 4 || fng(1) >= 10))) {
+                            print("PENALTY REFUSED.\n");
+                        } else {
+                            print("PENALTY ACCEPTED.\n");
+                            f = 0;
+                            d = d - 1;
+                            if (p != p3)
+                                x = x3 + fnf(1) * 5;
+                            else
+                                x = x3 - fnf(1) * 5;
+                        }
+                    }
+                    routine = 3;
+                }
+            }
+        }
+        if (routine <= 3) {
+            show_position();
+            if (f != 0) {
+                p = 1 - p;
+                start = 5;
+                continue;
+            } else if (fng(1) >= 10) {
+                start = 5;
+                continue;
+            } else if (d == 4) {
+                p = 1 - p;
+                start = 5;
+                continue;
+            } else {
+                d++;
+                print("DOWN: " + d + "     ");
+                if ((x1 - 50) * fnf(1) >= 40) {
+                    print("GOAL TO GO\n");
+                } else {
+                    print("YARDS TO GO: " + (10 - fng(1)) + "\n");
+                }
+                print("\n");
+                print("\n");
+                start = 6;
+                continue;
+            }
+        }
+        if (routine <= 4) {
+            // Ball in end-zone
+            e = (x >= 100) ? 1 : 0;
+            switch (1 + e - f * 2 + p * 4) {
+                case 1:
+                case 5:
+                    // Safety
+                    sa[1 - p] = sa[1 - p] + 2;
+                    print(ls[19] + "\n");
+                    show_score();
+                    print(os[p] + " KICKS OFF FROM ITS 20 YARD LINE.\n");
+                    x = 20 + p * 60;
+                    p = 1 - p;
+                    start = 2;
+                    continue;
+                case 3:
+                case 6:
+                    // Defensive TD
+                    print(ls[17] + "FOR " + os[1 - p] + "***\n");
+                    p = 1 - p;
+                    // Fall-thru
+                case 2:
+                case 8:
+                    // Offensive TD
+                    print(ls[17] + "***\n");
+                    if (Math.random() <= 0.8) {
+                        sa[p] = sa[p] + 7;
+                        print("KICK IS GOOD.\n");
+                    } else {
+                        print("KICK IS OFF TO THE SIDE\n");
+                        sa[p] = sa[p] + 6;
+                    }
+                    show_score();
+                    print(os[p] + " KICKS OFF\n");
+                    p = 1 - p;
+                    start = 1;
+                    continue;
+                case 4:
+                case 7:
+                    // Touchback
+                    print(ls[18] + "\n");
+                    p = 1 - p;
+                    x = 20 + p * 60;
+                    start = 4;
+                    continue;
+            }
+        }
+    }
+    print("END OF GAME  ***\n");
+    print("FINAL SCORE:  " + os[0] + ": " + sa[0] + "  " + os[1] + ": " + sa[1] + "\n");
+}
+
+main();
diff --git a/49 Hockey/hockey.bas b/49 Hockey/hockey.bas
index 7fb90d6b..626b4f56 100644
--- a/49 Hockey/hockey.bas	
+++ b/49 Hockey/hockey.bas	
@@ -72,7 +72,7 @@
 600 PRINT A$(H(J-2)) " GIVES AND GOES WITH " A$(H(J-1))
 610 PRINT "PRETTY PASSING!"
 620 PRINT A$(H(J-1)) " DROPS IT TO " A$(H(J-4))
-630 G=H(J-4):G1=J(J-1):G2=H(J-2):Z1=1:GOTO 770
+630 G=H(J-4):G1=H(J-1):G2=H(J-2):Z1=1:GOTO 770
 640 ON P GOTO 650,670,720
 650 PRINT B$(H(J-1)) " HITS " B$(H(J-2)) " FLYING DOWN THE LEFT SIDE" 
 660 G=H(J-2):G1=H(J-1):G2=0:Z1=3:GOTO 770
diff --git a/49 Hockey/javascript/hockey.html b/49 Hockey/javascript/hockey.html
new file mode 100644
index 00000000..fb26a5c6
--- /dev/null
+++ b/49 Hockey/javascript/hockey.html	
@@ -0,0 +1,9 @@
+
+
+HOCKEY
+
+
+

+
+
+
diff --git a/49 Hockey/javascript/hockey.js b/49 Hockey/javascript/hockey.js
new file mode 100644
index 00000000..16d5f19e
--- /dev/null
+++ b/49 Hockey/javascript/hockey.js	
@@ -0,0 +1,464 @@
+// HOCKEY
+//
+// 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;
+}
+
+var as = [];
+var bs = [];
+var ha = [];
+var ta = [];
+var t1 = [];
+var t2 = [];
+var t3 = [];
+
+// Main program
+async function main()
+{
+    print(tab(33) + "HOCKEY\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    // Robert Puopolo Alg. 1 140 McCowan 6/7/73 Hockey
+    for (c = 0; c <= 20; c++)
+        ha[c] = 0;
+    for (c = 1; c <= 5; c++) {
+        ta[c] = 0;
+        t1[c] = 0;
+        t2[c] = 0;
+        t3[c] = 0;
+    }
+    x = 1;
+    print("\n");
+    print("\n");
+    print("\n");
+    while (1) {
+        print("WOULD YOU LIKE THE INSTRUCTIONS");
+        str = await input();
+        print("\n");
+        if (str == "YES" || str == "NO")
+            break;
+        print("ANSWER YES OR NO!!\n");
+    }
+    if (str == "YES") {
+        print("\n");
+        print("THIS IS A SIMULATED HOCKEY GAME.\n");
+        print("QUESTION     RESPONSE\n");
+        print("PASS         TYPE IN THE NUMBER OF PASSES YOU WOULD\n");
+        print("             LIKE TO MAKE, FROM 0 TO 3.\n");
+        print("SHOT         TYPE THE NUMBER CORRESPONDING TO THE SHOT\n");
+        print("             YOU WANT TO MAKE.  ENTER:\n");
+        print("             1 FOR A SLAPSHOT\n");
+        print("             2 FOR A WRISTSHOT\n");
+        print("             3 FOR A BACKHAND\n");
+        print("             4 FOR A SNAP SHOT\n");
+        print("AREA         TYPE IN THE NUMBER CORRESPONDING TO\n");
+        print("             THE AREA YOU ARE AIMING AT.  ENTER:\n");
+        print("             1 FOR UPPER LEFT HAND CORNER\n");
+        print("             2 FOR UPPER RIGHT HAND CORNER\n");
+        print("             3 FOR LOWER LEFT HAND CORNER\n");
+        print("             4 FOR LOWER RIGHT HAND CORNER\n");
+        print("\n");
+        print("AT THE START OF THE GAME, YOU WILL BE ASKED FOR THE NAMES\n");
+        print("OF YOUR PLAYERS.  THEY ARE ENTERED IN THE ORDER: \n");
+        print("LEFT WING, CENTER, RIGHT WING, LEFT DEFENSE,\n");
+        print("RIGHT DEFENSE, GOALKEEPER.  ANY OTHER INPUT REQUIRED WILL\n");
+        print("HAVE EXPLANATORY INSTRUCTIONS.\n");
+    }
+    print("ENTER THE TWO TEAMS");
+    str = await input();
+    c = str.indexOf(",");
+    as[7] = str.substr(0, c);
+    bs[7] = str.substr(c + 1);
+    print("\n");
+    do {
+        print("ENTER THE NUMBER OF MINUTES IN A GAME");
+        t6 = parseInt(await input());
+        print("\n");
+    } while (t6 < 1) ;
+    print("\n");
+    print("WOULD THE " + as[7] + " COACH ENTER HIS TEAM\n");
+    print("\n");
+    for (i = 1; i <= 6; i++) {
+        print("PLAYER " + i + " ");
+        as[i] = await input();
+    }
+    print("\n");
+    print("WOULD THE " + bs[7] + " COACH DO THE SAME\n");
+    print("\n");
+    for (t = 1; t <= 6; t++) {
+        print("PLAYER " + t + " ");
+        bs[t] = await input();
+    }
+    print("\n");
+    print("INPUT THE REFEREE FOR THIS GAME");
+    rs = await input();
+    print("\n");
+    print(tab(10) + as[7] + " STARTING LINEUP\n");
+    for (t = 1; t <= 6; t++) {
+        print(as[t] + "\n");
+    }
+    print("\n");
+    print(tab(10) + bs[7] + " STARTING LINEUP\n");
+    for (t = 1; t <= 6; t++) {
+        print(bs[t] + "\n");
+    }
+    print("\n");
+    print("WE'RE READY FOR TONIGHTS OPENING FACE-OFF.\n");
+    print(rs + " WILL DROP THE PUCK BETWEEN " + as[2] + " AND " + bs[2] + "\n");
+    s2 = 0;
+    s3 = 0;
+    for (l = 1; l <= t6; l++) {
+        c = Math.floor(2 * Math.random()) + 1;
+        if (c == 1)
+            print(as[7] + " HAS CONTROL OF THE PUCK\n");
+        else
+            print(bs[7] + " HAS CONTROL.\n");
+        do {
+            
+            print("PASS");
+            p = parseInt(await input());
+            for (n = 1; n <= 3; n++)
+                ha[n] = 0;
+        } while (p < 0 || p > 3) ;
+        do {
+            for (j = 1; j <= p + 2; j++)
+                ha[j] = Math.floor(5 * Math.random()) + 1;
+        } while (ha[j - 1] == ha[j - 2] || (p + 2 >= 3 && (ha[j - 1] == ha[j - 3] || ha[j - 2] == ha[j - 3]))) ;
+        if (p == 0) {
+            while (1) {
+                print("SHOT");
+                s = parseInt(await input());
+                if (s >= 1 && s <= 4)
+                    break;
+            }
+            if (c == 1) {
+                print(as[ha[j - 1]]);
+                g = ha[j - 1];
+                g1 = 0;
+                g2 = 0;
+            } else {
+                print(bs[ha[j - 1]]);
+                g2 = 0;
+                g2 = 0;
+                g = ha[j - 1];
+            }
+            switch (s) {
+                case 1:
+                    print(" LET'S A BOOMER GO FROM THE RED LINE!!\n");
+                    z = 10;
+                    break;
+                case 2:
+                    print(" FLIPS A WRISTSHOT DOWN THE ICE\n");
+                    // Probable missing line 430 in original
+                case 3:
+                    print(" BACKHANDS ONE IN ON THE GOALTENDER\n");
+                    z = 25;
+                    break;
+                case 4:
+                    print(" SNAPS A LONG FLIP SHOT\n");
+                    z = 17;
+                    break;
+            }
+        } else {
+            if (c == 1) {
+                switch (p) {
+                    case 1:
+                        print(as[ha[j - 2]] + " LEADS " + as[ha[j - 1]] + " WITH A PERFECT PASS.\n");
+                        print(as[ha[j - 1]] + " CUTTING IN!!!\n");
+                        g = ha[j - 1];
+                        g1 = ha[j - 2];
+                        g2 = 0;
+                        z1 = 3;
+                        break;
+                    case 2:
+                        print(as[ha[j - 2]] + " GIVES TO A STREAKING " + as[ha[j - 1]] + "\n");
+                        print(as[ha[j - 3]] + " COMES DOWN ON " + bs[5] + " AND " + bs[4] + "\n");
+                        g = ha[j - 3];
+                        g1 = ha[j - 1];
+                        g2 = ha[j - 2];
+                        z1 = 2;
+                        break;
+                    case 3:
+                        print("OH MY GOD!! A ' 4 ON 2 ' SITUATION\n");
+                        print(as[ha[j - 3]] + " LEADS " + as[ha[j - 2]] + "\n");
+                        print(as[ha[j - 2]] + " IS WHEELING THROUGH CENTER.\n");
+                        print(as[ha[j - 2]] + " GIVES AND GOEST WITH " + as[ha[j - 1]] + "\n");
+                        print("PRETTY PASSING!\n");
+                        print(as[ha[j - 1]] + " DROPS IT TO " + as[ha[j - 4]] + "\n");
+                        g = ha[j - 4];
+                        g1 = ha[j - 1];
+                        g2 = ha[j - 2];
+                        z1 = 1;
+                        break;
+                }
+            } else {
+                switch (p) {
+                    case 1:
+                        print(bs[ha[j - 1]] + " HITS " + bs[ha[j - 2]] + " FLYING DOWN THE LEFT SIDE\n");
+                        g = ha[j - 2];
+                        g1 = ha[j - 1];
+                        g2 = 0;
+                        z1 = 3;
+                        break;
+                    case 2:
+                        print("IT'S A ' 3 ON 2 '!\n");
+                        print("ONLY " + as[4] + " AND " + as[5] + " ARE BACK.\n");
+                        print(bs[ha[j - 2]] + " GIVES OFF TO " + bs[ha[j - 1]] + "\n");
+                        print(bs[ha[j - 1]] + " DROPS TO " + bs[ha[j - 3]] + "\n");
+                        g = ha[j - 3];
+                        g1 = ha[j - 1];
+                        g2 = ha[j - 2];
+                        z1 = 2;
+                        break;
+                    case 3:
+                        print(" A '3 ON 2 ' WITH A ' TRAILER '!\n");
+                        print(bs[ha[j - 4]] + " GIVES TO " + bs[ha[j - 2]] + " WHO SHUFFLES IT OFF TO\n");
+                        print(bs[ha[j - 1]] + " WHO FIRES A WING TO WING PASS TO \n");
+                        print(bs[ha[j - 3]] + " AS HE CUTS IN ALONE!!\n");
+                        g = ha[j - 3];
+                        g1 = ha[j - 1];
+                        g2 = ha[j - 2];
+                        z1 = 1;
+                        break;
+                }
+            }
+            do {
+                print("SHOT");
+                s = parseInt(await input());
+            } while (s < 1 || s > 4) ;
+            if (c == 1)
+                print(as[g]);
+            else
+                print(bs[g]);
+            switch (s) {
+                case 1:
+                    print(" LET'S A BIG SLAP SHOT GO!!\n");
+                    z = 4;
+                    z += z1;
+                    break;
+                case 2:
+                    print(" RIPS A WRIST SHOT OFF\n");
+                    z = 2;
+                    z += z1;
+                    break;
+                case 3:
+                    print(" GETS A BACKHAND OFF\n");
+                    z = 3;
+                    z += z1;
+                    break;
+                case 4:
+                    print(" SNAPS OFF A SNAP SHOT\n");
+                    z = 2;
+                    z += z1;
+                    break;
+            }
+        }
+        do {
+            print("AREA");
+            a = parseInt(await input());
+        } while (a < 1 || a > 4) ;
+        if (c == 1)
+            s2++;
+        else
+            s3++;
+        a1 = Math.floor(4 * Math.random()) + 1;
+        if (a == a1) {
+            while (1) {
+                ha[20] = Math.floor(100 * Math.random()) + 1;
+                if (ha[20] % z != 0)
+                    break;
+                a2 = Math.floor(100 * Math.random()) + 1;
+                if (a2 % 4 == 0) {
+                    if (c == 1)
+                        print("SAVE " + bs[6] + " --  REBOUND\n");
+                    else
+                        print("SAVE " + as[6] + " --  FOLLOW up\n");
+                    continue;
+                } else {
+                    a1 = a + 1;  // So a != a1
+                }
+            }
+            if (ha[20] % z != 0) {
+                if (c == 1) {
+                    print("GOAL " + as[7] + "\n");
+                    ha[9]++;
+                } else {
+                    print("SCORE " + bs[7] + "\n");
+                    ha[8]++;
+                }
+                // Bells in origninal
+                print("\n");
+                print("SCORE: ");
+                if (ha[8] <= ha[9]) {
+                    print(as[7] + ": " + ha[9] + "\t" + bs[7] + ": " + ha[8] + "\n");
+                } else {
+                    print(bs[7] + ": " + ha[8] + "\t" + as[7] + ": " + ha[9] + "\n");
+                }
+                if (c == 1) {
+                    print("GOAL SCORED BY: " + as[g] + "\n");
+                    if (g1 != 0) {
+                        if (g2 != 0) {
+                            print(" ASSISTED BY: " + as[g1] + " AND " + as[g2] + "\n");
+                        } else {
+                            print(" ASSISTED BY: " + as[g1] + "\n");
+                        }
+                    } else {
+                        print(" UNASSISTED.\n");
+                    }
+                    ta[g]++;
+                    t1[g1]++;
+                    t1[g2]++;
+                    // 1540
+                } else {
+                    print("GOAL SCORED BY: " + bs[g] + "\n");
+                    if (g1 != 0) {
+                        if (g2 != 0) {
+                            print(" ASSISTED BY: " + bs[g1] + " AND " + bs[g2] + "\n");
+                        } else {
+                            print(" ASSISTED BY: " + bs[g1] + "\n");
+                        }
+                    } else {
+                        print(" UNASSISTED.\n");
+                    }
+                    t2[g]++;
+                    t3[g1]++;
+                    t3[g2]++;
+                    // 1540
+                }
+            }
+        }
+        if (a != a1) {
+            s1 = Math.floor(6 * Math.random()) + 1;
+            if (c == 1) {
+                switch (s1) {
+                    case 1:
+                        print("KICK SAVE AND A BEAUTY BY " + bs[6] + "\n");
+                        print("CLEARED OUT BY " + bs[3] + "\n");
+                        l--;
+                        continue;
+                    case 2:
+                        print("WHAT A SPECTACULAR GLOVE SAVE BY " + bs[6] + "\n");
+                        print("AND " + bs[6] + " GOLFS IT INTO THE CROWD\n");
+                        break;
+                    case 3:
+                        print("SKATE SAVE ON A LOW STEAMER BY " + bs[6] + "\n");
+                        l--;
+                        continue;
+                    case 4:
+                        print("PAD SAVE BY " + bs[6] + " OFF THE STICK\n");
+                        print("OF " + as[g] + " AND " + bs[6] + " COVERS UP\n");
+                        break;
+                    case 5:
+                        print("WHISTLES ONE OVER THE HEAD OF " + bs[6] + "\n");
+                        l--;
+                        continue;
+                    case 6:
+                        print(bs[6] + " MAKES A FACE SAVE!! AND HE IS HURT\n");
+                        print("THE DEFENSEMAN " + bs[5] + " COVERS UP FOR HIM\n");
+                        break;
+                }
+            } else {
+                switch (s1) {
+                    case 1:
+                        print("STICK SAVE BY " + as[6] +"\n");
+                        print("AND CLEARED OUT BY " + as[4] + "\n");
+                        l--;
+                        continue;
+                    case 2:
+                        print("OH MY GOD!! " + bs[g] + " RATTLES ONE OFF THE POST\n");
+                        print("TO THE RIGHT OF " + as[6] + " AND " + as[6] + " COVERS ");
+                        print("ON THE LOOSE PUCK!\n");
+                        break;
+                    case 3:
+                        print("SKATE SAVE BY " + as[6] + "\n");
+                        print(as[6] + " WHACKS THE LOOSE PUCK INTO THE STANDS\n");
+                        break;
+                    case 4:
+                        print("STICK SAVE BY " + as[6] + " AND HE CLEARS IT OUT HIMSELF\n");
+                        l--;
+                        continue;
+                    case 5:
+                        print("KICKED OUT BY " + as[6] + "\n");
+                        print("AND IT REBOUNDS ALL THE WAY TO CENTER ICE\n");
+                        l--;
+                        continue;
+                    case 6:
+                        print("GLOVE SAVE " + as[6] + " AND HE HANGS ON\n");
+                        break;
+                }
+            }
+        }
+        print("AND WE'RE READY FOR THE FACE-OFF\n");
+    }
+    // Bells chime
+    print("THAT'S THE SIREN\n");
+    print("\n");
+    print(tab(15) + "FINAL SCORE:\n");
+    if (ha[8] <= ha[9]) {
+        print(as[7] + ": " + ha[9] + "\t" + bs[7] + ": " + ha[8] + "\n");
+    } else {
+        print(bs[7] + ": " + ha[8] + "\t" + as[7] + ": " + ha[9] + "\n");
+    }
+    print("\n");
+    print(tab(10) + "SCORING SUMMARY\n");
+    print("\n");
+    print(tab(25) + as[7] + "\n");
+    print("\tNAME\tGOALS\tASSISTS\n");
+    print("\t----\t-----\t-------\n");
+    for (i = 1; i <= 5; i++) {
+        print("\t" + as[i] + "\t" + ta[i] + "\t" + t1[i] + "\n");
+    }
+    print("\n");
+    print(tab(25) + bs[7] + "\n");
+    print("\tNAME\tGOALS\tASSISTS\n");
+    print("\t----\t-----\t-------\n");
+    for (t = 1; t <= 5; t++) {
+        print("\t" + bs[t] + "\t" + t2[t] + "\t" + t3[t] + "\n");
+    }
+    print("\n");
+    print("SHOTS ON NET\n");
+    print(as[7] + ": " + s2 + "\n");
+    print(bs[7] + ": " + s3 + "\n");
+}
+
+main();
diff --git a/50 Horserace/javascript/horserace.html b/50 Horserace/javascript/horserace.html
new file mode 100644
index 00000000..2809ec39
--- /dev/null
+++ b/50 Horserace/javascript/horserace.html	
@@ -0,0 +1,9 @@
+
+
+HORSERACE
+
+
+

+
+
+
diff --git a/50 Horserace/javascript/horserace.js b/50 Horserace/javascript/horserace.js
new file mode 100644
index 00000000..882e66e6
--- /dev/null
+++ b/50 Horserace/javascript/horserace.js	
@@ -0,0 +1,213 @@
+// HORSERACE
+//
+// 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;
+}
+
+var sa = [];
+var ws = [];
+var da = [];
+var qa = [];
+var pa = [];
+var ma = [];
+var ya = [];
+var vs = [];
+
+// Main program
+async function main()
+{
+    print(tab(31) + "HORSERACE\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    print("WELCOME TO SOUTH PORTLAND HIGH RACETRACK\n");
+    print("                      ...OWNED BY LAURIE CHEVALIER\n");
+    print("DO YOU WANT DIRECTIONS");
+    str = await input();
+    if (str == "YES") {
+        print("UP TO 10 MAY PLAY.  A TABLE OF ODDS WILL BE PRINTED.  YOU\n");
+        print("MAY BET ANY + AMOUNT UNDER 100000 ON ONE HORSE.\n");
+        print("DURING THE RACE, A HORSE WILL BE SHOWN BY ITS\n");
+        print("NUMBER.  THE HORSES RACE DOWN THE PAPER!\n");
+        print("\n");
+    }
+    print("HOW MANY WANT TO BET");
+    c = parseInt(await input());
+    print("WHEN ? APPEARS,TYPE NAME\n");
+    for (a = 1; a <= c; a++) {
+        ws[a] = await input();
+    }
+    do {
+        print("\n");
+        print("HORSE\t\tNUMBERS\tODDS\n");
+        print("\n");
+        for (i = 1; i <= 8; i++) {
+            sa[i] = 0;
+        }
+        r = 0;
+        for (a = 1; a <= 8; a++) {
+            da[a] = Math.floor(10 * Math.random() + 1);
+        }
+        for (a = 1; a <= 8; a++) {
+            r = r + da[a];
+        }
+        vs[1] = "JOE MAN";
+        vs[2] = "L.B.J.";
+        vs[3] = "MR.WASHBURN";
+        vs[4] = "MISS KAREN";
+        vs[5] = "JOLLY";
+        vs[6] = "HORSE";
+        vs[7] = "JELLY DO NOT";
+        vs[8] = "MIDNIGHT";
+        for (n = 1; n <= 8; n++) {
+            print(vs[n] + "\t\t" + n + "\t" + (r / da[n]) + ":1\n");
+        }
+        print("--------------------------------------------------\n");
+        print("PLACE YOUR BETS...HORSE # THEN AMOUNT\n");
+        for (j = 1; j <= c; j++) {
+            while (1) {
+                print(ws[j]);
+                str = await input();
+                qa[j] = parseInt(str);
+                pa[j] = parseInt(str.substr(str.indexOf(",") + 1));
+                if (pa[j] < 1 || pa[j] >= 100000) {
+                    print("  YOU CAN'T DO THAT!\N");
+                } else {
+                    break;
+                }
+            }
+        }
+        print("\n");
+        print("1 2 3 4 5 6 7 8\n");
+        t = 0;
+        do {
+            print("XXXXSTARTXXXX\n");
+            for (i = 1; i <= 8; i++) {
+                m = i;
+                ma[i] = m;
+                ya[ma[i]] = Math.floor(100 * Math.random() + 1);
+                if (ya[ma[i]] < 10) {
+                    ya[ma[i]] = 1;
+                    continue;
+                }
+                s = Math.floor(r / da[i] + 0.5);
+                if (ya[ma[i]] < s + 17) {
+                    ya[ma[i]] = 2;
+                    continue;
+                }
+                if (ya[ma[i]] < s + 37) {
+                    ya[ma[i]] = 3;
+                    continue;
+                }
+                if (ya[ma[i]] < s + 57) {
+                    ya[ma[i]] = 4;
+                    continue;
+                }
+                if (ya[ma[i]] < s + 77) {
+                    ya[ma[i]] = 5;
+                    continue;
+                }
+                if (ya[ma[i]] < s + 92) {
+                    ya[ma[i]] = 6;
+                    continue;
+                }
+                ya[ma[i]] = 7;
+            }
+            m = i;
+            for (i = 1; i <= 8; i++) {
+                sa[ma[i]] = sa[ma[i]] + ya[ma[i]];
+            }
+            i = 1;
+            for (l = 1; l <= 8; l++) {
+                for (i = 1; i <= 8 - l; i++) {
+                    if (sa[ma[i]] < sa[ma[i + 1]])
+                        continue;
+                    h = ma[i];
+                    ma[i] = ma[i + 1];
+                    ma[i + 1] = h;
+                }
+            }
+            t = sa[ma[8]];
+            for (i = 1; i <= 8; i++) {
+                b = sa[ma[i]] - sa[ma[i - 1]];
+                if (b != 0) {
+                    for (a = 1; a <= b; a++) {
+                        print("\n");
+                        if (sa[ma[i]] > 27)
+                            break;
+                    }
+                    if (a <= b)
+                        break;
+                }
+                print(" " + ma[i] + " ");
+            }
+            for (a = 1; a < 28 - t; a++) {
+                print("\n");
+            }
+            print("XXXXFINISHXXXX\n");
+            print("\n");
+            print("\n");
+            print("---------------------------------------------\n");
+            print("\n");
+        } while (t < 28) ;
+        print("THE RACE RESULTS ARE:\n");
+        z9 = 1;
+        for (i = 8; i >= 1; i--) {
+            f = ma[i];
+            print("\n");
+            print("" + z9 + " PLACE HORSE NO. " + f + " AT " + (r / da[f]) + ":1\n");
+            z9++;
+        }
+        for (j = 1; j <= c; j++) {
+            if (qa[j] != ma[8])
+                continue;
+            n = qa[j];
+            print("\n");
+            print(ws[j] + " WINS $" + (r / da[n]) * pa[j] + "\n");
+        }
+        print("DO YOU WANT TO BET ON THE NEXT RACE ?\n");
+        print("YES OR NO");
+        str = await input();
+    } while (str == "YES") ;
+}
+
+main();
diff --git a/77 Salvo/javascript/salvo.html b/77 Salvo/javascript/salvo.html
new file mode 100644
index 00000000..25752f0f
--- /dev/null
+++ b/77 Salvo/javascript/salvo.html	
@@ -0,0 +1,9 @@
+
+
+SALVO
+
+
+

+
+
+
diff --git a/77 Salvo/javascript/salvo.js b/77 Salvo/javascript/salvo.js
new file mode 100644
index 00000000..b75f5088
--- /dev/null
+++ b/77 Salvo/javascript/salvo.js	
@@ -0,0 +1,504 @@
+// SALVO
+//
+// 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;
+}
+
+var aa = [];
+var ba = [];
+var ca = [];
+var da = [];
+var ea = [];
+var fa = [];
+var ga = [];
+var ha = [];
+var ka = [];
+var w;
+var r3;
+var x;
+var y;
+var v;
+var v2;
+
+function sgn(k)
+{
+    if (k < 0)
+        return -1;
+    if (k > 0)
+        return 1;
+    return 0;
+}
+
+function fna(k)
+{
+    return (5 - k) * 3 - 2 * Math.floor(k / 4) + sgn(k - 1) - 1;
+}
+
+function fnb(k)
+{
+    return k + Math.floor(k / 4) - sgn(k - 1);
+}
+
+function generate_random()
+{
+    x = Math.floor(Math.random() * 10 + 1);
+    y = Math.floor(Math.random() * 10 + 1);
+    v = Math.floor(3 * Math.random() - 1);
+    v2 = Math.floor(3 * Math.random() - 1);
+}
+
+// Main program
+async function main()
+{
+    print(tab(33) + "SALVO\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    z8 = 0;
+    for (w = 1; w <= 12; w++) {
+        ea[w] = -1;
+        ha[w] = -1;
+    }
+    for (x = 1; x <= 10; x++) {
+        ba[x] = [];
+        ka[x] = [];
+        for (y = 1; y <= 10; y++) {
+            ba[x][y] = 0;
+            ka[x][y] = 0;
+        }
+    }
+    for (x = 1; x <= 12; x++) {
+        fa[x] = 0;
+        ga[x] = 0;
+    }
+    for (x = 1; x <= 10; x++) {
+        aa[x] = [];
+        for (y = 1; y <= 10; y++) {
+            aa[x][y] = 0;
+        }
+    }
+    u6 = 0;
+    for (k = 4; k >= 1; k--) {
+        do {
+            generate_random();
+        } while (v + v2 + v * v2 == 0 || y + v * fnb(k) > 10 || y + v * fnb(k) < 1 || x + v2 * fnb(k) > 10 || x + v2 * fnb(k) < 1) ;
+        u6++;
+        if (u6 > 25) {
+            for (x = 1; x <= 10; x++) {
+                aa[x] = [];
+                for (y = 1; y <= 10; y++) {
+                    aa[x][y] = 0;
+                }
+            }
+            u6 = 0;
+            k = 5;
+            continue;
+        }
+        for (z = 0; z <= fnb(k); z++) {
+            fa[z + fna(k)] = x + v2 * z;
+            ga[z + fna(k)] = y + v * z;
+        }
+        u8 = fna(k);
+        if (u8 <= u8 + fnb(k)) {
+            retry = false;
+            for (z2 = u8; z2 <= u8 + fnb(k); z2++) {
+                if (u8 >= 2) {
+                    for (z3 = 1; z3 < u8 - 1; z3++) {
+                        if (Math.sqrt(Math.pow((fa[z3] - fa[z2]), 2)) + Math.pow((ga[z3] - ga[z2]), 2) < 3.59) {
+                            retry = true;
+                            break;
+                        }
+                    }
+                    if (retry)
+                        break;
+                }
+            }
+            if (retry) {
+                k++;
+                continue;
+            }
+        }
+        for (z = 0; z <= fnb(k); z++) {
+            if (k - 1 < 0)
+                sk = -1;
+            else if (k - 1 > 0)
+                sk = 1;
+            else
+                sk = 0;
+            aa[fa[z + u8]][ga[z + u8]] = 0.5 + sk * (k - 1.5);
+        }
+        u6 = 0;
+    }
+    print("ENTER COORDINATES FOR...\n");
+    print("BATTLESHIP\n");
+    for (x = 1; x <= 5; x++) {
+        str = await input();
+        y = parseInt(str);
+        z = parseInt(str.substr(str.indexOf(",") + 1));
+        ba[y][z] = 3;
+    }
+    print("CRUISER\n");
+    for (x = 1; x <= 3; x++) {
+        str = await input();
+        y = parseInt(str);
+        z = parseInt(str.substr(str.indexOf(",") + 1));
+        ba[y][z] = 2;
+    }
+    print("DESTROYER\n");
+    for (x = 1; x <= 2; x++) {
+        str = await input();
+        y = parseInt(str);
+        z = parseInt(str.substr(str.indexOf(",") + 1));
+        ba[y][z] = 1;
+    }
+    print("DESTROYER\n");
+    for (x = 1; x <= 2; x++) {
+        str = await input();
+        y = parseInt(str);
+        z = parseInt(str.substr(str.indexOf(",") + 1));
+        ba[y][z] = 0.5;
+    }
+    while (1) {
+        print("DO YOU WANT TO START");
+        js = await input();
+        if (js == "WHERE ARE YOUR SHIPS?") {
+            print("BATTLESHIP\n");
+            for (z = 1; z <= 5; z++)
+                print(" " + fa[z] + " " + ga[z] + "\n");
+            print("CRUISER\n");
+            print(" " + fa[6] + " " + ga[6] + "\n");
+            print(" " + fa[7] + " " + ga[7] + "\n");
+            print(" " + fa[8] + " " + ga[8] + "\n");
+            print("DESTROYER\n");
+            print(" " + fa[9] + " " + ga[9] + "\n");
+            print(" " + fa[10] + " " + ga[10] + "\n");
+            print("DESTROYER\n");
+            print(" " + fa[11] + " " + ga[11] + "\n");
+            print(" " + fa[12] + " " + ga[12] + "\n");
+        } else {
+            break;
+        }
+    }
+    c = 0;
+    print("DO YOU WANT TO SEE MY SHOTS");
+    ks = await input();
+    print("\n");
+    if (js != "YES")
+        first_time = true;
+    else
+        first_time = false;
+    while (1) {
+        if (first_time) {
+            first_time = false;
+        } else {
+            if (js == "YES") {
+                c++;
+                print("\n");
+                print("TURN " + c + "\n");
+            }
+            a = 0;
+            for (w = 0.5; w <= 3; w += 0.5) {
+            loop1:
+                for (x = 1; x <= 10; x++) {
+                    for (y = 1; y <= 10; y++) {
+                        if (ba[x][y] == w) {
+                            a += Math.floor(w + 0.5);
+                            break loop1;
+                        }
+                    }
+                }
+            }
+            for (w = 1; w <= 7; w++) {
+                ca[w] = 0;
+                da[w] = 0;
+                fa[w] = 0;
+                ga[w] = 0;
+            }
+            p3 = 0;
+            for (x = 1; x <= 10; x++) {
+                for (y = 1; y <= 10; y++) {
+                    if (aa[x][y] <= 10)
+                        p3++;
+                }
+            }
+            print("YOU HAVE " + a + " SHOTS.\n");
+            if (p3 < a) {
+                print("YOU HAVE MORE SHOTS THAN THERE ARE BLANK SQUARES.\n");
+                print("YOU HAVE WON.\n");
+                return;
+            }
+            if (a == 0) {
+                print("I HAVE WON.\n");
+                return;
+            }
+            for (w = 1; w <= a; w++) {
+                while (1) {
+                    str = await input();
+                    x = parseInt(str);
+                    y = parseInt(str.substr(str.indexOf(",") + 1));
+                    if (x >= 1 && x <= 10 && y >= 1 && y <= 10) {
+                        if (aa[x][y] > 10) {
+                            print("YOU SHOT THERE BEFORE ON TURN " + (aa[x][y] - 10) + "\n");
+                            continue;
+                        }
+                        break;
+                    }
+                    print("ILLEGAL, ENTER AGAIN.\n");
+                }
+                ca[w] = x;
+                da[w] = y;
+            }
+            for (w = 1; w <= a; w++) {
+                if (aa[ca[w]][da[w]] == 3) {
+                    print("YOU HIT MY BATTLESHIP.\n");
+                } else if (aa[ca[w]][da[w]] == 2) {
+                    print("YOU HIT MY CRUISER.\n");
+                } else if (aa[ca[w]][da[w]] == 1) {
+                    print("YOU HIT MY DESTROYER.\n");
+                } else if (aa[ca[w]][da[w]] == 0.5) {
+                    print("YOU HIT MY DESTROYER.\n");
+                }
+                aa[ca[w]][da[w]] = 10 + c;
+            }
+        }
+        a = 0;
+        if (js != "YES") {
+            c++;
+            print("\n");
+            print("TURN " + c + "\n");
+        }
+        a = 0;
+        for (w = 0.5; w <= 3; w += 0.5) {
+        loop2:
+            for (x = 1; x <= 10; x++) {
+                for (y = 1; y <= 10; y++) {
+                    if (ba[x][y] == w) {
+                        a += Math.floor(w + 0.5);
+                        break loop2;
+                    }
+                }
+            }
+        }
+        p3 = 0;
+        for (x = 1; x <= 10; x++) {
+            for (y = 1; y <= 10; y++) {
+                if (aa[x][y] <= 10)
+                    p3++;
+            }
+        }
+        print("I HAVE " + a + " SHOTS.\n");
+        if (p3 < a) {
+            print("I HAVE MORE SHOTS THAN BLANK SQUARES.\n");
+            print("I HAVE WON.\n");
+            return;
+        }
+        if (a == 0) {
+            print("YOU HAVE WON.\n");
+            return;
+        }
+        for (w = 1; w <= 12; w++) {
+            if (ha[w] > 0)
+                break;
+        }
+        if (w <= 12) {
+            for (r = 1; r <= 10; r++) {
+                ka[r] = [];
+                for (s = 1; s <= 10; s++)
+                    ka[r][s] = 0;
+            }
+            for (u = 1; u <= 12; u++) {
+                if (ea[u] >= 10)
+                    continue;
+                for (r = 1; r <= 10; r++) {
+                    for (s = 1; s <= 10; s++) {
+                        if (ba[r][s] >= 10) {
+                            ka[r][s] = -10000000;
+                        } else {
+                            for (m = sgn(1 - r); m <= sgn(10 - r); m++) {
+                                for (n = sgn(1 - s); n <= sgn(10 - s); n++) {
+                                    if (n + m + n * m != 0 && ba[r + m][s + n] == ea[u])
+                                        ka[r][s] += ea[u] - s * Math.floor(ha[u] + 0.5);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            for (r = 1; r <= a; r++) {
+                fa[r] = r;
+                ga[r] = r;
+            }
+            for (r = 1; r <= 10; r++) {
+                for (s = 1; s <= 10; s++) {
+                    q9 = 1;
+                    for (m = 1; m <= a; m++) {
+                        if (ka[fa[m]][ga[m]] < ka[fa[q9]][ga[q9]])
+                            q9 = m;
+                    }
+                    if ((r > a || r != s) && ka[r][s] >= ka[fa[q9]][ga[q9]]) {
+                        for (m = 1; m <= a; m++) {
+                            if (fa[m] != r) {
+                                fa[q9] = r;
+                                ga[q9] = s;
+                                break;
+                            }
+                            if (ga[m] == s)
+                                break;
+                        }
+                    }
+                }
+            }
+        } else {
+            // RANDOM
+            w = 0;
+            r3 = 0;
+            generate_random();
+            r2 = 0;
+            while (1) {
+                r3++;
+                if (r3 > 100) {
+                    generate_random();
+                    r2 = 0;
+                    r3 = 1;
+                }
+                if (x > 10) {
+                    x = 10 - Math.floor(Math.random() * 2.5);
+                } else if (x <= 0) {
+                    x = 1 + Math.floor(Math.random() * 2.5);
+                }
+                if (y > 10) {
+                    y = 10 - Math.floor(Math.random() * 2.5);
+                } else if (y <= 0) {
+                    y = 1 + Math.floor(Math.random() * 2.5);
+                }
+                while (1) {
+                    valid = true;
+                    if (x < 1 || x > 10 || y < 1 || y > 10 || ba[x][y] > 10) {
+                        valid = false;
+                    } else {
+                        for (q9 = 1; q9 <= w; q9++) {
+                            if (fa[q9] == x && ga[q9] == y) {
+                                valid = false;
+                                break;
+                            }
+                        }
+                        if (q9 > w)
+                            w++;
+                    }
+                    if (valid) {
+                        fa[w] = x;
+                        ga[w] = y;
+                        if (w == a) {
+                            finish = true;
+                            break;
+                        }
+                    }
+                    if (r2 == 6) {
+                        r2 = 0;
+                        finish = false;
+                        break;
+                    }
+                    x1 = [1,-1, 1,1,0,-1][r2];
+                    y1 = [1, 1,-3,1,2, 1][r2];
+                    r2++;
+                    x += x1;
+                    y += y1;
+                }
+                if (finish)
+                    break;
+            }
+        }
+        if (ks == "YES") {
+            for (z5 = 1; z5 <= a; z5++)
+                print(" " + fa[z5] + " " + ga[z5] + "\n");
+        }
+        for (w = 1; w <= a; w++) {
+            hit = false;
+            if (ba[fa[w]][ga[w]] == 3) {
+                print("I HIT YOUR BATTLESHIP.\n");
+                hit = true;
+            } else if (ba[fa[w]][ga[w]] == 2) {
+                print("I HIT YOUR CRUISER.\n");
+                hit = true;
+            } else if (ba[fa[w]][ga[w]] == 1) {
+                print("I HIT YOUR DESTROYER.\n");
+                hit = true;
+            } else if (ba[fa[w]][ga[w]] == 0.5) {
+                print("I HIT YOUR DESTROYER.\n");
+                hit = true;
+            }
+            if (hit) {
+                for (q = 1; q <= 12; q++) {
+                    if (ea[q] != -1)
+                        continue;
+                    ea[q] = 10 + c;
+                    ha[q] = ba[fa[w]][ga[w]];
+                    m3 = 0;
+                    for (m2 = 1; m2 <= 12; m2++) {
+                        if (ha[m2] == ha[q])
+                            m3++;
+                    }
+                    if (m3 == Math.floor(ha[q] + 0.5) + 1 + Math.floor(Math.floor(ha[q] + 0.5) / 3)) {
+                        for (m2 = 1; m2 <= 12; m2++) {
+                            if (ha[m2] == ha[q]) {
+                                ea[m2] = -1;
+                                ha[m2] = -1;
+                            }
+                        }
+                    }
+                    break;
+                }
+                if (q > 12) {
+                    print("PROGRAM ABORT:\n");
+                    for (q = 1; q <= 12; q++) {
+                        print("ea[" + q + "] = " + ea[q] + "\n");
+                        print("ha[" + q + "] = " + ha[q] + "\n");
+                    }
+                    return;
+                }
+            }
+            ba[fa[w]][ga[w]] = 10 + c;
+        }
+    }
+}
+
+main();