Removed spaces from top-level directory names.

Spaces tend to cause annoyances in a Unix-style shell environment.
This change fixes that.
This commit is contained in:
Chris Reuter
2021-11-21 18:30:21 -05:00
parent df2e7426eb
commit d26dbf036a
1725 changed files with 0 additions and 0 deletions

270
65_Nim/javascript/nim.js Normal file
View File

@@ -0,0 +1,270 @@
// NIM
//
// 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 a = [];
var b = [];
var d = [];
// Main program
async function main()
{
print(tab(33) + "NIM\n");
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
print("\n");
print("\n");
print("\n");
for (i = 1; i <= 100; i++) {
a[i] = 0;
b[i] = [];
for (j = 0; j <= 10; j++)
b[i][j] = 0;
}
d[0] = 0;
d[1] = 0;
d[2] = 0;
print("DO YOU WANT INSTRUCTIONS");
while (1) {
str = await input();
str = str.toUpperCase();
if (str == "YES" || str == "NO")
break;
print("PLEASE ANSWER YES OR NO\n");
}
if (str == "YES") {
print("THE GAME IS PLAYED WITH A NUMBER OF PILES OF OBJECTS.\n");
print("ANY NUMBER OF OBJECTS ARE REMOVED FROM ONE PILE BY YOU AND\n");
print("THE MACHINE ALTERNATELY. ON YOUR TURN, YOU MAY TAKE\n");
print("ALL THE OBJECTS THAT REMAIN IN ANY PILE, BUT YOU MUST\n");
print("TAKE AT LEAST ONE OBJECT, AND YOU MAY TAKE OBJECTS FROM\n");
print("ONLY ONE PILE ON A SINGLE TURN. YOU MUST SPECIFY WHETHER\n");
print("WINNING IS DEFINED AS TAKING OR NOT TAKING THE LAST OBJECT,\n");
print("THE NUMBER OF PILES IN THE GAME, AND HOW MANY OBJECTS ARE\n");
print("ORIGINALLY IN EACH PILE. EACH PILE MAY CONTAIN A\n");
print("DIFFERENT NUMBER OF OBJECTS.\n");
print("THE MACHINE WILL SHOW ITS MOVE BY LISTING EACH PILE AND THE\n");
print("NUMBER OF OBJECTS REMAINING IN THE PILES AFTER EACH OF ITS\n");
print("MOVES.\n");
}
while (1) {
print("\n");
while (1) {
print("ENTER WIN OPTION - 1 TO TAKE LAST, 2 TO AVOID LAST");
w = parseInt(await input());
if (w == 1 || w == 2)
break;
}
while (1) {
print("ENTER NUMBER OF PILES");
n = parseInt(await input());
if (n >= 1 && n <= 100)
break;
}
print("ENTER PILE SIZES\n");
for (i = 1; i <= n; i++) {
while (1) {
print(i + " ");
a[i] = parseInt(await input());
if (a[i] >= 1 && a[i] <= 2000)
break;
}
}
print("DO YOU WANT TO MOVE FIRST");
while (1) {
str = await input();
str = str.toUpperCase();
if (str == "YES" || str == "NO")
break;
print("PLEASE ANSWER YES OR NO.\n");
}
if (str == "YES")
player_first = true;
else
player_first = false;
while (1) {
if (!player_first) {
if (w != 1) {
c = 0;
for (i = 1; i <= n; i++) {
if (a[i] == 0)
continue;
c++;
if (c == 3)
break;
d[c] = i;
}
if (i > n) {
if (c == 2) {
if (a[d[1]] == 1 || a[d[2]] == 1) {
print("MACHINE WINS\n");
break;
}
} else {
if (a[d[1]] > 1)
print("MACHINE WINS\n");
else
print("MACHINE LOSES\n");
break;
}
} else {
c = 0;
for (i = 1; i <= n; i++) {
if (a[i] > 1)
break;
if (a[i] == 0)
continue;
c++;
}
if (i > n && c % 2) {
print("MACHINE LOSES\n");
break;
}
}
}
for (i = 1; i <= n; i++) {
e = a[i];
for (j = 0; j <= 10; j++) {
f = e / 2;
b[i][j] = 2 * (f - Math.floor(f));
e = Math.floor(f);
}
}
for (j = 10; j >= 0; j--) {
c = 0;
h = 0;
for (i = 1; i <= n; i++) {
if (b[i][j] == 0)
continue;
c++;
if (a[i] <= h)
continue;
h = a[i];
g = i;
}
if (c % 2)
break;
}
if (j < 0) {
do {
e = Math.floor(n * Math.random() + 1);
} while (a[e] == 0) ;
f = Math.floor(a[e] * Math.random() + 1);
a[e] -= f;
} else {
a[g] = 0;
for (j = 0; j <= 10; j++) {
b[g][j] = 0;
c = 0;
for (i = 1; i <= n; i++) {
if (b[i][j] == 0)
continue;
c++;
}
a[g] = a[g] + (c % 2) * Math.pow(2, j);
}
if (w != 1) {
c = 0;
for (i = 1; i <= n; i++) {
if (a[i] > 1)
break;
if (a[i] == 0)
continue;
c++;
}
if (i > n && c % 2 == 0)
a[g] = 1 - a[g];
}
}
print("PILE SIZE\n");
for (i = 1; i <= n; i++)
print(" " + i + " " + a[i] + "\n");
if (w != 2) {
if (game_completed()) {
print("MACHINE WINS");
break;
}
}
} else {
player_first = false;
}
while (1) {
print("YOUR MOVE - PILE , NUMBER TO BE REMOVED");
str = await input();
x = parseInt(str);
y = parseInt(str.substr(str.indexOf(",") + 1));
if (x < 1 || x > n)
continue;
if (y < 1 || y > a[x])
continue;
break;
}
a[x] -= y;
if (game_completed()) {
print("MACHINE LOSES");
break;
}
}
print("DO YOU WANT TO PLAY ANOTHER GAME");
while (1) {
str = await input();
str = str.toUpperCase();
if (str == "YES" || str == "NO")
break;
print("PLEASE ANSWER YES OR NO.\n");
}
if (str == "NO")
break;
}
}
function game_completed()
{
for (var i = 1; i <= n; i++) {
if (a[i] != 0)
return false;
}
return true;
}
main();