【入力】
name series rare slv col sh be me skill skill2 times prob score score2 spe
yuki riha 5 4 me 4352 3773 6696 score com 16 0.44 3034 0 0.1
yuki do 4 2 me 3975 3574 6280 score per 22 0.39 1172 0 0.02
yuki okashi 4 3 me 3975 3398 6314 shrink per 24 0.36 1.4 4 0.02
yuki head 5 5 me 4203 3755 7024 score timer 11 0.44 6190 0 0.02
キャラ名、シリーズ名、レアリティ(使わない)、スキルレベル(使わない)、属性、属性値×3、スキル種(スコアアップ、縮小、それ以外)、スキル発動条件(コンボ/パーフェクト/タイマー)、スキルが発動するコンボ数/パーフェクト数/秒数、スキル発動確率、スキル発動時の値/倍率(縮小時)、スキル継続時間(縮小時)、イベント特効倍率
【変数】
per = 550 #曲のパーフェクト数
good = 50 #曲のグッド数
com = per+good #コンボ数
sec = 120 #曲の時間
mv = 200 #MV中のノーツ数
batch = 1.1 #スコアアップバッチの倍率
ass = T #スコアアップライブアシストの有無
【スキル計算】
skill_cal <- function (card, base) {
switch (as.character(card$skill2),
“per” = assign(“count”, per),
“com” = assign(“count”, com),
assign (“count”,sec))
if (card$skill==”score”) {
return (count/card$times*card$prob*card$score)
} else if (card$skill==”shrink”) {
return (count/card$times*base*(0.025*(per/sec)+0.020*(good/sec))*
card$score2*(card$score-1))
} else { return (0) }
}
【スコア計算】
score_cal <- function (unit, col, friend) {
spe <- 1+sum(unit$spe)
cent <- ifelse(friend==T,
ifelse(unit$col[1]==unit$col[6], 1.2, 1.1),
1.1)
base <- sum(unit[,5+col])+
ifelse (is.na(match(“head”, unit$series)), 0,
500*(sum(unit$name==”yuki”)))
base <- ifelse (ass==T, base*1.2, base)
base <- cent*base*(50*1.0+50*1.1+50*1.2+50*1.3+50*1.4+(com-250-mv)*1.5+
good*(mv/com)*1.5+per*(mv/com)*2*1.5)/com
unit_skill <- NULL
for (i in 1:nrow(unit)) {
unit_skill <- c(unit_skill, skill_cal(unit[i,],base))
}
score <- base*(0.025*per+0.020*good)+sum(unit_skill)
return(score*batch*spe)
}
【入力したデータの中から最もスコア値の高いユニットを導く】
score_max <- function (data,color){
data_2 <- subset(data,col==c(“sh”,”be”,”me”)[color])
combination <- combn (data_2$id,5)
score_data <- numeric(ncol(combination))
for (i in 1:ncol(combination)){
data_temp <- data[combination[,i],]
score_data[i] <- score_cal(data_temp,1,F)
}
return(list(max(score_data),which.max(score_data),
data[combination[,which.max(score_data)],]))
}
unit1 <- data[c(1,2,3,4,5),] #フレンドなし、1番目にセンターの行ID
score_cal (unit1, 3, F) #2個目の変数は曲の色でシャウト=1、ビート=2、メロディー=3
unit2 <- data[c(1,2,3,4,5,6),] #フレンドあり、1番目にセンター、6番目にフレンドの行ID
score_cal (unit1, 3, T) #2個目の変数は曲の色でシャウト=1、ビート=2、メロディー=3
score_max(data,1) #2個目の変数は曲の色でシャウト=1、ビート=2、メロディー=3
おめでとうございます
仮定
・フルコンボ
・ノーツはすべて白
・センタースキルは110%アップ固定
・自分のセンターは曲の色と同じ、フレンドのセンターは他の色でもいい
・50コンボでランプ1つ点灯、MVは最後まで続く
・ブローチスキルはヘッドホンつけたユキしか使えない(ユキしか育ててないから)
等
更新履歴
19/6/13 v1.1 スコア計算関数のフレンドの有無を変数に追加、最大スコア値計算関数の追加
ありがとうございました
http://nomnaim.main.jp/wiki/idolish7/index.php?%E3%82%B9%E3%82%B3%E3%82%A2%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF