Advent of Code Day 3 螺旋內(nèi)存

解題語(yǔ)言不限Java

謎題還有第二部分办素,不過(guò)是留給大家的撞牢,能解出第一題的宙彪,才能寫(xiě)第二題

題目?jī)?nèi)容

You come across an experimental new kind of memory stored on an infinite two-dimensional grid.

你來(lái)到一個(gè)在無(wú)限大的二維矩陣上建立的實(shí)驗(yàn)性內(nèi)存。

Each square on the grid is allocated in a spiral pattern starting at a location marked 1 and then counting up while spiraling outward. For example, the first few squares are allocated like this:

在這個(gè)矩陣上等限,每一個(gè)方格都從一個(gè)標(biāo)著1的原點(diǎn)格按螺旋狀排列向外展開(kāi)爸吮。比如說(shuō),前幾個(gè)方格的位置如圖望门。

17 16 15 14 13
18 5 4 3 12
19 6 1 2 11
20 7 8 9 10
21 22 23---> ...
While this is very space-efficient (no squares are skipped), requested data must be carried back to square 1 (the location of the only access port for this memory system) by programs that can only move up, down, left, or right. They always take the shortest path: the Manhattan Distance between the location of the data and square 1.

這是一個(gè)空間利用率非常高的內(nèi)存形娇,但是需要的數(shù)據(jù)必須能返回原點(diǎn)1的方格,數(shù)據(jù)只能前后左右的移動(dòng)筹误。內(nèi)存移動(dòng)總是取最近的路徑:距離原點(diǎn)的曼哈頓距離桐早。

For example:

Data from square 1 is carried 0 steps, since it's at the access port.
1格的數(shù)據(jù)需要0步,因?yàn)樗呀?jīng)在原點(diǎn)了。
Data from square 12 is carried 3 steps, such as: down, left, left.
12格的數(shù)據(jù)需要3步哄酝,下左左
Data from square 23 is carried only 2 steps: up twice.
23格的數(shù)據(jù)需要移動(dòng)2步友存,上上
Data from square 1024 must be carried 31 steps.
1024格的數(shù)據(jù)要移動(dòng)31步
How many steps are required to carry the data from the square identified in your puzzle input all the way to the access port?
那么從給定的位置移動(dòng)到原點(diǎn)需要多少步

解題思路

終于有些有難度的題目了

讀題可知,本題的主要難度在生成螺旋的序列陶衅。


例子

觀察這個(gè)序列可以發(fā)現(xiàn)

  1. 從就方格到新方格的移動(dòng)順序總是左屡立,上,右搀军,下侠驯。
  2. 每次移動(dòng)的距離是不斷增加的,走一格兩次奕巍,走兩個(gè)兩次吟策,以此類推。

所以把這兩個(gè)規(guī)律疊加在一起的止,我們就可以生成一個(gè)可以預(yù)測(cè)的序列:

  • 左 | 上 | 右右 | 下下 | 左左左

然后通過(guò)讀題檩坚,我們一個(gè)找到這個(gè)點(diǎn)到原點(diǎn)的曼哈頓距離。其實(shí)曼哈頓距離是指這個(gè)點(diǎn)X坐標(biāo)的絕對(duì)值加上Y坐標(biāo)的絕對(duì)值:
D=|x|+|y|

以下是本人的方法诅福,解法不唯一

  1. 首先我創(chuàng)建了一個(gè)移動(dòng)序列Point displacementList[]={new Point(1,0),new Point(0,1),new Point(-1,0),new Point(0,-1)}; 這個(gè)序列儲(chǔ)存的4個(gè)移動(dòng)的方向:左(1,0)匾委,上(0,1),右(-1,0)氓润,下(0,-1)赂乐。
  2. 接下來(lái)應(yīng)該有一個(gè)值來(lái)記錄步長(zhǎng)int length=1,因?yàn)檫@個(gè)序列一開(kāi)始就移動(dòng)咖气,所以步長(zhǎng)應(yīng)該從1開(kāi)始挨措。
  3. 原點(diǎn)我用Point pointer=new Point(0,0)表示.
  4. 我用了一個(gè)ArrayList<Point> points=new ArrayList<Point>()

