Math-NumSeq
view release on metacpan or search on metacpan
xt/oeis/SternDiatomic-oeis.t view on Meta::CPAN
func => sub {
my ($count) = @_;
my $seq = Math::NumSeq::SternDiatomic->new;
my @got;
OUTER: for (my $k = 0; @got < $count; $k++) {
foreach my $n (1 .. 2**$k) {
@got < $count or last OUTER;
push @got, $seq->ith($n)
}
foreach my $n (reverse 1 .. 2**$k-1) {
@got < $count or last OUTER;
push @got, $seq->ith($n)
}
}
return \@got;
});
# GP-DEFINE A337277_row(n) = {
# GP-DEFINE my(v=[1],upto=0);
# GP-DEFINE for(i=1,n,
# GP-DEFINE my(new=vector(2*#v+1),upto=0);
# GP-DEFINE new[upto++] = 1;
# GP-DEFINE for(j=1,#v,
# GP-DEFINE new[upto++] = v[j];
# GP-DEFINE if(j<#v, new[upto++] = v[j] + v[j+1]));
# GP-DEFINE new[upto++] = 1;
# GP-DEFINE upto==#new || error();
# GP-DEFINE v=new);
# GP-DEFINE v;
# GP-DEFINE }
# GP-Test A337277_row(0) == [1]
# GP-Test A337277_row(1) == [1,1,1]
# GP-Test A337277_row(2) == [1, 1, 2, 1, 2, 1, 1]
# GP-Test A337277_row(3) == [1, 1, 2, 1, 3, 2, 3, 1, 3, 2, 3, 1, 2, 1, 1]
# GP-Test A337277_row(4) == [1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 5, 2, 5, 3, 4, \
# GP-Test 1, 4, 3, 5, 2, 5, 3, 4, 1, 3, 2, 3, 1, 2, 1, 1]
# GP-Test my(v=OEIS_data("A337277"),got=[]); \
# GP-Test my(n=0); while(#got<#v, got=concat(got,A337277_row(n)); n++); \
# GP-Test v == got[1..#v]
# GP-DEFINE A337277_T(n,k) = {
# GP-DEFINE k<2^(n+1)-1 || error("n="n" k="k);
# GP-DEFINE k++; k=min(k,2^(n+1)-k);
# GP-DEFINE my(p=0,q=1);
# GP-DEFINE forstep(i=logint(k,2),0,-1, if(bittest(k,i),p+=q,q+=p));
# GP-DEFINE p;
# GP-DEFINE }
# my(n=3); vector(2^(n+1)-1,k,k--; A337277_T(n,k))
# my(n=3); A337277_row(n)
# GP-Test vector(8,n, vector(2^(n+1)-1,k,k--; A337277_T(n,k))) == \
# GP-Test vector(8,n, A337277_row(n))
# GP-DEFINE \\ code by MFH in A002487
# GP-DEFINE A002487(n, a=1, b=0) = {
# GP-DEFINE if(n==0,return(0));
# GP-DEFINE for(i=0, logint(n, 2), if(bittest(n, i), b+=a, a+=b)); b;
# GP-DEFINE }
# GP-Test my(v=OEIS_data("A002487")); /* OFFSET=0 */ \
# GP-Test vector(#v,n,n--; A002487(n)) == v
#
# GP-Test /* formula by Alois P. Heinz in A337277 */ \
# GP-Test vector(100,n,n--; A337277_T(n,n)) == \
# GP-Test vector(100,n,n--; A002487(n+1))
# GP-Test A002487(0) == 0
# GP-Test /* each row the diatomic sequence forward and backward */ \
# GP-Test vector(8,n, A337277_row(n)) == \
# GP-Test vector(8,n, vector(2^(n+1)-1,k,k--; \
# GP-Test if(k<2^n, A002487(k+1), A002487(2^(n+1)-1-k))))
#------------------------------------------------------------------------------
# A071911 - where diatomic == 0 mod 3
MyOEIS::compare_values
(anum => 'A071911',
func => sub {
my ($count) = @_;
my $seq = Math::NumSeq::SternDiatomic->new;
my @got;
while (@got < $count) {
my ($i, $value) = $seq->next;
if ($value%3 == 0) { push @got, $i; }
}
return \@got;
});
#------------------------------------------------------------------------------
# A049455 - repeat runs diatomic 0 to 2^k
MyOEIS::compare_values
(anum => 'A049455',
func => sub {
my ($count) = @_;
my $seq = Math::NumSeq::SternDiatomic->new;
my @got;
OUTER: for (my $exp = 0; ; $exp++) {
foreach my $i (0 .. 2**$exp) {
last OUTER if @got >= $count;
push @got, $seq->ith($i);
}
}
return \@got;
});
#------------------------------------------------------------------------------
# A049456 - extra 1 at end of each row
MyOEIS::compare_values
(anum => 'A049456',
func => sub {
my ($count) = @_;
my $seq = Math::NumSeq::SternDiatomic->new;
my @got;
$seq->next;
for (;;) {
my ($i,$value) = $seq->next;
last if @got >= $count;
push @got, $value;
if ($i > 1 && is_pow2($i)) {
( run in 0.559 second using v1.01-cache-2.11-cpan-e1769b4cff6 )