Advent of Code Day 6 內(nèi)存重分配

解題語(yǔ)言不限Java

謎題還有第二部分曹质,不過(guò)是留給大家的糟描,能解出第一題的著瓶,才能寫(xiě)第二題

又鴿了一天才翻完洒扎。

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

A debugger program here is having an issue: it is trying to repair a memory reallocation routine, but it keeps getting stuck in an infinite loop.
一個(gè)調(diào)試程序出了問(wèn)題:它嘗試重置一個(gè)內(nèi)存重分配事務(wù),但是它陷入了一個(gè)死循環(huán)檐薯。
In this area, there are sixteen memory banks; each memory bank can hold any number of blocks. The goal of the reallocation routine is to balance the blocks between the memory banks.
在這個(gè)區(qū)域有16個(gè)內(nèi)存堆,每一個(gè)內(nèi)存堆可以保持任意數(shù)量的內(nèi)存塊。這個(gè)事務(wù)的目標(biāo)是平均內(nèi)存塊到所有的內(nèi)存堆坛缕。
The reallocation routine operates in cycles. In each cycle, it finds the memory bank with the most blocks (ties won by the lowest-numbered memory bank) and redistributes those blocks among the banks. To do this, it removes all of the blocks from the selected bank, then moves to the next (by index) memory bank and inserts one of the blocks. It continues doing this until it runs out of blocks; if it reaches the last memory bank, it wraps around to the first one.
這個(gè)事務(wù)運(yùn)行在一個(gè)循環(huán)里墓猎。每次循環(huán),它會(huì)找到存有最多內(nèi)存塊的內(nèi)存堆(如果有多個(gè)最大值赚楚,則取第一個(gè)堆)然后重新分配其中的內(nèi)存塊到其他的堆毙沾。為了達(dá)到目標(biāo),這個(gè)事務(wù)會(huì)提取目標(biāo)堆得內(nèi)存塊宠页,然后移動(dòng)到下一個(gè)堆并將一個(gè)內(nèi)存塊放入直到全部分配完畢左胞。如果放入的位置超過(guò)堆列表的長(zhǎng)度,它會(huì)移動(dòng)到列表開(kāi)頭举户。
The debugger would like to know how many redistributions can be done before a blocks-in-banks configuration is produced that has been seen before.
這個(gè)調(diào)試程序想要知道在多少次重新分配之后會(huì)出現(xiàn)死循環(huán)烤宙。
For example, imagine a scenario with only four memory banks:
舉個(gè)例子,想像一個(gè)只有4個(gè)內(nèi)存堆的列表 0,2,7,0
The third bank has the most blocks, so it is chosen for redistribution.
第三個(gè)堆有最多的塊俭嘁,所以程序會(huì)對(duì)這個(gè)堆進(jìn)行重新分配躺枕。
Starting with the next bank (the fourth bank) and then continuing to the first bank, the second bank, and so on, the 7 blocks are spread out over the memory banks. The fourth, first, and second banks get two blocks each, and the third bank gets one back. The final result looks like this: 2 4 1 2.
從下一個(gè)堆(第四個(gè))開(kāi)始,然后到第一個(gè)堆供填,第二個(gè)堆……拐云,所有七個(gè)塊都會(huì)被分配到每一個(gè)內(nèi)存堆里。第一近她,二叉瘩,四堆會(huì)被分到2,第三個(gè)堆會(huì)被分到1粘捎。最后的結(jié)果是2,4,1,2薇缅。
Next, the second bank is chosen because it contains the most blocks (four).
接下來(lái),第二個(gè)堆是最多的(4個(gè))晌端。
Because there are four memory banks, each gets one block. The result is: 3 1 2 3.
因?yàn)檫@個(gè)有四個(gè)塊捅暴,所以每個(gè)堆都加一。3,1,2,3
Now, there is a tie between the first and fourth memory banks, both of which have three blocks. The first bank wins the tie, and its three blocks are distributed evenly over the other three banks, leaving it with none: 0 2 3 4.
現(xiàn)在有兩個(gè)相等的值咧纠,第一個(gè)和第四個(gè)蓬痒。這兩個(gè)都有三個(gè)塊。第一個(gè)堆因?yàn)閿?shù)字比較小漆羔,所以被選中梧奢,其中的塊被平均分配到每一個(gè)堆。最后結(jié)果是0,2,3,4演痒。
The fourth bank is chosen, and its four blocks are distributed such that each of the four banks receives one: 1 3 4 1.
現(xiàn)在亲轨,第四個(gè)堆被選中,然后其中的四個(gè)塊被分配到每一個(gè)堆里:1,3,4,1
The third bank is chosen, and the same thing happens: 2 4 1 2.
現(xiàn)在鸟顺,第三個(gè)堆被選中惦蚊,同樣的事情發(fā)生了:2,4,1,2
At this point, we've reached a state we've seen before: 2 4 1 2 was already seen. The infinite loop is detected after the fifth block redistribution cycle, and so the answer in this example is 5.
這時(shí)器虾,我們到一個(gè)重復(fù)發(fā)生的狀態(tài):2,4,1,2 所以我們?cè)诘谖宀秸业搅艘粋€(gè)死循環(huán),所以答案是5
Given the initial block counts in your puzzle input, how many redistribution cycles must be completed before a configuration is produced that has been seen before?
請(qǐng)問(wèn)蹦锋,根據(jù)你的謎題輸入兆沙,多少次重分配之后會(huì)得到一個(gè)死循環(huán)。

解題思路

這個(gè)題目基本上莉掂,沒(méi)有很多要分析的地方葛圃,所以我只放解法。

我做了三個(gè)函數(shù)

  1. 一個(gè)是分配函數(shù)憎妙,將選定的點(diǎn)分配到所有得到堆
  2. 一個(gè)是搜索函數(shù)库正,找到最大值
  3. 一個(gè)是檢索函數(shù),把當(dāng)前狀態(tài)和歷史狀態(tài)進(jìn)行比較來(lái)找到相同的狀態(tài)
最后編輯于
?著作權(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)店門(mé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)容

  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,429評(píng)論 0 23
  • 工作一個(gè)多星期锉屈,今天是第八天荤傲,大致了解工作性質(zhì),也在慢慢的適應(yīng)中颈渊,雖然是助理的工作遂黍,但是銷(xiāo)售類(lèi)的也得做,新項(xiàng)目俊嗽,人...
    shanshan1閱讀 136評(píng)論 0 0
  • 在簡(jiǎn)書(shū)寫(xiě)作一個(gè)月后乌询,我又開(kāi)始思考困擾普羅大眾的那三個(gè)著名的哲學(xué)問(wèn)題:我是誰(shuí)榜贴?我從哪里來(lái)?我要到哪里去妹田? 我是誰(shuí)唬党?我...
    人生如夢(mèng)001閱讀 168評(píng)論 4 7
  • 今天星期六,又到了每周做義工還有共修的時(shí)候了鬼佣,每個(gè)星期的這一天是我最高興的一天驶拱,我6點(diǎn)左右就醒了,記得師兄之前跟我...
    覺(jué)智師兄閱讀 531評(píng)論 0 3
  • 命和運(yùn)的區(qū)別早已有了相對(duì)明確的說(shuō)法:命是與生俱來(lái)的東西,生在帝王家就是王子晌纫,生在貧民家就是屌絲税迷;運(yùn)是后天存在變數(shù)又...
    KVC閱讀 731評(píng)論 1 6