【发布时间】:2017-01-08 23:38:17
【问题描述】:
我正在查看 this problem(复制如下),并希望在功能上模拟它(特别是在 R 中)方面得到一些帮助。
在下雪的下午,您喜欢玩一副标准的、随机洗牌的 52 张纸牌的单人纸牌“游戏”。你开始将牌面朝上发牌,一次一张,成一堆。当您发每张牌时,您还按顺序大声说出标准套牌中的 13 张牌面:A、2、3 等。(当您到达 K 时,您从 A 重新开始。)您一直这样做直到你发的牌的等级与你大声说话的等级相匹配,在这种情况下你输了。如果您在没有任何比赛的情况下到达牌组的尽头,您就赢了。
你获胜的概率是多少?
通过 for 循环执行此操作似乎很简单 - 在每个循环中,通过 rep(seq(13),4) 构建卡组,对其进行置换,然后检查置换和未置换卡组之间的任何条目是否相等。我对这种功能性方法特别感兴趣。为此,我想构建一次x <- rep(seq(13),4),制作一个 52 x n 矩阵,其中每列是sample(x),然后找到某种方法来检查每一列是否为sample(x) ~ x,其中〜我的意思是“至少有一个共享元素,这意味着索引和值相等”。这将有望返回真/假,具体取决于这是真还是假。
因此,对于~,如果我将其称为compare(x,y),我希望compare(c(1,2,3),c(3,1,2)) 为假,compare(c(1,2,3,4,5),c(8,9,10,11,5)) 为真。
所以,我的问题是:
-
实现比较的好(功能性)方法是什么?
-
有没有更好的方法来解决这个问题?
【问题讨论】: