Compare commits
No commits in common. "cfe6ac49d0463e7f60887daf7bb9fd259e4fec22" and "68238609db31864adf649c90010231bd74397536" have entirely different histories.
cfe6ac49d0
...
68238609db
4 changed files with 1 additions and 131 deletions
51
9-1.rb
51
9-1.rb
|
@ -1,51 +0,0 @@
|
||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
problem = 9
|
|
||||||
input = File.read("#{problem}.input")
|
|
||||||
#input = DATA.read
|
|
||||||
.chars
|
|
||||||
.map(&:to_i)
|
|
||||||
|
|
||||||
expanded_disk = []
|
|
||||||
|
|
||||||
id = 0
|
|
||||||
type = :file
|
|
||||||
input.each do
|
|
||||||
if type == :free
|
|
||||||
_1.times { expanded_disk << "." }
|
|
||||||
|
|
||||||
type = :file
|
|
||||||
else
|
|
||||||
_1.times { expanded_disk << id }
|
|
||||||
id += 1
|
|
||||||
type = :free
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
defragmented_disk = Array.new(expanded_disk.size)
|
|
||||||
|
|
||||||
l, r = 0, expanded_disk.size - 1
|
|
||||||
while l <= r
|
|
||||||
if expanded_disk[l] != "."
|
|
||||||
defragmented_disk[l] = expanded_disk[l]
|
|
||||||
l += 1
|
|
||||||
elsif expanded_disk[r] == "."
|
|
||||||
defragmented_disk[r] = expanded_disk[r]
|
|
||||||
r -= 1
|
|
||||||
else
|
|
||||||
defragmented_disk[l] = expanded_disk[r]
|
|
||||||
defragmented_disk[r] = "."
|
|
||||||
l += 1
|
|
||||||
r -= 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
checksum = defragmented_disk
|
|
||||||
.map.with_index { _1.to_i * _2.to_i }
|
|
||||||
.sum
|
|
||||||
|
|
||||||
p checksum
|
|
||||||
|
|
||||||
|
|
||||||
__END__
|
|
||||||
2333133121414131402
|
|
75
9-2.rb
75
9-2.rb
|
@ -1,75 +0,0 @@
|
||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
require "debug"
|
|
||||||
|
|
||||||
problem = 9
|
|
||||||
input = File.read("#{problem}.input")
|
|
||||||
#input = DATA.read
|
|
||||||
.chars
|
|
||||||
.map(&:to_i)
|
|
||||||
|
|
||||||
expanded_disk = []
|
|
||||||
|
|
||||||
id = 0
|
|
||||||
type = :file
|
|
||||||
input.each do
|
|
||||||
if type == :free
|
|
||||||
_1.times { expanded_disk << "." }
|
|
||||||
|
|
||||||
type = :file
|
|
||||||
else
|
|
||||||
_1.times { expanded_disk << id }
|
|
||||||
id += 1
|
|
||||||
type = :free
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
defragmented_disk = expanded_disk.dup
|
|
||||||
|
|
||||||
start = Time.now
|
|
||||||
r = expanded_disk.size - 1
|
|
||||||
while r > 0
|
|
||||||
if expanded_disk[r] == "."
|
|
||||||
r -= 1
|
|
||||||
else
|
|
||||||
rr = r
|
|
||||||
rr -= 1 while expanded_disk[rr] == expanded_disk[r]
|
|
||||||
space = r - rr
|
|
||||||
|
|
||||||
l = expanded_disk.index(".")
|
|
||||||
while l < expanded_disk.size
|
|
||||||
if expanded_disk[l] != "."
|
|
||||||
l += 1
|
|
||||||
next
|
|
||||||
end
|
|
||||||
|
|
||||||
ll = l
|
|
||||||
ll += 1 while defragmented_disk[ll] == "."
|
|
||||||
free = ll - l
|
|
||||||
|
|
||||||
if l > r
|
|
||||||
break
|
|
||||||
elsif free >= space
|
|
||||||
(l..(l + space - 1)).each { defragmented_disk[_1] = expanded_disk[r] }
|
|
||||||
((rr + 1)..r).each { defragmented_disk[_1] = "." }
|
|
||||||
break
|
|
||||||
else
|
|
||||||
l = ll + 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
r = rr
|
|
||||||
end
|
|
||||||
end
|
|
||||||
finish = Time.now
|
|
||||||
puts "Finished in #{finish - start}"
|
|
||||||
|
|
||||||
checksum = defragmented_disk
|
|
||||||
.map.with_index { _1.to_i * _2.to_i }
|
|
||||||
.sum
|
|
||||||
|
|
||||||
p checksum
|
|
||||||
|
|
||||||
|
|
||||||
__END__
|
|
||||||
2333133121414131402
|
|
1
9.input
1
9.input
File diff suppressed because one or more lines are too long
|
@ -1,11 +1,8 @@
|
||||||
#!/usr/bin/env ruby
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
problem = 1
|
problem = 1
|
||||||
#input = File.readlines("#{problem}.input")
|
input = File.readlines("#{problem}.input")
|
||||||
input = DATA.read
|
|
||||||
|
|
||||||
result = :solution
|
result = :solution
|
||||||
|
|
||||||
puts result
|
puts result
|
||||||
|
|
||||||
__END__
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue