From 2a6aa7fdcf6e22d32546f24dbe9524a75eec561e Mon Sep 17 00:00:00 2001 From: aggstam Date: Mon, 2 Jan 2023 18:18:08 +0200 Subject: [PATCH] script/research/last_man_standing: survivors vec fix --- script/research/last_man_standing/src/main.rs | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/script/research/last_man_standing/src/main.rs b/script/research/last_man_standing/src/main.rs index e380ee218..fa7826a68 100644 --- a/script/research/last_man_standing/src/main.rs +++ b/script/research/last_man_standing/src/main.rs @@ -90,7 +90,7 @@ async fn main() -> Result<()> { // Skip genesis slot. // Note: increase slot duration if nodes generation takes longer than it - let seconds_next_slot = nodes[0].next_n_slot_start(1).as_secs(); + let seconds_next_slot = nodes[0].next_n_slot_start(2).as_secs(); println!("Waiting for next slot ({seconds_next_slot} sec)"); sleep(seconds_next_slot).await; @@ -117,18 +117,24 @@ async fn main() -> Result<()> { if leaders.len() > 1 { println!("Entering last man standing mode..."); let mut round = 0; + let mut survivors = vec![]; loop { - println!("Round {round}, FIGHT!"); - let mut survivors = vec![]; - for leader in &leaders { + println!("Round {round}, FIGHT!"); + let participants = if !survivors.is_empty() { + survivors.clone() + } else { + leaders.clone() + }; + survivors = vec![]; + for participant in &participants { // We derive the new coin. In real conditions, slot sigmas should adapt on how many // leaders/survivors we have seen on each round. - let mut coins_tree = nodes[*leader].coins_tree.clone(); - nodes[*leader].coins[0] = nodes[*leader].coins[0].derive_coin(&mut coins_tree); - nodes[*leader].coins_tree = coins_tree; - let (won, _, _) = nodes[*leader].is_slot_leader(sigma1, sigma2); + let mut coins_tree = nodes[*participant].coins_tree.clone(); + nodes[*participant].coins[0] = nodes[*participant].coins[0].derive_coin(&mut coins_tree); + nodes[*participant].coins_tree = coins_tree; + let (won, _, _) = nodes[*participant].is_slot_leader(sigma1, sigma2); if won { - survivors.push(leader); + survivors.push(*participant); } } println!("Round {round} survivors: {:?}", survivors);