Compare commits
No commits in common. "3d85144065065e70ca36efc5b38ffc323db8d105" and "94ddabc590beb8095c66cdfe830ac29d5d55fc13" have entirely different histories.
3d85144065
...
94ddabc590
3
day1.ijs
3
day1.ijs
@ -1,3 +0,0 @@
|
|||||||
c =. > 0 ". each cutopen 1!:1 < jpath '~/projects/AoC/2020/year2020day1.txt.cache'
|
|
||||||
>./,(c*/c)*2020=c+/c
|
|
||||||
>./,(c*/c*/c)*2020=c+/c+/c
|
|
6
day2.ijs
6
day2.ijs
@ -1,6 +0,0 @@
|
|||||||
r =: >"1 cut each cutopen 1!:1 < jpath '~/projects/AoC/2020/year2020day2.txt.cache'
|
|
||||||
rs =: >0".each'-'cut"1>(0}"1 r)
|
|
||||||
cs =: 0{"1>1{"1 r
|
|
||||||
ss =: 2{"1 r
|
|
||||||
+/1>**/|:rs-+/"1 cs=>ss
|
|
||||||
+/1=+/|:(rs-1){"1 cs=>ss
|
|
117
day23.cr
117
day23.cr
@ -1,117 +0,0 @@
|
|||||||
require "advent"
|
|
||||||
|
|
||||||
input = input(2020, 23).lines[0].chars.map &.to_i32
|
|
||||||
|
|
||||||
class Array(T)
|
|
||||||
def get(i)
|
|
||||||
self[i % size]
|
|
||||||
end
|
|
||||||
|
|
||||||
def del(i)
|
|
||||||
delete_at(i % size)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Node
|
|
||||||
property next : Node
|
|
||||||
property int : Int32
|
|
||||||
|
|
||||||
def initialize(@int, @next)
|
|
||||||
end
|
|
||||||
|
|
||||||
def insert(other : Node, n = 1)
|
|
||||||
set_next = other
|
|
||||||
(n-1).times { set_next = set_next.@next }
|
|
||||||
set_next.next = @next
|
|
||||||
@next = other
|
|
||||||
end
|
|
||||||
|
|
||||||
def remove(n = 1)
|
|
||||||
curr = self
|
|
||||||
to_return = self.next
|
|
||||||
n.times { curr = curr.@next }
|
|
||||||
@next = curr.@next
|
|
||||||
to_return
|
|
||||||
end
|
|
||||||
|
|
||||||
def find(n)
|
|
||||||
start = self
|
|
||||||
while start.int != n
|
|
||||||
start = start.next
|
|
||||||
end
|
|
||||||
return start
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_s(n)
|
|
||||||
return "" if n < 0
|
|
||||||
return "#{@int} -> #{@next.to_s(n-1)}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def includes?(n, count)
|
|
||||||
return false if count <= 0
|
|
||||||
return @int == n || @next.includes?(n, count-1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Cups
|
|
||||||
getter size : Int32
|
|
||||||
getter head : Node
|
|
||||||
|
|
||||||
def initialize(list : Array(Int32))
|
|
||||||
@cache = {} of Int32 => Node
|
|
||||||
h = list.delete_at(0)
|
|
||||||
temp = uninitialized Node
|
|
||||||
@cache[h] = @head = Node.new(h, temp)
|
|
||||||
@size = list.size
|
|
||||||
@local_min = list.min.as(Int32)
|
|
||||||
@local_max = list.max.as(Int32)
|
|
||||||
@head.next = @head
|
|
||||||
curr = @head
|
|
||||||
list.each do |n|
|
|
||||||
@cache[n] = new = Node.new(n, curr.next)
|
|
||||||
curr.insert(new)
|
|
||||||
curr = new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_s
|
|
||||||
@head.to_s(@size)
|
|
||||||
end
|
|
||||||
|
|
||||||
def step
|
|
||||||
first = @head
|
|
||||||
after = first.remove(3)
|
|
||||||
m = first.int - 1
|
|
||||||
while after.includes?(m, 3) || m < @local_min
|
|
||||||
m = (m < @local_min) ? @local_max : (m - 1)
|
|
||||||
end
|
|
||||||
@cache[m].insert(after, 3)
|
|
||||||
@head = @head.next
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def play(input, count)
|
|
||||||
cups = Cups.new input
|
|
||||||
count.times { |n| cups.step }
|
|
||||||
cups
|
|
||||||
end
|
|
||||||
|
|
||||||
def part1(input)
|
|
||||||
cups = play(input.clone, 100)
|
|
||||||
cups.head.find(1).next.to_s(cups.size - 1).gsub(" -> ", "")
|
|
||||||
end
|
|
||||||
|
|
||||||
def part2(input)
|
|
||||||
list = input.clone
|
|
||||||
max = input.max
|
|
||||||
(1000000 - input.size).times do
|
|
||||||
max += 1
|
|
||||||
list << max
|
|
||||||
end
|
|
||||||
cups = play(list, 10000000)
|
|
||||||
one = cups.head.find(1)
|
|
||||||
one.next.int.to_i64 * one.next.next.int
|
|
||||||
end
|
|
||||||
|
|
||||||
puts "Part 1: #{part1(input)}"
|
|
||||||
puts "Part 2: #{part2(input)}"
|
|
78
day24.cr
78
day24.cr
@ -1,78 +0,0 @@
|
|||||||
require "advent"
|
|
||||||
|
|
||||||
INPUT = input(2020, 24).lines.map &.tiles.map { |t| MATCHES[t] }
|
|
||||||
MATCHES = { "se" => {0.5, -1.0}, "sw" => {-0.5, -1.0}, "ne" => {0.5, 1.0}, "nw" => {-0.5, 1.0}, "e" => {1.0, 0.0}, "w" => {-1.0, 0.0} }
|
|
||||||
|
|
||||||
class String
|
|
||||||
def tiles
|
|
||||||
i = 0
|
|
||||||
tiles = [] of String
|
|
||||||
while i < size
|
|
||||||
if self[i] == 's' || self[i] == 'n'
|
|
||||||
tiles << self[i..i+1]
|
|
||||||
i += 2
|
|
||||||
else
|
|
||||||
tiles << self[i..i]
|
|
||||||
i += 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
tiles
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Array(T)
|
|
||||||
def pos
|
|
||||||
curr = {0.0, 0.0}
|
|
||||||
each do |c|
|
|
||||||
curr = curr.add c
|
|
||||||
end
|
|
||||||
curr
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def part1(input)
|
|
||||||
counts = Hash({Float64,Float64}, Int32).new(0)
|
|
||||||
input.each do |i|
|
|
||||||
counts[i.pos] += 1
|
|
||||||
end
|
|
||||||
counts.count &.[1].%(2).==(1)
|
|
||||||
end
|
|
||||||
|
|
||||||
struct Tuple(*T)
|
|
||||||
def neighbors
|
|
||||||
MATCHES.values.map &.add(self)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def part2(input)
|
|
||||||
state = Hash({Float64,Float64}, Bool).new(false)
|
|
||||||
counts = Hash({Float64,Float64}, Int32).new(0)
|
|
||||||
|
|
||||||
input.each do |i|
|
|
||||||
state[i.pos] ^= true
|
|
||||||
end
|
|
||||||
|
|
||||||
100.times do |i|
|
|
||||||
counts.clear
|
|
||||||
state.each do |t, f|
|
|
||||||
next unless f
|
|
||||||
t.neighbors.each do |n|
|
|
||||||
counts[n] += 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
new_state = state.clone.clear
|
|
||||||
state.each do |k, v|
|
|
||||||
next unless v
|
|
||||||
new_state[k] = !(counts[k] == 0 || (counts[k] > 2))
|
|
||||||
end
|
|
||||||
counts.each do |k, v|
|
|
||||||
new_state[k] = true if (!state[k]) && v == 2
|
|
||||||
end
|
|
||||||
state = new_state
|
|
||||||
end
|
|
||||||
state.count &.[1]
|
|
||||||
end
|
|
||||||
|
|
||||||
puts part1(INPUT.clone)
|
|
||||||
puts part2(INPUT.clone)
|
|
5
day3.ijs
5
day3.ijs
@ -1,5 +0,0 @@
|
|||||||
r =: > cutopen 1!:1 < jpath '~/projects/AoC/2020/year2020day3.txt.cache'
|
|
||||||
rn =: 4 : '+/''#''=((#|:y)|x*i.#y){"0 1 y'
|
|
||||||
rnx =: 3 : '(1{y) rn 0{"2((0{-y)]\r)'
|
|
||||||
rnx 1 3
|
|
||||||
*/ rnx"1 (_2 [\ 1 1 1 3 1 5 1 7 2 1)
|
|
Loading…
Reference in New Issue
Block a user