### Haskell or C?

I got bored one day and was looking for something to test my coding skills by trying to solve a difficult problem on a difficult contest. Luckily, reddit provided me with this contest which was exactly what I was looking for.

It seemed to me that Haskell was a valid option for solving this. So, I started writing a function to compute the value of the sequence of darts. Simple enough:

```valueOfSeq :: Int -> [Int] -> Int
valueOfSeq n seq = fst . head' . (dropWhile f) . (zip [1..]) \$ result
where
head' [] = (1 + last result, 1)
f (x, y) = x == y
result = sort . nub \$ l1 ++ l2 ++ l3 ++ l4 ++ l5 ++ l6
l1 = seq
l2 = nub [ x+y | x <- l1, y <- l1]
l3 = nub [ x+y | x <- l2, y <- l1]
l4
| n > 3 = nub [ x+y | x <- l3, y <- l1]
| otherwise = []
l5
| n > 4 = nub [ x+y | x <- l4, y <- l1]
| otherwise = []
l6
| n > 5 = nub [ x+y | x <- l5, y <- l1]
| otherwise = []
```

However, while trying to generate those sequences in an intelligent way I got into some troubles. Mainly caused by my inexperience in Haskell language but unacceptable at the moment. So, I’ve tried the same thing in C:

``` int getValueOfSeq(int R, int D, int seq[R])
{
Q *q = initQ();
int i;
elem x, y;
int value = 1;
for (i = 0; i < R; i++){
x.value = seq[i];
x.count = 1;
pushQ(q, x);
}
while (!isEmptyQ(q)){
x = popQ(q);
if (x.value != value)
break;
else
value++;
y.count = x.count + 1;
if (y.count <= D){
for (i = 0; i < R; i++){
y.value = x.value + seq[i];
pushQ(q, y);
}
}
}
cleanQ(q);
return value;
}
```

Taking into account some more additions (the auxiliary functions in C and some sequence generation in Haskell) the entire code looks like this:

```mihai@keldon:~\$ wc -l p.c
115 p.c
mihai@keldon:~\$ wc -l Test.hs
38 Test.hs
```

Need I say more?