func calculate(_ ships: [Ship]) -> Double
}
+extension SakutekiCalculator {
+
+ fileprivate func alivedShips(ships: [Ship]) -> [Ship] {
+
+ return ships.filter {
+ TemporaryDataStore.default.ensuredGuardEscaped(byShipId: $0.id) == nil
+ }
+ }
+}
+
final class SimpleCalculator: SakutekiCalculator {
+
func calculate(_ ships: [Ship]) -> Double {
- return Double(ships.reduce(0) { $0 + $1.sakuteki_0 })
+ return Double(alivedShips(ships: ships).reduce(0) { $0 + $1.sakuteki_0 })
}
}
let itemNames = ship
.equippedItem
.array
- .flatMap { $0 as? SlotItem }
+ .compactMap { $0 as? SlotItem }
.reduce("") {
let saku = $1.master_slotItem.saku ?? 0
ships.forEach(printShipData)
}
- let aliveShips = ships.filter(alive)
+ let aliveShips = alivedShips(ships: ships)
// 艦娘の索敵による索敵値
let saku1 = aliveShips
let saku3 = shireiSakuteki()
// 艦隊の艦娘数による影響
- let saku4 = 2 * (6 - ships.count)
+ let saku4 = 2 * (6 - aliveShips.count)
return saku1 + saku2 - saku3 + Double(saku4)
}
- private func alive(_ ship: Ship) -> Bool {
-
- if let _ = TemporaryDataStore.default.ensuredGuardEscaped(byShipId: ship.id) {
-
- return false
- }
-
- return true
- }
-
private func normalSakuteki(_ ship: Ship) -> Double {
let eqSakuteki = ship
.equippedItem
.array
- .flatMap { $0 as? SlotItem }
- .flatMap { $0.master_slotItem.saku as? Double }
+ .compactMap { $0 as? SlotItem }
+ .compactMap { $0.master_slotItem.saku as? Double }
.reduce(0, +)
return Double(ship.sakuteki_0) - eqSakuteki
let saku = ship
.equippedItem
.array
- .flatMap { $0 as? SlotItem }
+ .compactMap { $0 as? SlotItem }
.map(equipSakuteki)
.reduce(0, +)
guard let saku = item.master_slotItem.saku as? Double else { return 0 }
- let lvBounus = levelBounus(item)
-
- let ratio = typeRatio(item)
-
- return Double(condition) * ratio * (saku + lvBounus)
+ return Double(condition) * typeRatio(item) * (saku + levelBounus(item))
}
private func typeRatio(_ item: SlotItem) -> Double {
private func levelBounus(_ item: SlotItem) -> Double {
- let level = item.level
-
- let ratio = levelRatio(item)
-
- return ratio * sqrt(Double(level))
+ return levelRatio(item) * sqrt(Double(item.level))
}
private func levelRatio(_ item: SlotItem) -> Double {