Something went wrong. Try again.
Code for the Advent of Code event
aoc advent-of-code
Something went wrong. Try again.
878 B · 49 lines
Ruby
at rust
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#!/usr/bin/env ruby# frozen_string_literal: true
# \ n /# nw +--+ ne# / \# -+ +-# \ /# sw +--+ se# / s \
# https://www.redblobgames.com/grids/hexagons/
require 'matrix'
class Vector def x = self[0] def y = self[1] def z = self[2]end
DIRECTIONS = { n: Vector[0, 1, -1], ne: Vector[1, 0, -1], se: Vector[1, -1, 0], s: Vector[0, -1, 1], sw: Vector[-1, 0, 1], nw: Vector[-1, 1, 0]}.freeze
ORIGIN = Vector[0, 0, 0]
def cube_distance(a, b) ((a.x - b.x).abs + (a.y - b.y).abs + (a.z - b.z).abs) / 2end
path = ARGF.read.strip.split(',').map(&:to_sym)
max_dist = 0
pos = path.map { |d| DIRECTIONS[d] }.reduce(Vector[0, 0, 0]) do |current, change| new_pos = current + change new_dist = cube_distance(ORIGIN, new_pos) max_dist = new_dist if new_dist > max_dist new_posend
puts cube_distance(ORIGIN, pos)puts max_dist