2013-10-19 5 views
1

나는 루비에게 준 신참이다 : * (사전에 감사드립니다. 나는 할 수있는 한 많이 배웠고 몇 시간 동안 수색했지만 대답을 찾지 못하는 것 같습니다. 어디서든.셔플! 루비에서 배열 n 번

나는 갑판 클래스에서이 방법을 작성했습니다.

def shuffle! 
    @cards.shuffle! 
end 

나는이 방법을 사용하여, 난 그냥 한 번 카드 배열을 7 시간을 임의로 재생하도록 수정 대신 할 수 있는지 알고 싶어 , 현재 현재 않습니다. 그렇지 않으면 새 갑판을 초기화 한 후 .shuffle! 호출하고 그 일곱 번 실행하는 다른 메서드를 작성해야합니까. 도울 수있는 사람을 다시 주셔서 감사합니다 :)

+1

그냥 질문 하나, 왜 그걸 7 번하고 싶니? – hirolau

+0

7 회 셔플 링을하면 최적의 무작위 추출이 가능하다는 이론이 있습니다. 나는 수학자 친구에게 이것을 한 번 물었고 그는 "내가 기술 한 셔플 링 알고리즘 (완벽하게 잘라내어 완전히 메쉬)은"반복적 인 "알고리즘으로 알려진 특성을 가지고있다. 마지막 라운드는이 라운드의 인풋으로, 따라서 혼란스럽고 혼란스럽고 불안정한 (즉 고도로 복잡한) 행동의주기와 번갈아 일어날 수 있습니다 .7 셔플이 경계 지점이 될 수 있습니다 .7 셔플에 대해 특별한 것은 없을 것 같습니다. 그래도 ... " – dax

+1

그래,하지만 그것은 인간이"임의성 "을 특정 방식으로 만드는 카드의 실제 덱의 셔플입니다. 한 번 이상하는 것은 완전히 이해할 수 있습니다. 루비의 셔플! 방식은 그런 식으로 작동하지 않으며 다중 셔플의 이점을 얻지 못합니다. – hirolau

답변

3

Array#shuffle에는 이러한 기능이 없으므로 번만이므로 다음과 같은 몇 가지 트릭을 사용할 수 있습니다. 의사가 말하는 것 rng가 주어지면 난수 생성기로 사용됩니다. 당신은 당신이 a.shuffle(random: Random.new(4))로 전화 .If a.shuffle 한 번만 걸어 갔다 배열 a에서도 이루어 지이다를 호출하는 경우

def shuffle!(n=7) 
    n.times { @cards.shuffle! } 
end 

후 셔플 시간은 배열 a 무작위입니다. 당신은 항상 갑판 7 번 셔플 위하여려고하는 경우에, 당신이 인수를 전달할 필요가 없습니다 생각

+1

당신은 def shuffle로 서명을 바꾸면!(n = 7),이 기능은 요구 사항을보다 면밀히 충족 시키며 셔플을 사용할 수 있습니다! 방법을 셔플 할 횟수를 지정하지 않아도됩니다. – Arkhitech

+0

@Arkhitech 좋은 제안 .. 나는 그것을 바꿨다. .. –

0

-이 시도 :

def shuffle 
    7.times {self.shuffle!} 
end 

initialize

def initialize 
    #your code here 
    @cards.shuffle 
end 
1

당신의를 아마이 줄을 따라 뭔가를하고 싶을 것입니다.

class Deck 

    def initialize(cards) 
    @cards = cards 
    end 

    def shuffle!(n = 7) 
    n.times { @cards.shuffle! } 
    @cards 
    end 

end 

cards = [1, 2, 3, 4] 

Deck.new(cards).shuffle! # => [3, 4, 1, 2] 

이 메서드는 @cards의 값을 반환합니다.