|
|
|
SSC Journeyman
      
Group: General Forum Members
Last Login: Sunday, May 19, 2013 2:19 PM
Points: 90,
Visits: 369
|
|
|
|
|
|
Forum Newbie
      
Group: General Forum Members
Last Login: Wednesday, September 09, 2009 9:40 PM
Points: 1,
Visits: 17
|
|
|
|
|
|
SSC Rookie
      
Group: General Forum Members
Last Login: Friday, May 17, 2013 12:50 AM
Points: 35,
Visits: 507
|
|
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
|
|
|
|
|
SSC Journeyman
      
Group: General Forum Members
Last Login: Sunday, May 19, 2013 2:19 PM
Points: 90,
Visits: 369
|
|
| Very cool alternative. Thanks for sharing! :)
|
|
|
|