Defactoring: Difference between revisions

Cmloegcmluin (talk | contribs)
Cmloegcmluin (talk | contribs)
Line 612: Line 612:
==== Wolfram Language implementation ====
==== Wolfram Language implementation ====


This is the furthest progress that was made on SAD defactor before efforts were shifted to column Hermite defactor. This implementation still exhibits problems 2, 3, and 4; only problem 1 was solved here.
This is the furthest progress that was made on SAD defactor before efforts were shifted to column Hermite defactor. This implementation still exhibits problems 2 and 3; only problems 1 and 4 were solved here. Problem 3 started to be solved, but wasn't quite quashed.


  <nowiki>
  <nowiki>
sadDefactor[m_] := Module[{reduced, linCombs,linCombsDisarmed, maybeDisarmedRow, thing},
confirmEnfactoredRowReplaced[m_] := Module[{i, enfactoredRowReplaced},
    linCombs = linCombsToCheck[m];
  enfactoredRowReplaced = True;
    linCombsDisarmed = Map[extractGcd, linCombs];
  For[i = 1, i <= Length[m], i++,
    maybeDisarmedRow = Complement[linCombsDisarmed, linCombs];
    If[Apply[GCD, m[[i]]] > 1, enfactoredRowReplaced = False]
       
  ];
    If[Length[maybeDisarmedRow]==0, m, sadDefactor[Join[{m[[1]]},{ maybeDisarmedRow[[1]]}]]]
  enfactoredRowReplaced
]</nowiki>
];
 
handleEnfactored[m_, maybeDisarmedRow_] := Module[{defactored, attemptedReplacementOfEnfactoredRow, i, enfactoredRowReplaced},
  For[i = 1, i <= Length[m], i++,
    attemptedReplacementOfEnfactoredRow = Prepend[Drop[m, {i}], First[maybeDisarmedRow]];
    enfactoredRowReplaced = confirmEnfactoredRowReplaced[attemptedReplacementOfEnfactoredRow];
    If[enfactoredRowReplaced, defactored = enhancedSadDefactor[attemptedReplacementOfEnfactoredRow]];
  ];
  defactored
];
 
enhancedSadDefactor[m_] := Module[{mNoAllZeros, reduced, linCombs, linCombsDisarmed, maybeDisarmedRow},
  mNoAllZeros = removeAllZeroRows[m];
  linCombs = linCombsToCheck[mNoAllZeros];
  linCombsDisarmed = Map[extractGcd, linCombs];
  maybeDisarmedRow = Complement[linCombsDisarmed, linCombs];
  If[Length[maybeDisarmedRow] == 0, mNoAllZeros, handleEnfactored[mNoAllZeros, maybeDisarmedRow]]
];</nowiki>


=== MADAM defactoring ===
=== MADAM defactoring ===