def isCurious( n, d ): ans = reduceFraction( n, d ) ndigits = digits( n ) ddigits = digits( d ) for i, nd in enumerate( ndigits ): for j, dd in enumerate( ddigits ): if nd == dd: cn = number( ndd for ii, ndd in enumerate( ndigits ) if i != ii ) cd = number( ddd for jj, ddd in enumerate( ddigits ) if j != jj ) if ans == reduceFraction( cn, cd ): return True return False
def run(self): self.keys.press(self.stage_key) while not self.stopped(): log.info('start fight') self.sleep(number(2, False)) self.press(self.start_key) # 点击开始行动 self.sleep(number(2, False)) self.press(self.start_key) # 点击 队伍列表页面 的开始行动 self.sleep(self.mission_time) if self.callback: self.callback() self.press(self.emtpy_key) # 点击 空白处 用来跳过结算画面 self.sleep(number(2, False)) self.press(self.emtpy_key) # 点击 2 次,跳过可能出现的升级画面 self.sleep(number(3, False)) log.info('end fight')
def __getLayers(self, layers, layerFiles): layersMap = {} for layerFile in layerFiles: layername = self.__getLayername(layerFile) if layername not in layersMap: noData = layers[layername] if noData is not None: noData = utils.number(noData); layersMap[layername] = { "name": layername, "nodata": noData, "files": [] } layersMap[layername]['files'].append(layerFile) layersList = [] for key in layersMap: layersList.append(layersMap[key]) return layersList
def __getLayers(self, layers, layerFiles): layersMap = {} for layerFile in layerFiles: layername = self.__getLayername(layerFile) if layername not in layersMap: noData = layers[layername] if noData is not None: noData = utils.number(noData) layersMap[layername] = { "name": layername, "nodata": noData, "files": [] } layersMap[layername]['files'].append(layerFile) layersList = [] for key in layersMap: layersList.append(layersMap[key]) return layersList
def nextState(original_state, action, match_log=None): """ Parameters ------------ original_state: State Object 状態オブジェクト action: int 行動 Returns ------------ next_state: State Object 次の状態 reward: list(int) or None 報酬(ゲーム終了時のみ順位リストを返す,それ以外はNone) Notes: ------------ 現在の状態stateに対して,actionが選択されたときに,遷移する状態を返す 非破壊的メソッド """ # 現状態のコピー state = deepcopy(original_state) player = state.players[state.turn] # 状態フラグ kill8 = False skip5 = False outX = False # パスの場合 if action == 54: # 流れの場合 if state.last == nextTurn(state.turn, state.out, reverse=state.reverse): # 流れによる場の初期化 flowGame(state) if match_log != None: match_log.writeFrowLog() state.turn = state.last return (state, None) # パス以外の行動の場合 else: # 状態遷移(プレイヤーの手札から) cut_index = np.where(player == action)[0] state.players[state.turn] = np.delete(player, cut_index).tolist() state.field.append(action) # カード効果の処理 card_number = NUMBER[number(action)] if card_number == "8": flowGame(state) kill8 = True elif card_number == "5": skip5 = True elif card_number == "J": state.back = True elif card_number == "9": state.reverse = bool(1 - state.reverse) # 和了 if len(state.players[state.turn]) == 0: outX = True state.out[state.turn] = True state.rank[state.turn] = sum(state.out) state.last = nextTurn(state.turn, state.out, reverse=state.reverse, skip=skip5, kill=kill8, win=True) # 非和了 else: state.last = state.turn # ターンを進める state.turn = nextTurn(state.turn, state.out, reverse=state.reverse, skip=skip5, kill=kill8, win=outX) if sum(state.out) == N_Player - 1: return (state, state.rank) else: return (state, None)
def isGood( (d, used, _) ): return not number( used[:3] ) % g[ d ]
from utils import digits, number g = { 2 : 2, 3 : 3, 4 : 5, 5 : 7, 6 : 11, 7 : 13, 8 : 17 } numbers = frozenset( xrange( 10 ) ) fringe = [ ( 8, digits( x * 17 ), numbers - set( digits( x * 17 ) ) ) for x in xrange( 1000 / 17, 100 / 17, -1 ) if len( set( digits( x * 17 ) ) ) == 3 ] def successorFn( (d, used, unused) ): return [ ( d - 1, ( u, ) + used, unused - { u } ) for u in unused ] def goalState( ( d, _, __ ) ): return d == 1 def isGood( (d, used, _) ): return not number( used[:3] ) % g[ d ] def explore( fringe ): while fringe: node = fringe.pop() if goalState( node ): yield node; continue elif isGood( node ): fringe += successorFn( node ) print sum( number( used ) for _, used, _ in explore( fringe ) )