Hi,

my solution came a bit too late and had nothing to offer in comparison
to the previous answers, so here is my slightly modified cheating
solution (I do not check anything, I actually use counting
calculations....)

##################################################################
n=8        #Dice number
d=3        #At least d fives
f=50000    #Display step (0: never, 1:always, f:every f lines)

class Fixnum
  def fact
    return 1 if self<2
    self*(self-1).fact
  end

  def cnp(p)
    self.fact/(p.fact*(self-p).fact)
  end
end

@desirable=(d..n).inject(0){|mem,p| mem+n.cnp(p)*5**(n-p)}

N=6**n
(0...N).step(f){|outcome_id|
  outcome=outcome_id.to_s(6).rjust(n,'0').split('').collect{|dice| dice.to_i+1}
  print "\n#{(outcome_id+1).to_s.rjust(n)} : #{outcome.inspect}"
  print " <==" unless outcome.select{|dice| dice==5}.size<d
} unless f==0

puts "\nNumber of desirable outcomes is #{@desirable}"
puts "Number of possible outcomes is #{N}"
puts "Probability is #{@desirable.to_f/N}"
##################################################################



time ruby dice.rb

       1 : [1, 1, 1, 1, 1, 1, 1, 1]
   50001 : [1, 2, 1, 3, 4, 3, 6, 3]
  100001 : [1, 3, 1, 6, 1, 6, 5, 5]
  150001 : [1, 4, 2, 2, 5, 3, 5, 1]
  200001 : [1, 5, 2, 5, 2, 6, 4, 3]
  250001 : [1, 6, 3, 1, 6, 3, 3, 5]
  300001 : [2, 1, 3, 4, 3, 6, 3, 1]
  350001 : [2, 2, 4, 1, 1, 3, 2, 3]
  400001 : [2, 3, 4, 3, 4, 6, 1, 5]
  450001 : [2, 4, 4, 6, 2, 3, 1, 1]
  500001 : [2, 5, 5, 2, 5, 5, 6, 3] <==
  550001 : [2, 6, 5, 5, 3, 2, 5, 5] <==
  600001 : [3, 1, 6, 1, 6, 5, 5, 1]
  650001 : [3, 2, 6, 4, 4, 2, 4, 3]
  700001 : [3, 4, 1, 1, 1, 5, 3, 5]
  750001 : [3, 5, 1, 3, 5, 2, 3, 1]
  800001 : [3, 6, 1, 6, 2, 5, 2, 3]
  850001 : [4, 1, 2, 2, 6, 2, 1, 5]
  900001 : [4, 2, 2, 5, 3, 5, 1, 1]
  950001 : [4, 3, 3, 2, 1, 1, 6, 3]
 1000001 : [4, 4, 3, 4, 4, 4, 5, 5]
 1050001 : [4, 5, 4, 1, 2, 1, 5, 1]
 1100001 : [4, 6, 4, 3, 5, 4, 4, 3]
 1150001 : [5, 1, 4, 6, 3, 1, 3, 5]
 1200001 : [5, 2, 5, 2, 6, 4, 3, 1]
 1250001 : [5, 3, 5, 5, 4, 1, 2, 3] <==
 1300001 : [5, 4, 6, 2, 1, 4, 1, 5]
 1350001 : [5, 5, 6, 4, 5, 1, 1, 1] <==
 1400001 : [6, 1, 1, 1, 2, 3, 6, 3]
 1450001 : [6, 2, 1, 3, 5, 6, 5, 5] <==
 1500001 : [6, 3, 1, 6, 3, 3, 5, 1]
 1550001 : [6, 4, 2, 2, 6, 6, 4, 3]
 1600001 : [6, 5, 2, 5, 4, 3, 3, 5] <==
 1650001 : [6, 6, 3, 2, 1, 6, 3, 1]
Number of desirable outcomes is 226491
Number of possible outcomes is 1679616
Probability is 0.134846893575674

real    0m0.010s
user    0m0.000s
sys     0m0.008s




Thanks for the quiz!












On 01/10/2007, come <come.news / free.fr> wrote:
> Hi,
>
> Here is my quick solution :
>
> dice.rb :
>
> dice, n = ARGV.grep(/\d+/)
> verbose = true if ARGV.include?("-v")
> sample = true if ARGV.include?("-s")
>
> max=("5"*dice.to_i).to_i(6)
> n=n.to_i
> resultat= (0..max).inject(0) do |sum,i|
>   output = verbose || (sample && i % 50_000 == 0)
>   print i+1,"\t",("%#{dice}s" % i.to_s(6)).split(//).map{|e| e.to_i
> +1}.inspect if output
>   if i.to_s(6).scan(/4/).size > n-1
>     puts "<=" if output
>     sum+1
>   else
>     puts "" if output
>     sum
>   end
> end
>
> puts "Number of desirable outcomes is #{resultat}"
> puts "Number of possible outcomes is #{max+1}"
> puts Float(resultat) / Float(max+1)
>
>
>
>
>
>
>