# CS 1120: Media Computation

#### Homework 2: Solution for Question 1

Don't think of a solution to the entire problem, think of the simplest step towards a solution. Implement that step, then consider the next simplest step - continue until problem is solved. Following is a very detailed example of one possible solution to question one.

You need to generate a square.
You generate that square by printing characters.
You print characters one line at a time (i.e., we don't print in columns)
Let's try doing this for a square of x's with side=5 (we'll worry about passing parameters later).
Look at the sample result in the task:

```xxxxx
x   x
x   x
x   x
xxxxx
```

Let's consider this one line at a time:

```line 1: print 5 "x"
line 2: print "x", then 3 spaces, then "x"
line 3: print "x", then 3 spaces, then "x"
line 4: print "x", then 3 spaces, then "x"
line 5: print 5 "x"
```

Recall the material of chapter 3: we build up strings using concatenation. However, if we need to repeat a character a number of times, we can use multiplication (which is repeated concatenation!) So, for line 1 and 5 we can use:

```print "x" * 5
```

What about lines 2-4? How can we express 3 in terms of 5 (which is the size)? How about 5-2? That gives us:

```print "x" + " " * (5 - 2) + "x"
```

Thus, we have the following code:

```print "x" * 5
print "x" + " " * (5 - 2) + "x"
print "x" + " " * (5 - 2) + "x"
print "x" + " " * (5 - 2) + "x"
print "x" * 5
```

Consider the three inner print statements - that's repetition - and for that we should use a loop:

```for i in range(0, 3):
print "x" + " " * (5 - 2) + "x"
```

Let's put it together, substituting 5-2 for 3, and adding the outer print statements:

```print "x" * 5
for i in range(0, (5 - 2)):
print "x" + " " * (5 - 2) + "x"
print "x" * 5
```

Last step: see those 5's and x's? Those are our parameters! On to the final solution:

```def textsquare(char, size):
print char * size
for i in range(0, (size - 2)):
print char + " " * (size - 2) + char
print char * size
```

You can improve this slightly - eliminating minor duplication, but that is left as an exercise for the reader.

Main idea: don't try to solve the whole thing at once; break down your problem into smaller problems - and solve them one step at a time, building up towards the solution.

#### Back to Image Manipulation

[to be posted later this week..]