Rand5 () ~ Rand7 () [닫기]


29

Rand5 () 함수가 제공됩니다. 이 함수는 1에서 5 사이의 완벽하게 임의의 (균등 분포) 정수를 반환합니다.

Rand5 ()를 사용하여 1과 7 사이의 완벽하게 임의의 정수를 생성하는 Rand7 () 함수를 제공하십시오.



8
필수 xkcd : xkcd.com/221
Steven Rumbalski

1과 5 포함? 즉 세트 {1,2,3,4,5}에서?
Aaron McDaid

1
단일 기준에 따라 어떤 기준이 결정됩니까?
kojiro

이 사실을 깨닫는 그 순간은 실제로 오래된 질문입니다.
nyuszika7h

답변:


11

자바-61 자

int rand7(){int s=0,c=7;while(c-->0)s+=rand5();return s%7+1;}

검증을위한 테스트 드라이버 :

class Rand {

    public static void main(String[] args) {
        int[] nums = new int[7];
        // get a lot of numbers
        for(int i = 0; i < 10000000; i++) nums[rand7()-1]++;
        // print the results
        for(int i = 0; i < 7; i++) System.out.println((i+1) + ": " + nums[i]);
    }

    // just for rand5()
    static java.util.Random r = new java.util.Random();

    static int rand5() {
        return r.nextInt(5)+1; // Random.nextInt(n) returns 0..n-1, so add 1
    }

    static int rand7(){int s=0,c=7;while(c-->0)s+=rand5();return s%7+1;}

}

결과

C:\Documents and Settings\glowcoder\My Documents>java Rand
1: 1429828
2: 1429347
3: 1428328
4: 1426486
5: 1426784
6: 1429853
7: 1429374

C:\Documents and Settings\glowcoder\My Documents>

10
"운영자로 이동"에 대한 추가 포인트
Steve P

숯을 면도? int rand7 () {for (int s = 0, c = 7; c-> 0; s + = rand5 ()); return s % 7 + 1;}
Ron

3
이 답변은 정확하지 않습니다. 1에서 7까지의 값을 반환하는이 함수의 확률은 각각 0.1430656, 0.1430016, 0.1428224, 0.1426432, 0.1426432, 0.1428224 및 0.1430016입니다. 그렇습니다. 최소 확률과 최대 확률의 차이는 0.0005보다 작지만 여전히 문제는 "완전히 임의의 정수"입니다.
Ilmari Karonen

@ilmari 당신 말이 맞아요-방금 테스트를했는데 배포판이
안보이는

1
@ userunknown : 예, 내가 게시 한 확률은 실제로 근사치가 아니며 완전히 무작위로 가정하면 정확합니다 (0.1430656 = 11177/78125 등) rand5. 간단한 행렬 대수를 사용하여 Maple에서 계산했지만 원하는 경우 몇 분 안에 연필과 종이로 할 수 있습니다. 어쨌든 Omar 는 며칠 전에 다른 답변 에 대한 의견에 동일한 수치 (산 정상화 요소)를 이미 게시 한 것으로 나타났습니다 . (또한, 게시물의 작성자에게 항상 통지를 받더라도 댓글마다 한 명의 사용자에게만 통지 할 수 있습니다.)
Ilmari Karonen

7

펄-47 (기존 52) 문자

sub rand7{($x=5*&rand5+&rand5-3)<24?int($x/3):&rand7} 

또한 삼항 연산자와 재귀를 사용합니다. 최고의 날!

div 대신 mod를 사용하면 47 자입니다.

sub rand7{($x=5*&rand5+&rand5)<27?$x%7+1:&rand7} 

가까이 ... 30을 27 (= 6 + 21)로 바꾸면 완벽하게 균일 한 분포를 얻을 수 있습니다. 아, 그리고 마지막 두 &부호를 떨어 뜨려 46 문자로 줄이십시오 (공백을 포함하여 현재 버전은 48입니다).
Ilmari Karonen

7

자바 스크립트, 42

Rand7=f=_=>(x=Rand5()+Rand5()*5-5)>7?f():x

보너스 ES5 것 :

Rand7=eval.bind(0,'for(;x=Rand5()+Rand5()*5-5,x>7;);x')

6

Ruby-54 자 (Dan McGrath 솔루션 기반, 루프 사용)

def rand7;x=8;while x>7 do x=rand5+5*rand5-5 end;x;end

