first version of aoc helper

main
Guido Schweizer 2022-12-02 18:57:54 +01:00
commit cee9087661
11 changed files with 152 additions and 0 deletions

1
.ruby-version Normal file
View File

@ -0,0 +1 @@
3.1.2

7
Gemfile Normal file
View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
source "https://rubygems.org"
gem 'tty-prompt'
gem 'tty-file'
gem "colorize", "~> 0.8.1"

33
Gemfile.lock Normal file
View File

@ -0,0 +1,33 @@
GEM
remote: https://rubygems.org/
specs:
colorize (0.8.1)
diff-lcs (1.5.0)
pastel (0.8.0)
tty-color (~> 0.5)
tty-color (0.6.0)
tty-cursor (0.7.1)
tty-file (0.10.0)
diff-lcs (~> 1.3)
pastel (~> 0.8)
tty-prompt (~> 0.22)
tty-prompt (0.23.1)
pastel (~> 0.8)
tty-reader (~> 0.8)
tty-reader (0.9.0)
tty-cursor (~> 0.7)
tty-screen (~> 0.8)
wisper (~> 2.0)
tty-screen (0.8.1)
wisper (2.0.1)
PLATFORMS
arm64-darwin-21
DEPENDENCIES
colorize (~> 0.8.1)
tty-file
tty-prompt
BUNDLED WITH
2.3.22

16
app/main.rb Normal file
View File

@ -0,0 +1,16 @@
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

21
app/tasks/new_day.rb Normal file
View File

@ -0,0 +1,21 @@
require "tty-prompt"
require "tty-file"
require "ostruct"
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.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", /%example_result%/, result
TTY::File.replace_in_file "#{day_name}/test.rb", /%example_input%/, input
puts "Done - run with:"
puts "ruby #{day_name}/test.rb"
end

5
app/tasks/part_two.rb Normal file
View File

@ -0,0 +1,5 @@
require "tty-prompt"
def part_two(prompt, day)
prompt.say("part two not yet supported")
end

0
app/templates/data Normal file
View File

17
app/templates/impl.rb Normal file
View File

@ -0,0 +1,17 @@
#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

19
app/templates/run.rb Normal file
View File

@ -0,0 +1,19 @@
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

22
app/templates/test.rb Normal file
View File

@ -0,0 +1,22 @@
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

11
readme.md Normal file
View File

@ -0,0 +1,11 @@
## Helper for solving Advent of Code days
run `ruby app/main.rb`
name the day
first input is the example input
second input is the examples result
this will generate everything needed to start coding the day
tbd part2