diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-11 08:21:29 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-11 08:21:29 +0000 |
commit | 29cd838eab01ed7110f3ccb2e8c6a35c8a31dbcc (patch) | |
tree | 63ef546b10a81d461e5cf5ed9e98a68cd7dee1aa /src/sed/testsuite/factor.sed | |
parent | Initial commit. (diff) | |
download | kbuild-29cd838eab01ed7110f3ccb2e8c6a35c8a31dbcc.tar.xz kbuild-29cd838eab01ed7110f3ccb2e8c6a35c8a31dbcc.zip |
Adding upstream version 1:0.1.9998svn3589+dfsg.upstream/1%0.1.9998svn3589+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/sed/testsuite/factor.sed')
-rw-r--r-- | src/sed/testsuite/factor.sed | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/sed/testsuite/factor.sed b/src/sed/testsuite/factor.sed new file mode 100644 index 0000000..4416e35 --- /dev/null +++ b/src/sed/testsuite/factor.sed @@ -0,0 +1,76 @@ +#! /bin/sed -nf + +s/.*/&;9aaaaaaaaa8aaaaaaaa7aaaaaaa6aaaaaa5aaaaa4aaaa3aaa2aa1a0/ +:encode +s/\(a*\)\([0-9]\)\([0-9]*;.*\2\(a*\)\)/\1\1\1\1\1\1\1\1\1\1\4\3/ +tencode +s/;.*// + +# Compute a few common factors for speed. Clear the subst flag +t7a + +# These are placed here to make the flow harder to understand :-) +:2 +a\ +2 +b2a +:3 +a\ +3 +b3a +:5 +a\ +5 +b5a +:7 +a\ +7 + +:7a +s/^\(aa*\)\1\{6\}$/\1/ +t7 +:5a +s/^\(aa*\)\1\{4\}$/\1/ +t5 +:3a +s/^\(aa*\)\1\1$/\1/ +t3 +:2a +s/^\(aa*\)\1$/\1/ +t2 + +/^a$/b + +# The quotient of dividing by 11 is a limit to the remaining prime factors +s/^\(aa*\)\1\{10\}/\1=&/ + +# Pattern space looks like CANDIDATE\nNUMBER. When a candidate is valid, +# the number is divided and the candidate is tried again +:factor +/^\(a\{7,\}\)=\1\1*$/! { + # Decrement CANDIDATE, and search again if it is still >1 + s/^a// + /^aa/b factor + + # Print the last remaining factor: since it is stored in the NUMBER + # rather than in the CANDIDATE, swap 'em: now NUMBER=1 + s/\(.*\)=\(.*\)/\2=\1/ +} + +# We have a prime factor in CANDIDATE! Print it +h +s/=.*/;;0a1aa2aaa3aaaa4aaaaa5aaaaaa6aaaaaaa7aaaaaaaa8aaaaaaaaa9/ + +:decode +s/^\(a*\)\1\{9\}\(a\{0,9\}\)\([0-9]*;.*[^a]\2\([0-9]\)\)/\1\4\3/ +/^a/tdecode +s/;.*//p + +g +:divide +s/^\(a*\)\(=b*\)\1/\1\2b/ +tdivide +y/b/a/ + +# If NUMBER = 1, we don't have any more factors +/aa$/bfactor |