Quyền hạn - 168 131 125 115
Mã đánh gôn:
nal g Random;1..1e4|%{$C=g 3;$P=g 3;$T+=$C-eq(0..2|?{$_-ne$P-and$_-ne(0..2|?{$_-ne$P-and$_-ne$C}|g)})};"$($T/100)%"
Thay đổi từ bản gốc:
Cắt bớt 53 ký tự khỏi tập lệnh gốc với một số sửa đổi.
- Đã xóa các khoảng trắng và dấu ngoặc đơn nơi PowerShell đang tha thứ cho nó.
- Đã sử dụng một
ForEach-Objectvòng lặp, thông qua %bí danh, thay vì while.
- Phạm vi số được sử dụng (ví dụ
0..2:) thay vì các mảng được xác định rõ ràng.
- Đã xóa
writekhỏi lệnh cuối cùng - hóa ra tôi không cần nó sau tất cả.
- Lật biểu thức cho lựa chọn của máy chủ xung quanh để sử dụng cú pháp đường ống ngắn hơn.
- Thay thế 10000 bằng 1e4.
- Mất gợi ý của Joey và bỏ qua
Get-từ Get-Random. (Lưu ý: Việc sửa đổi này làm tăng đáng kể thời gian chạy. Trên hệ thống của tôi, nó đã tăng từ khoảng 20 giây lên gần nửa giờ mỗi lần chạy!)
- Sử dụng thủ thuật của Rynant để làm
$T+=...thay vì if(...){$T++}.
Một số lưu ý:
Kịch bản này được dự định là ngắn gọn nhất có thể, đồng thời cũng là một mô phỏng của kịch bản Monty Hall càng kỹ càng tốt. Nó không đưa ra giả định về việc chiếc xe sẽ ở đâu, hoặc người chơi sẽ chọn cửa nào trước. Giả định thậm chí không được thực hiện cho cửa cụ thể mà chủ nhà sẽ chọn trong bất kỳ kịch bản cụ thể nào. Các giả định duy nhất còn lại là những giả thuyết thực sự được nêu trong vấn đề Monty Hall:
- Chủ nhà sẽ chọn một cửa mà người chơi không chọn trước, không chứa xe.
- Nếu người chơi chọn cửa trước bằng ô tô, điều đó có nghĩa là có hai lựa chọn khả dĩ cho chủ nhà.
- Lựa chọn cuối cùng của người chơi sẽ không phải là lựa chọn ban đầu của anh ta cũng không phải là lựa chọn của chủ nhà.
Ungolfed, với ý kiến:
# Setup a single-character alias for Random, to save characters later.
# Note: Script will run a lot (about 500 times) faster if you use Get-Random here.
# Seriously, as it currently is, this script will take about a half-hour or more to run.
# With Get-Random, it'll take less than a minute.
nal g Random;
# Run a Monty Hall simulation for each number from 1 to 10,000 (1e4).
1..1e4|%{
# Set car location ($C) and player's first pick ($P) to random picks from a pool of 3.
# Used in this way, Random chooses from 0..2.
$C=g 3;$P=g 3;
# Increment win total ($T) if the car is behind the door the player finally chooses.
# (Player's final choice represented by nested script.)
$T+=$C-eq(
# Filter the doors (0..2) to determine player's final choice.
0..2|?{
# Player's final choice will be neither their original choice, nor the host's pick.
# (Host's pick represented by nested script.)
$_-ne$P-and$_-ne(
# Filter the doors to determine host's pick.
0..2|?{
# Host picks from door(s) which do not contain the car and were not originally picked by the player.
$_-ne$P-and$_-ne$C
# Send filtered doors to Random for host's pick.
}|g
)
}
)
};
# After all simulations are complete, output overall win percentage.
"$($T/100)%"
# Variable & alias cleanup. Not included in golfed script.
rv C,P,T;ri alias:g
Tôi đã chạy tập lệnh này nhiều lần và nó luôn cho kết quả rất gần với xác suất hai phần ba. Một số mẫu:
(Như trên)
(Sử dụng Get-Randomnhư định nghĩa bí danh, thay vì chỉ Random)
- 66,92%
- 67,71%
- 66,6%
- 66,88%
- 66,68%
- 66,16%
- 66,96%
- 66,7%
- 65,96%
- 66,87%