diff --git a/Gemfile b/Gemfile index 6facc41..c9cb579 100644 --- a/Gemfile +++ b/Gemfile @@ -4,4 +4,3 @@ source "https://rubygems.org" gem 'tty-prompt' gem 'tty-file' -gem "colorize", "~> 0.8.1" diff --git a/Gemfile.lock b/Gemfile.lock index aa8cd92..b525079 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,6 @@ GEM remote: https://rubygems.org/ specs: - colorize (0.8.1) diff-lcs (1.5.0) pastel (0.8.0) tty-color (~> 0.5) @@ -25,7 +24,6 @@ PLATFORMS arm64-darwin-21 DEPENDENCIES - colorize (~> 0.8.1) tty-file tty-prompt diff --git a/aoc-helper-0.1.0.gem b/aoc-helper-0.1.0.gem new file mode 100644 index 0000000..d6042c4 Binary files /dev/null and b/aoc-helper-0.1.0.gem differ diff --git a/aoc.gemspec b/aoc.gemspec new file mode 100644 index 0000000..e3265ca --- /dev/null +++ b/aoc.gemspec @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +Gem::Specification.new do |spec| + spec.name = "aoc-helper" + spec.platform = Gem::Platform::RUBY + spec.version = "0.1.0" + spec.authors = ["Guido Schweizer"] + spec.email = ["guido.schweizer@posteo.de"] + spec.description = %q{helps to create basic folders for aoc} + spec.summary = %q{run aoc and follow instructions} + spec.homepage = "https://aoc.sgui.de" + spec.license = "MIT" + + spec.metadata["allowed_push_host"] = "https://rubygems.org" + spec.metadata["homepage_uri"] = spec.homepage + spec.metadata["source_code_uri"] = "https://github.com/guidocodes/aoc-helper" + + spec.files = Dir.glob("lib/**/*", File::FNM_DOTMATCH) + spec.extra_rdoc_files = ["readme.md", "license.txt"] + spec.bindir = "exe" + spec.executables = ["aoc"] + spec.require_paths = ["lib"] + spec.required_ruby_version = ">= 3.0.0" + + spec.add_dependency "tty-file", "~> 0.10" + spec.add_dependency "tty-prompt", "~> 0.23" +end \ No newline at end of file diff --git a/app/main.rb b/app/main.rb deleted file mode 100644 index 6e37348..0000000 --- a/app/main.rb +++ /dev/null @@ -1,16 +0,0 @@ -require "tty-prompt" -require_relative "tasks/new_day" -require_relative "tasks/part_two" - -prompt = TTY::Prompt.new - -day = prompt.ask("Name the day (1-24)") do |q| - q.in("1-24") -end -selected = prompt.select("What do you want to do", "New day":0, "Add part 2 to a day":1) - -if selected == 0 - new_day(prompt, day) -elsif selected == 1 - part_two(prompt, day) -end diff --git a/exe/aoc b/exe/aoc new file mode 100755 index 0000000..a0a031c --- /dev/null +++ b/exe/aoc @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +lib_path = File.expand_path('../lib', __dir__) +$:.unshift(lib_path) if !$:.include?(lib_path) + +require("aoc") + +begin + AOC.run +rescue StandardError => err + puts "ERROR: #{err.message}" + exit 1 #err.status +end \ No newline at end of file diff --git a/lib/aoc.rb b/lib/aoc.rb new file mode 100644 index 0000000..4fe363b --- /dev/null +++ b/lib/aoc.rb @@ -0,0 +1,20 @@ +require "tty-prompt" +require_relative "tasks/new_day" +require_relative "tasks/part_two" + +class AOC + def self.run + prompt = TTY::Prompt.new + + day = prompt.ask("Name the day (1-24)") do |q| + q.in("1-24") + end + selected = prompt.select("What do you want to do", "New day":0, "Add part 2 to a day":1) + + if selected == 0 + new_day(prompt, day) + elsif selected == 1 + part_two(prompt, day) + end + end +end diff --git a/app/tasks/new_day.rb b/lib/tasks/new_day.rb similarity index 67% rename from app/tasks/new_day.rb rename to lib/tasks/new_day.rb index 4037794..337010b 100644 --- a/app/tasks/new_day.rb +++ b/lib/tasks/new_day.rb @@ -2,14 +2,20 @@ require "tty-prompt" require "tty-file" require "ostruct" +require_relative("templates") + def new_day(prompt, day) input = prompt.multiline("Example input").join("") print input result = prompt.ask("Example result") day_name = "day_#{day}" - - TTY::File.copy_directory("app/templates","#{day_name}") + + TTY::File.create_dir(day_name) + TTY::File.create_file("#{day_name}/data") + TTY::File.create_file("#{day_name}/impl.rb", IMPL_RB) + TTY::File.create_file("#{day_name}/run.rb", RUN_RB) + TTY::File.create_file("#{day_name}/test.rb", TEST_RB) TTY::File.replace_in_file "#{day_name}/run.rb", /%day_name%/, day_name TTY::File.replace_in_file "#{day_name}/test.rb", /%day_name%/, day_name @@ -18,4 +24,4 @@ def new_day(prompt, day) puts "Done - run with:" puts "ruby #{day_name}/test.rb" -end \ No newline at end of file +end diff --git a/app/tasks/part_two.rb b/lib/tasks/part_two.rb similarity index 100% rename from app/tasks/part_two.rb rename to lib/tasks/part_two.rb diff --git a/lib/tasks/templates.rb b/lib/tasks/templates.rb new file mode 100644 index 0000000..942f9f6 --- /dev/null +++ b/lib/tasks/templates.rb @@ -0,0 +1,67 @@ + +TEST_RB = <<~'TEST' +require_relative "impl" + +INPUT = <<~IN +%example_input% +IN + +RESULT = %example_result% + +def test_example + parsed = parse(INPUT) + result = calculate(parsed) + + if result == RESULT + puts "Test successful. Now run with real input" + puts "ruby %day_name%/run.rb" + else + puts "Test failed" + puts "expected \"#{RESULT}\" got \"#{result}\"" + end +end + +test_example +TEST + +RUN_RB = <<~'RUN' +require_relative "impl" + +def print(result) + if result.is_a? Array + result.map! {|l| "#{l}\n" } + end + + puts result +end + +def run + puts "running your implementation" + input = File.new("%day_name%/data").read + data = parse(input) + result = calculate(data) + print(result) +end + +run +RUN + +IMPL_RB = <<~'IMPL' +#prepare the input which is a string containing new lines +def parse(input) + data = [] + input.each_line do |line| + data << line + end + data +end + +# result should a single string or integer +def calculate(data) + result = "" + data.each do |d| + result = d + end + result +end +IMPL \ No newline at end of file diff --git a/license.txt b/license.txt new file mode 100644 index 0000000..8ab70c0 --- /dev/null +++ b/license.txt @@ -0,0 +1 @@ +MIT \ No newline at end of file diff --git a/app/templates/data b/templates/data similarity index 100% rename from app/templates/data rename to templates/data diff --git a/app/templates/impl.rb b/templates/impl.rb similarity index 100% rename from app/templates/impl.rb rename to templates/impl.rb diff --git a/app/templates/run.rb b/templates/run.rb similarity index 100% rename from app/templates/run.rb rename to templates/run.rb diff --git a/app/templates/test.rb b/templates/test.rb similarity index 100% rename from app/templates/test.rb rename to templates/test.rb