2017-03-07 50 views
0

我正在编写一个游戏,其中包括执行一个函数,该函数从列表中随机选取一个人,并从其他列表中选择一个随机主题。更换示例,避免重复

的主要原则是: - 您可以运行的代码,你希望所有的时间,但代码不能给出2次同一个人

就目前我所得到的是:

# Lists 
people = list('john','peter','alex') 
topic = list('Finance','Ensurance','Retail') 

Start<-function(people, topic){ 
    arg1 = sample(people,1) 
    arg2 = sample(topic,1) 
    return (list(arg1,arg2)) 
} 

问题的症结在于:确保每次运行“开始”功能时,人员p和p + 1都不相同。所以,结果可能是这样的:

约翰,金融/彼得,金融/约翰,零售/亚历克斯,金融 但从来没有:约翰,金融/约翰,金融。

+0

你的意思是说他们永远不能再被选中,或者连续两次都不会被选中? –

+0

你的要求到底是什么还不清楚。您可以存储先前的绘图。或者你可以在开始时每个列表使用'sample'来洗牌,然后跟踪并增加当前的索引。所以我假设'Start()'只能被调用三次? – MrFlick

+0

我的意思是,这个游戏可能会随机选择一个人写一个话题到博客中(例如),所以话题可以重复,但不是人。 – PeCaDe

回答

3

我可能会做一个生成风格功能

people <- c('john','peter','alex') 
topic <- c('Finance','Ensurance','Retail') 

Starter <- function(people, topic){ 
    last.person <- "" 
    function() { 
    next.person <- sample(setdiff(people, last.person), 1) 
    next.topic <- sample(topic,1) 
    last.person <<- next.person 
    return(list(next.person, next.topic)) 
    } 
} 

s <- Starter(people, topic) 
s() 
s() 
s() 

这里Starter()返回,你可以打电话获得一个新样本的功能。它跟踪最后选择的人并将其排除在可能的抽签名单中。请注意,我使用简单的向量列表选项而不是列表来简化操作。

+0

就是这样!我想通过循环,但你的代码更短,智能的解决方案! – PeCaDe