#! /usr/bin/env python3 # def sudden_death ( trial_num, card_num ): #*****************************************************************************80 # ## sudden_death() simulates a "sudden death" if card 0 is observed in a deck. # # Licensing: # # This code is distributed under the MIT license. # # Modified: # # 10 February 2023 # # Author: # # John Burkardt # # Input: # # integer trial_num: the number of trials. # # integer card_num: the number of cards in the deck. # # Output: # # integer days[n]: the number of times a card was chosen (and replaced) # before the 0 card was encountered. # import numpy as np days = np.zeros ( trial_num ) for i in range ( 0, trial_num ): deck = np.arange ( 0, card_num ) days[i] = 0 while ( True ): days[i] = days[i] + 1 np.random.shuffle ( deck ) if ( deck[0] == 0 ): break return days def sudden_death_test ( ): #*****************************************************************************80 # ## sudden_death_test() tests sudden_death(). # # Licensing: # # This code is distributed under the MIT license. # # Modified: # # 10 February 2023 # # Author: # # John Burkardt # import matplotlib.pyplot as plt import numpy as np print ( '' ) print ( 'sudden_death_test():' ) print ( ' Count the number of times a card was picked from a deck' ) print ( ' and then replaced, until card 0 was picked.' ) card_num = 10 print ( '' ) print ( ' Number of cards in deck is ', card_num ) print ( ' n min mean max std' ) print ( '' ) for trial_num in [ 10, 100, 1000, 10000, 100000 ]: days = sudden_death ( trial_num, card_num ) print ( ' %6d %2d %8.2f %6d %8.2f' \ % ( trial_num, np.min ( days ), np.mean ( days ), np.max ( days ), np.std ( days ) ) ) # # Make a histogram. # trial_num = 10000 card_num = 10 days = sudden_death ( trial_num, card_num ) plt.clf ( ) plt.hist ( days, bins = 100, density = True ) plt.grid ( True ) plt.xlabel ( '<-- Number of times a card was picked -->' ) plt.ylabel ( '<-- Frequency -->' ) filename = 'sudden_death_' + str ( card_num ) + '_pdf.png' plt.savefig ( filename ) print ( ' Graphics saved as "' + filename + '"' ) plt.close ( ) card_num = 52 print ( '' ) print ( ' Number of cards in deck is ', card_num ) print ( ' n min mean max std' ) print ( '' ) for trial_num in [ 10, 100, 1000, 10000, 100000 ]: days = sudden_death ( trial_num, card_num ) print ( ' %6d %2d %8.2f %6d %8.2f' \ % ( trial_num, np.min ( days ), np.mean ( days ), np.max ( days ), np.std ( days ) ) ) # # Make a histogram. # trial_num = 10000 card_num = 52 days = sudden_death ( trial_num, card_num ) plt.clf ( ) plt.hist ( days, bins = 100, density = True ) plt.grid ( True ) plt.xlabel ( '<-- Number of times a card was picked -->' ) plt.ylabel ( '<-- Frequency -->' ) filename = 'sudden_death_' + str ( card_num ) + '_pdf.png' plt.savefig ( filename ) print ( ' Graphics saved as "' + filename + '"' ) plt.close ( ) return if ( __name__ == "__main__" ): sudden_death_test ( )