개인 자료란 (JE)

  서버 커뮤니티

Profile 하우요 대표칭호 없음
Profile

질문하기 스크립트

여러개의 랜덤 값을 서로 다른 수가 되게 출력하는 방법이 궁금합니다

2023.07.08 조회 수 88 추천 수 0
이해도 초보자 
게임버전 (JE) 1.19.3 
게임버전 (BE) 관련없음 
스크립트 버전 2.6.4 

command /랜덤:

@trigger:

@@set {A} to random integer between 1 to 16

@@set {B} to random integer between 1 to 16

@@set {C} to random integer between 1 to 16

@@set {D} to random integer between 1 to 16


이런식으로 제작해서 명령어를 치게 되면 {A}랑 {B}가 같은 값이 될 수도 있는데

4개의 변수가 모두 다른 값이 되도록 랜덤한 수를 부여할 수 있는 방법이 궁금합니다

선생님들 도와주세요

3개의 댓글

코코냐
2023.07.08

이미 뽑힌 숫자를 제외하려면 가장 기본적인 알고리즘은 다음과 같습니다.

A를 결정 -> 루프를 돌려서 A랑 다를때까지 B 결정 -> 루프를 돌려서 A, B와 다를때까지 C 결정 -> 루프를 돌려서 A,B,C와 다를떄까지 D 결정

이 경우 극악의 확률로 수십, 수백번까지도 돌아갈수 있어, 다른 방법도 있습니다.

A를 결정 -> B를 1~15로 결정하고, A보다 크거냐 같으면 1을 더함 -> C를 1~14로 결정하고, 처음 값이 A보다 크거냐 같으면 1을 더하고, 처음 값이 B보다 크거냐 같으면 1을 더함 -> D를 1~13로 결정하고, 처음 값이 A보다 크거냐 같으면 1을 더하고, 처음 값이 B보다 크거냐 같으면 1을 더하고, 처음 값이 C보다 크거냐 같으면 1을 더함

 

사실 가장 좋은 방법은, 오히려 1~16을 배열에 넣은 뒤에 섞을 수 있다면 그게 더 쉬울겁니다.

하우요
2023.07.08
@코코냐

2번째 방법의 경우,

{A} = 10으로 결정, {B}=4이면 {A}보다 작아서 {B}=4, {C}=3이면 {A}와 {B}보다 작아서 {C}=3, {D}=8이면 {A}보단 작았는데 {B}보다 크고 {C}보다 커서 {D}=10으로

{A} = 10, {B}=4, {C}=3, {D}=10이 되서 중복되는거 아닌가요?

제가 잘 이해하지 못한건가

코코냐
2023.07.08
@하우요

각 숫자 구간을 비우기 위함입니다. 처음 값은 잘못 적은게 맞습니다. 처음 값이 아니라 더한 값을 기준으로 해주세요.