數組螺旋輸出

前言

看過我前幾篇博客的朋友應該有體會,博主是個逗逼+沙雕+中二(重度患者),那時候假酒喝多了,大家見諒。

今天幫朋友用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、函數功能單一化,比如左看右看上看下看。

參考

無參考

寫在後面的話

最近國家查得嚴,我又失戀了,上一個對象有點漏氣。。。
最近我媽喊得嚴,三天兩頭喊我找對象,有帶有閨蜜的女孩紙看到這個博客嗎?我想請你喫飯(瘋狂眨眼暗示)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章