매트랩(Mathlab) 사용했습니다.
스타캐치 성공 보너스 +5%로 가정하였고 파괴확률은 고정인지, 스타캐치 보너스에 따라 감소하는지 확인불가라
두 경우 모두 천만번씩 돌려봤습니다.
파괴횟수 자체의 데이터는 사실상 의미 없고 강화비용의 분포와 평균 파괴횟수 정도만 의미있겠습니다.
타벨 12강화를 할 건지 말 건지 결정할 때 참고 정도하면 되겠습니다.
본섭이시면 하지마세요.
요약: 타벨 0성>12성 강화 상위 50% 비용 = 270~280억
평균파괴횟수 = 7.6 ~ 8회
희망: 상위 10%비용 = 50~55억
절망: 하위 10%비용 = 800~880억
TMI : 최빈값 40억
1. 스타캐치 성공 보너스에 따라 파괴확률도 비례하게 감소 가정
2. 파괴확률 무조건 고정
TMI) 천만번 중 꼴찌 성적비용/파괴횟수 : 6661억 / 151회
3. 코드
trial = 10000000;
start = 0;
goal = 12;
starcatch = 0.05;
bonus_decrease_dest = true;
%--------------Do not modify below codes--------------
disp("타일런트 벨트 "+start+"성>"+goal+"성 시뮬레이션 횟수: "+trial+"회");
disp("스타캐치 성공 보너스 : +"+starcatch*100+"%");
cost = 55832200;
original_prob = [0.5 0.5 0.45 0.4 0.4 0.4 0.4 0.4 0.4 0.37 0.35 0.35 0.03 0.02 0.01];
original_dest = [0 0 0 0 0 0.018 0.03 0.042 0.06 0.095 0.13 0.163 0.485 0.49 0.5];
suc_prob = original_prob*(1+starcatch);
dest_prob = original_dest;
if(bonus_decrease_dest)
disp("스타캐치 성공시 파괴확률 비례감소 적용");
for i=1:15
dest_prob(i)=original_dest(i)*(1-suc_prob(i))/(1-original_prob(i));
end
else
disp("스타캐치 성공 보너스와 무관하게 파괴확률 고정");
end
totcost = zeros(1,trial);
totdest = zeros(1,trial);
for i=1:trial
lcost = 0;
ldest = 0;
star = start;
chance = 0;
while star~=goal
lcost = lcost+cost;
dice = rand();
if(dice<dest_prob(star+1))
%destroyed
chance = 0;
ldest = ldest+1;
star = 0;
else
if(dice<1-suc_prob(star+1))
%failed
if(star~=0)
star = star-1;
chance = chance+1;
else
chance = 0;
end
if(chance == 2)
%chance time
lcost = lcost+cost;
star = star+1;
chance = 0;
end
else
%success
star = star+1;
chance = 0;
end
end
end
totcost(i) = lcost;
totdest(i) = ldest;
end
ccc = totcost;
ddd = totdest;
costanddest = mysort(ccc,ddd);
disp("상위 50% 비용 / 파괴횟수: "+costanddest(1,round(trial/2))+" / "+costanddest(2,round(trial/2)));
disp("평균 비용 / 파괴횟수: "+sum(ccc)/trial+" / "+sum(ddd)/trial);
sss = zeros(1,1000);
sumofsss = zeros(1,1000);
ii = 1;
si = 1;
while si<1000 && ii<trial
if costanddest(1,ii)<1000000000*si
sss(si) = sss(si)+1;
else
sumofsss(si) = sumofsss(si)+sss(si);
si=si+1;
sumofsss(si) = sumofsss(si-1);
end
ii=ii+1;
end
for j=1:9
disp(j+"0억 컷: "+sumofsss(j)*100/trial+"%");
end
for j=1:9
disp(j+"00억 컷: "+sumofsss(j*10)*100/trial+"%");
end
disp("1000억 컷: "+sumofsss(100)*100/trial+"%");
disp("2000억 컷: "+sumofsss(200)*100/trial+"%");
disp("3000억 컷: "+sumofsss(300)*100/trial+"%");
plot(sss);
axis([0 300 0 inf]);
title("타일런트 벨트 "+start+"성>"+goal+"성 "+trial+"회");
xlabel("단위: 10억 메소");
function sor = mysort(a,b)
len = round(length(a)/2);
if(len==1)
if(length(a)==1)
sor = vertcat(a,b);
else
if(a(2)<a(1))
t=a(1);
a(1)=a(2);
a(2)=t;
t=b(1);
b(1)=b(2);
b(2)=t;
end
sor = vertcat(a,b);
end
else
aa = mysort(a(1:len),b(1:len));
bb = mysort(a(len+1:length(a)),b(len+1:length(a)));
ansum = zeros(2,length(a));
aat = 1;
bbt = 1;
while(aat<=size(aa,2)||bbt<=size(bb,2))
if(aat>size(aa,2))
ansum(1,aat+bbt-1) = bb(1,bbt);
ansum(2,aat+bbt-1) = bb(2,bbt);
bbt = bbt+1;
else
if(bbt>size(bb,2))
ansum(1,aat+bbt-1) = aa(1,aat);
ansum(2,aat+bbt-1) = aa(2,aat);
aat = aat+1;
else
if(aa(1,aat)<bb(1,bbt))
ansum(1,aat+bbt-1) = aa(1,aat);
ansum(2,aat+bbt-1) = aa(2,aat);
aat = aat+1;
else
ansum(1,aat+bbt-1) = bb(1,bbt);
ansum(2,aat+bbt-1) = bb(2,bbt);
bbt = bbt+1;
end
end
end
end
sor = ansum;
end
end