2017-03-06 14 views
0

私は、1-9の間に480個のランダムな整数の集合を生成しようとしています。しかし、いくつかの制約があります。乱数生成 - 制約付きシーケンス

  • このシーケンスは2つの重複した数字を連続して含むことはできません。
  • 配列は、例えば、6 4 5 (すべての80桁のシーケンス内で奇数及び偶数(任意の順序で)の4つの配列の正確4の配列を含める必要があります1 4 6 1)。私は、乱数の帽子のセットを生成することができた

は使用して、繰り返しの数字を許可します。

NumRep <- sample(1:9, 480, replace=T) 

ではなく、数字がセット全体にわたり繰り返すことができるようにする方法を考え出すことができたが、しかし、逐次反復を許さない(例えば、2 5 3は大丈夫、2 5 5はそうではない)。私は奇数/偶数の制約がどこにもありません。

文脈では、これは宿題ではありません!私は研究者であり、これは私が作成している心理実験の一部です。

ご協力いただければ幸いです!

+4

Welcome to Stackoverflow!質問を投稿する際には、コードを共有し、可能な限り問題を説明できるようにしてください。今、あなたが求めているものは非常に不明です。 –

+0

返信いただきありがとうございます、そして、明快さの欠如について申し訳ありません - 私は私の答えを編集しました。 –

+0

あなたの2番目の点に関しては、480の数字の連続のどこかで、行の中の4つの奇数(1つの偶数で囲まれた)と偶数の4つの偶数を見つけることができなければならないと言っていますか? – Mist

答えて

0

まず、この問題は、その条件でシミュレートする「ランダムな」方法を失います。とにかく、このコードは、第1の制約に対応:

# Build a vector 
    C<-vector() 
    # Length of the vector 
    n<-480 
    # The first element 
    C<-sample(1:9,1) 
    # Complete the rest 
    for (i in 2:n){ 
    # Take a random number not equal to the previous one 
     C[i] <- sample(c(1:9)[1:9!=C[i-1]],1) 
    } 

    # It is an odd number? 
     C %% 2 == 0 
    # How many consecutive odd numbers are in the sequence? 
     # Build a table with this information 
     TAB <- rle(C %% 2 == 0) 
     # Maximum of consecutive odd numbers 
      max(TAB$lengths[TAB$values==T]) 
     # Maximum of consecutive even numbers 
      max(TAB$lengths[TAB$values==F]) 

私は第2の制約を理解していないが、私は、コードの最後の部分ができます願っています。いくつかの値を交換するには、その情報を使用する必要があります。

+0

シーケンスでは、3つの連続する奇数(偶数)を意味しますか?もしあなたがそれをしたいのであれば、これらのシーケンスを最初に構築し、このプロパティに従わない他の数字の前後に追加する戦略かもしれません。 – R18

関連する問題