Unnamed Space Idle一个简单的穷举基地布局的程序

这是一个简单的Rust程序,用于穷举2x booster何时发挥最大功效
目前程序很简陋
放在这里是作笔记用的

或许布局可以参考,但考虑到有回收装置的存在,除非为了爆绿箱子,否则这个程序的实用价值并不是很大

无论如何,毕竟我写了,还是放上来吧。

在2.46倍2x Booster下,建筑材料的最佳爆法

steam游戏攻略指南


(如果仍然希望爆部件,可以把部件放在右下角,然后部件左上放一格回收装置。不保证这样是最优的,毕竟我没写程序验证)

搜索程序如下:(Note: steam传程序时候需要用noparse,否则steam会把你的代码混淆掉……)
即使你标注了noparse,steam也会吃掉若干i as usize
代码中所有[]里面都是i as usize
// Warning: Some `i as usize` is hidden by steam, I cannot recover it.
#![feature(let_chains)]
use std::array;
const W:usize=6;
const H:usize=5;
fn main(){
// init map
let mut map=[[1;W];H];
map[0][4]=0;
map[1][0]=0;
map[1][5]=0;
map[2][1]=0;
map[2][4]=0;
map[3][0]=0;
map[3][5]=0;
map[4][1]=0;

// map[0][2]=0;
// map[2][2]=0;
// map[2][3]=0;
// map[4][3]=0;
// init relation
let mut rel:[[Vec<(i32,i32)>;W];H]=array::from_fn(|_|array::from_fn(|_|Vec::new()));
for i in 0..H as i32 {
for j in 0..W as i32 {
for k in -2..=2 {
for l in -2..=2 {
if ((k!=0) ^ (l!=0)) && let Some(1)=map.get((i+k) as usize).map(|x|x.get((j+l) as usize)).flatten() {
rel [][j as usize].push((i+k,j+l));
}
}
}
}
}
println!("{:?}",rel);
let mul=2.46;
let mut best=0f64;
for s in 1..36 {
for i in 0..H as i32 {
for j in 0..W as i32 {
if map[][j as usize]==1{
best=best.max(dfs(&map,&rel,&mut vec![(i,j)],s,best,mul))
}
}
}
}
}
fn dfs(map:&[[i32;W];H],rel:&[[Vec<(i32,i32)>;W];H], state:&mut Vec<(i32,i32)>,len:i32,mut score_pre:f64,scoremul:f64)->f64 {
if state.len() as i32 == len {
let mut score = map.clone().map(|x|x.map(|y|y as f64));
state.iter().for_each(|&(i,j)|score[i as usize][j as usize]=0.);
for &(i,j) in state.iter() {
for &(k,l) in rel[i as usize][j as usize].iter() {
score[k as usize][l as usize]*=scoremul;
}
}
let res=score.iter().flatten().sum::<f64>();
if res>score_pre {
println!("len {} has better score {} ",state.len(),res);
let mut m=map.clone();
state.iter().for_each(|&(i,j)|m[][j as usize]=2);
for i in m {
for j in i {
if j==0 {
print!(" ")
} else if j==1 {
print!(" . ")
} else {
print!(" ! ")
}
}
println!("");
}
}
res
} else {
let (mut i,mut j)=state.last().unwrap();
loop {
j+=1;
if j==W as i32 {
i+=1;
j=0;
}
if i<H as i32 {
if map[][j as usize]==1 {
state.push((i,j));
let res=dfs(map,rel,state,len,score_pre,scoremul);
state.pop();
if res>score_pre{
score_pre=res
}
} else {continue}
} else {
break score_pre;
}
}
}
}

内容来源于网络,本站整理。

转载注明出处:https://www.jiuwo123.com/youxi/steam/2024/0522/30402.html