zoukankan      html  css  js  c++  java
  • Dice 5 ==> dice 7

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Mock%20Interviews/Large%20Search%20Engine%20Company%20/Search%20Engine%20Company%20-%20Interview%20Problems%20-%20SOLUTIONS/On-Site%20Question%202%20-%20SOLUTION.ipynb

    On-Site Question 2 - SOLUTION


    Question

    Given a dice which rolls from 1 to 5, simulate a uniform 7 sided dice!

    Requirements

    You MUST do this on pen and paper or on a whiteboard. No actual coding is allowed until you've come up with a solution by hand!

     

     

    SOLUTION

    Because the 5 sided dice can not produce 7 possible outcomes on a single roll, we immediately know that we need to roll the dice at least twice.

    If we roll the dice twice we have 25 possible combinations of the results of the two rolls. While 25 is not divisible by 7, 21 is. This means we can implement our previous strategy of throwing out rolls not in our intended range.

    It's also important to note that we can't expand the solution to implement more rolls in order to not throw any out, because 5 and 7 are both prime which means that no exponent of 5 will be divisible by 7 no matter how high you go.

    We will define our range as a section of the 25 possible combinations of rolls. A good way to do this is by converting the two rolls into a unique outcome number in the range 1 through 25.

    We will create this number by taking the rolls, then we take the first roll and after subtracting 1 from it we multiply it by 4. Now the first roll corresponds with a value of 1 - 20.

    Then we take the second roll and add it to the result of the first manipulation. Giving us a range of 1-25.

    So our final solution is to roll the dice twice. Check the manipulated range from 1 to 25, if its greater than 21, do a reroll. Let's see it in action:

     
    from random import randint
     
    def dice5():
        return randint(1, 5)
     

    Now for our conversion function:

     
     
    def convert5to7():
    
        # For constant re-roll purposes
        while True:
    
            # Roll the dice twice
            roll_1 = dice5()
            roll_2 = dice5()
            
            #print 'The rolls were {} and {}'.format(roll_1,roll_2)
    
            # Convert the combination to the range 1 to 25
            num = ( (roll_1-1) * 5 ) +  ( roll_2 ) 
    
            #print 'The converted range number was:',num
            if num > 21:
    
                # re-roll if we are out of range
                continue
    
            return num %7 + 1
     
     
     
    In [25]:
    convert5to7()
    
    Out[25]:
    2
     

    Good Job!

  • 相关阅读:
    配合网页滚屏播放,做解说词
    @enable跟@import注解
    组合注解与元注解
    Spring Aware
    https的设计原理
    用信鸽来解释 HTTPS
    http三次握手四次挥手
    一致性哈希
    redis cluster原理
    redis cluster集群搭建
  • 原文地址:https://www.cnblogs.com/prmlab/p/6961014.html
Copyright © 2011-2022 走看看