Я смотрел this problem (скопировал ниже) и хочу помочь с его функциональным моделированием (в частности, в R).Мышление функционально в R с моделированием перетасовки колоды
В снежные дни вы любите играть в пасьянс «игра» со стандартной случайной перетасованной колодой из 52 карт. Вы начинаете раздавать карты лицом вверх, по одному, в кучу. Когда вы делаете все карты, вы также говорите вслух, чтобы 13 карт стояли в стандартной колоде: туз, два, три и т. Д. (Когда вы добираетесь до короля, вы начинаете с туза.) Вы продолжаете делать это до тех пор, пока ранг карты, которую вы делаете, соответствует рангу, в котором вы говорите вслух, и в этом случае вы проигрываете. Вы выигрываете, если достигнете конца колоды без каких-либо матчей.
Какова вероятность того, что вы выиграете?
Делать это с помощью для цикла кажется простым - в каждом цикле, построить палубу через rep(seq(13),4)
, переставлять ее, а затем проверить, если какие-либо из записей между переставленной и непереставленной палубой равно. Меня особенно интересует функциональный подход к этому. Для этого я решил построить x <- rep(seq(13),4)
один раз, сделав таблицу размером n, где каждый столбец равен sample(x)
, а затем найдите способ проверить каждый столбец, если sample(x) ~ x
, где через ~ Я имею в виду «иметь хотя бы один общий элемент, что означает, что индекс и значение равны ». Это, мы надеемся, вернет true/false в зависимости от того, является ли это true или false.
Так, ~
, если бы он назвал 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))
, чтобы быть правдой.
Итак, мои вопросы:
Что такое хороший (функциональный) способ реализации сравнить?
Есть ли лучший способ подойти к этой проблеме функционально?