- 论坛徽章:
- 6
|
本帖最后由 stanley_tam 于 2014-07-06 23:50 编辑
代码重复的略多哦。
把a b c d分别当作4进制里的0,1,2,3。 那么问题就变成了从4进制数0一直数到'3' x 20。不知道对不对。。。{:3_188:}
可以用模块Math::Base::Convert,它把4进制数弄成了 用字符表示的dna进制 => a c t g。可以把dna进制替换成abcd
a、b、c的总数小于等于7,那就是d的数量大于等于13个咯
没时间跑完,你试下。{:3_204:}- #!perl
- use Modern::perl;
- use FileHandle;
- use Math::Base::Convert qw{ cnv };
- sub count_d;
- sub main;
- main;
- sub main {
- my $number = 0;
- my $out_fh = FileHandle->new('out.txt', 'w');
- while (1) {
- $number++;
- my $converted = cnv($number, 10 => ['a', 'b', 'c', 'd']); # convert to string like aaaaaaaaaaaaaabdbdcd
- my $len = length $converted;
- if ( $len < 20) {
- # body...
- $converted = 'a' x (20-$len) . $converted;
- }
- elsif ($len > 20){
- last
- }
- my $d_num = count_d($converted);
- if ($d_num >= 13) {
- $out_fh->print("$converted\n");
- }
- }
- close $out_fh;
- }
- sub count_d {
- my $str = shift;
- my $g_num = 0;
- for my $i ( unpack("U*", $str)){
- $g_num++ if $i == 100; # ord('d') => 100
- }
- return $g_num;
- }
- __END__
复制代码 |
|