設(shè)完變量就應(yīng)該組合邏輯了。在主函數(shù)里:

  1. 應(yīng)該有一個(gè)for循環(huán)來(lái)使pointer移動(dòng)指定次數(shù)
  for(int l=0;l<length;l++)

2.應(yīng)該有另一個(gè)for循環(huán)來(lái)循環(huán)讀取displacementList里的移動(dòng)點(diǎn)坐標(biāo)

  for(int dis=0;dis<4;dis++)
  1. 在每次移位之后,points里應(yīng)該增加新的數(shù)據(jù)崩溪,pointer應(yīng)該指向最新的位置
  Point newPoint=new Point(pointer.x+displacementList[dis].x,pointer.y-displacementList[dis].y);
  points.add(newPoint);
  pointer=newPointer;
  1. 當(dāng)length的動(dòng)作讀完了之后浅役,length應(yīng)該增加

剩下的就是調(diào)試了。

Github 的源代碼會(huì)在Advent of Code 結(jié)束之后發(fā)布

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伶唯,一起剝皮案震驚了整個(gè)濱河市觉既,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乳幸,老刑警劉巖瞪讼,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粹断,居然都是意外死亡符欠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門姿染,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)背亥,“玉大人秒际,你說(shuō)我怎么就攤上這事〗坪海” “怎么了娄徊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)盾戴。 經(jīng)常有香客問(wèn)我寄锐,道長(zhǎng),這世上最難降的妖魔是什么尖啡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任橄仆,我火速辦了婚禮,結(jié)果婚禮上衅斩,老公的妹妹穿的比我還像新娘盆顾。我一直安慰自己,他們只是感情好畏梆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布您宪。 她就那樣靜靜地躺著,像睡著了一般奠涌。 火紅的嫁衣襯著肌膚如雪宪巨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天溜畅,我揣著相機(jī)與錄音捏卓,去河邊找鬼。 笑死慈格,一個(gè)胖子當(dāng)著我的面吹牛怠晴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播峦椰,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼龄寞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了汤功?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤溜哮,失蹤者是張志新(化名)和其女友劉穎滔金,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體茂嗓,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡餐茵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了述吸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忿族。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锣笨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出道批,到底是詐尸還是另有隱情错英,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布隆豹,位于F島的核電站椭岩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏璃赡。R本人自食惡果不足惜判哥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碉考。 院中可真熱鬧塌计,春花似錦、人聲如沸侯谁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)良蒸。三九已至技扼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嫩痰,已是汗流浹背剿吻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留串纺,地道東北人丽旅。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像纺棺,于是被迫代替她去往敵國(guó)和親榄笙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 西秦木子抒情詩(shī)集《守望者》目錄 青果祷蝌,一年一輪回 但只在童年扎根 在心里茅撞,好像初戀 無(wú)意中相遇 成為終生唏噓的緣 ...
    西秦木子閱讀 480評(píng)論 0 6
  • 孫燕姿糊啡,對(duì)我而言拄查,她代表著我的青春。那些單純美好的時(shí)光里棚蓄,有一個(gè)很愛(ài)唱歌的女生堕扶,一直陪伴著我碍脏,她叫孫燕姿。 瘦瘦的...
    向柚心生閱讀 752評(píng)論 2 3
  • 如今的媒體格局處在巨變之中,新興媒體的席卷邪蛔,傳統(tǒng)媒體希冀再次繁榮急黎,任何一點(diǎn)變動(dòng),都影響著廣告這一依靠媒介生存的領(lǐng)域...
    15陳林閱讀 357評(píng)論 0 0
  • 那時(shí) 尚明政 你從沒(méi)經(jīng)過(guò)我家門前 這里卻有你留足...
    director尚閱讀 204評(píng)論 0 0
  • 要我回憶一個(gè)深刻的故事侧到,可能沒(méi)有勃教。不過(guò)我想慢慢回憶出來(lái),我想回憶那個(gè)小小孩兒經(jīng)歷了什么匠抗。 其實(shí)在我很小的時(shí)候故源,家里...
    遇見(jiàn)真實(shí)的我閱讀 222評(píng)論 0 0