aoc_rb_helpers 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 87b50db9a3acbc96dbf8cb70e3a3fa2f3e1341166616c3e9c29a53b6d9994201
4
+ data.tar.gz: 109fc954d7f8ec4d396ee76f51f22bb0289aed2ee68c2e605898c7204049c079
5
+ SHA512:
6
+ metadata.gz: c03ddeaafa12bb07fd9c87a2d23f11d18edf593ba3ea4390dbea32d5322d0e77e1d0662e08062729f978c1cfc4e77c7437f3b9a06bb46b61bb3a876865577dbd
7
+ data.tar.gz: 204a9d87b4eb34b6b9ae37875d2e2b22235e585180522eae6a25dd100f326e682a3d68e0967ea9bfc258ab39fa53376322c24457b68093718a9ff93a0e26fdc5
@@ -0,0 +1,70 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ main ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ main ]
20
+ schedule:
21
+ - cron: '21 7 * * 4'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: [ 'ruby' ]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://git.io/codeql-language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v3
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v2
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
52
+
53
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
54
+ # If this step fails, then you should remove it and run the build manually (see below)
55
+ - name: Autobuild
56
+ uses: github/codeql-action/autobuild@v2
57
+
58
+ # ℹ️ Command-line programs to run using the OS shell.
59
+ # 📚 https://git.io/JvXDl
60
+
61
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
62
+ # and modify them (or add more) to build your code if your project
63
+ # uses a compiled language
64
+
65
+ #- run: |
66
+ # make bootstrap
67
+ # make release
68
+
69
+ - name: Perform CodeQL Analysis
70
+ uses: github/codeql-action/analyze@v2
@@ -0,0 +1,51 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Tests
9
+
10
+ on:
11
+ push:
12
+ branches: [ main ]
13
+ pull_request:
14
+ branches: [ main ]
15
+ types:
16
+ - opened
17
+ - synchronize
18
+ - reopened
19
+ - ready_for_review
20
+ - labeled
21
+ - unlabeled
22
+
23
+ jobs:
24
+ changelog:
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - id: read-version
29
+ run: |
30
+ echo "::set-output name=VERSION::`cat lib/aoc_rb/version.rb | grep -i version | awk '{ print $3 }' | sed -e 's/\"//g'`"
31
+ - uses: dangoslen/changelog-enforcer@v2.3.1
32
+ with:
33
+ skipLabels: 'skip-changelog'
34
+ expectedLatestVersion: ${{ steps.read-version.outputs.VERSION }}
35
+ test:
36
+ runs-on: ubuntu-latest
37
+ strategy:
38
+ matrix:
39
+ ruby-version: ['3.1', '3.2', '3.3']
40
+ steps:
41
+ - uses: actions/checkout@v4
42
+ - name: Set up Ruby
43
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
44
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
45
+ # uses: ruby/setup-ruby@v1
46
+ uses: ruby/setup-ruby@v1
47
+ with:
48
+ ruby-version: ${{ matrix.ruby-version }}
49
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
50
+ - name: Run tests
51
+ run: bundle exec rake
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /Gemfile.lock
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
13
+ /.idea/
14
+
15
+ # environment files
16
+ .ruby-gemset
17
+ .ruby-version
18
+
19
+ # gem build files
20
+ *.gem
data/CHANGELOG.md ADDED
@@ -0,0 +1,17 @@
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
+ ## [Unreleased]
8
+ - No unreleased changes!
9
+
10
+ ## [0.0.1]
11
+ Initial release.
12
+
13
+ ### Added
14
+ - Created `AocInput` class with initial helper methods
15
+
16
+ [Unreleased]: https://github.com/pacso/aoc_rb_helpers/compare/v0.0.1...HEAD
17
+ [0.0.1]: https://github.com/pacso/aoc_rb_helpers
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in aoc_rb.gemspec
4
+ gemspec
5
+
6
+ gem "rake", "~> 13.0"
7
+ gem "puts_debuggerer"
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Jon Pascoe
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,73 @@
1
+ # AocRbHelpers
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/aoc_rb_helpers.svg)](https://badge.fury.io/rb/aoc_rb_helpers)
4
+
5
+ This gem provides helper classes and functions to simplify solving [Advent of Code](https://adventofcode.com) puzzles.
6
+ It is a companion gem to the [aoc_rb](https://github.com/pacso/aoc_rb) gem.
7
+
8
+ Be warned - using this gem might suck the fun out of solving the puzzles yourself!
9
+
10
+ ## Getting Started
11
+
12
+ First of all, install the [aoc_rb](https://github.com/pacso/aoc_rb) gem and set up your project.
13
+
14
+ Next, add this gem to your project Gemfile, and run `bundle install`.
15
+
16
+ Open up `challenges/shared/solution.rb` in your project and require this gem at the top:
17
+
18
+ ```ruby
19
+ # frozen_string_literal: true
20
+
21
+ require "aoc_rb_helpers" # <-- Add this line
22
+
23
+ class Solution
24
+ ...
25
+ end
26
+ ```
27
+
28
+ You're good to go!
29
+
30
+ This gem additionally installs the excellent [puts_debuggerer](https://github.com/AndyObtiva/puts_debuggerer) gem, which you can use like this:
31
+
32
+ ```ruby
33
+ pd some_object
34
+ ```
35
+
36
+ You can read more on how you can use `pd` in their [README](https://github.com/AndyObtiva/puts_debuggerer/blob/master/README.md).
37
+
38
+ ## Examples
39
+
40
+ Below are some examples of how you can use the features of this gem.
41
+
42
+ ### Input manipulation
43
+
44
+ This example solution for 2024 Day 1 shows how the convenience methdos can be used to format the puzzle input:
45
+
46
+ ```ruby
47
+ # frozen_string_literal: true
48
+
49
+ module Year2024
50
+ class Day01 < Solution
51
+ def part_1
52
+ list_1, list_2 = data
53
+ list_1.each_with_index.sum { |item, index| (item - list_2[index]).abs }
54
+ end
55
+
56
+ def part_2
57
+ list_1, list_2 = data
58
+ list_1.each.sum { |item| item * list_2.count(item) }
59
+ end
60
+
61
+ private
62
+
63
+ def data
64
+ aoc_input
65
+ .multiple_lines
66
+ .columns_of_numbers
67
+ .transpose
68
+ .sort_arrays
69
+ .data
70
+ end
71
+ end
72
+ end
73
+ ```
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,28 @@
1
+ require_relative "lib/aoc_rb_helpers/version"
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "aoc_rb_helpers"
5
+ spec.version = AocRbHelpers::VERSION
6
+ spec.authors = ["Jon Pascoe"]
7
+ spec.email = ["jon.pascoe@me.com"]
8
+
9
+ spec.summary = %q{Helper methods to simplify solving Advent of Code puzzles}
10
+ spec.description = %q{Enhances the aoc_rb gem with tools for parsing puzzle input, and handling various data manipulations within Advent of Code puzzle solutions.}
11
+ spec.homepage = "https://github.com/pacso/aoc_rb_helpers"
12
+ spec.license = "MIT"
13
+ spec.required_ruby_version = Gem::Requirement.new("~> 3.1", ">= 3.1.0")
14
+
15
+ spec.metadata["homepage_uri"] = spec.homepage
16
+ spec.metadata["source_code_uri"] = "https://github.com/pacso/aoc_rb_helpers"
17
+ spec.metadata["changelog_uri"] = "https://github.com/pacso/aoc_rb_helpers/blob/main/CHANGELOG"
18
+
19
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ end
22
+ spec.bindir = "exe"
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ["lib"]
25
+
26
+ spec.add_dependency "aoc_rb", "~> 0.2", ">= 0.2.6"
27
+ spec.add_dependency "puts_debuggerer"
28
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AocInput
4
+ def initialize(input)
5
+ @raw_input = input
6
+ configure_method_access
7
+ end
8
+
9
+ def data
10
+ @data ||= @raw_input
11
+ end
12
+
13
+ def multiple_lines
14
+ @data = data.lines(chomp: true)
15
+ allow(:columns_of_numbers)
16
+ self
17
+ end
18
+
19
+ def columns_of_numbers(divider = nil)
20
+ can_call?(:columns_of_numbers, "call .multiple_lines first")
21
+ @data = data.map { |line| line.split(divider).map(&:to_i) }
22
+ allow(:sort_arrays)
23
+ allow(:transpose)
24
+ self
25
+ end
26
+
27
+ def transpose
28
+ can_call?(:transpose, "call .columns_of_numbers first")
29
+ @data = data.transpose
30
+ self
31
+ end
32
+
33
+ def sort_arrays
34
+ can_call?(:sort_arrays, "call .columns_of_numbers first")
35
+ @data = data.map { |ary| ary.sort }
36
+ self
37
+ end
38
+
39
+ private
40
+ def configure_method_access
41
+ @can_call = {
42
+ columns_of_numbers: false,
43
+ sort_arrays: false,
44
+ transpose: false
45
+ }
46
+ end
47
+
48
+ def allow(method_name)
49
+ @can_call[method_name.to_sym] = true
50
+ end
51
+
52
+ def can_call?(method_name, msg = "operation not permitted")
53
+ raise RuntimeError, msg unless @can_call[method_name.to_sym]
54
+ end
55
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Solution
4
+ private
5
+ def aoc_input
6
+ @aoc_input = AocInput.new(@input)
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module AocRbHelpers
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,3 @@
1
+ require "pd"
2
+
3
+ Dir[File.join(File.dirname(__FILE__), "aoc_rb_helpers", "**", "*.rb")].each { |file| require file }
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aoc_rb_helpers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jon Pascoe
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-12-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aoc_rb
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.2.6
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.2.6
33
+ - !ruby/object:Gem::Dependency
34
+ name: puts_debuggerer
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ description: Enhances the aoc_rb gem with tools for parsing puzzle input, and handling
48
+ various data manipulations within Advent of Code puzzle solutions.
49
+ email:
50
+ - jon.pascoe@me.com
51
+ executables: []
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - ".github/workflows/codeql-analysis.yml"
56
+ - ".github/workflows/tests.yml"
57
+ - ".gitignore"
58
+ - CHANGELOG.md
59
+ - Gemfile
60
+ - LICENSE
61
+ - README.md
62
+ - Rakefile
63
+ - aoc_rb_helpers.gemspec
64
+ - lib/aoc_rb_helpers.rb
65
+ - lib/aoc_rb_helpers/aoc_input.rb
66
+ - lib/aoc_rb_helpers/solution/input_handling.rb
67
+ - lib/aoc_rb_helpers/version.rb
68
+ homepage: https://github.com/pacso/aoc_rb_helpers
69
+ licenses:
70
+ - MIT
71
+ metadata:
72
+ homepage_uri: https://github.com/pacso/aoc_rb_helpers
73
+ source_code_uri: https://github.com/pacso/aoc_rb_helpers
74
+ changelog_uri: https://github.com/pacso/aoc_rb_helpers/blob/main/CHANGELOG
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '3.1'
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 3.1.0
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubygems_version: 3.5.22
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: Helper methods to simplify solving Advent of Code puzzles
97
+ test_files: []