aoc_rb_helpers 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []