• 0 Posts
  • 5 Comments
Joined 2 years ago
cake
Cake day: June 14th, 2023

help-circle
  • Ruby

    I decided to rotate the entire input character-by-character, then parse the numbers (see the full source here)

    grid = input.lines.map(&:chomp).map {|l| l.each_char.map.to_a }.to_a
    transposed = Array.new(grid[0].length) { Array.new(grid.length) }
    
    grid.each_with_index do |row, y|
      row.each_with_index do |col, x|
        transposed[x][y] = col
      end
    end
    
    vals = []
    ops = []
    temp_vals = []
    
    transposed.each do |row|
      l = row.join("").strip
      temp_vals << l.scan(/\d+/).map(&:to_i).to_a[0]
      /[+*]/.match(l) { |m| ops << m.to_s.to_sym }
    
      if l == ""
        vals << temp_vals.compact
        temp_vals = []
      end
    end
    
    vals << temp_vals.compact unless temp_vals.empty?
    
    vals.each_with_index.sum do |v, i|
      v.inject(ops[i])
    end