猜数字AI

依靠"mAnB"的提示猜一个没有重复数字的四位数,'A'表示数字对位置也对,'B'表示数字对位置不对。
符合规则的全部候选是5040个,以排除法的思路,反复过滤掉不符合"mAnB"的候选。算法猜出谜底在最糟情况下不超过8步。
候选集比较大,因此存放于file中。

#过滤候选集
def filter(guess,status)
    case status
      when 0:  #0a0b
         remain_include_zero(guess)
      when 1:  #0a1b
         remain_include_upon_one(guess)
         remove_include_upon_two(guess)
         match_zero(guess)
      when 2:  #0a2b
         remain_include_upon_two(guess)
         remove_include_upon_three(guess)
         match_zero(guess)
      when 3:  #0a3b
         remain_include_upon_three(guess)
         remove_include_four(guess)
         match_zero(guess)
      when 4:  #0a4b
         remain_include_four(guess)
         match_zero(guess)
      when 10: #1a0b
         remain_include_upon_one(guess)
         remove_include_upon_two(guess)
         match_one(guess)
      when 11: #1a1b
         remain_include_upon_two(guess)
         remove_include_upon_three(guess)
         match_one(guess)
      when 12: #1a2b
         remain_include_upon_three(guess)
         remove_include_four(guess)
         match_one(guess)
      when 13: #1a3b
         remain_include_four(guess)
         match_one(guess)
      when 20: #2a0b
         remain_include_upon_two(guess)
         remove_include_upon_three(guess)
         match_two(guess)
      when 21: #2a1b
         remain_include_upon_three(guess)
         remove_include_four(guess)
         match_two(guess)
      when 22: #2a2b
         remain_include_four(guess)
         match_two(guess)
      when 30: #3a0b
         remain_include_upon_three(guess)
         remove_include_four(guess)
         match_three(guess)
      when 40: #4a0b
    end
  end


你可能感兴趣的:(数字)