Home | History | Annotate | Download | only in testsuite
      1 #! /bin/sed -nf
      2 
      3 s/.*/&;9aaaaaaaaa8aaaaaaaa7aaaaaaa6aaaaaa5aaaaa4aaaa3aaa2aa1a0/
      4 :encode
      5 s/\(a*\)\([0-9]\)\([0-9]*;.*\2\(a*\)\)/\1\1\1\1\1\1\1\1\1\1\4\3/
      6 tencode
      7 s/;.*//
      8 
      9 # Compute a few common factors for speed.  Clear the subst flag
     10 t7a
     11 
     12 # These are placed here to make the flow harder to understand :-)
     13 :2
     14 a\
     15 2
     16 b2a
     17 :3
     18 a\
     19 3
     20 b3a
     21 :5
     22 a\
     23 5
     24 b5a
     25 :7
     26 a\
     27 7
     28 
     29 :7a
     30 s/^\(aa*\)\1\{6\}$/\1/
     31 t7
     32 :5a
     33 s/^\(aa*\)\1\{4\}$/\1/
     34 t5
     35 :3a
     36 s/^\(aa*\)\1\1$/\1/
     37 t3
     38 :2a
     39 s/^\(aa*\)\1$/\1/
     40 t2
     41 
     42 /^a$/b
     43 
     44 # The quotient of dividing by 11 is a limit to the remaining prime factors
     45 s/^\(aa*\)\1\{10\}/\1=&/
     46 
     47 # Pattern space looks like CANDIDATE\nNUMBER.  When a candidate is valid,
     48 # the number is divided and the candidate is tried again
     49 :factor
     50 /^\(a\{7,\}\)=\1\1*$/! {
     51   # Decrement CANDIDATE, and search again if it is still >1
     52   s/^a//
     53   /^aa/b factor
     54 
     55   # Print the last remaining factor: since it is stored in the NUMBER
     56   # rather than in the CANDIDATE, swap 'em: now NUMBER=1
     57   s/\(.*\)=\(.*\)/\2=\1/
     58 }
     59 
     60 # We have a prime factor in CANDIDATE! Print it
     61 h
     62 s/=.*/;;0a1aa2aaa3aaaa4aaaaa5aaaaaa6aaaaaaa7aaaaaaaa8aaaaaaaaa9/
     63 
     64 :decode
     65 s/^\(a*\)\1\{9\}\(a\{0,9\}\)\([0-9]*;.*[^a]\2\([0-9]\)\)/\1\4\3/
     66 /^a/tdecode
     67 s/;.*//p
     68 
     69 g
     70 :divide
     71 s/^\(a*\)\(=b*\)\1/\1\2b/
     72 tdivide
     73 y/b/a/
     74 
     75 # If NUMBER = 1, we don't have any more factors
     76 /aa$/bfactor
     77