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-file'
 | 
			
		||||
gem "colorize", "~> 0.8.1"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											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,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
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -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