Lösungen des ct-Puzzles

Quelltext der Rekursion

Walter Trump


Procedure Rekursion(ByVal puzzle As Large) Naked
  $StepOff
  $ArrayCheckOff
  $ForFast
  Dim i As Register Int
  Dim b As Register Int
  . mov edx, dpt puzzle[4]
  . cmp edx, -1
  . je .LoBits
  . not edx
  . bsr eax, edx
  . add eax, 32
  . mov b, eax
  . jmp .Weiter
  LoBits:
  . mov edx, dpt puzzle[0]
  . not edx
  . bsr eax, edx
  . mov b, eax
  . jnz .Weiter
  cLsg++
  If cLsg >= TLsg Then AusgabeLoesung
  Exit Proc
  Weiter:
  If f1
    For i = first1(b) To last1(b)
      If (puzzle And8 Rfig(i)) = 0
        f1 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f1 = 1
      EndIf
    Next i
  End If
  If f2
    For i = first2(b) To last2(b)
      If (puzzle And8 Rfig(i)) = 0
        f2 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f2 = 1
      EndIf
    Next i
  End If
  If f3
    For i = first3(b) To last3(b)
      If (puzzle And8 Rfig(i)) = 0
        f3 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f3 = 1
      EndIf
    Next i
  End If
  If f4
    For i = first4(b) To last4(b)
      If (puzzle And8 Rfig(i)) = 0
        f4 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f4 = 1
      EndIf
    Next i
  End If
  If f5
    For i = first5(b) To last5(b)
      If (puzzle And8 Rfig(i)) = 0
        f5 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f5 = 1
      EndIf
    Next i
  End If
  If f6
    For i = first6(b) To last6(b)
      If (puzzle And8 Rfig(i)) = 0
        f6 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f6 = 1
      EndIf
    Next i
  End If
  If f7
    For i = first7(b) To last7(b)
      If (puzzle And8 Rfig(i)) = 0
        f7 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f7 = 1
      EndIf
    Next i
  End If
  If f8
    For i = first8(b) To last8(b)
      If (puzzle And8 Rfig(i)) = 0
        f8 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f8 = 1
      EndIf
    Next i
  End If
  If f9
    For i = first9(b) To last9(b)
      If (puzzle And8 Rfig(i)) = 0
        f9 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f9 = 1
      EndIf
    Next i
  End If
  If f10
    For i = first10(b) To last10(b)
      If (puzzle And8 Rfig(i)) = 0
        f10 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f10 = 1
      EndIf
    Next i
  End If
  If f11
    For i = first11(b) To last11(b)
      If (puzzle And8 Rfig(i)) = 0
        f11 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f11 = 1
      EndIf
    Next i
  End If
  If f12
    For i = first12(b) To last12(b)
      If (puzzle And8 Rfig(i)) = 0
        f12 = 0
        Rekursion(puzzle Or8 Rfig(i))
        f12 = 1
      EndIf
    Next i
  End If
End Proc