Problem 4: GENEROUS GIFTS (536 Puzzles and Curious Problems, Henry Ernest, Dudeney)

Jun 1, 2014, 1:08 PM

# Problem 4: GENEROUS GIFTS (536 Puzzles and Curious Problems, Henry Ernest, Dudeney)

# A generous man set aside a certain sum of money for 
# equal distribution weekly to the needy of his acquaintance. 
# One day he remarked, "If there are five fewer applicants next week, 
# you will each receive two dollars more." Unfortunately, instead of 
# there being fewer there were actually four more persons applying for the gift.
# "This means," he pointed out, "that you will each receive one dollar less." 
# How much did each person receive at that last distribution?


fewer.applicants= function(initial.applicants) return(initial.applicants - 5)
more.applicants= function(initial.applicants) return(initial.applicants + 4)
recieved.money= function(money, applicants) return(money/applicants)
recieved.money.initial.applicants= function() recieved.money(sum.of.money, initial.applicants)
recieved.money.fewer.applicants= function() recieved.money(sum.of.money, fewer.applicants(initial.applicants))
more.recieved.money.fewer.applicants= function() recieved.money.fewer.applicants()-recieved.money.initial.applicants()
recieved.money.more.applicants= function() recieved.money(sum.of.money, more.applicants(initial.applicants))
less.recieved.money.more.applicants= function() recieved.money.initial.applicants()-recieved.money.more.applicants()
check= function() return((more.recieved.money.fewer.applicants()==2 & less.recieved.money.more.applicants()==1))


for (initial.applicants in 5:100) {
  for (sum.of.money in 1:200) {
    if(check()) {
      print(paste("Sum of money:", sum.of.money))
      print(paste("Initial applicants:", initial.applicants))
      print(paste("Reciecved money for initial applicants:", recieved.money.initial.applicants()))
      print("")
      print(paste("Fewer applicants:", fewer.applicants(initial.applicants)))
      print(paste("Reciecved money for fewer applicants:", recieved.money.fewer.applicants()))
      print(paste("More money for fewer applicants:", more.recieved.money.fewer.applicants()))    
      print("")
      print(paste("More applicants:", more.applicants(initial.applicants)))
      print(paste("Reciecved money for more applicants:", recieved.money.more.applicants()))
      print(paste("Less money for more applicants:", less.recieved.money.more.applicants()))          
    }
  } 
}
[1] "Sum of money: 120"
[1] "Initial applicants: 20"
[1] "Reciecved money for initial applicants: 6"
[1] ""
[1] "Fewer applicants: 15"
[1] "Reciecved money for fewer applicants: 8"
[1] "More money for fewer applicants: 2"
[1] ""
[1] "More applicants: 24"
[1] "Reciecved money for more applicants: 5"
[1] "Less money for more applicants: 1"