From f5140860fc6ae120b729fb3528c4bae64d917663 Mon Sep 17 00:00:00 2001 From: tnbeats <tnbeatsprod@gmail.com> Date: Sun, 29 Oct 2023 21:18:58 +0100 Subject: [PATCH] 22211572 --- Search_Algorithms/Sucessors.py | 26 +++++++++++++-- .../Search_Algorithms.cpython-311.pyc | Bin 0 -> 1831 bytes .../__pycache__/Sucessors.cpython-311.pyc | Bin 0 -> 8246 bytes .../__pycache__/is_goal.cpython-311.pyc | Bin 0 -> 1248 bytes Search_Algorithms/is_goal.py | 9 +++++- Search_Algorithms/solution testing.py | 30 +++++++++++++----- 6 files changed, 54 insertions(+), 11 deletions(-) create mode 100644 Search_Algorithms/__pycache__/Search_Algorithms.cpython-311.pyc create mode 100644 Search_Algorithms/__pycache__/Sucessors.cpython-311.pyc create mode 100644 Search_Algorithms/__pycache__/is_goal.cpython-311.pyc diff --git a/Search_Algorithms/Sucessors.py b/Search_Algorithms/Sucessors.py index 05a518c..0de1748 100644 --- a/Search_Algorithms/Sucessors.py +++ b/Search_Algorithms/Sucessors.py @@ -62,7 +62,29 @@ def sudoku_allowed(state): def puzzle_successor(state): - return [] + y, x = -1, -1 + for i in range(len(state)): + for j in range(len(state[i])): + if state[i][j] == 0: + y, x = i, j + break + + possible_moves = [(y + 1, x), (y - 1, x), (y, x + 1), (y, x - 1)] + next_states = [] + + for move in possible_moves: + new_y, new_x = move + if 0 <= new_y < len(state) and 0 <= new_x < len(state[0]): + # make a copy of the state + new_state = [list(row) for row in state] + # swap tiles + new_state[y][x], new_state[new_y][new_x] = new_state[new_y][new_x], new_state[y][x] + # Convert state to a tuple of tuples + new_state_tuple = tuple(tuple(row) for row in new_state) + if puzzle_allowed(new_state_tuple): + next_states.append(new_state_tuple) + + return next_states def queens_successor(state): @@ -82,7 +104,7 @@ def queens_successor(state): def puzzle_allowed(state): - return False + return True def queens_allowed(state): diff --git a/Search_Algorithms/__pycache__/Search_Algorithms.cpython-311.pyc b/Search_Algorithms/__pycache__/Search_Algorithms.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..324b9ebb3b744554f17659a85e3d7296e59c750e GIT binary patch literal 1831 zcmb_c&uiOO9DlMT|A?JhOX5`xD`?JGW0s83Lj&8|vf*xFfzc7hAh-k}y~xUBNqg^k zbB#<xDa<a0dZ7>>eQF6kY^R;~AIt_Hgsx+U-VC{nUfTDRT8%SzYuUaM-}lw`eSf?k zpN}5S&dvZTtG`}>4+Q}JU>{?NJvWZtrN#l!fzDZAi;XdhtHicq9MJhYV2jrUss)|f z1O@RiOZu|F1)>hWt3r)`UW5&_0bt)pcQ{s%P(7C2$bLXwkH&7$;61)KUP$C+h6fDp z0nK_8WpdP4<{ARcIN3GInyid((KxoEzsY1=L-a(QI~PSY;xXXGy!d2q6!XMQKxeqq zGevOYQX}CdJmGr|ec%Z_F)DS!@Dh{t=w3uGVQ_UC(@4Jb43ej_+H0@2`=4*=u}yHu z*Vj}{gD$}eCMqIK6S$&Wx1frlqC1N15JfAiwgDAVHnFl(wKZZo_T#5i>I>Hpa*%Re zCFL-3$En(SAs&eI>Z>pizX}K5t&%{56_?x$cmtAvS9Sd`6^LQCAcd=R4H!Eph@04O zR4WjOQ*?qPthtthpdJV=?GPliDnigE!Hf-SWcxT<WK$P$iXN0QmM1r~4@+NTh;V5~ z)lH*Rg!o(HxFyxxc9CPyag~i~rDEE~Dy%`InHb{ICRCAD-u}cg9AuJmWs2v0_hvBn zDT1m_%Ac7Clj9sD(*>}r#lKUv2mVY;?T=cQ+n4u>zL5NJ{q}kjHoqANxuKBj3proP zHGkM!_s`7T+r7Knvf9=Nq(sHf&flxut+ndydQ<S{-t3_J%guzJexrG*bD?#$eRTx5 zl<d!+ZEpCBOWi{6^TFcEaB*b>gp?Ah<`;hUTu<(23-t9R`5?2O>23|A<)O6PmzI6` zt=>%68_4f<L|<AsNbV=Qxu3H4vz_c;qj^BvpIpvp0c7(1^xH>tOJF*cFH-tVQu!2p z7=a^-vN~h=Cjz6&%OHQM`u|PNsXvZ?CFk`0O(o|q6-GS7kWvs3YZt^-*M+to@UG*c z4E3N{swNSQ&az0UNU1u3y7Sb{rtoi6g{W(-wbza@w{d%;lj|e~f;<%Dz95e=H*<zz zZRx*YZHZxR={2#I-cNV04W#@~%J-!_gIhWqu4D`|#Qw4c5hdslq&3H~VEC`W;W>p2 zLu|u`AdC#p<Vo`5ilbL8cm*kRiroZWr)tD=9Or|~UikRne1GyC#j{*~1S0iLWWDe) HE9~?POlzT* literal 0 HcmV?d00001 diff --git a/Search_Algorithms/__pycache__/Sucessors.cpython-311.pyc b/Search_Algorithms/__pycache__/Sucessors.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65583285d0a03c9ebcb42aede0f6c20d30783620 GIT binary patch literal 8246 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 literal 0 HcmV?d00001 diff --git a/Search_Algorithms/__pycache__/is_goal.cpython-311.pyc b/Search_Algorithms/__pycache__/is_goal.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75ad5ea3b3f97d945274f3e03bcf33ac0edb7069 GIT binary patch literal 1248 zcmaJ=%}X0W6rb6Tm~<0sf@qc61jWK0A{4=c6iYzq#oCr2Eg=#@c8rVpawaJ%38v6P z1Pfk@X(`k~YZ3p3{tqf1!h)xswx@tMPknFmfw8m?_BS){y_tQ#-@N(Z^W7m}Pkzp^ z-;|JFxab(H9lLr6!vQf!j2QGCiBUrWlnfbAHk6oRs4!CvSCr^|x@6-fTLDOQPC$<Y zpA6sCJ%9sJ1ngLutYef!$uV8hspWYVi7h0aK94LOQ%e=aWRVFxDs&x9&Bm7n<08JA zG|Y5-o{9Bhz7S8Ei2~23VGQG#%x2A8I?Og1Pnm*=c$6i1YAq4Tr1RV?u4P5s6p3^` znVBkVS>E<Mkxgzhj(TA6!Us?#m)c-mJ=exgm9Z;u^m0<c;c%+L1Qeoi;8CF!sd$5V znH<6Dr0ba{E8|X{Tu}_Eth^z7q%4<}!)^u~)-^-w-CdC?l#(3Xn<&$=v?>|2qn$1< zf%sTH$I>}Us!NuK<w{w`K|@P5a|YYgRqlq6MYk-vX;IUnLLiY48uwtRzoUpK8Ts`R z9|R}v5i0;y($M^G=c|$G#^u0Bee!G|bTJTW5?Kv6u&dN)?NLMX?$g>#ZKg3aT=#z& z{xp2(|2X=26r3*`UVm+&sS<CX=_0=V+D2_=|8+}auE8IA`o;wgN8>e^K;PU@sfhlz z_4d;dkUw#H3d6k$7Ljb*Zr@EuOO83ZY{{aOwd8EFV96Pl<9*<5b>c0ZHcE`;1RsI8 zA9E%Euy^|3ix1Ovb$4fP=S&M;Xu<E(ho!Hx-)7IX@Tn4Z*y^$_JC|i6HQTv1*+yy{ z!ETjeqYgF}VB<~nNQ7H3^}kQ6MTuJ4i{)5svGu(EO{h@X-p(+NJnqBSeGEhO$#X4u zssx?Vmvk4$x|~PjbcrJYA4ebVJtj_`qt><iaW-$1GHi}dLI}x<R{%|!Qrhqas-C8c i(g#h_1-A>AT?kM*h0!*+mAg_^YxYwL&G$DrKmG#&?fQuT literal 0 HcmV?d00001 diff --git a/Search_Algorithms/is_goal.py b/Search_Algorithms/is_goal.py index 503cd74..305ea05 100644 --- a/Search_Algorithms/is_goal.py +++ b/Search_Algorithms/is_goal.py @@ -18,5 +18,12 @@ def is_goal_queens(state): return sum(map(sum, state)) == len(state) +PUZZLE_GOAL = ( + (0, 1, 2), + (3, 4, 5), + (6, 7, 8) +) + + def is_goal_puzzle(state): - pass + return PUZZLE_GOAL == state diff --git a/Search_Algorithms/solution testing.py b/Search_Algorithms/solution testing.py index 63c1b2a..3d8b29e 100644 --- a/Search_Algorithms/solution testing.py +++ b/Search_Algorithms/solution testing.py @@ -19,7 +19,8 @@ grid = ((1, 0, 0, 0, 0, 0, 0, 0, 0), # sln = (Search_Algorithms.BreadthFirstSearch(grid, Sucessors.sudoku_successor, is_goal.is_goal_sudoku)[-1]) -sln = (Search_Algorithms.DepthFirstSearch(grid, Sucessors.sudoku_successor, is_goal.is_goal_sudoku)[-1]) +sln = (Search_Algorithms.DepthFirstSearch( + grid, Sucessors.sudoku_successor, is_goal.is_goal_sudoku)[-1]) for rows in sln: print(rows) @@ -38,14 +39,27 @@ board = ((False, False, False, False, False, False, False, False, False), # sln = (Search_Algorithms.BreadthFirstSearch(board, Sucessors.queens_successor, is_goal.is_goal_queens)[-1]) -sln = (Search_Algorithms.DepthFirstSearch(board, Sucessors.queens_successor, is_goal.is_goal_queens)[-1]) +sln = (Search_Algorithms.DepthFirstSearch( + board, Sucessors.queens_successor, is_goal.is_goal_queens)[-1]) -output_tuple = tuple(tuple("Q" if value else "." for value in sln) for sln in sln) +output_tuple = tuple(tuple("Q" if value else "." for value in sln) + for sln in sln) for rows in output_tuple: print(rows) -# -# puzzle = () -# -# -# print(Search_Algorithms.BreadthFirstSearch(puzzle, Sucessors.puzzle_successor, is_goal.is_goal_puzzle)[-1]) + +# Sliding Puzzle + +initial_puzzle = ( + (7, 2, 4), + (5, 0, 6), + (8, 3, 1) +) + +sln = (Search_Algorithms.BreadthFirstSearch(initial_puzzle, Sucessors.puzzle_successor, is_goal.is_goal_puzzle)[-1]) + +if sln: + for rows in sln: + print(rows) +else: + print("No solution found") -- GitLab