作者:撩人的醉了 | 来源:互联网 | 2022-12-10 14:17
我需要帮助创建一个获取随机数的函数(例如45789277)并检查上面的数字是否始终与一个始终相同的数字列表之一(例如[1,2,45,757,3,7466])
如果给出的数字是55366363并且列表是[1,4,3],则该函数将返回False,如果列表是[6535,55,1,8],则该函数将返回True*,则没有机会数字将从列表中的两个数字开始*给出的数字的第一个数字永远不会是0*在列表中将有不同的长度数字(一个/两个/三个/四个数字)*给定的数字将始终具有更多的数字那么列表中的数字
谢谢 ;)
1> choroba..:
您可以将所有前缀加入到正则表达式中,并将随机数与其匹配:
#!/usr/bin/perl
use warnings;
use strict;
sub prefix_in_list {
my ($needle, $haystack) = @_;
my $regex = join '|', @$haystack;
return $needle =~ /^(?:$regex)/
}
use Test::More tests => 3;
ok prefix_in_list(45789277, [1, 2, 45, 757, 3, 7466]);
ok ! prefix_in_list(55366363, [1, 4, 3]);
ok prefix_in_list(55366363, [6535, 55, 1, 8]);
或者,如果您喜欢数字解决方案:
sub compute_length {
my ($n) = @_;
return int(log($n) / log 10)
}
sub prefix_in_list {
my ($needle, $haystack) = @_;
for my $prefix (@$haystack) {
my $start = $needle;
my $divider = 10 ** (compute_length($start) - compute_length($prefix));
return 1 if int($start / $divider) == $prefix;
}
return
}