前言
看过我前几篇博客的朋友应该有体会,博主是个逗逼+沙雕+中二(重度患者),那时候假酒喝多了,大家见谅。
今天帮朋友用JS写了一个数组螺旋输出的代码实现,写完之后我自己很满意,抱着“独乐乐不如众乐乐”的思想,贴出来和大家分享分享,也算是为开源社区做了丁丁大点的贡献了。
代码
// 20191221
// 螺旋输出数组
function rotate(n) {
var down = 1
var up = 2
var left = 3
var right = 4
function goRight(x, y, lap) {
// 可继续向右
if (y + 1 < n - lap) {
return {
"end": false,
"x": x,
"y": y + 1,
"d": right,
"lap": lap,
}
}
return goDown(x, y, lap)
}
function goDown(x, y, lap) {
// 可继续向下
if (x + 1 < n - lap) {
return {
"end": false,
"x": x + 1,
"y": y,
"d": down,
"lap": lap,
}
}
return goLeft(x, y, lap)
}
function goLeft(x, y, lap) {
// 可继续向左
if (y > lap) {
return {
"end": false,
"x": x,
"y": y - 1,
"d": left,
"lap": lap,
}
}
return goUp(x, y, lap)
}
function goUp(x, y, lap) {
// 可继续向上
if (x - 1 > lap) {
return {
"end": false,
"x": x - 1,
"y": y,
"d": up,
"lap": lap,
}
} else if (x - 1 == lap && y + 1 < n - (lap + 1)) { // 结束了一圈,只能向右边看看,看是否存在下一圈
return {
"end": false,
"x": x,
"y": y + 1,
"d": right,
"lap": lap + 1,
}
}
return {"end": true}
}
function getNext(x, y, d, lap) {
switch(d) {
case down:return goDown(x, y, lap)
case up: return goUp(x, y, lap)
case left: return goLeft(x, y, lap)
case right: return goRight(x, y, lap)
}
}
if (n > 0) {
var i = 0
var arr = new Array()
var cur = {
"end": false,
"x": 0,
"y": 0,
"d": right,
"lap": 0
}
while (!cur.end) {
arr[i++] = "(" + cur.x + ", " + cur.y + ")"
cur = getNext(cur.x, cur.y, cur.d, cur.lap)
}
return arr
}
return new Array()
}
测试数据&结果
矩阵
(00) (01) (02) (03) (04) (05)
(10) (11) (12) (13) (14) (15)
(20) (21) (22) (23) (24) (25)
(30) (31) (32) (33) (34) (35)
(40) (41) (42) (43) (44) (45)
(50) (51) (52) (53) (54) (55)
n = 1
["(0, 0)"]
n = 2
["(0, 0)", "(0, 1)", "(1, 1)", "(1, 0)"]
n = 3
["(0, 0)", "(0, 1)", "(0, 2)", "(1, 2)", "(2, 2)", "(2, 1)", "(2, 0)", "(1, 0)", "(1, 1)"]
n = 4
["(0, 0)", "(0, 1)", "(0, 2)", "(0, 3)", "(1, 3)", "(2, 3)", "(3, 3)", "(3, 2)", "(3, 1)", "(3, 0)", "(2, 0)", "(1, 0)", "(1, 1)", "(1, 2)", "(2, 2)", "(2, 1)"]
n = 5
["(0, 0)", "(0, 1)", "(0, 2)", "(0, 3)", "(0, 4)", "(1, 4)", "(2, 4)", "(3, 4)", "(4, 4)", "(4, 3)", "(4, 2)", "(4, 1)", "(4, 0)", "(3, 0)", "(2, 0)", "(1, 0)", "(1, 1)", "(1, 2)", "(1, 3)", "(2, 3)", "(3, 3)", "(3, 2)", "(3, 1)", "(2, 1)", "(2, 2)"]
n = 6
["(0, 0)", "(0, 1)", "(0, 2)", "(0, 3)", "(0, 4)", "(0, 5)", "(1, 5)", "(2, 5)", "(3, 5)", "(4, 5)", "(5, 5)", "(5, 4)", "(5, 3)", "(5, 2)", "(5, 1)", "(5, 0)", "(4, 0)", "(3, 0)", "(2, 0)", "(1, 0)", "(1, 1)", "(1, 2)", "(1, 3)", "(1, 4)", "(2, 4)", "(3, 4)", "(4, 4)", "(4, 3)", "(4, 2)", "(4, 1)", "(3, 1)", "(2, 1)", "(2, 2)", "(2, 3)", "(3, 3)", "(3, 2)"]
大致思路
1、类似于迭代,根据当前位置定位下一个位置。
2、函数功能单一化,比如左看右看上看下看。
参考
无参考
写在后面的话
最近国家查得严,我又失恋了,上一个对象有点漏气。。。
最近我妈喊得严,三天两头喊我找对象,有带有闺蜜的女孩纸看到这个博客吗?我想请你吃饭(疯狂眨眼暗示)。