对javascript来说还很新,几周了。我的目标是制造可缩放的钻石。
这是我到目前为止的代码。
var board = '';
var dimondX = 4;
var dimondY = 4;
for (y = 0; y <= dimondY; y++) {
for(x = 0; x <= dimondX; x++) {
if ((y == 0 || y == dimondY ) && (x == dimondX / 2 )){
board += "#" }
else if (( y == 1 || y == 3) && (x == 3 || x ==1 )) {
board += "#" }
else if (( y == dimondY / 2) && (x % 2 == 0)) {
board += "#" }
else {
board += " " }
}
board += "\n"
};
console.log(board);
使用上面的代码,菱形的开始,结尾和中间可以在任何尺寸下正常工作。但是我不知道如何缩放中间行,即开始或结束与确切中间之间的行。 Y触发器可以交替使用奇数和偶数,并且我认为这会起作用。但是X触发器需要分支到更高的维度,以至于我不知道如何表达它。
这是另一个钻石:
var board = "";
var dimondX = 8;
var dimondY = 8;
for (y = 0; y <= dimondY; y++) {
for(x = 0; x <= dimondX; x++) {
if ((y == 0 || y == dimondY ) && (x == dimondX / 2 )){
board += "#" }
else if (( y == 1 || y == 7 ) && (x == 3 || x == 5)) {
board += "#" }
else if (( y == 2 || y == 6) && ((x % 2 == 0) && x > 1 && x < 8 )) {
board += "#" }
else if (( y == 3 || y == 5) && (x % 2 !== 0)) {
board += "#" }
else if (( y == dimondY / 2) && (x % 2 == 0)) {
board += "#" }
else {
board += " " }
}
board += "\n"
};
console.log(board);
可以看出。不需要对起始行和直接中间行进行任何操作,但是中间的所有操作都需要手动调整。第一行之后的X轴公式为:x ==(1-(dimondX / 2)||(x ==(1 +(dimondX / 2)。然后从此处开始,每个点都将具有+ 1, -1。我只是不知道如何表达。
并不是真正地寻找直接答案,而是更多的提示,甚至是“这不是可行的方向”。
答案 0 :(得分:0)
感谢您的提问,我喜欢拼图,而且我真的很喜欢这一题。这是我的版本,我做了一个通用版本,长度是动态的,您可以输入任何数字
var board = '';
var N = 10;
var M = N/2;
for (y = 0; y <= N; y++) {
for(x = 0; x <= N; x++) {
c = Math.abs(M * -Math.floor(y/M) + y % M);
if(c==N) c = 0;
if( (x >= M-c && x <= M+c) && (x % 2 == y%2) )
board += "#";
else
board += " ";
}
board += "\n";
}
console.log(board);