[Tutor] Re: "Big Letters".

Danny Yoo dyoo at hkn.eecs.berkeley.edu
Thu Jan 15 15:22:24 EST 2004



On Thu, 15 Jan 2004, Abel Daniel wrote:

> Jorge Godoy writes:
> > Does anyone know of a Python module that can generate big letters as
> > those seen on POS for text mode? It seems that curses can't generate
> > them by itself...
>
> Although not a python module, figlet (http://www.figlet.org/) is a nice
> program which generates texts like these. You could open a pipe to it
> and write to it's stdin and read from it's stdout.


On a tangent note, has anyone seen:

    http://online-judge.uva.es/portal/modules/acmproblemset/

yet?  I'm starting to read through the book "Programming Challenges: The
Programming Contest Training Manual", and it looks like a great source of
practice problems!


Jorge's question touches on one of the contest challenges, an LCD number
displayer problem:

    http://online-judge.uva.es/problemset/v7/706.html

*grin* Anyone want to try their hand at this?


Talk to you later!


*** spoiler space below ***














*** spoilers ahead ***



Here's my crack at the LCD problem:

###
"""An LCD displayer.

Danny Yoo (dyoo at hkn.eecs.berkeley.edu)

A solution for:

    http://online-judge.uva.es/problemset/v7/706.html
"""

from sys import stdout

def main():
    while 1:
        line = raw_input()
        if not line: break
        size, digits = line.split()
        if (size, digits) == ('0', '0'):
            break
        draw_digits(digits, int(size))


"""
An LCD digit is composed of 7 components:


  0
 1 2
  3
 4 5
  6

So we keep a map between digits and the LCD pattern to generate that
digit.
"""
LCD_DATA = { '0': (1, 1, 1, 0, 1, 1, 1),  ## zero
             '1': (0, 0, 1, 0, 0, 1, 0),  ## one
             '2': (1, 0, 1, 1, 1, 0, 1),  ## two
             '3': (1, 0, 1, 1, 0, 1, 1),  ## three
             '4': (0, 1, 1, 1, 0, 1, 0),  ## four
             '5': (1, 1, 0, 1, 0, 1, 1),  ## five
             '6': (1, 1, 0, 1, 1, 1, 1),  ## six
             '7': (1, 0, 1, 0, 0, 1, 0),  ## seven
             '8': (1, 1, 1, 1, 1, 1, 1),  ## eight
             '9': (1, 1, 1, 1, 0, 1, 1),  ## nine
             }

def draw_digits(digits, size):
    draw_horizontals(digits, size, 0)
    for i in range(size):
        draw_verticals(digits, size, 1, 2)
    draw_horizontals(digits, size, 3)
    for i in range(size):
        draw_verticals(digits, size, 4, 5)
    draw_horizontals(digits, size, 6)


def draw_horizontals(digits, size, component):
    for d in digits:
        space()
        if LCD_DATA[d][component] == 1:
            dash(size)
        else:
            space(size)
        space()

        space() ## one space between each digit
    newline()



def draw_verticals(digits, size, component1, component2):
    for d in digits:
        if LCD_DATA[d][component1] == 1:
            bar()
        else:
            space()
        space(size)
        if LCD_DATA[d][component2] == 1:
            bar()
        else:
            space()

        space() ## one space between each digit
    newline()




def dash(size):
    """Write out a dash."""
    stdout.write("-" * size)

def bar():
    """Write out a bar."""
    stdout.write("|")

def space(size = 1):
    """Write out a space."""
    stdout.write(" " * size)

def newline():
    """Write out a newline."""
    stdout.write("\n")



if __name__ == '__main__':
    main()
###




More information about the Tutor mailing list