From 7e701cc3be2fbf18eda040479d2de4e990989549 Mon Sep 17 00:00:00 2001
From: Scott Wong <scottmw@student.unimelb.edu.au>
Date: Tue, 30 Mar 2021 22:26:16 +1100
Subject: [PATCH] Debug for printing

---
 search/1.json                                 |  27 ++++++++++
 search/__pycache__/main.cpython-36.pyc        | Bin 0 -> 2020 bytes
 .../__pycache__/movement_logic.cpython-36.pyc | Bin 0 -> 6011 bytes
 search/__pycache__/search_algo.cpython-36.pyc | Bin 0 -> 9848 bytes
 .../search_algorithm.cpython-36.pyc           | Bin 0 -> 9585 bytes
 search/__pycache__/util.cpython-36.pyc        | Bin 0 -> 7451 bytes
 search/main.py                                |   6 +--
 search/search_algorithm.py                    |  48 ++++++++++++++----
 8 files changed, 68 insertions(+), 13 deletions(-)
 create mode 100644 search/1.json
 create mode 100644 search/__pycache__/main.cpython-36.pyc
 create mode 100644 search/__pycache__/movement_logic.cpython-36.pyc
 create mode 100644 search/__pycache__/search_algo.cpython-36.pyc
 create mode 100644 search/__pycache__/search_algorithm.cpython-36.pyc
 create mode 100644 search/__pycache__/util.cpython-36.pyc

