d2jsp
Log InRegister
d2jsp Forums > Off-Topic > Computers & IT > Programming & Development > 500fg - Solve This Problem With Javascript.
Add Reply New Topic New Poll
Member
Posts: 14,925
Joined: Jan 3 2008
Gold: 135,879.75
Aug 14 2019 07:49am
Generate Tic-Tac-Toe Answers:

For Grid Size = 3,
And Answer Length = 3,

1 2 3
4 5 6
7 8 9

There are 8 winning solutions:

[1,2,3],
[4,5,6],
[7,8,9],
[1,4,7],
[2,5,8],
[3,6,9],
[1,5,9],
[3,5,7]


Make a function winningSquares(n,m) that takes

n = grid-size,
m = answer-length,

and outputs an array of the winning solutions.
Member
Posts: 3,028
Joined: Mar 23 2016
Gold: 7,568.50
Aug 15 2019 04:51am
I wrote it in python first (more readable imo):

Code
def gridMaker(n):
k = 1
table = []
for i in range(n):
newTable = []
for j in range(n):
print(str(k) + " ", end="")
newTable.append(k)
k = k + 1
print()
table.append(newTable)
return table

def winningSquares(n,m):
table = gridMaker(n)
if m == 0:
return []
if m == 1:
return [i for i in range(1,n*n + 1)]
solutions = []
for i in range(len(table)):
for j in range(len(table[i])):
if n - i >= m:
newSol = []
for k in range(m):
newSol.append(table[i+k][j])
solutions.append(newSol)
if n - j >= m:
newSol = []
for k in range(m):
newSol.append(table[i][j+k])
solutions.append(newSol)
if n - i >= m and n - j >= m:
newSol = []
for k in range(m):
newSol.append(table[i+k][j+k])
solutions.append(newSol)
if n - i >= m and j >= m-1:
newSol = []
for k in range(m):
newSol.append(table[i+k][j-k])
solutions.append(newSol)
return(solutions)



Code

print(winningSquares(3,3))

1 2 3
4 5 6
7 8 9
[[1, 4, 7], [1, 2, 3], [1, 5, 9], [2, 5, 8], [3, 6, 9], [3, 5, 7], [4, 5, 6], [7, 8, 9]]


print(winningSquares(5,4))

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
[[1, 6, 11, 16], [1, 2, 3, 4], [1, 7, 13, 19], [2, 7, 12, 17], [2, 3, 4, 5], [2, 8, 14, 20], [3, 8, 13, 18], [4, 9, 14, 19], [4, 8, 12, 16], [5, 10, 15, 20], [5, 9, 13, 17], [6, 11, 16, 21], [6, 7, 8, 9], [6, 12, 18, 24], [7, 12, 17, 22], [7, 8, 9, 10], [7, 13, 19, 25], [8, 13, 18, 23], [9, 14, 19, 24], [9, 13, 17, 21], [10, 15, 20, 25], [10, 14, 18, 22], [11, 12, 13, 14], [12, 13, 14, 15], [16, 17, 18, 19], [17, 18, 19, 20], [21, 22, 23, 24], [22, 23, 24, 25]]



Here it is in javascript (likely non-idiomatic but hey):

Code
function gridMaker(n){
var table = []
var k = 1
for (var i = 0; i < n; i++){
var newTable = []
for (var j = 0; j < n; j++){
newTable.push(k);
k++;
}
table.push(newTable);
}
return table;
}

function winningSquares(n, m){
var table = gridMaker(n);
var solutions = [];
if (m <= 0){
return solutions;
}
if (m == 1){
for (var i = 1; i < n*n + 1; i++){
solutions.push(i);
}
return solutions;
}
for (var i = 0; i < n; i++){
for (var j = 0; j < n; j++){
if (n - i >= m){
var newSol = [];
for (var k = 0; k < m; k++){
newSol.push(table[i+k][j])
}
solutions.push(newSol);
}
if (n - j >= m){
var newSol = [];
for (var k = 0; k < m; k++){
newSol.push(table[i][j+k])
}
solutions.push(newSol);
}
if (n - i >= m && n -j >= m){
var newSol = [];
for (var k = 0; k < m; k++){
newSol.push(table[i+k][j+k])
}
solutions.push(newSol);
}
if (n - i >= m && j >= m - 1){
var newSol = [];
for (var k = 0; k < m; k++){
newSol.push(table[i+k][j-k])
}
solutions.push(newSol);
}
}
}

return solutions;
}


winningSquares(3,3);

Go Back To Programming & Development Topic List
Add Reply New Topic New Poll