From 2536b015b63fae38480f61da6d77256762c1aa55 Mon Sep 17 00:00:00 2001
From: Xuan Trinh <xuan.trinh@student.unimelb.edu.au>
Date: Sun, 21 Mar 2021 16:46:47 +1100
Subject: [PATCH] Add the move selection logic to add to Queue for expanding
 using either DFS or BDF. i need to stop to wait for we come to argee on how
 we want to store the block, the move. Before i can continue check for move
 collision and avoiding block

---
 search/__pycache__/method.cpython-38.pyc      | Bin 2693 -> 2696 bytes
 .../__pycache__/movement_logic.cpython-38.pyc | Bin 3903 -> 4590 bytes
 search/search_algorithm.py                    |  78 ++++++++++++++++++
 3 files changed, 78 insertions(+)
 create mode 100644 search/search_algorithm.py

diff --git a/search/__pycache__/method.cpython-38.pyc b/search/__pycache__/method.cpython-38.pyc
index 5e38a9f00b59c12ca1756d8f39293229d8a97b76..0400de112aa4ed4e6f0ff7a2edbb169348170aad 100644
GIT binary patch
delta 902
zcmZn_?GWV)<>lpKU|?WabU7?Rmv16pDIX650|N&G1A{XI14FUJ#EH`NB@8tTC5+8X
z#YQDeDNN0bj0`2rDa;_cO0I;ZhM}3Umc4{^0b33GLdIH-8ukV33mF(0!Wr^ZSQtt;
zvbl;%7#TpYgeipuqzk4yk|B>Nf+3Tkma~MjnW2U=h1G_khGPNOLIxLx35>BzYPo7S
zYPclp8H#$q42W<~Eq4u93R^bQ1jeF-8txKqNrn=hY^I`jCA>A<C47<$&5U3cKZupa
zRKp2Tvp`@WLkVLIV+yl4Lo=f|gAD^jyhIRek{(zOR^9a=E1=q$5Zdz$aBD%*!Hm#R
zxTuCJg*}^T0#gwm)N&rM<xB9IR1b1D3&I$vR*1VF;MEG!$%@dKr$bOR8$xyAB2bh_
zGN>&O!me#0BO^oMqQagU&R_;jj?I^tx|t^@v1z&#u`n<&RB4wMC#I)bDHK$eWaQ@=
zE9mAb6sIN@C1)rUB$j08m*neb<`tBd=w%h>=iOqs#adcWkXm$$H7CD3wMbKV@+me$
z5!U3K{NmJG?4JIvMMe2Vx0s7lOD6wfGh|~<Oi9t?nQX%@GdY@Fol$XeGkcOX6Bi=~
zBL^cB69*#~BM&1V69*$76AL33D})6SGhpIlG-5Vl;$q}u)M4Ud)MM6TR%0$w-mJiJ
zi7{W1fq|h2OeirhFx(PI$t*5O%u7y<Pf9H*Pfg8>0_6xcP;TK8VH9C1Qe$9X(BvrM
l18EZl5t1N61Vo5~2ni6O3?e`(Atr;32NOz@6S<Tb{Q)uL#wq{+

delta 904
zcmeAWZ58DU<>lpKU|?X_c|9~ihIb-gDIYHb0|N&G1A{XI14FUR#EH`NDNMEOB@8tT
zC5+8X#bzZ;Da_4`j0`2rDJ&p*0%O&U5|$c<X2x2M64nK5H5>~WYdJF+YPo7S7qBm6
zaABCh7`vjDyN0udTauwD0z!jDC)D!PaHp_lGfiMD(yHMp;gDn~;ml?#+Ev0;!&Aa7
z$<WML!c|kxQ^EscrZLrkggGP`7Vs`)C}FH&OkomdXl4{=uwj5|=F4U(`hlVumtH1>
z-aG^RI_ja;F(b4T=GAbguz}ru18OxVn3sp&s1n8+7KABKoqS-Ot8nV9hXf2`4J$%x
zo(@jsFx6}b)rEwe#SRI_!o0$W8jc103mF(0YPiA~f*DvCv`PfBxh60bnK3eeU<p$S
zJ1E{^@gK>M#}vVk!V%1%$+`I)Q#UhH5zFK-HXZwy|NsC0e~Y!WpdhvA7Hdv^d1_IW
zdPqiUQK~{_u|i^=LS}JsX{thbMrxiyNl~RjNxnjUL28~tT4qkFpQhmCV{C?#dDsmM
zSd(+|i&Jm0d-}T;73CLc^4?+rDY?ZMbc-?I7GrP`69WT75i<h=!!5?*TZ~DQ<Ji?1
z6(+Z_Cs{MHFmW+*Fmf=mFmW()F|jc5F>x^RF>x{SFd8uNFd8u%F>x{SG3qe!G3qhv
zG3zjKFtRZUFmf;!DQ#BfxWve<05Td(C{E%M^$!K*2{urE;SymKVJcE(U|`VXDB=UD
i5&{uoAVLsCh=2%D5TOJjKq`yC1|bN=$thgQj9vh;Eyk(<

diff --git a/search/__pycache__/movement_logic.cpython-38.pyc b/search/__pycache__/movement_logic.cpython-38.pyc
index 624608e075463829c30dedab89a6cbc99f4338d0..ea2011bd4267979726c999e2ad4197c2eb26874c 100644
GIT binary patch
literal 4590
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

literal 3903
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

diff --git a/search/search_algorithm.py b/search/search_algorithm.py
new file mode 100644
index 0000000..ffcad3c
--- /dev/null
+++ b/search/search_algorithm.py
@@ -0,0 +1,78 @@
+"""
+logic:
+    -> prioritise the action which take the token closer to its target
+"""
+from search.method import distance_between
+from search.movement_logic import slide_right, slide_left, slide_up_left, slide_up_right, slide_down_left, \
+    slide_down_right
+
+
+def add_to_queue(record, queue, token_position, target):
+    """
+    :argument record: the tile that current token already pass by
+    :param queue: tile a wait to be process.
+    :param token_position: current position
+    :param target: where the token want to go
+    :return:
+
+        -> check the adjcent tile and weight them {prioritise the tile close to the target first}
+        -> append them to the queue in that order
+    """
+    #add all the adjcent move to queue
+    appending_list = add_adjcent_action(record, token_position, target)
+
+    #sort the list base on the how close it is to target
+    appending_list.sort(key = (lambda x: distance_between(x, target)))
+
+    #add the list to the head to the queue
+    appending_list.extend(queue)
+
+    return appending_list
+
+
+def add_if_new_tile(record, list, tile, target):
+    """
+    handle check if the tile has been seen by the token before
+    we only add after we expand the node
+    :param record: log all move of the token while moving toward the target.
+    :param list: the temporary list to append to while await to process
+    :param tile: the adjcent tile of a token
+    :return: the list so the local change can be pass to higher scope
+    """
+    if not tile in record or (record[tile] != target):
+        list.append(tile)
+    return list
+
+
+def add_adjcent_action(record, token_position, target):
+    """
+    create a abstraction to hide implementation detail on how to add adjcent move
+    :param record: ensure add the move we have not seen
+    :param token: current position of the token
+    :param target: where the token want to get to
+    :return: the queue
+    """
+    appending_list = []
+
+    # check the right tile
+    appending_list = add_if_new_tile(record, appending_list, slide_right(token_position), target)
+
+    # check the left tile
+    appending_list = add_if_new_tile(record, appending_list, slide_left(token_position), target)
+
+    # check the up_left
+    appending_list = add_if_new_tile(record, appending_list, slide_up_left(token_position), target)
+
+    # check the up_uight
+    appending_list = add_if_new_tile(record, appending_list, slide_up_right(token_position), target)
+
+    # check the down_left
+    appending_list = add_if_new_tile(record, appending_list, slide_down_left(token_position), target)
+
+    # check the down_right
+    appending_list = add_if_new_tile(record, appending_list, slide_down_right(token_position), target)
+
+    return appending_list
+
+
+
-- 
GitLab