1. 개요
공홈에 나와있는 확률을 참고하여
컴퓨터가 n만캐시를 들고
원더베리와 루나크리스탈을 구매/사용하여
자석펫에 도전합니다
2만캐시부터 300만캐시까지 1만 간격으로 (299케이스)
각 금액에 대해 10만번씩 시뮬레이션해서
평균비용이랑 성공률 등을 구합니다
제 대신 흑우가 되어주는 i7 CPU에 압도적 감사
맨 아래에 코드를 첨부하니
혹시 버그가 있으면 알려주세요
2. 결과
(1) 지출한 캐시 vs 자석펫 획득 개수 평균
자석펫 1마리 평균 비용 : 54만 캐시
(2) 지출한 캐시 vs 메소 회수량 (루나서버 19년 9월 기준)
ㅁㅌ시세 4000 적용 시 대략 15% 회수되는걸로 생각할 수 있습니다
(3) 지출한 캐시 vs 자석펫 개수 관련
위 자료들로부터 다음과 같은 무시무시한 사실들이 도출됩니다.
- 자석펫 1마리 뽑기 비용의 중간값은 37만 캐시입니다.
- 위에서 평균값이 54만 캐시라고 했던 것보다 쌉니다.
- 평균값 54만 캐시를 투자해도, 자석펫을 뽑을 확률은 65%밖에 되지 않습니다.
- 이것은, 마치 스타포스처럼, 65% 가량의 유저들은 평균보다 싸게 뽑을 수 있지만, 일부 저주받은 유저들은 수십만~백만 이상까지 지출해도 한마리도 뽑지 못한다는 것을 의미합니다.
- 100만 캐시를 투자해도 자석펫 1마리를 뽑지 못할 확률이 12.63%정도 됩니다.
- 150만 캐시를 투자해도 자석펫 1마리를 뽑지 못할 확률이 4.20%정도 됩니다.
- 200만 캐시를 투자해도 자석펫 1마리를 뽑지 못할 확률이 1.41%정도 됩니다.
- 자석펫 2마리 뽑기 비용의 중간값은 85만 캐시입니다.
- 자석펫 3마리 뽑기 비용의 중간값은 135만 캐시입니다.
- 자석펫 3마리를 뽑을 확률이 95% 이상이 되는 지점은 300만캐시보다 조금 더 큽니다.
3. 결론
부록 - 코드 (MATLAB)
function resmat = magnetsimulation(money, verbal)
price_berry1 = 5400;
price_berryX = 48600;
price_crystal1 = 3900;
price_crystal3 = 9900;
price_crystal5 = 14900;
cur_berry = 0;
cur_crystal = 0;
cur_cookie = 0;
cur_concen = 0;
cur_petJ = 0;
cur_petS = 0;
cur_petR = 0;
cur_petB = 0;
cur_petM = 0;
cur_key = 0;
icheck = 1;
while icheck == 1
if cur_petS == 0 || (cur_petS == 1 && cur_petR == 0)
purchase_wonkiberry;
end
while cur_berry > 0
use_wonkiberry;
end
while (cur_petR>0 && cur_petS>0)
if cur_crystal == 0 && money >= price_crystal1
purchase_crystal;
end
if cur_crystal > 0
use_crystal_red;
end
if (cur_petR>0 && cur_petS>0) && money < price_crystal1
break
end
end
while cur_petS>1
if cur_crystal == 0 && money >= price_crystal1
purchase_crystal;
end
if cur_crystal > 0
use_crystal_special;
end
if cur_petS>1 && money < price_crystal1
break
end
end
if (cur_petS == 0 || (cur_petS == 1 && cur_petR == 0)) && (money < price_berry1)
icheck = 0;
elseif cur_crystal == 0 && money < price_crystal1
icheck = 0;
end
end
resmat = [cur_cookie, cur_concen, cur_petJ, cur_petS, cur_petR, cur_petB, cur_petM, cur_key];
fprintf("n최종 획득n - 오가닉 원더 쿠키 %d개n - 고농축 프리미엄 생명의 물 %d개n - 일반펫 %d개n - 원더블랙펫 %d개n - 루나스윗펫 %d개n - 루나드림펫 %d개n - 루나쁘띠펫 %d개n - 루나 크리스탈 키 %d개n",cur_cookie, cur_concen, cur_petJ, cur_petS, cur_petR, cur_petB, cur_petM, cur_key);
function purchase_wonkiberry
if money > price_berryX + price_crystal5
money = money - price_berryX;
cur_berry = cur_berry + 10;
if verbal == 1; fprintf("원기베리 10개를 구매하고 %d 캐시가 남았습니다. ",money); end
else
money = money - price_berry1;
cur_berry = cur_berry + 1;
if verbal == 1; fprintf("원기베리 1개를 구매하고 %d 캐시가 남았습니다. ",money); end
end
end
function use_wonkiberry
cur_berry = cur_berry - 1;
p = rand;
if p < 0.156
cur_cookie = cur_cookie + 1;
if verbal == 1; fprintf("원기베리에서 오가닉 원더 쿠키가 나왔습니다. "); end
elseif p < 0.156 + 0.1444
cur_concen = cur_concen + 1;
if verbal == 1; fprintf("원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. "); end
elseif p < 0.156 + 0.1444 + 0.6
cur_petJ = cur_petJ + 1;
if verbal == 1; fprintf("원기베리에서 일반 펫이 나왔습니다. "); end
else
cur_petS = cur_petS + 1;
if verbal == 1; fprintf("원기베리에서 원더블랙 펫이 나왔습니다. "); end
end
end
function purchase_crystal
if money > 3*price_crystal5
money = money - price_crystal5;
cur_crystal = cur_crystal + 5;
if verbal == 1; fprintf("루나 크리스탈 5개를 구매하여 %d 캐시가 남았습니다. ",money); end
elseif money > 3*price_crystal3
money = money - price_crystal3;
cur_crystal = cur_crystal + 3;
if verbal == 1; fprintf("루나 크리스탈 3개를 구매하여 %d 캐시가 남았습니다. ",money); end
else
money = money - price_crystal1;
cur_crystal = cur_crystal + 1;
if verbal == 1; fprintf("루나 크리스탈 1개를 구매하여 %d 캐시가 남았습니다. ",money); end
end
end
function use_crystal_red
cur_crystal = cur_crystal - 1;
cur_petR = cur_petR - 1;
cur_petS = cur_petS - 1;
p = rand;
if p < 0.756
cur_petB = cur_petB + 1;
if verbal == 1; fprintf("루나 크리스탈에 루나스윗 펫과 원더블랙 펫을 사용하여 루나드림 펫이 나왔습니다. "); end
elseif p < 0.756 + 0.204
cur_petM = cur_petM + 1;
if verbal == 1; fprintf("루나 크리스탈에 루나스윗 펫과 원더블랙 펫을 사용하여 루나쁘띠 펫이 나왔습니다. "); end
else
cur_key = cur_key + 1;
if verbal == 1; fprintf("루나 크리스탈에 루나스윗 펫과 원더블랙 펫을 사용하여 루나 크리스탈 키가 나왔습니다. "); end
end
end
function use_crystal_special
cur_crystal = cur_crystal - 1;
cur_petS = cur_petS - 2;
p = rand;
if p < 0.864
cur_petR = cur_petR + 1;
if verbal == 1; fprintf("루나 크리스탈에 원더블랙 펫을 2마리 사용하여 루나스윗 펫이 나왔습니다. "); end
elseif p < 0.864 + 0.1164
cur_petM = cur_petM + 1;
if verbal == 1; fprintf("루나 크리스탈에 원더블랙 펫을 2마리 사용하여 루나쁘띠 펫이 나왔습니다. "); end
else
cur_key = cur_key + 1;
if verbal == 1; fprintf("루나 크리스탈에 원더블랙 펫을 2마리 사용하여 루나 크리스탈 키가 나왔습니다. "); end
end
end
end
실행 예시
>> magnetsimulation(500000,1) % 50만 캐시 사용
원기베리 10개를 구매하고 451400 캐시가 남았습니다.
원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다.
원기베리에서 일반 펫이 나왔습니다.
원기베리에서 일반 펫이 나왔습니다.
원기베리에서 일반 펫이 나왔습니다.
원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리 10개를 구매하고 402800 캐시가 남았습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 루나 크리스탈 5개를 구매하여 387900 캐시가 남았습니다. 루나 크리스탈에 원더블랙 펫을 2마리 사용하여 루나스윗 펫이 나왔습니다. 원기베리 10개를 구매하고 339300 캐시가 남았습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 루나 크리스탈에 루나스윗 펫과 원더블랙 펫을 사용하여 루나드림 펫이 나왔습니다. 루나 크리스탈에 원더블랙 펫을 2마리 사용하여 루나스윗 펫이 나왔습니다. 원기베리 10개를 구매하고 290700 캐시가 남았습니다. 원기베리에서 오가닉 원더 쿠키가 나왔습니다. 원기베리에서 오가닉 원더 쿠키가 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 루나 크리스탈에 루나스윗 펫과 원더블랙 펫을 사용하여 루나드림 펫이 나왔습니다. 원기베리 10개를 구매하고 242100 캐시가 남았습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 오가닉 원더 쿠키가 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 오가닉 원더 쿠키가 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 루나 크리스탈에 원더블랙 펫을 2마리 사용하여 루나쁘띠 펫이 나왔습니다. 원기베리 10개를 구매하고 193500 캐시가 남았습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 오가닉 원더 쿠키가 나왔습니다. 원기베리에서 오가닉 원더 쿠키가 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 루나 크리스탈 5개를 구매하여 178600 캐시가 남았습니다. 루나 크리스탈에 원더블랙 펫을 2마리 사용하여 루나스윗 펫이 나왔습니다. 원기베리 10개를 구매하고 130000 캐시가 남았습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 오가닉 원더 쿠키가 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 루나 크리스탈에 루나스윗 펫과 원더블랙 펫을 사용하여 루나드림 펫이 나왔습니다. 루나 크리스탈에 원더블랙 펫을 2마리 사용하여 루나스윗 펫이 나왔습니다. 원기베리 10개를 구매하고 81400 캐시가 남았습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리 10개를 구매하고 32800 캐시가 남았습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 원더블랙 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리에서 일반 펫이 나왔습니다. 루나 크리스탈에 루나스윗 펫과 원더블랙 펫을 사용하여 루나쁘띠 펫이 나왔습니다. 원기베리 1개를 구매하고 27400 캐시가 남았습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리 1개를 구매하고 22000 캐시가 남았습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리 1개를 구매하고 16600 캐시가 남았습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리 1개를 구매하고 11200 캐시가 남았습니다. 원기베리에서 고농축 프리미엄 생명의 물이 나왔습니다. 원기베리 1개를 구매하고 5800 캐시가 남았습니다. 원기베리에서 일반 펫이 나왔습니다. 원기베리 1개를 구매하고 400 캐시가 남았습니다. 원기베리에서 일반 펫이 나왔습니다.
최종 획득
- 오가닉 원더 쿠키 7개
- 고농축 프리미엄 생명의 물 14개
- 일반펫 61개
- 원더블랙펫 0개
- 루나스윗펫 0개
- 루나드림펫 3개
- 루나쁘띠펫 2개
- 루나 크리스탈 키 0개
다음은 위 코드를 반복실행해서 금액별 통계 뽑는 함수
function resmat = magnetpara(mstart,mend,minterval,msamp)
meso_cookie = 0.025;
meso_concen = 0.28;
meso_petJ = 0.12;
meso_petS = 9;
meso_petR = 10;
meso_petB = 2;
meso_key = 8.5;
mnumber = (mend-mstart)/minterval + 1;
resmat = zeros(mnumber,6);
parfor mi = 1:mnumber
money = mstart + minterval * (mi-1);
sum_petM = 0;
sum_meso = 0;
tempsum1M = 0;
tempsum2M = 0;
tempsum3M = 0;
for ms = 1:msamp
tempmat = magnetsimulation(money, 0);
sum_petM = sum_petM + tempmat(7);
sum_meso = sum_meso...
+ meso_cookie * tempmat(1) ...
+ meso_concen * tempmat(2) ...
+ meso_petJ * tempmat(3) ...
+ meso_petS * tempmat(4) ...
+ meso_petR * tempmat(5) ...
+ meso_petB * tempmat(6) ...
+ meso_key * tempmat(8);
if tempmat(7) >= 1
tempsum1M = tempsum1M + 1./msamp;
end
if tempmat(7) >= 2
tempsum2M = tempsum2M + 1./msamp;
end
if tempmat(7) >= 3
tempsum3M = tempsum3M + 1./msamp;
end
end
resmat(mi,:) = [money, sum_petM / msamp, sum_meso / msamp, tempsum1M, tempsum2M, tempsum3M];
end
무려 병렬계산 지원하는 갓 MATLAB
클레임 환영합니다