モンティ・ホール問題、説明されてもちょっと信じられません。
https://gigazine.net/news/20201009-monty-hall-problem/#group=nogroup&photo=0
なので実際にやってみようと思った。と言っても実際にドアを用意するのは面倒なのでプログラミングでやってみます。皆さん、Node-REDを用意してください。そしてこれを↓読み込んでください。スタートを押すと1万回、自動でやります。1万回のうち何回が最後にドアを変更した方が良かったか、何回が変更無しの方が良かったかが数字で出ます。是非、お試しください。
[{"id":"388e724e.f3cb5e","type":"tab","label":"Monty Hall","disabled":false,"info":""},{"id":"805522d7.af724","type":"function","z":"388e724e.f3cb5e","name":"Random","func":"var max = 3;\nvar min = 1;\nvar Values = [];\n\nfor (i = 0; i < 10000; ++i){\n var a = Math.floor( Math.random() * (max + 1 - min) ) + min ;\n Values.push(a);\n}\n\nmsg = {payload: Values};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":280,"y":100,"wires":[["6547b2ee.354a2c"]]},{"id":"6547b2ee.354a2c","type":"function","z":"388e724e.f3cb5e","name":"Count","func":"var Values = msg.payload;\nvar TotalCount = Values.length;\n\nvar counts = {};\n\nfor(var i=0; i< TotalCount; i++)\n{\n var key = Values[i];\n counts[key] = (counts[key])? counts[key] + 1 : 1 ;\n\n}\n\nmsg = {payload: counts};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":430,"y":100,"wires":[["75a4330c.03ea1c"]]},{"id":"b36701a2.47dc8","type":"inject","z":"388e724e.f3cb5e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"Start","payloadType":"str","x":130,"y":100,"wires":[["805522d7.af724"]]},{"id":"75a4330c.03ea1c","type":"debug","z":"388e724e.f3cb5e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":590,"y":100,"wires":[]},{"id":"5ef6b30a.3af14c","type":"comment","z":"388e724e.f3cb5e","name":"Random reliavility check","info":"","x":140,"y":60,"wires":[]},{"id":"d3b44fb0.25774","type":"comment","z":"388e724e.f3cb5e","name":"Monty trial","info":"","x":80,"y":180,"wires":[]},{"id":"44260c13.a8a1a4","type":"inject","z":"388e724e.f3cb5e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"Start","payloadType":"str","x":130,"y":240,"wires":[["8fd00a64.6948a8"]]},{"id":"a83bdc88.121dc","type":"function","z":"388e724e.f3cb5e","name":"Set CORRECT ANSWER","func":"// set option\nvar option = global.get("option");\n\nvar max = global.get("max");\nvar min = global.get("min");\n\nvar correct = Math.floor( Math.random() * (max + 1 - min) ) + min ;\n\nvar record = {"correct":correct};\nmsg = {payload: record};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":510,"y":240,"wires":[["c64d0cd6.ca2ca"]]},{"id":"cb12be4e.531f3","type":"function","z":"388e724e.f3cb5e","name":"Count","func":"var result = global.get("result");\nvar TotalCount = result.length;\nvar history = global.get("history");\n\nvar counts = {};\n\nfor(var i=0; i< TotalCount; i++)\n{\n var key = result[i];\n counts[key] = (counts[key])? counts[key] + 1 : 1 ;\n\n}\n\nmsg = {payload: counts, result: result, history: history};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":370,"y":600,"wires":[["dd032b7c.77ecf8"]]},{"id":"dd032b7c.77ecf8","type":"debug","z":"388e724e.f3cb5e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":600,"wires":[]},{"id":"8fd00a64.6948a8","type":"function","z":"388e724e.f3cb5e","name":"Set Initial","func":"// times to try\nglobal.set("times", 10000);\nglobal.set("counter", 1);\n\n// option\nglobal.set("option", [1,2,3]);\n\n// collect Win or Lose\nglobal.set("result", []);\n\n// history record\nglobal.set("history", []);\n\n// for Random\nglobal.set("max", 3);\nglobal.set("min", 1);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":280,"y":240,"wires":[["a83bdc88.121dc"]]},{"id":"c64d0cd6.ca2ca","type":"function","z":"388e724e.f3cb5e","name":"Player 1st SELECT","func":"var record = msg.payload;\n\nvar max = global.get("max");\nvar min = global.get("min");\n\nvar player1st = Math.floor( Math.random() * (max + 1 - min) ) + min ;\n\nrecord["player1st"] = player1st;\nmsg = {payload: record};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":490,"y":320,"wires":[["983d6749.846b28"]]},{"id":"983d6749.846b28","type":"function","z":"388e724e.f3cb5e","name":"Monty OPEN a door","func":"var record = msg.payload;\n\nvar max = global.get("max");\nvar min = global.get("min");\n\nvar player1st = record["player1st"];\nvar correct = record["correct"];\n\nvar MontySelect = 0;\nwhile (MontySelect == player1st || MontySelect == correct || MontySelect === 0){\n MontySelect = Math.floor( Math.random() * (max + 1 - min) ) + min ;\n}\n\nrecord["MontySelect"] = MontySelect;\nmsg = {payload: record};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":500,"y":400,"wires":[["502632aa.72538c"]]},{"id":"502632aa.72538c","type":"function","z":"388e724e.f3cb5e","name":"Player 2nd select","func":"var record = msg.payload;\nvar option = global.get("option");\nvar result = global.get("result");\nvar counter = global.get("counter");\nvar times = global.get("times");\nvar hist = global.get("history");\nmsg.option=option;\nmsg.result=result;\nmsg.counter=counter;\nmsg.times=times;\nmsg.hist=hist;\n\nvar selected = [record["player1st"], record["MontySelect"]];\n\noptionRemain = option.filter((v, i, a)=>\n v !== selected[0] && v !== selected[1]\n);\nrecord[\"remain\"] = optionRemain[0];\n\n// Result at 2nd selection\n// Chang-Win = C, NoChange-Win = N \nif (optionRemain[0] == record[\"correct\"]){\n result.push(\"Ch-Win\");\n record[\"result\"] = \"Ch-Win\";\n}else{\n result.push(\"NoCh-Win\");\n record[\"result\"] = \"NoCh-Win\";\n}\n\nhist.push(record);\nglobal.set(\"history\", hist);\n\nif (counter >= times){\n msg.loop = \"stop\"\n}else{\n global.set(\"counter\", ++counter);\n msg.loop = \"loop\"\n}\n\nmsg.payload = \"\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":490,"y":480,"wires":[["537ce392.85eacc"]]},{"id":"537ce392.85eacc","type":"switch","z":"388e724e.f3cb5e","name":"","property":"loop","propertyType":"msg","rules":[{"t":"eq","v":"loop","vt":"str"},{"t":"eq","v":"stop","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":230,"y":580,"wires":[["a83bdc88.121dc"],["cb12be4e.531f3"]]}]
読み込むとこんな感じになります。