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