向人们介绍离散概率分布概念的经典示例是bean机器。这台机器有大量的大理石从顶部狭窄的通道掉落,然后它们撞到交错的销钉行,在每个销钉处,大理石撞件可能会落到销钉的左侧或右侧。最终,将销钉收集到机器底部的垂直箱中。这台机器的简单图如下所示:
|     O     |
|     ^     |
|    ^ ^    |
|   ^ ^ ^   |
|  ^ ^ ^ ^  |
| ^ ^ ^ ^ ^ |
|_|_|_|_|_|_|
在此图中,O表示大理石掉落的位置。每个^都是钉子,大理石在该钉子处有50%的机会移动到钉子左侧或右侧的正方形。然后,大理石聚集在设备底部的垃圾箱中,对于足够多的大理石,垃圾箱中的大理石堆叠高度将类似于离散的二项分布。
挑战
对于这一挑战,您将基于上图来计算bean机器的最终概率分布。这些图被解释为大理石通过的二维“程序”,即朝向侧场或当前场下方的场。当弹珠到达机器底部时,它们会被计算为概率分布。为了使它有趣,这些图将包含比简单的源代码和引脚更多的字段。一个示例图是:
|     O     |
|     ^     |
|    ^ /    |
|   ^ | ^   |
|  <^- =  v |
| ^ ^ ^ ^ ^ |
此外,大理石现在各自具有旋转方向。此方向由某些字段设置,并确定大理石在其他几个字段中移动到下一个字段。
定义了以下字段:
- O: 资源。在其正下方产生大理石。这些弹珠的方向向左50%,向右50%。每个来源生产相同数量的大理石。
- U:水槽。进入此字段的所有大理石都将从豆子机中移除。
- : 空的空间。如果大理石到达此区域,它将移动到下面的区域。
- -:地板。如果大理石到达此区域,它将根据其当前方向移动到左侧的区域或右侧的区域。
- ^:分离器。如果大理石到达此区域,则它有50%的位置移动到分割器的右侧或左侧。这也决定了大理石的方向。
- v:加入。如果大理石到达此区域,它将移动到下面的区域。
- /:倾斜的垫子。如果大理石到达此区域,它将移动到垫板左侧的区域,设置大理石的方向。
- \:与上一个相同,但在右侧。
- |:反射镜。如果大理石到达此区域,它将反转大理石的方向,并根据此反向将大理石向右或向左移动。
- =:大炮。如果一个大理石到达这个领域后,将其移动到左边的电流方向向右或,直到大理石遇到一个字段不是- ,- -或- O。
- <:与上一个相同,但是将始终设置方向并向左移动。
- >:与上一个相同,但在右侧。
关于该图,提供以下保证。
- 每个输入行在字段中的长度将完全相同。
- 每行的最左侧和最右侧字段始终为|。
- 该图将不包含任何可能的路径,通过这些路径,大理石可以在不确定的迭代次数(例如\/或)中卡入机器^^。
- 该图将仅包含上述字段。
- 有一个或多个来源
结果
您的任务将是生成概率分布的16行高ASCII条形图,其中大理石从图的底部离开,并按比例缩放,以便最大的概率覆盖所有16个字符。因此对于以下问题:
|     O     |
|     ^     |
|    ^ ^    |
|   ^ ^ ^   |
|  ^ ^ ^ ^  |
| ^ ^ ^ ^ ^ |
您的程序应产生以下解决方案(请注意,其宽度应与输入程序相同,包括侧面的管道:
     # #     
     # #     
     # #     
     # #     
     # #     
     # #     
     # #     
     # #     
   # # # #  
   # # # #  
   # # # #  
   # # # #  
   # # # #  
   # # # #  
 # # # # # #
 # # # # # # 
例子
下面是一个示例,应测试所有不同字段类型的功能:
|     O     O         |
|  O  ^ /  <^\\\      |
|    ^ >            ^ |
|   ^ ^ ^            =|
|  ^ ^ | ^    <^   O  |
| ^ > ^ | ^   O ^> v  |
||  ^U  ^  |  =    ^\ |
|  ^ ^ ^ ^U ^\ ---^   |
| = ^   ^     =    v  |
它应该导致以下输出:
                     # 
                     # 
                     # 
                     # 
                   # # 
                   # # 
                   # # 
       # #         # # 
       # #         # # 
       # #         # # 
       # #         # # 
      ## #         # # 
      ## # #       # # 
   # ### # #       # # 
 # # ### # #       # # 
 # # ### # #       # # 
规则
功能和完整程序都构成了对此挑战的有效答案。您将以换行符分隔的字符串形式收到该图,并应以给定格式返回输出图。默认输入/输出规则适用。尽管在输出中允许使用尾随和前导的换行符,但每行的宽度应与输入的宽度完全相同。
为了提供更多有创意的解决方案,仅要求您的程序在90%的时间内为同一张图输出正确的结果。毕竟这是一个概率模拟。
计分
这是代码高尔夫球,因此以字节为单位的最低分数获胜。
v= [space]?
                v,[space]不同之处在于大炮在它们周围的互动方式。