Skip to content

Instantly share code, notes, and snippets.

@b2gills
Created August 3, 2015 19:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save b2gills/18d9496d0634bb83cf78 to your computer and use it in GitHub Desktop.
Save b2gills/18d9496d0634bb83cf78 to your computer and use it in GitHub Desktop.
First attempt at De Bruijn sequence generator
#! /usr/bin/env perl6
use v6;
proto sub de-bruijn ( \alphabet, Int $length ) {*}
multi sub de-bruijn ( Int $k, $length ) { samewith [^$k], $length }
multi sub de-bruijn ( Str $k, $length ) { samewith [$k.comb], $length }
multi sub de-bruijn ( @alphabet, $length ) {
my @a = 0 xx @alphabet * $length;
my @sequence;
sub db ( $t, $p ) {
if $t > $length {
return if $length !%% $p;
for 1 .. $p -> $j {
@sequence.push: @alphabet[@a[$j]];
}
return;
}
@a[$t] = @a[$t-$p];
db $t+1, $p;
for @a[$t-$p]+1 ..^ @alphabet -> $j {
@a[$t] = $j;
db $t+1, $t;
}
}
db 1, 1;
return @sequence;
}
say de-bruijn 2, 3;
say de-bruijn 'abcd', 2;
say de-bruijn ['a','bb','ccc', 'dddd'], 3;
=finish
0 0 0 1 0 1 1 1
a a b a c a d b b c b d c c d d
a a a bb a a ccc a a dddd a bb bb a bb ccc a bb dddd a ccc bb a ccc ccc a ccc dddd a dddd bb a dddd ccc a dddd dddd bb bb bb ccc bb bb dddd bb ccc ccc bb ccc dddd bb dddd ccc bb dddd dddd ccc ccc ccc dddd ccc dddd dddd dddd
Translated from
https://gist.github.com/dwendt/5cc5223d4686d0e33209
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment