Skip to content

Instantly share code, notes, and snippets.

@Pablo-R
Created September 19, 2017 10:50
Show Gist options
  • Save Pablo-R/1ed8edc3519402bafa9e58188ab0ffd6 to your computer and use it in GitHub Desktop.
Save Pablo-R/1ed8edc3519402bafa9e58188ab0ffd6 to your computer and use it in GitHub Desktop.
LCD Numbers Another Version
#!/usr/bin/ruby
class LCDNumber
def initialize(size, input_number)
@input_number = input_number
@size = size
@display_code = [
['horizontal_line_yes', 'vertical_line_both', 'horizontal_line_no', 'vertical_line_both', 'horizontal_line_yes' ],
['horizontal_line_no', 'vertical_line_right', 'horizontal_line_no', 'vertical_line_right', 'horizontal_line_no' ],
['horizontal_line_yes', 'vertical_line_right', 'horizontal_line_yes', 'vertical_line_left', 'horizontal_line_yes' ],
['horizontal_line_yes', 'vertical_line_right', 'horizontal_line_yes', 'vertical_line_right', 'horizontal_line_yes'],
['horizontal_line_no', 'vertical_line_both', 'horizontal_line_yes', 'vertical_line_right', 'horizontal_line_no' ],
['horizontal_line_yes', 'vertical_line_left', 'horizontal_line_yes', 'vertical_line_right', 'horizontal_line_yes' ],
['horizontal_line_yes', 'vertical_line_left', 'horizontal_line_yes', 'vertical_line_both', 'horizontal_line_yes' ],
['horizontal_line_yes', 'vertical_line_right', 'horizontal_line_no', 'vertical_line_right', 'horizontal_line_no' ],
['horizontal_line_yes', 'vertical_line_both', 'horizontal_line_yes', 'vertical_line_both', 'horizontal_line_yes' ],
['horizontal_line_yes', 'vertical_line_both', 'horizontal_line_yes', 'vertical_line_right', 'horizontal_line_yes' ]
]
end
def print_LCD
@numbers = convert_to_array_from(@input_number)
5.times do |row_index|
@output = ''
if row_index == 1 || row_index == 3
print_vertical row_index
else
print_horizontal row_index
end
puts @output.concat('')
end
end
private
def print_vertical column_index
(@size).times do
@numbers.each do |number|
code_value = @display_code[number][column_index]
case code_value
when 'vertical_line_right' then @output.concat (' ' + ' ' * @size + '|')
when 'vertical_line_left' then @output.concat ('|' + ' ' * @size + ' ')
when 'vertical_line_both' then @output.concat ('|' + ' ' * @size + '|')
end
end
@output.concat("\n")
end
end
private
def print_horizontal column_index
@numbers.each do |number|
code_value = @display_code[number][column_index]
case code_value
when 'horizontal_line_no' then @output.concat (' ' + ' ' * @size + ' ')
when 'horizontal_line_yes' then @output.concat (' ' + '-' * @size + ' ')
end
end
end
private
def convert_to_array_from(string_of_numbers)
string_of_numbers.split('').map { |string_of_numbers| string_of_numbers.to_i }
end
end
if ARGV.length == 3 && ARGV[0].match('-s') && ARGV[1].match(/\A\d+\z/) && ARGV[2].match(/\A\d+\z/)
lcd = LCDNumber.new(ARGV[1].to_i, ARGV[2])
lcd.print_LCD
elsif ARGV.length == 1 && ARGV[0].match(/^[0-9]+$/)
lcd = LCDNumber.new(2, ARGV[0])
lcd.print_LCD
else
puts "Incorrect input"
exit
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment