About “Probably A Good Book”

“Probably a Good Book” is a terrific self-contained companion for the motivated youngster or life-long learner.  The concepts of probability are explained clearly, concisely and without pretentious mathematical terms.  The book contains a deep-dive into numerous problems involving probability — each of which contains a complete solution.

Unlike other books on probability, “Probably A Good Book” focuses on the development of the readers’ general problem-solving skills rather than the ability to plug numbers into formulas to get answers.

If you are interested in becoming a better thinker and a more creative problem solver, this book will provide a good opportunity.

The authors are Kaylee Yuhas and Sam Schwab, both of whom are currently in graduate school and Dr Edwin F Meyer, chair of physics at Baldwin Wallace University and the founder of the Gedanken Institute for Problem Solving.

The book is available at Amazon.com via the link below:

https://www.amazon.com/Probably-Good-Book-Kaylee-Yuhas/dp/0988588900/ref=sr_1_1?ie=UTF8&qid=1466514144&sr=8-1&keywords=Probably+a+good+book

Python Code Text

  1. Exactly One Ace Each

from random import randint

#function that returns the selected card chosen at random

def drawCard(deck):

selection = randint(0, len(deck) – 1)

card = deck[selection]

deck.pop(selection)

if(len(deck) == 0):

empty = True

else:

empty = False

return deck, card, empty

#function that renews the deck

def renewDeck():

deck = [‘A’, 2, 3, 4, 5, 6, 7, 8, 9, 10, ‘J’, ‘Q’, ‘K’, ‘A’,        2, 3, 4, 5, 6, 7, 8, 9, 10, ‘J’, ‘Q’, ‘K’, ‘A’, 2, 3, 4, 5,     6, 7, 8, 9, 10, ‘J’, ‘Q’, ‘K’, ‘A’, 2, 3, 4, 5, 6, 7, 8, 9,   10, ‘J’, ‘Q’, ‘K’]

return deck

#function that determines the average

def Average(count, BIG_NUM):

return count/float(BIG_NUM)

print ‘Enter the number of trials to run: ‘

BIG_NUM = raw_input()

BIG_NUM = int(BIG_NUM)

deck = [‘A’, 2, 3, 4, 5, 6, 7, 8, 9, 10, ‘J’, ‘Q’, ‘K’, ‘A’, 2, 3, 4, 5, 6, 7, 8, 9, 10, ‘J’, ‘Q’, ‘K’, ‘A’, 2, 3, 4, 5, 6, 7, 8, 9, 10, ‘J’, ‘Q’, ‘K’, ‘A’, 2, 3, 4, 5, 6, 7, 8, 9, 10, ‘J’, ‘Q’, ‘K’]

players = [0, 1, 2, 3]

ExactlyOneEach = 0

empty = False

i = 0

while i < BIG_NUM:

playerAces = [False, False, False, False]

while empty != True:

for index in players:

deck, selectedCard, empty = drawCard(deck)

if selectedCard == ‘A’:

playerAces[index] = True

if playerAces[0] == True and playerAces[1] == True and    playerAces[2] == True and playerAces[3] == True:

ExactlyOneEach = ExactlyOneEach + 1

deck = renewDeck()

empty = False

i = i + 1

print ‘Percentage of times that each player had exactly one ace each: ‘, 100*Average(ExactlyOneEach, BIG_NUM)

 

 

 

  1. No Whammy!

from random import randint

#function to randomly choose a pre-determined number of balls from the bag

def pullOutBalls(numRemoved):

balls = [‘gold’, ‘gold’, ‘black’, ‘black’, ‘black’, ‘black’,   ‘black’,’black’,’black’,’whammy’]

ballsChosen = []

i = 0

while i < numRemoved:

indexRemoved = randint(1, len(balls)) – 1

ballRemoved = balls[indexRemoved]

ballsChosen.append(ballRemoved)

balls.pop(indexRemoved)

i = i + 1

return ballsChosen

#function to determine whether the dream vacation was won or not

def winOrLose(ballsChosen):

wins = 0

if ballsChosen.count(‘gold’) >= 1 and     ballsChosen.count(‘whammy’) == 0:

wins = wins + 1

return wins

 #function that determines the number of times we won when pulling out 2 through 5 balls

def winsForEachOption():

options= [2,3,4,5]

winsList= []

for numRemoved in options:

ballsChosen = pullOutBalls(numRemoved)

wins = winOrLose(ballsChosen)

winsList.append(wins)

return winsList

#function that determines which option (pulling 2, 3, 4, or 5 balls) gives us the highest probability

def bestOdds(two, three, four, five):

winningList = [two, three, four, five]

best = winningList[0]

for item in winningList:

if item > best:

best = item

return best, winningList.index(best) + 2

#function that determines the average

def Average(count, BIG_NUM):

return count/float(BIG_NUM)

print ‘Enter the number of trials to run: ‘

BIG_NUM = raw_input()

BIG_NUM = int(BIG_NUM)

i = 0

twoWins = 0

threeWins = 0

fourWins = 0

fiveWins = 0

while i < BIG_NUM:

winsList = winsForEachOption()

twoWins = twoWins + winsList[0]

threeWins = threeWins + winsList[1]

fourWins = fourWins + winsList[2]

fiveWins = fiveWins + winsList[3]

i = i + 1

winner, numDrawn = bestOdds(twoWins, threeWins, fourWins, fiveWins)

print ‘Average for two balls = ‘, 100*Average(twoWins, BIG_NUM)

print ‘Average for three balls = ‘, 100*Average(threeWins, BIG_NUM)

print ‘Average for four balls = ‘, 100*Average(fourWins, BIG_NUM)

print ‘Average for five balls = ‘, 100*Average(fiveWins, BIG_NUM)

print ‘For this simulation, the highest success rate was removing %i balls from the bag.’ %(numDrawn)

 

 

  1. Casino Chip Conundrum

from random import randint

#function to reset the three bags

def resetGame():

global bag1, bag2, bag3, bags

bag1 = [‘white’,’white’]

bag2 = [‘black’,’white’]

bag3 = [‘black’,’black’]

bags = [bag1, bag2, bag3]

#function to choose the remaining chip from the same bag

def StayAndPlay(chosenBag, sampleChip):

index = chosenBag.index(sampleChip)

newBag = chosenBag.pop(index)

lastChip = chosenBag[0]

return lastChip

#function to choose a chip from a new bag

def DitchToSwitch(chosenBag, bags):

index = bags.index(chosenBag)

bags.pop(index)

r = randint(0,1)

newBag = bags[r]

r2 = randint(0,1)

lastChip = newBag[r2]

return lastChip

#function that determines the average

def Average(count, BIG_NUM):

return count/float(BIG_NUM)

#————————————-

print ‘Enter the number of trials to run: ‘

BIG_NUM = raw_input()

BIG_NUM = int(BIG_NUM)

i = 0

#values to keep count of victories

oneWay = 0     #if sample=black, stay. if sample=white, switch

anotherWay = 0 #if sample=white, stay. if sample=black, switch

alwaysStay = 0

alwaysSwitch = 0

firstTry = 0

while i < BIG_NUM:

resetGame()

coinFlip = randint(0,2) #with 3 sides! (0,1,2)

bagChoice = bags[coinFlip]

coinToss = randint(0,1) #two sides this time

sampleChip = bagChoice[coinToss]

if sampleChip == ‘white’:

anotherChip = StayAndPlay(bagChoice, sampleChip)

resetGame()

# we have to reset the game because we use pop()

bagChoice = bags[coinFlip]

sampleChip = bagChoice[coinToss]

oneChip = DitchToSwitch(bagChoice, bags)

if anotherChip == ‘black’:

anotherWay +=1

alwaysStay +=1

if oneChip == ‘black’:

oneWay +=1

alwaysSwitch +=1

elif sampleChip == ‘black’:

firstTry += 1

oneChip = StayAndPlay(bagChoice, sampleChip)

resetGame()

bagChoice = bags[coinFlip]

sampleChip = bagChoice[coinToss]

anotherChip = DitchToSwitch(bagChoice, bags)

if oneChip == ‘black’:

oneWay += 1

alwaysStay +=1

if anotherChip == ‘black’:

anotherWay += 1

alwaysSwitch +=1

i = i + 1

print ‘percent wins one way: ‘, 100*Average(oneWay, BIG_NUM)

print ‘percent wins another way: ‘, 100*Average(anotherWay, BIG_NUM)

print ‘percent first try: ‘, 100*Average(firstTry, BIG_NUM)

print ‘percent wins, always stay: ‘, 100*Average(alwaysStay, BIG_NUM)

print ‘percent wins, always switch: ‘, 100*Average(alwaysSwitch, BIG_NUM)

 

 

  1. The Best Bet

from random import randint

#create a class for the dice

class Dice:

def __init__(self, sides):

self.sides = [i for i in range(1, sides+1)]

def makeRoll(self):

sideChoice = randint(1,6)

return sideChoice

die = Dice(6)

#———-for six dice————————–

print ‘Enter the amount of trials to run: ‘

BIG_NUM = raw_input()

BIG_NUM = int(BIG_NUM)

j = 0

sixCount = []

while j < BIG_NUM:

i = 0

choices = []

while i <6:

sideChoice = die.makeRoll()

choices.append(sideChoice)

i = i + 1

sixCount.append(choices.count(6))

j = j + 1

average = 1- sixCount.count(0)/float(len(sixCount))

print ‘Percentage of times one or more six is rolled with six dice = ‘, 100*average

#———for twelve dice————————

j = 0

sixCount = []

while j < BIG_NUM:

i = 0

choices = []

while i <12:

sideChoice = die.makeRoll()

choices.append(sideChoice)

i = i + 1

sixCount.append(choices.count(6))

j = j + 1

average = 1- (sixCount.count(0) + sixCount.count(1)) /float(len(sixCount))

print ‘Percentage of times two or more sixes are rolled with twelve dice = ‘, 100*average

#———for eighteen dice————————

j = 0

sixCount = []

while j < BIG_NUM:

i = 0

choices = []

while i <18:

sideChoice = die.makeRoll()

choices.append(sideChoice)

i = i + 1