diff --git a/search/1.json b/search/1.json
new file mode 100644
index 0000000..7863e69
--- /dev/null
+++ b/search/1.json
@@ -0,0 +1,27 @@
+{
+  "upper": [
+    [
+      "r",
+      2,
+      -4
+    ],
+    [
+      "p",
+      2,
+      -3
+    ],
+    [
+      "p",
+      3,
+      -4
+    ]
+  ],
+  "lower": [
+    [
+      "s",
+      4,
+      0
+    ]
+  ],
+  "block": []
+}
\ No newline at end of file
diff --git a/search/__pycache__/main.cpython-36.pyc b/search/__pycache__/main.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ed2128540324288049c330e694cf547b243e103b
GIT binary patch
literal 2020
zcmXr!<>eCKOioacWng&BfCQKr7#JKF7#NBT7#J8*7@`<b7*m*X7^4`$G*c8)3S$a$
z4s!@Y3QG!W3qur33R?<$3qurZ3R5tHCP&q2E@yw=0Am9KBNGM3qLR$C%;e0(90kw3
zlGL1>%=FZ}<WwDn;MCmI;*!)N1w$PLBLgEtu7INatkmQZg@DAO5(P&qh2Yf0qU4Os
zymT(Ekc`Y?h2rF*%z_ey<ovvn#LT>6g_4X^h19%~qDqB={LH)(g_3-*P(e|CdQoDo
zf(A%FIX@*;Av2FFAwE7gF*7edUaz1sK_NLYC#P5;0VJZKnV_ks5Sd?Eq)?onQ(BUl
zpQlh<l2}wytdNmfl&Z+}5)>|envAy?wUR+h5N2jzU=UznU~mS7(Gms*hDwbRh7!gs
zrW8g=hGxcofm((V<}8*PhGxcE#&CudhCqfOh6sjmhCCe>h7#6nuA&e|1`sS^OJOQu
z%wkVr?qy;GnZS|4*v!bt5Xq3o6v0r!Sp()(h?H=-FvRlIGL>-GFoEO?Q^FZac$yg)
z8A^Cd_&_2RA|?Dq(@F%uVuB#DuqB+Kh9OG`#7<!dX3%8ud&$Vaz)+=KTAY}kYNb$6
zS(1^TXRM%`t56IMYK4Ntk_`QleErP4g3=Pbtm6DUO~zX+X_+~xn!>kO@(WV)ZZQ{E
z7T;n?EJ`oC#R5`rizO#NG36GQXI@Hbg=<k!e$g$~f}+g4l3Q%WB`K*zMYmW|D>6%N
zaTg>O6{p67O}@onT2PQ$6p)#koLcOXnOqXZotBxG5?_*7l%84=#g&_wof@B%pIDR<
z#SJzK%3+0yLDYeD-eLut7{yrv(o<4ely{3YIVZn3Rg<}hg@J+L7E4NEN#ZTm0+3xR
z8Hz+07#MyzIa|eq7N-^!#{?(mmz2b~<R_QrrskCt$Aso(hUXV$$H0?s3^Y+1#z2B7
z29##>3My~0fEawB_?H8x2qs1WMhQkfMm|OXCJrVpMjj?MMh-?cMm9z+#v(BW28Lu%
z*n^aEF)%Q&!V*seBLhPX11Q<lGS)DpFiA4hGSx7oFiSGjGN-WAvZV0EFxRryvemLz
zG}JJ<FvM2Wa@25?Fi0|_uw^q91=X;ou!}R)vZip9FxId(Gm10RvgDaTRd8lA6_wPm
zfmN`jaFsCDut8Ob)Ubm^*;BYn7;D%eqBR^POp**W93{+>3~5XyEHx}P44DiitRT8j
zC!8ULAMTc_8YUNp*di3S+=IJ?4aqGQ2)9gNEMkJYh7+r6cyPLg4eW{?;S3cjHOwvy
zu`;!sCG1%oHJo5Kb3)t<$_Nt}3r)fqQh0+IGzAj17#SG26hHu!3=}ep6%rLvGLu2M
zJh7-!p**uBLm@l0vRFZ>6qF*BbQF|w^2<|;loS&4QWTVua`Kb2l^_OyQ&6!&W*(9O
zItpMFVA0~#5*>x|RE6ZkJcZKYRE5kmg@XLzOpsL|O~t7t5Vc%j<G{H=0ph5<l6-~K
z%#w`MBCyerY@v`}q)?n%;skO*F<6ULK_aMF1L?6+0Ogv@{5+5+@{>Ttp+aIBs4Oi?
zO-xZpE6UGR@Cx?#QvhXMh0@~8ymSaZH$SB`Cshw(UQsG2zgQ{wh5Gn_MQ*WzL*W)H
zI1FyFf*pK|p$L?6Z!s1Wfr`Cbi~+Y8i*7Ln-C_*B#aQg8$qbf85SRj-Q7j>m0j{^0
zi%W{4Sl!}-{KKO-+~S@6eL{Wxiuf5A7^3)LLFJKIT#{c@8O0BF0wgFvevRUU2gWVt
z#FP|Gt|B3jMxo5S%#zH+9Ei$LP$Wj7iur)zGm00g4icVG9NDRr;YFDxsZlI>rMU%Q
zvItBT7YQ>kFce9G2vA`GE-{KkL0mot1_o77j<*73V_ptM4n__p7G^F+E=C?k4n{r*
z$;83P!zjYYgCx!ek_C%PFmo{$fy~ilyTu+KpOT*(A78`<GMoeC8*xY>qX(hl6LZq@
mi!w_xa=`@%SRceWs1CcuVFQU*J9d!kK;;Vy*lirl9O3{oLl$KK

literal 0
HcmV?d00001

diff --git a/search/__pycache__/movement_logic.cpython-36.pyc b/search/__pycache__/movement_logic.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..305fec5019e20f268ffabc036afb2771d6ba711c
GIT binary patch
literal 6011
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

literal 0
HcmV?d00001

diff --git a/search/__pycache__/search_algo.cpython-36.pyc b/search/__pycache__/search_algo.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..74e6717fea605784a31ba0a6ad30a0e18e472015
GIT binary patch
literal 9848
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

literal 0
HcmV?d00001

diff --git a/search/__pycache__/search_algorithm.cpython-36.pyc b/search/__pycache__/search_algorithm.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8b0b45f5d0ec70481f3df1dc34911ee8c1453abb
GIT binary patch
literal 9585
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

literal 0
HcmV?d00001

diff --git a/search/__pycache__/util.cpython-36.pyc b/search/__pycache__/util.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1ad4c8f7c814b8daa3f6b233e1e3e9f1f4811f7e
GIT binary patch
literal 7451
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

literal 0
HcmV?d00001

diff --git a/search/main.py b/search/main.py
index d4a4f71..9c8bd5b 100644
--- a/search/main.py
+++ b/search/main.py
@@ -22,17 +22,15 @@ def main():
         sys.exit(1)
 
     parse_input(data)
-
     # Add starting targets
     for piece in upperPiecesDict:
         find_target(piece)
-
     # keep moving until all the piece met its target
+    make_board()
+    print_board(board)
     while targetsDict:
         input()
         take_turn()
-    make_board()
-    print_board(board)
     file.close()
 
 
diff --git a/search/search_algorithm.py b/search/search_algorithm.py
index c9c4943..0bd0dda 100644
--- a/search/search_algorithm.py
+++ b/search/search_algorithm.py
@@ -5,9 +5,12 @@ from typing import Dict, Set, List
 
 from search.movement_logic import *
 from search.search_algo import piece_collision
-
+import main
 # Constant definition:
-from search.util import print_board
+from search.util import *
+
+# Global variable turn is needed to print output
+turn = 0
 
 BLOCK = "[X]"
 UPPER_ROCK = 'R'
@@ -285,17 +288,19 @@ def perform_optimal_combination(move_list: dict):
     -> prioritise action that after complete bring piece to its target.
     -> then choose an action from those piece with the least choice.
     -> then choose action from the remained piece in a way that not cause collision
-    :param move_list: contain all the pottential moved for all piece
+    :param move_list: contain all the potential moved for all piece
     """
-
+    global turn
     priority_list = []
     # For each piece who has a target, move all the piece that after take this action will lead directly to its target.
     # Keep the rest in the another list {so that we can sort them and , move each of them}
     for piece in move_list:
         if piece in targetsDict.keys() and compare_tile(move_list[piece][HIGHEST_RANK], targetsDict[piece]):
 
+            print_move(upperPiecesDict[piece], targetsDict[piece])
             # found a piece !!!perform swap and update board
             del board[upperPiecesDict[piece]]
+
             upperPiecesDict[piece] = targetsDict[piece]
             board[targetsDict[piece]] = piece
 
@@ -323,10 +328,14 @@ def perform_optimal_combination(move_list: dict):
                 continue
 
             # Found a move that does not cause collision
+
+            # This is print section
+            print(upperPiecesDict[piece], "  to ", move_list[piece][index])
+            print_move(upperPiecesDict[piece], move_list[piece][index])
+
             if upperPiecesDict[piece] in board.keys():
                 del board[upperPiecesDict[piece]]
             upperPiecesDict[piece] = move_list[piece][index]
-
             board[move_list[piece][index]] = piece
 
             # log that this piece had visit this tile <- help with ranking its option.
@@ -339,14 +348,15 @@ def take_turn():
 
     choose a combination of move that is partially optimal {move all the piece <some time> closer to its target}
     """
-    make_board()
-    print_board(board)
 
     possible_actions = {}
     for piece in upperPiecesDict:
         possible_actions[piece] = make_ranked_move_list(piece)
-
+    global turn
+    turn += 1
     perform_optimal_combination(possible_actions)
+    make_board()
+    print_board(board)
     update_target_dictionary()
 
 
@@ -386,4 +396,24 @@ def update_target_dictionary():
             if piece in targetsDict.keys():
                 continue
 
-            find_target(piece)
\ No newline at end of file
+            find_target(piece)
+
+# Every tool in this document doesn't seem to be helpful. We're brute forcing this
+def print_move(start: Tuple[int, int], finish: Tuple[int, int]):
+    # Go through every slide comparsion. If not printed already it's a swing.
+    # Three lines for readability
+    # Horizontal
+    global turn
+    if abs(start[0] - finish[0]) == 0 and abs(start[0] - finish[0]) <= 1:
+        print_slide(turn, start[0], start[1], finish[0], finish[1])
+    # LL to UR diagonal or UR to LL diagonal
+    elif abs(start[0] - finish[0]) <= 1 and abs(start[1] - finish[1]) == 0:
+        print_slide(turn, start[0], start[1], finish[0], finish[1])
+    # LR to UL diagonal
+    elif start[0] == (finish[0] - 1) and start[0] == (finish[0] + 1):
+        print_slide(turn, start[0], start[1], finish[0], finish[1])
+    # UL to LR diagonal
+    elif start[0] == (finish[0] + 1) and start[0] == (finish[0] - 1):
+        print_slide(turn, start[0], start[1], finish[0], finish[1])
+    else:
+        print_swing(turn, start[0], start[1], finish[0], finish[1])
\ No newline at end of file
-- 
GitLab