1
0
Fork 0

Compare commits

...

2 commits

Author SHA1 Message Date
cfe6ac49d0
Update template 2024-12-10 08:27:41 -05:00
892538ce64
Day nine 2024-12-09 20:16:32 -05:00
4 changed files with 131 additions and 1 deletions

51
9-1.rb Executable file
View file

@ -0,0 +1,51 @@
#!/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 Executable file
View file

@ -0,0 +1,75 @@
#!/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 Normal file

File diff suppressed because one or more lines are too long

View file

@ -1,8 +1,11 @@
#!/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__