Skip to content

Instantly share code, notes, and snippets.

@Pablo-R
Created September 19, 2017 10:49
Show Gist options
  • Save Pablo-R/47445e1fe680caa79adb37bc34d29131 to your computer and use it in GitHub Desktop.
Save Pablo-R/47445e1fe680caa79adb37bc34d29131 to your computer and use it in GitHub Desktop.
LCD Numbers
#!/usr/bin/ruby
class LCDNumber
def initialize(size, input_number)
@input_number = input_number
@size = size
@symbol_style = {
horizontal_line_yes: " " + "-" * @size + " ",
vertical_line_both: ["|" + " " * @size + "|"] * @size,
horizontal_line_no: " " + " " * @size + " ",
vertical_line_right: [" " + " " * @size + "|"] * @size,
vertical_line_left: ["|" + " " * @size + " "] * @size
}
@display_digits = [
[@symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_both], @symbol_style[:horizontal_line_no], @symbol_style[:vertical_line_both], @symbol_style[:horizontal_line_yes]],
[@symbol_style[:horizontal_line_no], @symbol_style[:vertical_line_right], @symbol_style[:horizontal_line_no], @symbol_style[:vertical_line_right], @symbol_style[:horizontal_line_no]],
[@symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_right], @symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_left], @symbol_style[:horizontal_line_yes]],
[@symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_right], @symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_right], @symbol_style[:horizontal_line_yes]],
[@symbol_style[:horizontal_line_no], @symbol_style[:vertical_line_both], @symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_right], @symbol_style[:horizontal_line_no]],
[@symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_left], @symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_right], @symbol_style[:horizontal_line_yes]],
[@symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_left], @symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_both], @symbol_style[:horizontal_line_yes]],
[@symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_right], @symbol_style[:horizontal_line_no], @symbol_style[:vertical_line_right], @symbol_style[:horizontal_line_no]],
[@symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_both], @symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_both], @symbol_style[:horizontal_line_yes]],
[@symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_both], @symbol_style[:horizontal_line_yes], @symbol_style[:vertical_line_right], @symbol_style[:horizontal_line_no]]
]
end
def print_LCD
(2 * @size + 3).times do |index| #calculate number of rows
string = ""
convert_to_array_from(@input_number).map { |number| string.concat("#{@display_digits[number].flatten[index]}") }
puts string.concat(' ')
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