作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将有限的 natural number 系列与正则表达式匹配?
所以,要求是:
1
1
1 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
1 3 4
1 2 3 4 5 6 6
perl
正则表达式的所有功能 最佳答案
干得好。在 Perl v5.10 到 v5.14 上测试。关键是 递归模式 ,我们在 (?&Sequence)
规则上递归。这是一种归纳证明。bigint
就在那里,以防你真的想从 1 .. 10**10_000
生成一个序列。如果您可以根据您的平台将自己限制为机器 native 整数、32 位或 64 位,它将运行得更快。
#!/usr/bin/env perl
use v5.10;
use bigint; # only if you need stuff over maxint
my $pat = qr{
^
(?= 1 \b )
(?<Sequence>
(?<Number> \d+ )
(?:
\s+
(??{ "(?=" . (1 + $+{Number}) . ")" })
(?&Sequence)
)?
)
$
}x;
# first test embedded data
while (<DATA>) {
if ( /$pat/ ) {
print "PASS: ", $_;
} else {
print "FAIL: ", $_;
}
}
# now generate long sequences
for my $big ( 2, 10, 25, 100, 1000, 10_000, 100_000 ) {
my $str = q();
for (my $i = 1; $i <= $big; $i++) {
$str .= "$i ";
}
chop $str;
if ($str =~ $pat) {
print "PASS: ";
} else {
print "FAIL: ";
}
if (length($str) > 60) {
my $len = length($str);
my $first = substr($str, 0, 10);
my $last = substr($str, -10);
$str = $first . "[$len chars]" . $last;
}
say $str;
}
__END__
5
fred
1
1 2 3
1 3 2
1 2 3 4 5
1 2 3 4 6
2 3 4 6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
1 2 3 4 5 6 6
FAIL: 5
FAIL: fred
PASS: 1
PASS: 1 2 3
FAIL: 1 3 2
PASS: 1 2 3 4 5
FAIL: 1 2 3 4 6
FAIL: 2 3 4 6
PASS: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
FAIL: 1 2 3 4 5 6 6
PASS: 1 2
PASS: 1 2 3 4 5 6 7 8 9 10
PASS: 1 2 3 4 5 [65 chars]2 23 24 25
PASS: 1 2 3 4 5 [291 chars] 98 99 100
PASS: 1 2 3 4 5 [3892 chars]8 999 1000
PASS: 1 2 3 4 5 [588894 chars]999 100000
关于regex - 匹配有限自然数级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9297080/
我需要对反正切值执行泰勒级数 50 次。表示 arctan Taylor 级数的域之间的 50 个数字,即 [-1,1]。我已经用手动用户输入对其进行了测试并且它工作正常,但是我在代码中递增 0.01
我在网上看了几个小时,想看看我是否能找到解决方案,虽然我已经找到了很多解决方案,但我教授的指示如下: Write a program to estimate PI (π) using the foll
我最近在编程测试中被问到这个问题。我似乎无法理解为什么我会得到答案“1”。我是 C 编程语言的初学者。 这是我的代码: #include int main() { float c = 0;
我是一名优秀的程序员,十分优秀!