diff --git a/79 Slalom/javascript/slalom.html b/79 Slalom/javascript/slalom.html
new file mode 100644
index 00000000..d91f71ad
--- /dev/null
+++ b/79 Slalom/javascript/slalom.html
@@ -0,0 +1,9 @@
+
+
+SLALOM
+
+
+
+
+
+
diff --git a/79 Slalom/javascript/slalom.js b/79 Slalom/javascript/slalom.js
new file mode 100644
index 00000000..7944e62e
--- /dev/null
+++ b/79 Slalom/javascript/slalom.js
@@ -0,0 +1,260 @@
+// SLALOM
+//
+// 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 speed = [,14,18,26,29,18,
+ 25,28,32,29,20,
+ 29,29,25,21,26,
+ 29,20,21,20,18,
+ 26,25,33,31,22];
+
+function show_instructions()
+{
+ print("\n");
+ print("*** SLALOM: THIS IS THE 1976 WINTER OLYMPIC GIANT SLALOM. YOU ARE\n");
+ print(" THE AMERICAN TEAM'S ONLY HOPE OF A GOLD MEDAL.\n");
+ print("\n");
+ print(" 0 -- TYPE THIS IS YOU WANT TO SEE HOW LONG YOU'VE TAKEN.\n");
+ print(" 1 -- TYPE THIS IF YOU WANT TO SPEED UP A LOT.\n");
+ print(" 2 -- TYPE THIS IF YOU WANT TO SPEED UP A LITTLE.\n");
+ print(" 3 -- TYPE THIS IF YOU WANT TO SPEED UP A TEENSY.\n");
+ print(" 4 -- TYPE THIS IF YOU WANT TO KEEP GOING THE SAME SPEED.\n");
+ print(" 5 -- TYPE THIS IF YOU WANT TO CHECK A TEENSY.\n");
+ print(" 6 -- TYPE THIS IF YOU WANT TO CHECK A LITTLE.\n");
+ print(" 7 -- TYPE THIS IF YOU WANT TO CHECK A LOT.\n");
+ print(" 8 -- TYPE THIS IF YOU WANT TO CHEAT AND TRY TO SKIP A GATE.\n");
+ print("\n");
+ print(" THE PLACE TO USE THESE OPTIONS IS WHEN THE COMPUTER ASKS:\n");
+ print("\n");
+ print("OPTION?\n");
+ print("\n");
+ print(" GOOD LUCK!\n");
+ print("\n");
+}
+
+function show_speeds()
+{
+ print("GATE MAX\n");
+ print(" # M.P.H.\n");
+ print("----------\n");
+ for (var b = 1; b <= v; b++) {
+ print(" " + b + " " + speed[b] + "\n");
+ }
+}
+
+// Main program
+async function main()
+{
+ var gold = 0;
+ var silver = 0;
+ var bronze = 0;
+
+ print(tab(33) + "SLALOM\n");
+ print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
+ print("\n");
+ print("\n");
+ print("\n");
+ while (1) {
+ print("HOW MANY GATES DOES THIS COURSE HAVE (1 TO 25)");
+ v = parseInt(await input());
+ if (v >= 25) {
+ print("25 IS THE LIMIT\n");
+ v = 25;
+ } else if (v < 1) {
+ print("TRY AGAIN.\n");
+ } else {
+ break;
+ }
+ }
+ print("\n");
+ print("TYPE \"INS\" FOR INSTRUCTIONS\n");
+ print("TYPE \"MAX\" FOR APPROXIMATE MAXIMUM SPEEDS\n");
+ print("TYPE \"RUN\" FOR THE BEGINNING OF THE RACE\n");
+ while (1) {
+ print("COMMAND--");
+ str = await input();
+ if (str == "INS") {
+ show_instructions();
+ } else if (str == "MAX") {
+ show_speeds();
+ } else if (str == "RUN") {
+ break;
+ } else {
+ print("\"" + str + "\" IS AN ILLEGAL COMMAND--RETRY");
+ }
+ }
+ while (1) {
+ print("RATE YOURSELF AS A SKIER, (1=WORST, 3=BEST)");
+ a = parseInt(await input());
+ if (a < 1 || a > 3)
+ print("THE BOUNDS ARE 1-3\n");
+ else
+ break;
+ }
+ while (1) {
+ print("THE STARTER COUNTS DOWN...5...4...3...2...1...GO!");
+ t = 0;
+ s = Math.floor(Math.random(1) * (18 - 9) + 9);
+ print("\n");
+ print("YOU'RE OFF!\n");
+ for (o = 1; o <= v; o++) {
+ q = speed[o];
+ print("\n");
+ print("HERE COMES GATE #" + o + " :\n");
+ print(s + " M.P.H.\n");
+ s1 = s;
+ while (1) {
+ print("OPTION");
+ o1 = parseInt(await input());
+ if (o1 < 0 || o1 > 8)
+ print("WHAT?\n");
+ else if (o1 == 0)
+ print("YOU'VE TAKEN " + (t + Math.random()) + " SECONDS.\n");
+ else
+ break;
+ }
+ finish = false;
+ switch (o1) {
+ case 1:
+ s += Math.floor(Math.random() * (10 - 5) + 5);
+ break;
+ case 2:
+ s += Math.floor(Math.random() * (5 - 3) + 3);
+ break;
+ case 3:
+ s += Math.floor(Math.random() * (4 - 1) + 1);
+ break;
+ case 4:
+ break;
+ case 5:
+ s -= Math.floor(Math.random() * (4 - 1) + 1);
+ break;
+ case 6:
+ s -= Math.floor(Math.random() * (5 - 3) + 3);
+ break;
+ case 7:
+ s -= Math.floor(Math.random() * (10 - 5) + 5);
+ break;
+ case 8:
+ print("***CHEAT\n");
+ if (Math.random() >= 0.7) {
+ print("YOU MADE IT!\n");
+ t += 1.5;
+ } else {
+ print("AN OFFICIAL CAUGHT YOU!\n");
+ print("YOU TOOK " + (t + Math.random()) + " SECONDS.\n");
+ finish = true;
+ }
+ break;
+ }
+ if (!finish) {
+ if (o1 != 4)
+ print(s + " M.P.H.\n");
+ if (s > q) {
+ if (Math.random() < ((s - q) * 0.1) + 0.2) {
+ print("YOU WENT OVER THE MAXIMUM SPEED AND ");
+ if (Math.random() < 0.5) {
+ print("SNAGGED A FLAG!\n");
+ } else {
+ print("WIPED OUT!\n");
+ }
+ print("YOU TOOK " + (t + Math.random()) + " SECONDS.\n");
+ finish = true;
+ } else {
+ print("YOU WENT OVER THE MAXIMUM SPEED AND MADE IT!\n");
+ }
+ } else if (s > q - 1) {
+ print("CLOSE ONE!\n");
+ }
+ }
+ if (finish)
+ break;
+ if (s < 7) {
+ print("LET'S BE REALISTIC, OK? LET'S GO BACK AND TRY AGAIN...\n");
+ s = s1;
+ o--;
+ continue;
+ }
+ t += q - s + 1;
+ if (s > q) {
+ t += 0.5;
+ }
+ }
+ if (!finish) {
+ print("\n");
+ print("YOU TOOK " + (t + Math.random()) + " SECONDS.\n");
+ m = t;
+ m /= v;
+ if (m < 1.5 - (a * 0.1)) {
+ print("YOU WON A GOLD MEDAL!\n");
+ gold++;
+ } else if (m < 2.9 - (a * 0.1)) {
+ print("YOU WON A SILVER MEDAL\n");
+ silver++;
+ } else if (m < 4.4 - (a * 0.1)) {
+ print("YOU WON A BRONZE MEDAL\n");
+ bronze++;
+ }
+ }
+ while (1) {
+ print("\n");
+ print("DO YOU WANT TO RACE AGAIN");
+ str = await input();
+ if (str != "YES" && str != "NO")
+ print("PLEASE TYPE 'YES' OR 'NO'\n");
+ else
+ break;
+ }
+ if (str != "YES")
+ break;
+ }
+ print("THANKS FOR THE RACE\n");
+ if (gold >= 1)
+ print("GOLD MEDALS: " + gold + "\n");
+ if (silver >= 1)
+ print("SILVER MEDALS: " + silver + "\n");
+ if (bronze >= 1)
+ print("BRONZE MEDALS: " + bronze + "\n");
+}
+
+main();