Ruby-45 자 (재귀를 사용하는 동일한 솔루션)

def rand7;x=rand5+5*rand5-5;x>7 ?rand7: x;end

을 사용하여 1자를 줄일 수 있습니다 (x=rand5+5*rand5-5)>7?.
Lars Haugseth

5

파이썬에서 :

def Rand7():
  while True:
    x = (Rand5() - 1) * 5 + (Rand5() - 1)
    if x < 21: return x/3 + 1

4

공통 Lisp 70 자에서 :

(defun rand7()(let((n(-(+(rand5)(* 5(rand5)))5)))(if(> n 7)(rand7)n)))

괄호는 원하는 것보다 많은 공간을 차지합니다.


좋은. 다음과 같이 전역 변수를 만들어 두 문자를 더 많이 짜낼 수 있습니다.(defun rand7()(setq n(-(+(rand5)(* 5(rand5)))5))(if(> n 7)(rand7)n))
Dr. Pain

더 나은 :(defun rand7()(if(>(setq n(-(+(rand5)(* 5(rand5)))5))7)(rand7)n))
Dr. Pain

4

거부 샘플링을 사용하는 c / c ++에서

int rand7(){int x=8;while(x>7)x=rand5()+5*rand5()-5;return x;}

62 자


@barrycarter : 조건은 while(x>7)유효하므로 유효한 범위의 숫자로만 충족됩니다.
mellamokb

내 잘못이야. 내 멍청한 댓글을 삭제했습니다.
barrycarter

@ barry 그리고 다른 하나를 떠났습니다. ;)
Mateen Ulhaq

여기서 수학이 어떻게 거부 샘플링에 사용될 수있는 균일 한 무작위 분포를 생성하는지 이해하는 데 몇 분이 걸렸습니다.
Daniel

3

답변에서 ny Dan McGrath가 PHP로 번역했습니다.

function Rand7(){$x=8;while($x>7)$x=rand5()+5*rand5()-5;return $x;}

67 자


"function"(및 공백)이라는 단어가 접두사로 사용되어서는 안됩니까?
jtjacques

네 ... 이제 67 자입니다.
Marc-François

3

R, 34 자

R (통계 계산 용 언어)에서 의도적으로 사기꾼 솔루션 :

# Construct a Rand5 function
Rand5 <- function() sample(seq(5),1)
# And the golf
Rand7=function(r=Rand5())sample(1:(r/r+6),1)
# Or (same character count)
Rand7=function(r=Rand5())sample.int(r/r+6,1)
# Or even shorter(thanks to @Spacedman)
Rand7=function()sample(7)[Rand5()]

인수에 대한 게으른 평가 덕분에 세미콜론과 중괄호를 제거했습니다.

10 ^ 6 이상의 반복 실험 :

> test <- replicate(10^6,Rand7())
> table(test)
test
     1      2      3      4      5      6      7 
142987 142547 143133 142719 142897 142869 142848 

library(ggplot2)
qplot(test)

histogram of results


2
사기꾼이 되려면 다음과 같은 최고의 사기꾼이 될 수도 있습니다.Rand7=function(){r=Rand5();sample(7)[r]}
Spacedman

그렇게하려고한다면 왜 중간 저장소에 신경을 쓰는가? Rand7=function(){sample(7)[Rand5()]}
Brian Diggs

@BrianDiggs Path-dependency in action .... :-)
Ari B. Friedman

3

스칼라, 47, 40 59 자 :

def rand7:Int={val r=5*(rand5-1)+rand5
if(r<8)r else rand7}

rand5에서 2 개의 입력으로 :

\ 1 2 3 4 5 
1 1 2 3 4 5  
2 6 7 8 ..
3 11 ..
4 ..
5

첫 번째 -1에 5를 곱하고 두 번째를 더합니다. 대부분의 결과는 무시되며 새로운 계산으로 이어집니다. 결과는 1-25 사이의 값 분포가 같아야합니다. 첫 번째 7 개만 선택합니다. 모듈로를 구축하여 처음 21을 수락 할 수는 있지만 더 긴 코드로 이어질 것입니다.

역사적인 코드는 실패했지만 분명하지는 않습니다. 지적 해 주신 Ilmari Karonen에게 감사드립니다.

def rand7=(1 to 7).map(_=>rand5).sum%7+1

