Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
80
Task/N-queens-problem/AutoHotkey/n-queens-problem-1.ahk
Normal file
80
Task/N-queens-problem/AutoHotkey/n-queens-problem-1.ahk
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
;
|
||||
; Post: http://www.autohotkey.com/forum/viewtopic.php?p=353059#353059
|
||||
; Timestamp: 05/may/2010
|
||||
;
|
||||
|
||||
MsgBox % funcNQP(5)
|
||||
MsgBox % funcNQP(8)
|
||||
|
||||
Return
|
||||
|
||||
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
;
|
||||
; ** USED VARIABLES **
|
||||
;
|
||||
; Global: All variables named Array[???]
|
||||
;
|
||||
; Function funcNPQ: nQueens , OutText , qIndex
|
||||
;
|
||||
; Function Unsafe: nIndex , Idx , Tmp , Aux
|
||||
;
|
||||
; Function PutBoard: Output , QueensN , Stc , xxx , yyy
|
||||
;
|
||||
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
funcNQP(nQueens)
|
||||
{
|
||||
Global
|
||||
Array[0] := -1
|
||||
Local OutText , qIndex := 0
|
||||
While ( qIndex >= 0 )
|
||||
{
|
||||
Array[%qIndex%]++
|
||||
While ( (Array[%qIndex%] < nQueens) && Unsafe(qIndex) )
|
||||
Array[%qIndex%]++
|
||||
If ( Array[%qIndex%] < nQueens )
|
||||
{
|
||||
If ( qIndex < nQueens-1 )
|
||||
qIndex++ , Array[%qIndex%] := -1
|
||||
Else
|
||||
PutBoard(OutText,nQueens)
|
||||
}
|
||||
Else
|
||||
qIndex--
|
||||
}
|
||||
Return OutText
|
||||
}
|
||||
|
||||
;------------------------------------------
|
||||
|
||||
Unsafe(nIndex)
|
||||
{
|
||||
Global
|
||||
Local Idx := 1 , Tmp := 0 , Aux := Array[%nIndex%]
|
||||
While ( Idx <= nIndex )
|
||||
{
|
||||
Tmp := "Array[" nIndex - Idx "]"
|
||||
Tmp := % %Tmp%
|
||||
If ( ( Tmp = Aux ) || ( Tmp = Aux-Idx ) || ( Tmp = Aux+Idx ) )
|
||||
Return 1
|
||||
Idx++
|
||||
}
|
||||
Return 0
|
||||
}
|
||||
|
||||
;------------------------------------------
|
||||
|
||||
PutBoard(ByRef Output,QueensN)
|
||||
{
|
||||
Global
|
||||
Static Stc = 0
|
||||
Local xxx := 0 , yyy := 0
|
||||
Output .= "`n`nSolution #" (++Stc) "`n"
|
||||
While ( yyy < QueensN )
|
||||
{
|
||||
xxx := 0
|
||||
While ( xxx < QueensN )
|
||||
Output .= ( "|" ( ( Array[%yyy%] = xxx ) ? "Q" : "_" ) ) , xxx++
|
||||
Output .= "|`n" , yyy++
|
||||
}
|
||||
}
|
||||
90
Task/N-queens-problem/AutoHotkey/n-queens-problem-2.ahk
Normal file
90
Task/N-queens-problem/AutoHotkey/n-queens-problem-2.ahk
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
N := 5
|
||||
Number: ; main entrance for different # of queens
|
||||
SI := 1
|
||||
Progress b2 w250 zh0 fs9, Calculating all solutions for %N% Queens ...
|
||||
Gosub GuiCreate
|
||||
Result := SubStr(Queens(N),2)
|
||||
Progress Off
|
||||
Gui Show,,%N%-Queens
|
||||
StringSplit o, Result, `n
|
||||
Fill: ; show solutions
|
||||
GuiControl,,SI, %SI% / %o0%
|
||||
Loop Parse, o%SI%, `,
|
||||
{
|
||||
C := A_Index
|
||||
Loop %N%
|
||||
GuiControl,,%C%_%A_Index% ; clear fields
|
||||
GuiControl,,%C%_%A_LoopField%, r
|
||||
}
|
||||
Return ;-----------------------------------------------------------------------
|
||||
|
||||
Queens(N) { ; Size of the board
|
||||
Local c, O ; global array r
|
||||
r1 := 1, c := 2, r2 := 3, O := "" ; init: r%c% = row of Queen in column c
|
||||
|
||||
Right: ; move to next column
|
||||
If (c = N) { ; found solution
|
||||
Loop %N% ; save row indices of Queens
|
||||
O .= (A_Index = 1 ? "`n" : ",") r%A_Index%
|
||||
GOTO % --c ? "Down" : "OUT" ; for ALL solutions
|
||||
}
|
||||
c++, r%c% := 1 ; next column, top row
|
||||
GoTo % BAD(c) ? "Down" : "Right"
|
||||
Down: ; move down to next row
|
||||
If (r%c% = N)
|
||||
GoTo % --c ? "Down" : "OUT"
|
||||
r%c%++ ; row down
|
||||
GoTo % BAD(c) ? "Down" : "Right"
|
||||
OUT:
|
||||
Return O
|
||||
} ;----------------------------------------------------------------------------
|
||||
|
||||
BAD(c) { ; Check placed Queens against Queen in row r%c%, column c
|
||||
Loop % c-1
|
||||
If (r%A_Index% = r%c% || ABS(r%A_Index%-r%c%) = c-A_Index)
|
||||
Return 1
|
||||
} ;----------------------------------------------------------------------------
|
||||
|
||||
GuiCreate: ; Draw chess board
|
||||
Gui Margin, 20, 15
|
||||
Gui Font, s16, Marlett
|
||||
Loop %N% {
|
||||
C := A_Index
|
||||
Loop %N% { ; fields
|
||||
R := A_Index, X := 40*C-17, Y := 40*R-22
|
||||
Gui Add, Progress, x%X% y%Y% w41 h41 Cdddddd, % 100*(R+C & 1) ;% shade fields
|
||||
Gui Add, Text, x%X% y%Y% w41 h41 BackGroundTrans Border Center 0x200 v%C%_%R%
|
||||
}
|
||||
}
|
||||
Gui Add, Button, x%x% w43 h25 gBF, 4 ; forth (default)
|
||||
Gui Add, Button,xm yp w43 h25 gBF, 3 ; back
|
||||
|
||||
Gui Font, bold, Comic Sans MS
|
||||
Gui Add, Text,% "x62 yp hp Center 0x200 vSI w" 40*N-80
|
||||
|
||||
Menu FileMenu, Add, E&xit, GuiClose
|
||||
Loop 9
|
||||
Menu CalcMenu, Add, % "Calculate " A_Index+3 " Queens", Calculate ;%
|
||||
Menu HelpMenu, Add, &About, AboutBox
|
||||
Menu MainMenu, Add, &File, :FileMenu
|
||||
Menu MainMenu, Add, &Calculate, :CalcMenu
|
||||
Menu MainMenu, Add, &Help, :HelpMenu
|
||||
Gui Menu, Mainmenu
|
||||
Return ; ----------------------------------------------------------------------
|
||||
|
||||
AboutBox: ; message box with AboutText
|
||||
Gui 1: +OwnDialogs
|
||||
MsgBox, 64, About N-Queens, Many thanks ...
|
||||
Return
|
||||
|
||||
Calculate: ; menu handler for calculations
|
||||
N := A_ThisMenuItemPos + 3
|
||||
Gui Destroy
|
||||
GoTo Number ; -------------------------------------------------------------
|
||||
|
||||
BF:
|
||||
SI := mod(SI+o0-2*(A_GuiControl=3), o0) + 1 ; left button text is "3"
|
||||
GoTo Fill ; ----------------------------------------------------------------
|
||||
|
||||
GuiClose:
|
||||
ExitApp
|
||||
Loading…
Add table
Add a link
Reference in a new issue