exercism / exercism/problem-specifications

Exercise idea: Golomb sequence

Aperta
#906 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub
new exercise idea
Lingua principale
Ruby
Stelle
358
Fork
563
Merge medio
18h 41m
PR unite (30g)
2

Descrizione

### Golomb sequence
See:[ OEIS page of Golomb Sequence](https://oeis.org/A001462) for more information.

I like the idea of the Golomb sequence as an exercise. There are many possible implementations like the recursive definition:
```Haskell
g :: Int -> Int
g 1 = 1
g n = 1 + g (n - g (g (n-1)))
```
or using the self-descriptive characteristics of the sequence:
```Haskell
golomb :: Int -> Int
golomb n = sucGolomb !! (n-1)

sucGolomb :: [Int]
sucGolomb = 1 : 2 : 2 : f 3
where f x = (replicate (golomb x) x) ++ (f (x+1))
```

but non of them it's really close of being efficient. So this might be good as an example of how and when to use recursive functions.

```Haskell
import Prelude hiding (replicate, length, drop)
import Data.Sequence ((><), index, replicate, fromList, length, drop)

golomb :: Int -> Int
golomb n = fn (fromList [1, 2, 2]) 3 2
where fn gl x t = if n <= length gl
then gl `index` (pred n)
else let n_gl = (><) gl (replicate t x)
in fn n_gl (succ x) (n_gl `index` x)
```
And there are probably a lot of better (faster and cleaner) implementations out there. But this one at least implicates to try an alternative to lists.

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.