Advent of Code Day 10 结哈希

解题语言不限Java

拖更了,不好意思

题目内容

You come across some programs that are trying to implement a software emulation of a hash based on knot-tying. The hash these programs are implementing isn't very strong, but you decide to help them anyway. You make a mental note to remind the Elves later not to invent their own cryptographic functions.
你走在路上,看到一些程序正在尝试执行一个用结哈希来进行的软件仿真。这些程序生成的哈希鲁棒性并不高,但是你决定去帮助他们。你暗暗记下回去是告诉精灵他们的加密程序并不强。
This hash function simulates tying a knot in a circle of string with 256 marks on it. Based on the input to be hashed, the function repeatedly selects a span of string, brings the ends together, and gives the span a half-twist to reverse the order of the marks within it. After doing this many times, the order of the marks is used to build the resulting hash.
这个哈希程序模拟了一个有256个元素的环装结构打结的过程。基于输入,这个程序重复选择一段字符串,并且将其反向。多次循环过后,环装结构的元素会被用来建立哈希。

  4--5   pinch   4  5           4   1
 /    \  5,0,1  / \/ \  twist  / \ / \
3      0  -->  3      0  -->  3   X   0
 \    /         \ /\ /         \ / \ /
  2--1           2  1           2   5

To achieve this, begin with a list of numbers from 0 to 255, a current position which begins at 0 (the first element in the list), a skip size (which starts at 0), and a sequence of lengths (your puzzle input).
为了从一个从0到255的数组达到这种效果,需要一个当前位置(从零开始),一个跳跃大小(从零开始)和一组长度(谜题输入)。
Then, for each length:
然后对于每一个长度:
Reverse the order of that length of elements in the list, starting with the element at the current position.
翻转指定长度的数组的顺序,从当前位置开始。
Move the current position forward by that length plus the skip size.
当前位置向前移动长度跳跃大小的和。
Increase the skip size by one.
跳跃大小加一。
The list is circular; if the current position and the length try to reverse elements beyond the end of the list, the operation reverses using as many extra elements as it needs from the front of the list. If the current position moves past the end of the list, it wraps around to the front. Lengths larger than the size of the list are invalid.
这个列表是循环的,如果当前位置大于数组长度(256),当前位置会被重置到0。
Here's an example using a smaller list:
这里是个小的例子:
Suppose we instead only had a circular list containing five elements, 0, 1, 2, 3, 4, and were given input lengths of 3, 4, 1, 5.
假设数组只有5个元素大0,1,2,3,4,并且输入长度为3,4,1,5
The list begins as [0] 1 2 3 4 (where square brackets indicate the current position).
这个例子从[0] 1 2 3 4,(中括号指代当前位置在数组中的位置)。
The first length, 3, selects ([0] 1 2) 3 4 (where parentheses indicate the sublist to be reversed).
第一个长度是3,选择([0] 1 2) 3 4(小括号代表要被翻转的数组)
After reversing that section (0 1 2 into 2 1 0), we get ([2] 1 0) 3 4.
在第一次翻转之后(0 1 22 1 0),我们可以得到([2] 1 0) 3 4
Then, the current position moves forward by the length, 3, plus the skip size, 0: 2 1 0 [3] 4. Finally, the skip size increases to 1.
在之后,当前位置向前移动三加上跳跃大小02 1 0 [3] 4。最后,跳跃大小加一。
The second length, 4, selects a section which wraps: 2 1) 0 ([3] 4.
第二个长度是4,选择2 1) 0 ([3] 4
The sublist 3 4 2 1 is reversed to form 1 2 4 3: 4 3) 0 ([1] 2.
翻转指定部分之后(3 4 2 11 2 4 3),我们可以得到4 3) 0 ([1] 2
The current position moves forward by the length plus the skip size, a total of 5, causing it not to move because it wraps around: 4 3 0 [1] 2. The skip size increases to 2.
在之后,当前位置向前移动五,到达数组结尾并返回:4 3 0 [1] 2。最后,跳跃大小加到二。
The third length, 1, selects a sublist of a single element, and so reversing it has no effect.
The current position moves forward by the length (1) plus the skip size (2): 4 [3] 0 1 2. The skip size increases to 3.
第三个长度是1,选择一个元素,所以没有效果。当前位置向前移动34 [3] 0 1 2,跳跃大小加到三。
The fourth length, 5, selects every element starting with the second: 4) ([3] 0 1 2. Reversing this sublist (3 0 1 2 4 into 4 2 1 0 3) produces: 3) ([4] 2 1 0.
第二个长度是5,选择每一个在数组中的元素4) ([3] 0 1 2,翻转它(3 0 1 2 44 2 1 0 3) 3) ([4] 2 1 0.
Finally, the current position moves forward by 8: 3 4 2 1 [0]. The skip size increases to 4.
最后当前位置移动8,跳跃大小变为4。
In this example, the first two numbers in the list end up being 3 and 4; to check the process, you can multiply them together to produce 12.
在例子里,数组前两个的乘积为(3x4)12。

However, you should instead use the standard list size of 256 (with values 0 to 255) and the sequence of lengths in your puzzle input. Once this process is complete, what is the result of multiplying the first two numbers in the list?
但是,你的数组有256个位长,长度列表为你的谜题输入。当序列完成之后,头两个元素的乘积是多少?

解题思路

鉴于我手上还有Day 11 和Day 12 的没有搞完,大家就等等吧hhh

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345