Проверяем парадокс Монти Холла ИТТ. За одной из дверей ОП спрятал саморез. Делайте выбор, только подпишитесь чтобы видно было что разные аноны. Потом я открою одну дверь, кто сразу проиграет - увы. Остальным будет дана возможность поменять выбор. Потом я открою все двери и проведём подсчёты.
>>258164742 Там какое-то говно, а не код. Я ничего не понял, что хотел сказать автор. Комментариев нет, язык какое-то говно вместо си. Че вообще делает программа, где у нее старт, как она генерирует за какой дверю козел и как потом выбирает. Словно автор специально хотел сделать непонятно.
>>258164370 (OP) Парадокс Монти Холла был 100500 раз обоссан математиками, которые шарят в теории вероятности. Тот факт, что какое-то невразумительное говно показали в голливудском фильме ровным счётом ничего не меняет.
>>258165071 Сынок, я на си прогаю. Си это лингва франка и самый простой язык. Когда хочешь сделать, чтобы все поняли - делаешь на си. Че там в говного я не знаю. Я должен учить приоритеты операций для го, чтобы понять какой-то пример? Или какие-то загадочные импорты math rand. Которые хз как генерят и вообще устроены? Не думаю.
>>258165198 >Сынок Ясно. Первая пара по погромированию прошла в шараге и теперь ты дохуя эксперт. Если бы ты реально знал си, ты бы не задавал тупых вопросов. >загадочные импорты math rand Тебе было бы очевидно, что это сишный srand(), хотя не уверен, вы это уже прошли. > приоритеты операций для го Каких операций? Математических? Ты у мамы не очень умный?
>>258165217 Не смогу. Я не математик. "Принеси мне на блюде" тоже не работает. В целом - изначально вероятность составляет далеко не 33%, и после открытия "неправильной" двери процент не меняется совершенно, так как не производится перестановка "приза" и раунд не запускается по новой. Это чистое воплощение американской логики: "По телевизору показали сочную булоску в макдональдсе, она такая и есть. Пойду куплю." Ты никогда не задумывался об этом?
ОП ХУЙ, ОТКРЫВАЙ УЖЕ, ОДИН ХУЙ НИКТО БОЛЬШЕ НЕ УЧАСТВУЕТ ОП ХУЙ, ОТКРЫВАЙ УЖЕ, ОДИН ХУЙ НИКТО БОЛЬШЕ НЕ УЧАСТВУЕТ ОП ХУЙ, ОТКРЫВАЙ УЖЕ, ОДИН ХУЙ НИКТО БОЛЬШЕ НЕ УЧАСТВУЕТ ОП ХУЙ, ОТКРЫВАЙ УЖЕ, ОДИН ХУЙ НИКТО БОЛЬШЕ НЕ УЧАСТВУЕТ
>>258165467 Нет, я как раз понимаю, но не имею профильного образования для ведения дискуссии на эту тему. Это немного разные вещи. Тем более на этой говноборде, заселённой школотой чуть менее, чем полностью. Алсо, с данным парадоксом расходится не только математика, но и сухая логика. >>258165485 Отсоси у меня, необразованный мальчик.
>>258165693 >но и сухая логика Он называется парадоксом не потому что это парадокс по определению, а в том, что он противоречит "сухой логике", долбоёб. >>258165693 >Отсоси у меня, необразованный мальчик. Почти слово в слово мне сказала тёлка из тиндера, которая затирала про влияние фаз луны на "денежный портал" и позицию Марса относительно "канала счастья". Вот прям одни слова. "Ты просто не образованный" Ну да, за 6 лет физтеха не научили геометрии чакр относительно фазы луны. >>258165821 То что ты долбоёб, ты уже продемонстрировал, можешь не продолжать. Как шаражку закончишь, может поймёшь.
>>258164370 (OP) Не назову это парадоксом, но это реально работает. С друзьями так развлекались и загадывали двери. Всё как по методичке. Просто выбрать неправильную дверь шанс выше, так что нужно менять.
>>258166034 >ПАРАДОКСЫ В МАТЕМАТИКЕ - ситуация, когда в рамках той или иной математической теории доказываются два взаимно исключающих друг друга утверждения, причем каждое из этих утверждений выведено законными с точки зрения данной теории методами. П. в м., как правило, свидетельствует о глубоких недостатках математической теории. И неудивительно, что обнаружение парадоксов часто ведет к попыткам существенной перестройки всей теории. Наибольшую известность получили парадоксы «наивной» теории множеств и классической математической теории вероятностей. В обеих теориях обнаружение парадоксов стимулировало дальнейшие исследования и привело к появлению соответствующих аксиоматических теорий. >П. в м. связаны, как правило, с необычными способами образования понятий. При этом, однако, эта необычность удивительным образом оказывается в рамках допустимого в данной теории.
А теперь расскажи мне где тут два доказанных взаимоисключающих утверждения.
Представим несколько иную ситуацию. Например дверей 1000000 и столько же игроков. После выбора ведущий открывает 999998 дверей, оставляя лишь две. Дверь под номером 228 и дверь под номером 77777. И оказалось что дверь №228 выбрало 7 человек, а дверь №77777 - 13 человек, включая тебя. Будешь ли ты менять свой выбор? С одной стороны Парадокс Монти говорит - меняй. А с другой - почему осталась именно твоя дверь? Может всё таки она выйгрышная? Получается что шанс таки стал 50/50?
>>258166251 Именно. В условиях с этим МАСШТАБИРОВАНИЕМ не говорится, что ведущий обязан оставить выбранную игроком дверь, он так же может ее открыть и дать выбирать из новых номеров.
Текст кода для проверки на шарпе. int WinCount = 0; for (int i = 0; i < 1000; i++) { bool UserisCorrectat1stround = false; bool MontyHallNeedReThink = true; int[] doors = new int[3]; doors[0] = 0; doors[1] = 0; doors[2] = 0; //Place goat Random random_goat = new Random(Guid.NewGuid().GetHashCode()); int goat = random_goat.Next(0, 2); if (goat == 0) doors[0] = 1; if (goat == 1) doors[1] = 1; if (goat == 2) doors[2] = 1; //User choose door 1st time Random random_user1st = new Random(Guid.NewGuid().GetHashCode()); int[] possible_choices = new int[3]; int user1stchoice = random_user1st.Next(0, 2); if (user1stchoice == 0) possible_choices[0] = 1; if (user1stchoice == 1) possible_choices[1] = 1; if (user1stchoice == 2) possible_choices[1] = 1; //check if user was correct at first round for (int j = 0; j < 3; j++) { if (doors[j] == possible_choices[j] && doors[j] == 1) UserisCorrectat1stround = true; } //Monty Hall open non-goat door //if user chooce incorrect door then Monty Hall open only other incorrect door if (UserisCorrectat1stround == false) { for (int j =0; j < 3; j++) { if (doors[j] == 0 && possible_choices[j] == 0) doors[j] = 2; } } //if user choose correct door Monty Hall open randomly one of the incorrect doors if (UserisCorrectat1stround == true) { for (;;) { if (MontyHallNeedReThink == false) break; int[] MontyHall_possible_choices = new int[3]; Random MontyHall_incorrect_door = new Random(Guid.NewGuid().GetHashCode()); int MontyHall_choose_to_open = MontyHall_incorrect_door.Next(0, 2); if (MontyHall_choose_to_open == 0) MontyHall_possible_choices[0] = 1; if (MontyHall_choose_to_open == 1) MontyHall_possible_choices[1] = 1; if (MontyHall_choose_to_open == 2) MontyHall_possible_choices[1] = 1; for (int j=0;j<3;j++) { if (MontyHall_possible_choices[j] != doors[j] && doors[j] == 0 && MontyHall_possible_choices[j] == 1) { doors[j] = 2; MontyHallNeedReThink = false; } if (MontyHall_possible_choices[j] == doors[j] && doors[j] == 1) { MontyHallNeedReThink = true; } } } } //finally User choose between two doors //0 = empty door; 1 = goat door; 2 = alredy open door; //User choose not to change for (int j=0;j<3;j++) { if (doors[j] == 1 && possible_choices[j] == 1) WinCount++; } } Console.WriteLine(WinCount); Console.ReadKey(); }
time: equ 2Ch ; MS-DOS syscall to get current time puts: equ 9 ; MS-DOS syscall to print a string cpu 8086 bits 16 org 100h section .text ;;; Initialize the RNG with the current time mov ah,time int 21h mov di,cx ; RNG state is kept in DI and BP mov bp,dx mov dx,sw ; While switching doors, mov bl,1 call simrsl ; run simulations, mov dx,nsw ; While not switching doors, xor bl,bl ; run simulations. ;;; Print string in DX, run 65536 simulations (according to BL), ;;; then print the amount of cars won. simrsl: mov ah,puts ; Print the string int 21h xor cx,cx ; Run 65536 simulations call simul mov ax,si ; Print amount of cars mov bx,number ; String pointer mov cx,10 ; Divisor .dgt: xor dx,dx ; Divide AX by ten div cx add dl,'0' ; Add ASCII '0' to the remainder dec bx ; Move string pointer backwards mov [bx],dl ; Store digit in string test ax,ax ; If quotient not zero, jnz .dgt ; calculate next digit. mov dx,bx ; Print string starting at first digit mov ah,puts int 21h ret ;;; Run CX simulations. ;;; If BL = 0, don't switch doors, otherwise, always switch simul: xor si,si ; SI is the amount of cars won .loop: call door ; Behind which door is the car? xchg dl,al ; DL = car door call door ; Which door does the contestant choose? xchg ah,al ; AH = contestant door .monty: call door ; Which door does Monty open? cmp al,dl ; It can't be the door with the car, je .monty cmp al,ah ; or the door the contestant picked. je .monty test bl,bl ; Will the contestant switch doors? jz .nosw xor ah,al ; If so, he switches .nosw: cmp ah,dl ; Did he get the car? jne .next inc si ; If so, add a car .next: loop .loop ret ;;; Generate a pseudorandom byte in AL using "X ABC" method ;;; Use it to select a door (1,2,3). door: xchg bx,bp ; Load RNG state into byte-addressable xchg cx,di ; registers. .loop: inc bl ; X++ xor bh,ch ; A ^= C xor bh,bl ; A ^= X add cl,bh ; B += A mov al,cl ; C' = B shr al,1 ; C' >>= 1 add al,ch ; C' += C xor al,bh ; C' ^= A mov ch,al ; C = C' and al,3 ; ...but we only want the last two bits, jz .loop ; and if it was 0, get a new random number. xchg bx,bp ; Restore the registers xchg cx,di ret section .data sw: db 'When switching doors: $' nsw: db 'When not switching doors: $' db '*' number: db 13,10,'$'
with Ada.Text_Io; use Ada.Text_Io; with Ada.Float_Text_Io; use Ada.Float_Text_Io; with ada.Numerics.Discrete_Random;
procedure Monty_Stats is Num_Iterations : Positive := 100000; type Action_Type is (Stay, Switch); type Prize_Type is (Goat, Pig, Car); type Door_Index is range 1..3; package Random_Prize is new Ada.Numerics.Discrete_Random(Door_Index); use Random_Prize; Seed : Generator; Doors : array(Door_Index) of Prize_Type;
procedure Set_Prizes is Prize_Index : Door_Index; Booby_Prize : Prize_Type := Goat; begin Reset(Seed); Prize_Index := Random(Seed); Doors(Prize_Index) := Car; for I in Doors'range loop if I /= Prize_Index then Doors(I) := Booby_Prize; Booby_Prize := Prize_Type'Succ(Booby_Prize); end if; end loop; end Set_Prizes;
function Play(Action : Action_Type) return Prize_Type is Chosen : Door_Index := Random(Seed); Monty : Door_Index; begin Set_Prizes; for I in Doors'range loop if I /= Chosen and Doors(I) /= Car then Monty := I; end if; end loop; if Action = Switch then for I in Doors'range loop if I /= Monty and I /= Chosen then Chosen := I; exit; end if; end loop; end if; return Doors(Chosen); end Play; Winners : Natural; Pct : Float; begin Winners := 0; for I in 1..Num_Iterations loop if Play(Stay) = Car then Winners := Winners + 1; end if; end loop; Put("Stay : count" & Natural'Image(Winners) & " = "); Pct := Float(Winners 100) / Float(Num_Iterations); Put(Item => Pct, Aft => 2, Exp => 0); Put_Line("%"); Winners := 0; for I in 1..Num_Iterations loop if Play(Switch) = Car then Winners := Winners + 1; end if; end loop; Put("Switch : count" & Natural'Image(Winners) & " = "); Pct := Float(Winners 100) / Float(Num_Iterations); Put(Item => Pct, Aft => 2, Exp => 0); Put_Line("%");
main: ( INT prize, choice, show, not shown, new choice; INT stay winning:=0, change winning:=0, random winning:=0; INT doors = 3; [doors-1]INT other door;
TO trials DO # put the prize somewhere # prize := brand(doors); # let the user choose a door # choice := brand(doors); # let us take a list of unchoosen doors # INT k := LWB other door; FOR j TO doors DO IF j/=choice THEN other door[k] := j; k+:=1 FI OD; # Monty opens one... # IF choice = prize THEN # staying the user will win... Monty opens a random port# show := other door[ brand(doors - 1) ]; not shown := other door[ (show+1) MOD (doors - 1 ) + 1] ELSE # no random, Monty can open just one door... # IF other door[1] = prize THEN show := other door[2]; not shown := other door[1] ELSE show := other door[1]; not shown := other door[2] FI FI;
# the user randomly choose one of the two closed doors (one is his/her previous choice, the second is the one not shown ) # other door[1] := choice; other door[2] := not shown; new choice := other door[ brand(doors - 1) ]; # now let us count if it takes it or not # IF choice = prize THEN stay winning+:=1 FI; IF not shown = prize THEN change winning+:=1 FI; IF new choice = prize THEN random winning+:=1 FI OD;
print(("Staying: ", percent(stay winning), new line )); print(("Changing: ", percent(change winning), new line )); print(("New random choice: ", percent(random winning), new line )) )
MsgBox,, Monty Hall Problem, These are the results:`r`n`r`nWhen I changed my guess, I got %Correct_Change% of %Iterations% (that's %Incorrect_Change% incorrect). That's %Percent_Change%`% correct.`r`n`r`nWhen I randomly changed my guess, I got %Correct_Random% of %Iterations% (that's %Incorrect_Random% incorrect). That's %Percent_Random%`% correct.`r`n`r`nWhen I stayed with my first guess, I got %Correct_Stay% of %Iterations% (that's %Incorrect_Stay% incorrect). That's %Percent_Stay%`% correct. ExitApp
Monty_Hall(Mode) ;Mode is 1 for change, 2 for random, or 3 for stay { Random, guess, 1, 3 Random, actual, 1, 3 Random, rand, 1, 2
show := guess = actual ? guess = 3 ? guess - rand : guess = 1 ? guess+rand : guess + 2rand - 3 : 6 - guess - actual Mode := Mode = 2 ? 2*rand - 1: Mode Return, Mode = 1 ? 6 - guess - show = actual : guess = actual }
int main(void){ unsigned i, j, k, choice, winsbyswitch=0, door[3];
srand(time(NULL)); //initialize random seed. for(i=0; i<GAMES; i++){ door[0] = (!(rand()%2)) ? 1: 0; //give door 1 either a car or a goat randomly. if(door[0]) door[1]=door[2]=0; //if 1st door has car, give other doors goats. else{ door[1] = (!(rand()%2)) ? 1: 0; door[2] = (!door[1]) ? 1: 0; } //else, give 2nd door car or goat, give 3rd door what's left. choice = rand()%3; //choose a random door.
//if the next door has a goat, and the following door has a car, or vice versa, you'd win if you switch. if(((!(door[((choice+1)%3)])) && (door[((choice+2)%3)])) || (!(door[((choice+2)%3)]) && (door[((choice+1)%3)]))) winsbyswitch++; } printf("\nAfter %u games, I won %u by switching. That is %f%%. ", GAMES, winsbyswitch, (float)winsbyswitch*100.0/(float)i); }
Проиграл со всех итт. Быдло, школьники и гсм не могут решить задачу для четвертого класса, мамкины математики не выкупают троллинг, мамкины кодеры пишут говнокод, типа этого >>258169473 . Пока что самы смешной на сегодня.
>>258170374 33% шанс угадать при рандомном выборе двери, значит на другие двери приходится 66%. И всё, при открытии никакого маняизменения шанса нет, просто количество других дверей уменьшается до 1. Отрицают это только шизики и тролли. /thread
>>258164370 (OP) Эту задачу можно даже не проверять, тут чистая логика. Когда ты выбрал дверь, ведущий открыл еще одну - так как ведущий ЗНАЕТ где приз, то остается либо один вариант - что она за той что ты выбрал, либо два варианта (так как двери две, а одну из них всегда открывают) - что она в другой. Следовательно шанс выиграть больше, 1 против 2.
>>258170957 Он не может подвести к неправильному, потому что всегда оставляет дверь с призом (то есть наоборот подсказывает), только если она не твоя - твоя дверь одна - у него две - шанс выиграть больше.
Блядь, дл меня дошло нахуй. Выбираешь 1 дверь, не меняешь, её открывают. Получаешь шанс в 33% Выбираешь дверь, там говно, меняешь, получаешь шанс в 66%. Прикол в том, что условия задачи запутанные и во втором случае ты открываешь 2 двери.
>>258171734 Отличная аналогия, кстати. Малаца, анон. То есть, тут получается два стула. Ты изначально выбираешь одну дверь, а потом тебе говорят: 1) Открываешь ту, которую ты выбрал; 2) Открываешь остальные две. И тут вполне логично, что шанс-таки будет 66.66666%