이 스칼라 -2.8.0 접근 방식에 대한 Yoshiteru Takeshita 덕분에 '합계'가 매우 쉬워졌습니다. 내 솔루션 :

def rand7=((0/:(1 to 7))((a,_)=>a+rand5-1))%7+1

rand5 :

val rnd = util.Random 
def rand5 = rnd.nextInt (5) + 1


사용자 Yoshiteru Takeshita 는 다음과 같이 Scala 2.8.0 이상에서 40 자를 줄 이도록 제안했습니다.def rand7=(1 to 7).map(_=>rand5).sum%7+1
Peter Taylor

이 솔루션도 올바르지 않습니다 . glowcoder의 답변에 대한 주석을 참조하십시오 .
Ilmari Karonen

@ IlmariKaronen : 당신이 맞아요-나는 내 솔루션을 재 작업했습니다.
사용자가 알 수 없음

3

C ++

int Rand4()
{
    int r = Rand5();
    return r > 4 ? Rand4() : r;
}

inline int Rand8()
{    
    return (Rand4() - 1) << 2 + Rand4();
}

int Rand7()
{
    int r = Rand8();
    return r > 7 ? Rand7() : r;
}

C ++ (109)

골프

int Rand4(){int r=Rand5();return r>4?Rand4():r;}int Rand7(){int r=Rand4()-1<<2+Rand4();return r>7?Rand7():r;}

세미콜론이 C ++에서 코드 줄을 정의하기 때문에 실제로 이것을 "한 줄짜리"라고 부를 수는 없다고 생각합니다.
피터 올슨

@Peter 아, 더 이상 원 라이너가 필요하지 않습니다.
Mateen Ulhaq

1에서 8까지의 숫자를 반환했습니다.
jimmy23013

2

Dan McGrath의 답변에서 Javascript로 번역.

function Rand7(){x=8;while(x>7)x=rand5()+5*rand5()-5;return x}

62 자


1
function Rand7(){for(x=8;x>7;x=rand5()+5*rand5()-5);return x}조금 짧습니다 : P
JiminP

2

자바 스크립트, 85

function Rand7(){for(x=0,i=1;i<8;x^=i*((k=Rand5())%2),i*=1+(k<5));return x?x:Rand7()}

답이 짧다는 것을 알고 있지만 이 퍼즐 의 테스트 를 보여주고 싶었습니다 . Dan McGrath의 거부 샘플링을 사용한 Clyde Lobo의 답변 만 (JS 답변 사이) 정확하다는 것이 밝혀졌습니다.


2

С ++

int Rand7()
{
    int r = Rand5();
    int n = 5;
    do {
        r = (r - 1) * 5 + Rand5();
        int m = n * 5 / 7 * 7;
        if (r <= m) {
            return r % 7 + 1;
        }
        r -= m;
        n = n * 5 - m;
    } while (1);
}

숫자 분포 (1000000 정수) :

142935 142751 142652 143299 142969 142691 142703

생성 된 모든 정 수당 Rand5 ()에 대한 평균 호출 수는 약 2.2 (2 ~ 10+)입니다.

1 2      3      4     5    6   7 8  9 10
0 840180 112222 44433 2212 886 0 60 6 1

2

Java (또는 C / C ++에서)

  • 65 자에서 Alexandru의 생성 공식 사용 :

    int rand7(){int x=rand5()*5+rand5()-6;return x>20?rand7():x/3+1;}
    
  • Dan McGrath의 생성 공식 사용 (60 자)

    int rand7(){int x=rand5()+5*rand5()-5;return x>7?rand7():x;}
    

1

클로저-58 자

