Skip to content

Instantly share code, notes, and snippets.

@konalegi
Created September 21, 2016 10:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save konalegi/fa98a6a11ca06e28c709c59e21c7aa81 to your computer and use it in GitHub Desktop.
Save konalegi/fa98a6a11ca06e28c709c59e21c7aa81 to your computer and use it in GitHub Desktop.
require "minitest/autorun"
class SequenceParser
def self.calc_sequence(input)
words = []
input.each_char do |char|
last_elem = words.last
if last_elem.nil?
words << { elem_count: 1, elem: char }
else
if (last_elem[:elem] == char)
last_elem[:elem_count] += 1
else
words << { elem_count: 1, elem: char }
end
end
end
words.map{|o| o.values.join }.join
end
end
class TestSequence < Minitest::Test
def test_known_sequences
assert_equal '11', SequenceParser.calc_sequence('1')
assert_equal '21', SequenceParser.calc_sequence('11')
assert_equal '1211', SequenceParser.calc_sequence('21')
assert_equal '111221', SequenceParser.calc_sequence('1211')
assert_equal '312211', SequenceParser.calc_sequence('111221')
end
def test_smaple_sequences
start = nil
10.times do
start = SequenceParser.calc_sequence(start || '1')
end
assert_equal '11131221133112132113212221', start
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment