카드를 씻으면
다음은 루비 입문 다음 날의 문외한이 코드를 쓰고 있다.
문제.
n달러짜리 카드1
부터 n
까지 카드를 세탁해 주세요.
해답 예시
shuffle
사용 방법cards = [*1..n]
cards.shuffle
p cards
rand
에서 해요sort
cards = [*1..n]
cards.sort_by!{rand}
p cards
rand
계속 휘둘러라cards = Set.new
loop do
cards << rand(max)
if cards.size >= n
p cards
break
end
end
사용fisher-yates의 혼란 알고리즘
Fisher – Yates shuffle은 제한된 집합에서 무작위 배열을 생성하는 알고리즘입니다.이 방법은 유한열을 무작위의 다른 (흐트러진) 순서의 유한열로 다시 배열하는 것이다.
cards = [*1..n]
len = cards.length - 1
c = 0
len.step(1, -1) do |i|
r = rand(i)
c += 1
cards[i], cards[r] = cards[r], cards[i]
end
p cards
cards = [*1..n]
shuffled = []
n.times do
idx = rand(cards.length)
shuffled << cards[idx]
cards.delete_at(idx)
end
p cards
한 번만 사용하는 게 좋아요
rand
def factorial(number)
number = 0 if number.nil?
(1..number).inject(1,:*)
end
cards = [*1..n]
shuffled = []
r = rand(factorial(n))
(n-1).downto(1) do |i|
quotient = r/factorial(i)
excess = r%factorial(i)
shuffled << cards.delete_at(quotient)
r = excess
end
p shuffled
Reference
이 문제에 관하여(카드를 씻으면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zak74702675/items/1b66d7062c4893a73465텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)