aoc_rb 0.1.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 076dd89dac44c23506bbb8246e31461f1c368b80641e5ffcb6fd1bdf61ddfb88
4
- data.tar.gz: 976bd57bcd1cc83e82374daf596f4c8225915c55aea4550dc443194e0fe16c92
3
+ metadata.gz: 03b8a728ae0c5b35a43fc4a6c84c178820c71bc216682fd4998f4fa4aa3f713f
4
+ data.tar.gz: 5f3286c76bf28ae59b9247a8b537fa3f1f642cc0ff3752bec90ccd71d34650d3
5
5
  SHA512:
6
- metadata.gz: 4cf7d655b9f0abf9fbcb510401398c2a579d7695b7bac06d89285a94549e94f7a382801b6cc765f1765c8d7c48f60c5330119a2bf89d35224bab536a76aa9262
7
- data.tar.gz: faa35ceb5476c8df89d3cd84c5d423e62d652e216f17bd79b666d96f2f58d4400f3da682f1009b0b4687c2b026226e6bcf196303ebca04f4db5065e048216c91
6
+ metadata.gz: b6c6be37087f9ba31bc68a1d317a3215fda3786787cd6c908cfa59a459c98bd1713a59129e583459396768780e2b4564895c7261058f23cd1026881414e89deb
7
+ data.tar.gz: fbb164d72c20009d22ada48ac5bd7731418581c7ee4db3733cb4488c6c29fdd3c7cd56927637009f9faf32385533f4fdd0f9f9ed4cd478bfc766c9a02aa34664
@@ -14,20 +14,29 @@ on:
14
14
  branches: [ main ]
15
15
 
16
16
  jobs:
17
+ changelog:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+ - id: read-version
22
+ run: |
23
+ echo "::set-output name=VERSION::`cat lib/aoc_rb/version.rb | grep -i version | awk '{ print $3 }' | sed -e 's/\"//g'`"
24
+ - uses: dangoslen/changelog-enforcer@v2.3.1
25
+ with:
26
+ skipLabels: 'skip-changelog'
27
+ expectedLatestVersion: ${{ steps.read-version.outputs.VERSION }}
17
28
  test:
18
-
19
29
  runs-on: ubuntu-latest
20
30
  strategy:
21
31
  matrix:
22
- ruby-version: ['2.6', '2.7', '3.0']
23
-
32
+ ruby-version: ['2.6', '2.7', '3.0', '3.1']
24
33
  steps:
25
34
  - uses: actions/checkout@v2
26
35
  - name: Set up Ruby
27
36
  # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
37
  # change this to (see https://github.com/ruby/setup-ruby#versioning):
29
38
  # uses: ruby/setup-ruby@v1
30
- uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
39
+ uses: ruby/setup-ruby@ebaea52cb20fea395b0904125276395e37183dac
31
40
  with:
32
41
  ruby-version: ${{ matrix.ruby-version }}
33
42
  bundler-cache: true # runs 'bundle install' and caches installed gems automatically
