parent
							
								
									bd591aa70b
								
							
						
					
					
						commit
						1ee4b530ad
					
				@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					using DelimitedFiles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					depths = readdlm("day1input.txt")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diffs = depths[2:end] - depths[1:end-1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pos_diff_count = size(findall(diffs .> 0), 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					println("depth increases: ", pos_diff_count, " / ", size(diffs, 1))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					window_size = 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					window_sums = [sum(depths[i:i+2]) for i in 1:size(depths, 1)-2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					window_diffs = window_sums[2:end] - window_sums[1:end-1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pos_wdiff_count = size(findall(window_diffs .> 0), 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					println("window sum increases: ", pos_wdiff_count,
 | 
				
			||||||
 | 
					        " / ", size(window_diffs, 1))
 | 
				
			||||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					using DelimitedFiles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					course = readdlm("day2input.txt")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					depth = 0
 | 
				
			||||||
 | 
					horizontal = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for row in 1:size(course, 1)
 | 
				
			||||||
 | 
					    global horizontal, depth
 | 
				
			||||||
 | 
					    direction = course[row, 1]
 | 
				
			||||||
 | 
					    value = course[row, 2]
 | 
				
			||||||
 | 
					    if direction == "forward"
 | 
				
			||||||
 | 
					        horizontal += value
 | 
				
			||||||
 | 
					    elseif direction == "up"
 | 
				
			||||||
 | 
					        depth -= value
 | 
				
			||||||
 | 
					    elseif direction == "down"
 | 
				
			||||||
 | 
					        depth += value
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					println("depth = ", depth)
 | 
				
			||||||
 | 
					println("horiz = ", horizontal)
 | 
				
			||||||
 | 
					println("prod  = ", depth * horizontal)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					depth = 0
 | 
				
			||||||
 | 
					horizontal = 0
 | 
				
			||||||
 | 
					aim = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for row in 1:size(course, 1)
 | 
				
			||||||
 | 
					    global horizontal, depth, aim
 | 
				
			||||||
 | 
					    direction = course[row, 1]
 | 
				
			||||||
 | 
					    value = course[row, 2]
 | 
				
			||||||
 | 
					    if direction == "forward"
 | 
				
			||||||
 | 
					        horizontal += value
 | 
				
			||||||
 | 
					        depth += value * aim
 | 
				
			||||||
 | 
					    elseif direction == "up"
 | 
				
			||||||
 | 
					        aim -= value
 | 
				
			||||||
 | 
					    elseif direction == "down"
 | 
				
			||||||
 | 
					        aim += value
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					println("depth = ", depth)
 | 
				
			||||||
 | 
					println("horiz = ", horizontal)
 | 
				
			||||||
 | 
					println("aim   = ", aim)
 | 
				
			||||||
 | 
					println("prod  = ", depth * horizontal)
 | 
				
			||||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					using DelimitedFiles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					infile = size(ARGS, 1) > 0 ? ARGS[1] : "day3input.txt"
 | 
				
			||||||
 | 
					println("infile = ", infile)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diags = readdlm(infile, ' ', String)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					n = size(diags, 1)
 | 
				
			||||||
 | 
					w = length(diags[1])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					half_n = n / 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gamma = 0
 | 
				
			||||||
 | 
					epsilon = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for i in 1:w
 | 
				
			||||||
 | 
					    global gamma, epsilon
 | 
				
			||||||
 | 
					    is_one_at_i(s) = s[i] == '1' ? true : false
 | 
				
			||||||
 | 
					    one_count = size(findall(is_one_at_i, diags), 1)
 | 
				
			||||||
 | 
					    v = 2^(w-i)
 | 
				
			||||||
 | 
					    if one_count > half_n
 | 
				
			||||||
 | 
					        gamma += v
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        epsilon += v
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					println("gamma   = ", gamma)
 | 
				
			||||||
 | 
					println("epsilon = ", epsilon)
 | 
				
			||||||
 | 
					println("prod    = ", gamma * epsilon)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					o2gen = view(diags, :)
 | 
				
			||||||
 | 
					co2scrub = view(diags, :)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					o2n = n
 | 
				
			||||||
 | 
					co2n = n
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for i in 1:w
 | 
				
			||||||
 | 
					    global o2gen, co2scrub, o2n, co2n
 | 
				
			||||||
 | 
					    is_one_at_i(s) = s[i] == '1' ? true : false
 | 
				
			||||||
 | 
					    is_zero_at_i(s) = s[i] == '0' ? true : false
 | 
				
			||||||
 | 
					    o2idx_ones = findall(is_one_at_i, o2gen)
 | 
				
			||||||
 | 
					    co2idx_ones = findall(is_one_at_i, co2scrub)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if length(o2gen) > 1
 | 
				
			||||||
 | 
					        if length(o2idx_ones) >= o2n/2
 | 
				
			||||||
 | 
					            o2gen = o2gen[o2idx_ones]
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            o2gen = o2gen[findall(is_zero_at_i, o2gen)]
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        o2n = length(o2gen)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if length(co2scrub) > 1
 | 
				
			||||||
 | 
					        if length(co2idx_ones) < co2n/2
 | 
				
			||||||
 | 
					            co2scrub = co2scrub[co2idx_ones]
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            co2scrub = co2scrub[findall(is_zero_at_i, co2scrub)]
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        co2n = length(co2scrub)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					o2gen_v = parse(Int, o2gen[1], base=2)
 | 
				
			||||||
 | 
					co2scrub_v = parse(Int, co2scrub[1], base=2)
 | 
				
			||||||
 | 
					println("o2gen ", o2gen, " ", o2gen_v)
 | 
				
			||||||
 | 
					println("co2scrub ", co2scrub, " ", co2scrub_v)
 | 
				
			||||||
 | 
					println("prod ", o2gen_v * co2scrub_v)
 | 
				
			||||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					00100
 | 
				
			||||||
 | 
					11110
 | 
				
			||||||
 | 
					10110
 | 
				
			||||||
 | 
					10111
 | 
				
			||||||
 | 
					10101
 | 
				
			||||||
 | 
					01111
 | 
				
			||||||
 | 
					00111
 | 
				
			||||||
 | 
					11100
 | 
				
			||||||
 | 
					10000
 | 
				
			||||||
 | 
					11001
 | 
				
			||||||
 | 
					00010
 | 
				
			||||||
 | 
					01010
 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue