[2017][ruby][14.x] speedrun

sorbet
Alpha Chen 7 years ago
parent 91cfc13777
commit 857b9c34be

@ -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…
Cancel
Save