parent
91cfc13777
commit
857b9c34be
@ -0,0 +1 @@
|
|||||||
|
xlqgujun
|
@ -0,0 +1,52 @@
|
|||||||
|
input = ARGF.read.strip
|
||||||
|
|
||||||
|
def knot_hash(input)
|
||||||
|
list = (0..255).to_a
|
||||||
|
current = 0
|
||||||
|
lengths = input.split(//).map(&:ord)
|
||||||
|
lengths.concat([17, 31, 73, 47, 23])
|
||||||
|
skip = 0
|
||||||
|
64.times do
|
||||||
|
lengths.each do |length|
|
||||||
|
list[0, length] = list[0, length].reverse
|
||||||
|
list = list.rotate(length + skip)
|
||||||
|
current += length + skip
|
||||||
|
current %= list.size
|
||||||
|
skip += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
list = list.rotate(list.size - current)
|
||||||
|
dense = list.each_slice(16).map {|slice| slice.inject(&:^) }
|
||||||
|
hex = dense.map {|n| n.to_s(16).rjust(2, ?0) }.join
|
||||||
|
hex.hex.to_s(2).rjust(128, ?0)
|
||||||
|
end
|
||||||
|
|
||||||
|
# p (0..127).map {|i| "#{input}-#{i}" }.map {|row| knot_hash(row) }.join.split(//).select {|c| c == ?1 }.count
|
||||||
|
|
||||||
|
# input = "flqrgnkx"
|
||||||
|
grid = (0..127).map {|i| "#{input}-#{i}" }.map {|row| knot_hash(row).split(//) }
|
||||||
|
|
||||||
|
regions = 0
|
||||||
|
queue = []
|
||||||
|
(0..127).each do |y|
|
||||||
|
(0..127).each do |x|
|
||||||
|
if grid[y][x] == ?1
|
||||||
|
regions += 1
|
||||||
|
grid[y][x] = ?0
|
||||||
|
queue << [x, y]
|
||||||
|
until queue.empty?
|
||||||
|
xx,yy = queue.shift
|
||||||
|
[[0, 1], [0, -1], [1, 0], [-1, 0]].each do |dx, dy|
|
||||||
|
xxx = xx + dx
|
||||||
|
yyy = yy + dy
|
||||||
|
if (0..127).cover?(xxx) && (0..127).cover?(yyy) && grid[yyy][xxx] == ?1
|
||||||
|
grid[yyy][xxx] = ?0
|
||||||
|
queue << [xxx, yyy]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
p regions
|
Loading…
Reference in new issue