(defn rand7[](#(if(<% 8)%(rand7))(+(rand5)(*(rand5)5)-5)))

1

파이썬, 56 37 자

파이썬에서 틀릴 수도있는 또 다른 해결책 :

rand7 = lambda: sum(rand5() for i in range(7)) % 7 + 1

이것은 너무 단순 해 보이지만 시도 할 때 :

counter = [0] * 7
for i in range(100000):
     counter[rand7()] += 1

나는 합리적으로 고른 분포를 얻습니다 (모두 14000에서 14500 사이).

좋아, 이제 누군가 가이 게시물에 투표했을 때 :이 솔루션은 실제로 맞습니까? 사람들이 그것을 비판하기 위해 여기에 더 게시했습니다. 올바른 경우 내 골프 버전은 다음과 같습니다.

rand7=lambda:eval("+rand5()"*7)%7+1

37 자로 나옵니다.


당신의 해결책은 정확하지 않습니다 : 당신은 5 개의 공정한 5면 주사위의 7 롤에 근거하여 결정을 내립니다. 이는 5 ^ 7 (5에서 7 승)의 등가 결과를 의미합니다. 이것은 7의 배수가 아니므로 7 개의 가능한 결과를 반환 할 수 없습니다. 나는 당신이 돌아 오는 것에 대한 쉬운 공식이 있다고 생각하지 않습니다. 계산을 무차별 강제로 수행하거나 더 작은 숫자 (플립 3 코인 (H = 1, T = 2)를 계산하고 결과를 합산)로 직접 계산할 수 있습니다.
Gilles 'SO- 악마 그만

1
와우, 당신이 생성하는 분포는 균일하지는 않지만 놀랍도록 가깝습니다. 각 숫자의 확률의 정확한 비율은 {1 : 11177, 2 : 11172, 3 : 11158, 4 : 11144, 5 : 11144, 6 : 11158, 7 : 11172}
Omar



1

Perl, 43 자, 반복 거부 샘플링

sub rand7{1while($_=5*&rand5-rand5)>6;$_+1}

에 대한 경고가 표시 Ambiguous use of -rand5 resolved as -&rand5()되지만 올바르게 작동합니다. &두 번째 rand5통화 에도 앞에 추가하면 한 번의 스트로크 비용으로 고정됩니다. (반대로, 다른 것으로 정의 된 경우 다른 장치 &도 제거 할 수 있습니다 rand5() 프로토 타입 .

추신. 다음 46 문자 버전은 약 3 배 빠릅니다.

sub rand7{1while($_=5*&rand5-rand5)>20;$_%7+1}

1

자바-66 자

int rand7(){int s;while((s=rand5()*5+rand5())<10);return(s%7+1);}

이전의 루틴보다 길지만, 이것은 짧은 시간에 균일하게 분포 된 숫자를 반환한다고 생각합니다.


1

포스트 스크립트 (46)

이진 토큰 인코딩을 사용하므로 다음은 16 진 덤프입니다.

00000000  2f 72 61 6e 64 37 7b 38  7b 92 38 37 92 61 7b 92  |/rand7{8{.87.a{.|
00000010  40 7d 69 66 92 75 32 7b  72 61 6e 64 35 7d 92 83  |@}if.u2{rand5}..|
00000020  35 92 6c 92 01 35 92 a9  7d 92 65 7d 92 33        |5.l..5..}.e}.3|
0000002e

사용해 보려면 다운로드 할 수도 있습니다 .

테스트 코드와 함께 ungolfed 및 commented 코드가 있습니다.

% This is the actual rand7 procedure.
/rand7{
  8{                      % potentialResult
    % only if the random number is less than or equal to 7, we're done
    dup 7 le{             % result
      exit                % result
    }if                   % potentialResult
    pop                   % -/-
    2{rand5}repeat        % randomNumber1 randomNumber2
    5 mul add 5 sub       % randomNumber1 + 5*randomNumber2 - 5 = potentialResult
  }loop
}def

%Now, some testing code.

% For testing, we use the built-in rand operator; 
% Doesn't really give a 100% even distribution as it returns numbers
% from 0 to 2^31-1, which is of course not divisible by 5.
/rand5 {
  rand 5 mod 1 add
}def

% For testing, we initialize a dict that counts the number of times any number
% has been returned. Of course, we start the count at 0 for every number.
<<1 1 7{0}for>>begin

% Now we're calling the function quite a number of times 
% and increment the counters accordingly.
1000000 {
  rand7 dup load 1 add def
}repeat

% Print the results
currentdict{
  2 array astore ==
}forall

-1
int result = 0;

for (int i = 0; i++; i<7)
    if (((rand(5) + rand(5)) % 2) //check if odd
        result += 1;

return result + 1;

2
이것은 균일 한 분포를 제공하지 않습니다. 10 만 회 이상의 rand (5) + rand (5) 분포를 살펴보고 그 이유를 알아보십시오.
gnibbler

결과는 코드에서 1에서 8까지의 숫자 일 수 있습니다.
Omar

또한 gnibbler가 말했듯이 분포는 균일하지 않습니다. 즉, 확률은 {0 : 13, 1 : 12}에 비례합니다. 이 표기법을 사용하면 함수의 확률은 {1 : 62748517, 2 : 405451956, 3 : 1122790032, 4 : 1727369280, 5 : 1594494720, 6 : 883104768, 7 : 271724544, 8 : 35831808}에 비례합니다. 큰 숫자). 또는 루프를 6 번 실행하도록 고정, {1 : 4826809, 2 : 26733096, 3 : 61691760, 4 : 75928320, 5 : 52565760, 6 : 19408896, 7 : 2985984}
Omar

-1

R (30 자)

rand7 정의 :

rand7=function(n)sample(7,n,T)

R은 통계 분석을 염두에두고 작성되었으므로이 작업은 간단 sample하며 대체 기능 을 TRUE로 설정 하여 내장 함수 를 사용합니다.

샘플 출력 :

> rand7(20)
 [1] 4 3 6 1 2 4 3 2 3 2 5 1 4 6 4 2 4 6 6 1
> rand7(20)
 [1] 1 2 5 2 6 4 6 1 7 1 1 3 7 6 4 7 4 2 1 2
> rand7(20)
 [1] 6 7 1 3 3 1 5 4 3 4 2 1 5 4 4 4 7 7 1 5

1
Rand5를 사용해야한다고 말합니다. 어떻게 말하지는 않지만 그것을 사용해야합니다 ...
Spacedman

@Spacedman 예, 명시 적으로 무시했습니다. 그것은 비 참조에 의해 사용됩니다.
Andrie

-1

그루비

rand7={if(b==null)b=rand5();(b=(rand5()+b)%7+1)}

35,000 회 이상의 분포 예 :

[1:5030, 2:4909, 3:5017, 4:4942, 5:5118, 6:4956, 7:5028]

상태가 나쁜 것이 나쁜가요?



-1

이건 어때요?

int Rand7()
{
    return Rand5()+ Rand5()/2;
}

언어가 무엇이든, /연산자는 정수 수학을합니까? 10 진수, 부동 소수점 또는 정수 수학을 수행하면 결과는 어떻게됩니까?
kojiro

정수 나누기를 가정하면이 함수는 다음과 같은 분포를 갖습니다 [2/25, 4/25, 5/25, 5/25, 5/25, 3/25, 1/25]. 정확히 균일하지 않습니다.
primo

프리모가 옳다. 난수를 추가하면 일반적으로 확률이 중간 값으로 기울어집니다.
gnibbler

-1

자바-54

int m=0;int rand7(){return(m=m*5&-1>>>1|rand5())%7+1;}

분포 테스트 : [1000915, 999689, 999169, 998227, 1001653, 1000419, 999928]

연산:

  • 전역 변수 유지
  • 5를 곱하면 최하위에서 5 개의 자리가 생깁니다.
  • 부호 비트를 양수로 자릅니다 (부호없는 숫자가 지원되는 경우 필요하지 않음)
  • 모듈로 7이 답입니다

> 숫자는 더 이상 서로 관련이 없으며 개별적으로 완벽하게 무작위입니다.


-1

루비 (43 바이트)

def rand7;(0..7).reduce{|i|i+rand5}%7+1;end

Ruby로 포팅 된 cemper93의 솔루션은 3 바이트 더 짧습니다;) (34 바이트)

def rand7;eval("+rand5"*7)%7+1;end

-3

C / C ++ 코드 핵심 코드에는 한 줄만 있습니다!

static unsigned int gi = 0;

int rand7()
{
    return (((rand() % 5 + 1) + (gi++ % 7)) % 7) + 1;
}

//call this seed before rand7
//maybe it's not best seed, if yo have any good idea tell me please
//and thanks JiminP again, he remind me to do this
void srand7()
{
    int i, n = time(0);
    for (i = 0; i < n % 7; i++)
        rand7();
}

srand7 ()은 rand7의 시드입니다. C에서 rand보다 srand를 호출하는 것처럼 rand7보다 먼저이 함수를 호출해야합니다.

이것은 rand ()를 한 번만 호출하고 루프가없고 여분의 메모리를 소비하지 않기 때문에 매우 좋습니다.

설명하겠습니다 : 크기가 5 인 정수 배열을 고려하십시오.

1st get one number from 1 2 3 4 5 by rand5
2nd get one number from 2 3 4 5 6
3rd get one number from 3 4 5 6 7
4th get one number from 4 5 6 7 1
5th get one number from 5 6 7 1 2
5th get one number from 6 7 1 2 3
7th get one number from 7 1 2 3 4

그래서 우리는 TABLE을 얻었고, 1-7의 각각은 5 번 나타나고 35 개의 숫자를 가지고 있으므로 각 숫자의 확률은 5/35 = 1/7입니다. 그리고 다음에

8th get one number from 1 2 3 4 5
9th get one number from 2 3 4 5 6
......

충분한 시간이 지나면 1-7의 균일 분포를 얻을 수 있습니다.

따라서 루프 왼쪽 시프트로 1-7의 5 개 요소를 복원하도록 배열을 할당하고 매번 rand5로 배열에서 하나의 숫자를 얻을 수 있습니다. 대신, 7 개의 배열을 모두 생성하여 원형으로 사용할 수 있습니다. 코드도 간단하고 많은 짧은 코드 가이 작업을 수행 할 수 있습니다.

그러나 % 연산의 속성을 사용할 수 있으므로 표 1-7 행은 (rand5 + i) % 7과 같습니다. 즉 a = rand () % 5 + 1은 C 언어에서 rand5, b = gi ++ % 7은 위 표의 모든 순열을 생성하고 0-6은 1-7 c = (a + b) % 7 + 1을 대체하고 1-7을 균일하게 생성합니다. 마지막으로 다음 코드를 얻었습니다.

(((rand() % 5 + 1) + (gi++ % 7)) % 7) + 1 

그러나 첫 호출에서 6과 7을 얻을 수 없으므로 C / C ++에서 rand에 대한 srand와 같은 시드가 필요합니다.

테스트 할 전체 코드는 다음과 같습니다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

static unsigned int gi = 0;

//a = rand() % 5 + 1 is rand5 in C language,
//b = gi++ % 7 generates all permutations,
//c = (a + b) % 7 + 1, generates 1 - 7 uniformly.
//Dont forget call srand7 before rand7
int rand7()
{
   return (((rand() % 5 + 1) + (gi++ % 7)) % 7) + 1;
}

//call this seed before rand7
//maybe it's not best seed, if yo have any good idea tell me please
//and thanks JiminP again, he remind me to do this
void srand7()
{
    int i, n = time(0);
    for (i = 0; i < n % 7; i++)
        rand7();
}

void main(void)
{
    unsigned int result[10] = {0};
    int k;

    srand((unsigned int)time(0)); //initialize the seed for rand
    srand7() //initialize the rand7

    for (k = 0; k < 100000; k++)
        result[rand7() - 1]++;

    for (k = 0; k < 7; k++)
        printf("%d : %.05f\n", k + 1, (float)result[k]/100000);
}

그것은 '테스트'를 '통과'하지만 이것이 좋은 무작위 함수라는 것을 의미하지는 않습니다. 내가받을 수 6또는 7를 호출하여 한 번 ?
JiminP

그러나 좋은 종류와 나쁜 종류의 근사가 있습니다. 그리고이 코드는 한 번만 호출 할 때 균일 한 분포를 제공 하지 않기 때문에 좋지 않습니다 . 다음과 같은 것을 쓴다면 int main(){if(rand7()==6) printf("Hello, world!");}루프를 사용한 근사화에 'Hello, world!'가 인쇄됩니다. 7 번 1 번이지만 코드는 그렇지 않습니다.
JiminP

감사합니다 @JiminP! 처음에는 6,7 명이 맞습니다. rand7을 호출하기 전에 C / C ++의 srand와 같은 씨앗을 정렬하기 전에 씨앗이 필요합니다. 내 코드를 수정하고 다시 감사합니다 !!!
Sean

흠 .... srand10이 작동하지 않고 마지막 3 개의 숫자는 10, 20, 30 ... 위치에 도달 할 수 없습니다. @JiminP 미안하지만 수정하는 방법? 나는 이것이 희망적인 방법이라고 생각합니다.
Sean

2
이 함수에 대한 다른 호출은 서로 독립적이지 않습니다. 여기의 스펙에는 이것이 필요하지 않지만 일반적으로 난수 생성기의 경험입니다. 그렇지 않으면, 당신은 말할 수 있습니다, 처음으로 임의의 균일 한 숫자를 반환하고 미래의 전화에서 그냥 (이전 + 1) % 7을 반환합니다.
Omar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.