Skip to content

Instantly share code, notes, and snippets.

@tbilous
Created July 11, 2019 15:58
Show Gist options
  • Save tbilous/825d1b9ba1338ba8fa315b591c895ad5 to your computer and use it in GitHub Desktop.
Save tbilous/825d1b9ba1338ba8fa315b591c895ad5 to your computer and use it in GitHub Desktop.
part 1 task 1
#!/usr/bin/env ruby
# example: ruby task_p1_t1.rb 'abcdab987612'
require 'ostruct'
input_str = ARGV[0]
input_chars = input_str.chars
first_char = input_chars.shift
initial_state = OpenStruct.new(
out: [],
last_seen: first_char,
range_first_char: nil,
range_last_char: nil,
range_len: 1
)
res = input_chars.reduce(initial_state) do |state, current_char|
if (current_char.ord - state.last_seen.ord).abs == 1
state.range_len += 1
state.out.push(state.last_seen) unless state.range_first_char
state.range_first_char ||= state.last_seen
state.range_last_char = current_char
else
state.out.push('-') if state.range_len > 2
state.out.push(state.last_seen)
state.range_first_char = nil
state.range_last_char = nil
state.range_len = 1
end
state.last_seen = current_char
puts state
end
puts res.out.push(res.last_seen).join
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment