*--------1---------2---------3---------4---------5---------6---------7-- * This module produces mask permutations with the soft * '3-out-of-4' and the firm '2-out-of-4' track patterns * marked by '-' and '+' signs respectively subroutine MUTATE(Mask, Entry, HowMany) integer Mask, Temp, Size, Pattern(4), HowMany character*5 Entry(11), Null character*1 Hit(9) data Hit/'0', '1', '2', '3','4', '5', '6', '7', '8'/ parameter (Null = '+0000') * Computing input pattern *---------------------------------- Temp = Mask Size = 0 do I = 1, 4 Pattern(I) = Temp / 10**(4 - I) Temp = Temp - Pattern(I) * 10**(4 - I) if (Pattern(I).ne.0) Size = Size + 1 end do * Mask combinatorics *---------------------------------- if (Size.eq.4) then HowMany = 11 Entry(1) = '-'//Hit(Pattern(1) + 1)//Hit(Pattern(2) + 1)// + Hit(Pattern(3) + 1)//Hit(Pattern(4) + 1) Entry(2) = '-'//Hit(1)//Hit(Pattern(2) + 1)// + Hit(Pattern(3) + 1)//Hit(Pattern(4) + 1) Entry(3) = '-'//Hit(Pattern(1) + 1)//Hit(1)// + Hit(Pattern(3) + 1)//Hit(Pattern(4) + 1) Entry(4) = '-'//Hit(Pattern(1) + 1)//Hit(Pattern(2) + 1)// + Hit(1)//Hit(Pattern(4) + 1) Entry(5) = '-'//Hit(Pattern(1) + 1)//Hit(Pattern(2) + 1)// + Hit(Pattern(3) + 1)//Hit(1) Entry(6) = '+'//Hit(Pattern(1) + 1)//Hit(Pattern(2) + 1)// + Hit(1)//Hit(1) Entry(7) = '+'//Hit(Pattern(1) + 1)//Hit(1)// + Hit(Pattern(3) + 1)//Hit(1) Entry(8) = '+'//Hit(Pattern(1) + 1)//Hit(1)// + Hit(1)//Hit(Pattern(4) + 1) Entry(9) = '+'//Hit(1)//Hit(Pattern(2) + 1)// + Hit(Pattern(3) + 1)//Hit(1) Entry(10) = '+'//Hit(1)//Hit(Pattern(2) + 1)// + Hit(1)//Hit(Pattern(4) + 1) Entry(11) = '+'//Hit(1)//Hit(1)// + Hit(Pattern(3) + 1)//Hit(Pattern(4) + 1) else if (Size.eq.3) then HowMany = 4 do I = 5, 11 Entry(I) = Null end do Entry(1) = '-'//Hit(Pattern(1) + 1)//Hit(Pattern(2) + 1)// + Hit(Pattern(3) + 1)//Hit(Pattern(4) + 1) if (Pattern(1).eq.0) then Entry(2) = '+'//Hit(1)//Hit(Pattern(2) + 1)// + Hit(Pattern(3) + 1)//Hit(1) Entry(3) = '+'//Hit(1)//Hit(Pattern(2) + 1)// + Hit(1)//Hit(Pattern(4) + 1) Entry(4) = '+'//Hit(1)//Hit(1)// + Hit(Pattern(3) + 1)//Hit(Pattern(4) + 1) else if (Pattern(2).eq.0) then Entry(2) = '+'//Hit(Pattern(1) + 1)//Hit(1)// + Hit(Pattern(3) + 1)//Hit(1) Entry(3) = '+'//Hit(Pattern(1) + 1)//Hit(1)// + Hit(1)//Hit(Pattern(4) + 1) Entry(4) = '+'//Hit(1)//Hit(1)// + Hit(Pattern(3) + 1)//Hit(Pattern(4) + 1) else if (Pattern(3).eq.0) then Entry(2) = '+'//Hit(Pattern(1) + 1)//Hit(Pattern(2) + 1)// + Hit(1)//Hit(1) Entry(3) = '+'//Hit(Pattern(1) + 1)//Hit(1)// + Hit(1)//Hit(Pattern(4) + 1) Entry(4) = '+'//Hit(1)//Hit(Pattern(2) + 1)// + Hit(1)//Hit(Pattern(4) + 1) else if (Pattern(4).eq.0) then Entry(2) = '+'//Hit(Pattern(1) + 1)//Hit(Pattern(2) + 1)// + Hit(1)//Hit(1) Entry(3) = '+'//Hit(Pattern(1) + 1)//Hit(1)// + Hit(Pattern(3) + 1)//Hit(1) Entry(4) = '+'//Hit(1)//Hit(Pattern(2) + 1)// + Hit(Pattern(3) + 1)//Hit(1) end if end if return end