Click here to monitor SSC
SQLServerCentral is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
 
 
 
        
Home       Members    Calendar    Who's On


Add to briefcase

Monty Hall Paradox Expand / Collapse
Author
Message
Posted Wednesday, September 2, 2009 6:45 AM
Old Hand

Old HandOld HandOld HandOld HandOld HandOld HandOld HandOld Hand

Group: General Forum Members
Last Login: Monday, September 15, 2014 9:20 AM
Points: 343, Visits: 697
Comments posted to this topic are about the item Monty Hall Paradox
Post #781385
Posted Wednesday, September 9, 2009 1:05 PM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Group: General Forum Members
Last Login: Wednesday, September 9, 2009 9:40 PM
Points: 1, Visits: 17
(removed)
Post #785278
Posted Wednesday, September 9, 2009 3:53 PM
SSC Rookie

SSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC Rookie

Group: General Forum Members
Last Login: Monday, September 15, 2014 10:35 AM
Points: 38, Visits: 536
That is an interesting puzzle. Here is another solution using a CTE instead of a loop.

-- Setup
set nocount on

-- Create a table to store the results.
create table Doors
( ID int
, ChosenDoor int
, WinningDoor int
, WinLose as case when ChosenDoor = WinningDoor then 0 else 1 end -- Win = 1, Lose = 0
);

-- Use a CTE to generate 10,000 "contestants" and their chosen/winning doors.
-- If the chosen door equals the winning door the contestant will switch when given the
-- option and lose. Otherwise they will switch to the winning door and win.
with Digits(i)
as (select i
from (select 1 union select 2 union select 3 union select 4 union select 5 union
select 6 union select 7 union select 8 union select 9 union select 0) AS X(i))
insert into Doors(ID, ChosenDoor, WinningDoor)
select (D3.i * 1000 + D2.i * 100 + D1.i * 10 + D0.i) AS seq
, abs(cast(cast(newid() as varbinary) as int)) % 3 + 1 ChosenDoor
, abs(cast(cast(newid() as varbinary) as int)) % 3 + 1 WinningDoor
from Digits as D0, Digits as D1, Digits as D2, Digits as D3

-- Select the total number of winners (1) and losers (0).
select WinLose
, count(*) Total
from Doors
group by WinLose

-- Clean-up
drop table Doors
set nocount off

Post #785394
Posted Wednesday, September 9, 2009 4:07 PM
Old Hand

Old HandOld HandOld HandOld HandOld HandOld HandOld HandOld Hand

Group: General Forum Members
Last Login: Monday, September 15, 2014 9:20 AM
Points: 343, Visits: 697
Very cool alternative. Thanks for sharing! :)
Post #785399
« Prev Topic | Next Topic »

Add to briefcase

Permissions Expand / Collapse