data/CHANGELOG.md ADDED
@@ -0,0 +1,25 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [0.2.2]
8
+ ### Fixed
9
+ - FileUtils uninitialized constant bug ([#10](https://github.com/pacso/aoc_rb/pull/10))
10
+
11
+ ## [0.2.1]
12
+
13
+ ## [0.2.0]
14
+
15
+ ## [0.1.0]
16
+
17
+ ## [0.0.0]
18
+
19
+ Initial release.
20
+
21
+ [Unreleased]: https://github.com/pacso/aoc_rb/compare/v0.2.2...HEAD
22
+ [0.2.2]: https://github.com/pacso/aoc_rb/compare/v0.2.1...v0.2.2
23
+ [0.2.1]: https://github.com/pacso/aoc_rb/compare/v0.2.0...v0.2.1
24
+ [0.2.0]: https://github.com/pacso/aoc_rb/compare/v0.1.0...v0.2.0
25
+ [0.1.0]: https://github.com/pacso/aoc_rb/compare/v0.0.0...v0.1.0
data/lib/aoc_rb/app.rb CHANGED
@@ -9,8 +9,16 @@ require 'aoc_rb/puzzle_input'
9
9
  require 'aoc_rb/puzzle_solution'
10
10
  require 'aoc_rb/puzzle_source'
11
11
 
12
- src_files = File.join(Dir.getwd, "challenges", "**", "*.rb")
12
+ shared_files = File.join(Dir.getwd, "challenges", "shared", "**", "*.rb")
13
+ Dir[shared_files].each do |file|
14
+ if File.exist? file
15
+ require file
16
+ else
17
+ puts "missing file #{file}"
18
+ end
19
+ end
13
20
 
21
+ src_files = File.join(Dir.getwd, "challenges", "20**", "**", "*.rb")
14
22
  Dir[src_files].each do |file|
15
23
  if File.exist? file
16
24
  require file
@@ -72,12 +80,12 @@ module AocRb
72
80
  method_option :day, aliases: "-d", type: :numeric, default: Time.now.day
73
81
 
74
82
  def exec(year = options[:year], day = options[:day])
75
- puzzle = AocRb::PuzzleSource.create_puzzle(year, day)
76
83
  input = AocRb::PuzzleInput.load(year, day)
84
+ puzzle = AocRb::PuzzleSource.create_puzzle(year, day, input)
77
85
 
78
86
  level = Puzzle.instructions_exist?(year, day, :part_2) ? 2 : 1
79
87
  puts "#{year} Day #{day}"
80
- solution = PuzzleSource.run_part("part #{level}") { puzzle.send("part_#{level}", input) }
88
+ solution = PuzzleSource.run_part("part #{level}") { puzzle.send("part_#{level}") }
81
89
 
82
90
  puts "Submit solution? #{solution} (y/N)"
83
91
  submit = STDIN.gets.chomp.downcase
data/lib/aoc_rb/cli.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "fileutils"
3
4
  require "aoc_rb/app_loader"
4
5
  AocRb::AppLoader.exec_app
5
6
 
@@ -22,6 +23,12 @@ module AocRb
22
23
  FileUtils.mkdir_p bin_dir
23
24
  File.open(bin_path, "w") { |f| f.write(File.read(bin_template)) }
24
25
 
26
+ shared_dir = File.join(project_dir, "challenges", "shared")
27
+ solution_path = File.join(shared_dir, "solution.rb")
28
+ solution_template = File.join(File.dirname(__FILE__), "../../templates/solution_base.rb")
29
+ FileUtils.mkdir_p shared_dir
30
+ File.open(solution_path, "w") { |f| f.write(File.read(solution_template)) }
31
+
25
32
  spec_dir = File.join(project_dir, "spec")
26
33
  spec_helper_path = File.join(spec_dir, "spec_helper.rb")
27
34
  spec_helper_template = File.join(File.dirname(__FILE__), "../../templates/spec/spec_helper.rb")
@@ -6,9 +6,9 @@ module AocRb
6
6
 
7
7
  def submit(level, year, day, answer = nil, allow_waiting = true)
8
8
  if answer.nil?
9
- puzzle = PuzzleSource.create_puzzle(year, day)
10
9
  input = PuzzleInput.load(year, day)
11
- answer = level == 1 ? puzzle.part_1(input) : puzzle.part_2(input)
10
+ puzzle = PuzzleSource.create_puzzle(year, day, input)
11
+ answer = level == 1 ? puzzle.part_1 : puzzle.part_2
12
12
  end
13
13
 
14
14
  aoc_api = AocApi.new(ENV['AOC_COOKIE'])
@@ -5,10 +5,10 @@ module AocRb
5
5
  module PuzzleSource
6
6
  extend self
7
7
 
8
- def create_puzzle(year, day)
8
+ def create_puzzle(year, day, input)
9
9
  padded_day = Puzzle.padded(day)
10
10
  begin
11
- Module.const_get("Year#{year}").const_get("Day#{padded_day}").new
11
+ Module.const_get("Year#{year}").const_get("Day#{padded_day}").new(input)
12
12
  rescue NameError
13
13
  puts "There is no solution for this puzzle"
14
14
  end
@@ -1,3 +1,3 @@
1
1
  module AocRb
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -1,12 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
  module Year<%= @year %>
3
- class Day<%= @day %>
4
- def part_1(input)
3
+ class Day<%= @day %> < Solution
4
+ # @input is available if you need the raw data input
5
+ # Call `data` to access either an array of the parsed data, or a single record for a 1-line input file
6
+
7
+ def part_1
5
8
  nil
6
9
  end
7
10
 
8
- def part_2(input)
11
+ def part_2
9
12
  nil
10
13
  end
14
+
15
+ private
16
+ # Processes each line of the input file and stores the result in the dataset
17
+ # def process_input(line)
18
+ # line.map(&:to_i)
19
+ # end
20
+
21
+ # Processes the dataset as a whole
22
+ # def process_dataset(set)
23
+ # set
24
+ # end
11
25
  end
12
26
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true %>
2
+
3
+ class Solution
4
+ def self.part_1(*input)
5
+ new(*input).part_1
6
+ end
7
+
8
+ def self.part_2(*input)
9
+ new(*input).part_2
10
+ end
11
+
12
+ def initialize(input)
13
+ @input = input
14
+ end
15
+
16
+ def data
17
+ @data ||= begin
18
+ processed = @input.lines(chomp: true).map do |line|
19
+ process_input line
20
+ end
21
+
22
+ processed.length == 1 ? processed.first : process_dataset(processed)
23
+ end
24
+ end
25
+
26
+ private
27
+ def process_input(line)
28
+ line
29
+ end
30
+
31
+ def process_dataset(set)
32
+ set
33
+ end
34
+ end
@@ -2,7 +2,6 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  RSpec.describe Year<%= @year %>::Day<%= @day %> do
5
- let(:puzzle) { Year<%= @year %>::Day<%= @day %>.new }
6
5
  let(:input) { File.read(File.join(File.dirname(__FILE__), "../../../challenges/<%= @year %>/<%= @day.to_s.rjust(2, "0") %>/input.txt")) }
7
6
  let(:example_input) {
8
7
  <<~EOF
@@ -13,21 +12,21 @@ RSpec.describe Year<%= @year %>::Day<%= @day %> do
13
12
 
14
13
  describe "part 1" do
15
14
  it "returns nil for the example input" do
16
- expect(puzzle.part_1(example_input)).to eq(nil)
15
+ expect(described_class.part_1(example_input)).to eq(nil)
17
16
  end
18
17
 
19
18
  it "returns nil for my input" do
20
- expect(puzzle.part_1(input)).to eq(nil)
19
+ expect(described_class.part_1(input)).to eq(nil)
21
20
  end
22
21
  end
23
22
 
24
23
  describe "part 2" do
25
24
  it "returns nil for the example input" do
26
- expect(puzzle.part_2(example_input)).to eq(nil)
25
+ expect(described_class.part_2(example_input)).to eq(nil)
27
26
  end
28
27
 
29
28
  it "returns nil for my input" do
30
- expect(puzzle.part_2(input)).to eq(nil)
29
+ expect(described_class.part_2(input)).to eq(nil)
31
30
  end
32
31
  end
33
32
  end
@@ -1,6 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Dir[File.join(File.dirname(__FILE__), "..", "challenges", "**", "*.rb")].each do |file|
3
+ Dir[File.join(File.dirname(__FILE__), "..", "challenges", "shared", "**", "*.rb")].each do |file|
4
+ require file
5
+ end
6
+
7
+ Dir[File.join(File.dirname(__FILE__), "..", "challenges", "20*", "**", "*.rb")].each do |file|
4
8
  require file
5
9
  end
6
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aoc_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Pascoe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-01 00:00:00.000000000 Z
11
+ date: 2022-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -106,6 +106,7 @@ files:
106
106
  - ".github/workflows/tests.yml"
107
107
  - ".gitignore"
108
108
  - ".rspec"
109
+ - CHANGELOG.md
109
110
  - CODE_OF_CONDUCT.md
110
111
  - Gemfile
111
112
  - LICENSE
@@ -130,6 +131,7 @@ files:
130
131
  - templates/Gemfile
131
132
  - templates/bin/aoc
132
133
  - templates/solution.rb.erb
134
+ - templates/solution_base.rb
133
135
  - templates/solution_spec.rb.erb
134
136
  - templates/spec/spec_helper.rb
135
137
  homepage: https://github.com/pacso/aoc_rb
@@ -154,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
156
  - !ruby/object:Gem::Version
155
157
  version: '0'
156
158
  requirements: []
157
- rubygems_version: 3.2.3
159
+ rubygems_version: 3.3.7
158
160
  signing_key:
159
161
  specification_version: 4
160
162
  summary: A Ruby toolkit for Advent of Code