adding gem file executable
parent
cee9087661
commit
13851a980c
1
Gemfile
1
Gemfile
|
@ -4,4 +4,3 @@ source "https://rubygems.org"
|
||||||
|
|
||||||
gem 'tty-prompt'
|
gem 'tty-prompt'
|
||||||
gem 'tty-file'
|
gem 'tty-file'
|
||||||
gem "colorize", "~> 0.8.1"
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
colorize (0.8.1)
|
|
||||||
diff-lcs (1.5.0)
|
diff-lcs (1.5.0)
|
||||||
pastel (0.8.0)
|
pastel (0.8.0)
|
||||||
tty-color (~> 0.5)
|
tty-color (~> 0.5)
|
||||||
|
@ -25,7 +24,6 @@ PLATFORMS
|
||||||
arm64-darwin-21
|
arm64-darwin-21
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
colorize (~> 0.8.1)
|
|
||||||
tty-file
|
tty-file
|
||||||
tty-prompt
|
tty-prompt
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -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
|
16
app/main.rb
16
app/main.rb
|
@ -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
|
|
|
@ -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
|
|
@ -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
|
|
@ -2,6 +2,8 @@ require "tty-prompt"
|
||||||
require "tty-file"
|
require "tty-file"
|
||||||
require "ostruct"
|
require "ostruct"
|
||||||
|
|
||||||
|
require_relative("templates")
|
||||||
|
|
||||||
def new_day(prompt, day)
|
def new_day(prompt, day)
|
||||||
input = prompt.multiline("Example input").join("")
|
input = prompt.multiline("Example input").join("")
|
||||||
print input
|
print input
|
||||||
|
@ -9,7 +11,11 @@ def new_day(prompt, day)
|
||||||
|
|
||||||
day_name = "day_#{day}"
|
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}/run.rb", /%day_name%/, day_name
|
||||||
TTY::File.replace_in_file "#{day_name}/test.rb", /%day_name%/, day_name
|
TTY::File.replace_in_file "#{day_name}/test.rb", /%day_name%/, day_name
|
|
@ -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
|
|
@ -0,0 +1 @@
|
||||||
|
MIT
|
Loading…
Reference in New Issue