Copyright | (c) Eric Bailey 2024-2025 |
---|---|
License | MIT |
Maintainer | eric@ericb.me |
Stability | stable |
Portability | POSIX |
Safe Haskell | Safe-Inferred |
Language | GHC2021 |
Data.Rhythm.DeBruijn
Contents
Description
Constructing de Bruijn sequences using a greedy algorithm.
References
- De Bruijn Sequence and Universal Cycle Constructions (2024). http://debruijnsequence.org.
Synopsis
- deBruijnSequence :: Integer -> Integer -> [Integer]
- deBruijnSequence' :: forall k n. (KnownNat k, KnownNat n) => Vector (k ^ n) (Finite k)
- data DeBruijnState (k :: Nat) (n :: Nat) = DeBruijnState {}
- initialDeBruijnState :: (KnownNat k, KnownNat n) => DeBruijnState k n
Ergonomic
deBruijnSequence :: Integer -> Integer -> [Integer] Source #
Generate the largest de Bruijn sequence of a given order.
>>>
concatMap show $ deBruijnSequence 2 4
"1111011001010000"
>>>
concatMap show $ deBruijnSequence 4 3
"3332331330322321320312311310302301300222122021121020120011101000"
Safe
deBruijnSequence' :: forall k n. (KnownNat k, KnownNat n) => Vector (k ^ n) (Finite k) Source #
See deBruijnSequence
.
Determining symbols
data DeBruijnState (k :: Nat) (n :: Nat) Source #
Generator for a de Bruijn sequence of order n
and alphabet size k
.
initialDeBruijnState :: (KnownNat k, KnownNat n) => DeBruijnState k n Source #
Seed with \(0^n\).