sixCount.append(choices.count(6))

j = j + 1

average = 1- (sixCount.count(0) + sixCount.count(1) + sixCount.count(2)) /float(len(sixCount))

print ‘Percentage of times three or more sixes are rolled with eighteen dice = ‘, 100*average

 

  1. Set of Six

from random import randint

#define a class that creates the die

class Die:

def __init__(self, sides):

self.sides = [i for i in range(1, sides + 1)]

#function that makes each roll

def makeRoll(self):

sideChoice = randint(1,6)

for item in self.sides:

if item == sideChoice:

self.sides.remove(sideChoice)

return self.sides

#function that will renew the list

def renewList(self, sides):

self.sides = [i for i in range(1, sides + 1)]

return self.sides

#function that actually rolls the die as long as there are still

#numbers that have not yet been rolled

def rollThatDie():

count = 0

while len(die.sides) > 0:

die.makeRoll()

count = count + 1

return count

#function that determines the average number of rolls taken

def average(count, BIG_NUM):

return count/float(BIG_NUM)

print ‘Enter the number of trials to run: ‘

BIG_NUM = raw_input()

BIG_NUM = int(BIG_NUM)

totalRolls = 0

i = 0

while i < BIG_NUM:

die = Die(6)

rollsToComplete = rollThatDie()

totalRolls = totalRolls + rollsToComplete

i = i + 1

print ‘Average number of rolls is: ‘, average(totalRolls, BIG_NUM)

 

Rocky River Public Library Staff Day

On May 19th 2016, Dr Meyer presented a two-hour seminar on problem solving at the Annual Rocky River Public Library Staff Day.  Dr Meyer initially spoke about the evolution of the human body and mind and pointed out many structures and thought processes that are no longer needed in today’s society.  These structures are called vestigial.  He then presented a variety of intellectual challenges problems that demonstrate these natural thought processes.

After the presentation, Dr Meyer remarked, “What a great group, intelligent, enthusiastic and a lot of fun.”

2016 Family Problem Solving Night!

The 2016 Gedenken Institute Family Problem Solving Night was presented by Meridith Witt, Edwin Meyer and members of the Baldwin Wallace University Problem Solving Club on Friday April 29th in the Center for Innovation and Growth (CIG) at Baldwin Wallace University.

The event included five challenging problems that challenged the attendees.

A video from last year’s event is below.

 

Lutheran West Senney Honors Academy

On Friday March 18th, 2016, Ed Meyer, Meridith Witt, with the help of Kaylee Yuhas and Brandon Shipley presented a two-hour problem-solving competition at the Senney Honors Academy at Lutheran West High School.  The Dean of the Honors Academy, Becky Slack, remarked, “My students are still talking about how much fun it was. I love to watch them challenge themselves.”  The students were certainly up to the challenge, solving problems in topology, operations research and logic.  A couple of pictures  front the event are shown below.

SevenCylinders3

LutheranWestPentominoFarm

Steris Corporation

On October 13th, 2015, Dr Meyer and Sam Schwab presented a 1:45 long problem-solving, team-building exercise to 75 scientists and engineers at Steris Corporation at their annual meeting at the Renaissance Hotel in Downtown Cleveland.

Rockwell Automation

On December 9th 2014, Dr Meyer and Baldwin Wallace student Sam Schwab presented a one-day problem solving workshop for 60 executives at Rockwell Automation. Rockwell Automation employs over 22,000 people and serves customers in more than 80 countries worldwide. The Fortune 500 company reported $6.35 billion in sales during fiscal 2013.  Here is what the leader of the group wrote to me after the presentation.

 

Dear Ed,

Last week was a great experience for my team. They really enjoyed the opportunity to take a day out for personal/professional development.

I appreciate all the work you did to fine tune your presentation to Rockwell Automation.

 

Thank you,

Glenn G. Goldney

SIGSCE Problem Solving Workshop

In February 2014, Professor Ed Meyer of Baldwin Wallace University, Raja Sooriamurthi of Carnegie Mellon University and Nick Falkner of the University of Adelaide  presented a problem solving workshop at the SIGSCE (Special Interest Group on Computer Science Education) Annual Conference in Atlanta.  An attendee wrote:

What a gold mine of ideas! Thank you! One of the best workshops that I have ever attended.

 

CS4HS at Rutgers University

In August 2013, Dr Ed Meyer presented the plenary lecture at the Google-Sponsored CS4HS (Computer Science for High School) Conference held at Rutgers University. The presentation was on immersing problem solving skills throughout the curriculum. The one-day conference consisted of Dr Meyer’s three-hour workshop in the morning and then of 20-minute presentations and a poster session in the afternoon. Here is a note from the organizers after the conference:

Hello Ed

Thank you SO much for helping to make our workshop at Rutgers a TOTAL success!!! All of the evaluations were glowing!

Our workshop last year was top-notch! But this year, we outdid ourselves!!!! We are extremely grateful for your willingness to spend time with our teachers. I know that it is not asking you for just three hours of your time. This is a very busy time of the year and a three-hour presentation takes at least 3 times that time to prepare. Thank you.

I hope your academic year is very rewarding!!!

Fran and Lars