my $sum = 0; for (my $i = 1; $i < 100 * 10000; ++$i) { if (is_cycle($i)) { my $b = binary($i); if (is_cycle($b)) { $sum += $i; print "$i,$b\n"; } } } print $sum,"\n"; sub is_cycle { my $s = shift; my $len = length($s); my $left = substr($s, 0, $len / 2); my $right = substr($s, $len % 2 ? (($len + 1) / 2):$len/2 , $len); return $left eq join('', reverse(split(//, $right))); } sub binary { my $n = shift; my $bin = ''; for (my $i = 0; $i < 32; ++$i) { $bin = (($n >> $i) & 1) . $bin; } $bin =~ s/^0+//g; return $bin; }