annotate day4b.rb @ 3:9da7a71b313d

Implement scratchcard counting for Day 4
author IBBoard <dev@ibboard.co.uk>
date Mon, 04 Dec 2023 20:36:42 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 #! /usr/bin/env ruby
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3 require 'set'
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 if ARGV.length != 1
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 abort("Incorrect arguments - needs input file")
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 elsif not File.exist? (ARGV[0])
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 abort("File #{ARGV[0]} did not exist")
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 end
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 file = ARGV[0]
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 # Ruby arrays auto-magically grow when you set any index!
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 card_counts = Array.new
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 def add(array, index, value)
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 array[index].nil? ? value : array[index] + value
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 end
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 sum = 0
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 File.open(file, "r").each_line(chomp: true).with_index do |line, index|
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 card_counts[index] = add(card_counts, index, 1)
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22 card_count = card_counts[index]
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 winning_number_str, our_number_str = line.split(":")[1].split("|").map(&:chomp)
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 winning_numbers = Set.new(winning_number_str.split(" ").map(&:to_i))
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 our_numbers = Set.new(our_number_str.split(" ").map(&:to_i))
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26 our_winning_numbers = winning_numbers & our_numbers
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27 if our_winning_numbers.length > 0
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 # puts "Increase #{index + 1} to #{index + our_winning_numbers.length} by #{card_count}"
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29 # puts (1..our_winning_numbers.length)
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30 (1..our_winning_numbers.length).each {|v| card_counts[index + v] = add(card_counts, index + v, card_count)}
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31 end
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32 end
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34 #puts card_counts
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35 puts card_counts.sum
9da7a71b313d Implement scratchcard counting for Day 4
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36 puts sum