# Test Yourself

By the time I got to Penn for my first year of college, I thought I was already a pretty good programmer. Completely self-taught, I had written two major systems in Turbo Pascal … one of them was a complete inventory system for a small factory, while the other scheduled all the production at one of Israel’s largest bakeries.

It took me until the midterm exams to realize I wasn’t as smart as I thought. I completely screwed up some questions, because I still didn’t get pointers and I still didn’t get recursion.

Never one to hold a grudge, I share those midterm questions with you… see if you can do better than I did freshman year.

1a. (MIT-Scheme) Using the function

```(define (accumulate combiner null-value l)
(if (null? l)
null-value
(combiner (car l)
(accumulate combiner
null-value
(cdr l)))))

```

Implement sum-of-squares, which calculates the sum of squares of a list, for example

```(sum-of-squares '(1 2 3 4 5))
```

should evaluate to 55.

(For the answer, select the text in the box:)

```(define (sum-of-squares l)
(accumulate (lambda (x y) (+ (* x x) y))
0
l))
```

1b. (JavaScript) OK, maybe Scheme is not your thing. This question is equivalent to 1a, in JavaScript.

Using the function

```function accumulate(combiner, nullValue, l)
{
if (l.length == 0)
return nullValue;
var first = l.shift();
return combiner(first, accumulate(combiner, nullValue, l));
}
```

Implement sumOfSquares, which calculates the sum of squares of a list, for example

```sumOfSquares([1,2,3,4,5])
```

should evaluate to 55.

(For the answer, select the text in the box:)

```function sumOfSquares(lst)
{
return accumulate(function(x,y){return x*x+y}, 0, lst);
}
```

2. (ANSI C) Write a C program of the following form:

```#include <stdio.h>
int main(int argc, char **argv)
{
???
}
```

such that, after compiling it, it can be executed as

```% ./a.out could harold eat eight salami elephants
```

and it will print the first letter of every argument (in this case, “cheese”).

(For the answer, select the text in the box:)

```#include <stdio.h>
int main(int argc, char** argv)
{
int i;
for (i=1; i<argc; i++)
{
putchar(argv[i]);
}
putchar('\n');
return 0;
}
```

3. (ANSI C) What is the output of the following C program?

```#include <stdio.h>

char *fn(int i, char *s)
{
while (i)
{
s++;
i--;
}

return s;
}

int main(int argc, char** argv)
{
int a = 2;
static char c[] = "test";

printf("%s\n", fn(a,c));

return 0;
}

```

(For the answer, select the text in the box:)

```st (followed by a newline)
```

For more programming challenges, check out TopCoder. 