Mercurial > repos > other > adventofcode2023
annotate day1b.rb @ 27:6b58ddfaed38
Add Day 18 part 1 solution using line crossing
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Tue, 02 Jan 2024 16:04:33 +0000 |
parents | 76cc43966538 |
children |
rev | line source |
---|---|
0
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
1 #! /usr/bin/env ruby |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
2 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
3 if ARGV.length != 1 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
4 abort("Incorrect arguments - pass a single file") |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
5 elsif not File.exist? (ARGV[0]) |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
6 abort ("File #{ARGV[0]} did not exist") |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
7 end |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
8 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
9 file = ARGV[0] |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
10 sum = 0 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
11 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
12 number_map = { |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
13 "one" => 1, |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
14 "two" => 2, |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
15 "three" => 3, |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
16 "four" => 4, |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
17 "five" => 5, |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
18 "six" => 6, |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
19 "seven" => 7, |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
20 "eight" => 8, |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
21 "nine" => 9 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
22 } |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
23 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
24 (1..9).each {|i| number_map[i.to_s] = i} |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
25 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
26 File.open(file, "r").each_line do |line| |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
27 pos = line.length |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
28 value_1 = 0 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
29 number_map.each do |k,v| |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
30 index = line.index(k) |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
31 if index and index < pos |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
32 value_1 = v |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
33 pos = index |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
34 end |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
35 end |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
36 pos = line.length |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
37 line.reverse! |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
38 value_2 = 0 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
39 number_map.each do |k,v| |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
40 index = line.index(k.reverse) |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
41 if index and index < pos |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
42 value_2 = v |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
43 pos = index |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
44 end |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
45 end |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
46 sum += (value_1 * 10) + value_2 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
47 end |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
48 |
76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
49 puts sum |