Пример #1
0
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
Пример #2
0
 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')
Пример #3
0
	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
Пример #4
0
    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
Пример #5
0
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)
Пример #6
0
def isGood( (d, used, _) ):
    return not number( used[:3] ) % g[ d ] 
Пример #7
0
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 ) )