Compare commits
8 Commits
gaelg/erro
...
gaelg/upgr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1ef286ec93 | ||
|
|
6d92ccb908 | ||
|
|
487b6312f6 | ||
|
|
1e7dbc61e9 | ||
| f34980e28f | |||
|
|
e5e23caab8 | ||
|
|
21bb6add65 | ||
|
|
c39968865c |
47
src/main.rs
47
src/main.rs
@@ -20,8 +20,8 @@ extern crate log;
|
|||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
env_logger::init();
|
env_logger::init();
|
||||||
|
// tracing_subscriber::fmt::init();
|
||||||
|
|
||||||
info!("let's go!");
|
|
||||||
// build our application with some routes
|
// build our application with some routes
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.route("/", get(|| async { Html(INDEX_HTML.as_str()) }))
|
.route("/", get(|| async { Html(INDEX_HTML.as_str()) }))
|
||||||
@@ -51,58 +51,19 @@ struct State {
|
|||||||
remaining: Vec<String>,
|
remaining: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn has_forbidden_adjacent(participants: &Vec<String>) -> bool {
|
|
||||||
let forbidden_pairs = vec![("Alice".into(), "Bob".into())];
|
|
||||||
// Check pairs of adjacent elements, including the circular pair (last, first)
|
|
||||||
((1..participants.len()).any(|i| {
|
|
||||||
match (participants[i - 1].as_str(), participants[i].as_str()) {
|
|
||||||
// Check if the pair is forbidden
|
|
||||||
(a, b) if forbidden_pairs.contains(&(a.to_string(), b.to_string())) ||
|
|
||||||
forbidden_pairs.contains(&(b.to_string(), a.to_string())) => {
|
|
||||||
info!("forbidden pair detected : {:?}/{:?} in {:?}", a, b, participants.join(" => "));
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
_ => false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
) || // Check the pair (last, first) for circular adjacency
|
|
||||||
match (participants.last().unwrap().as_str(), participants[0].as_str()) {
|
|
||||||
(a, b) if forbidden_pairs.contains(&(a.to_string(), b.to_string())) ||
|
|
||||||
forbidden_pairs.contains(&(b.to_string(), a.to_string())) => {
|
|
||||||
info!("forbidden pair detected : {:?}/{:?} in {:?}", a, b, participants.join(" => "));
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
_ => false,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn everyone() -> Vec<String> {
|
fn everyone() -> Vec<String> {
|
||||||
vec!["Alice".into(), "Bob".into(), "Carol".into(), "Dave".into(), "Edgar".into(), "France".into()]
|
vec!["Alice".into(), "Bob".into(), "Carol".into(), "Dave".into()]
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for State {
|
impl Default for State {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
let mut p = everyone();
|
let mut p = everyone();
|
||||||
let mut tries = 0;
|
|
||||||
while tries < 100 {
|
|
||||||
p.shuffle(&mut thread_rng());
|
p.shuffle(&mut thread_rng());
|
||||||
|
|
||||||
if !has_forbidden_adjacent(&p) {
|
|
||||||
info!("distribution : {:?}", p.join(" => "));
|
info!("distribution : {:?}", p.join(" => "));
|
||||||
return Self {
|
return Self {
|
||||||
participants: p,
|
participants: p,
|
||||||
remaining: everyone()
|
remaining: everyone()
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
}
|
|
||||||
|
|
||||||
tries += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
eprintln!("ERROR (could not generate a correct list)");
|
|
||||||
std::process::exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +76,7 @@ async fn input(Json(input): Json<Input>) -> String {
|
|||||||
let mut state = STATE.lock().await;
|
let mut state = STATE.lock().await;
|
||||||
|
|
||||||
if state.remaining.is_empty() {
|
if state.remaining.is_empty() {
|
||||||
return "... He mais tout le monde a déja pioché !!".into();
|
return "ERROR (everybody drew already)".into();
|
||||||
}
|
}
|
||||||
info!("joueurs qui restent : {:?}", state.remaining.join(","));
|
info!("joueurs qui restent : {:?}", state.remaining.join(","));
|
||||||
match state.remaining.iter().position(|p| input.person == *p).map(|e| state.remaining.remove(e)) {
|
match state.remaining.iter().position(|p| input.person == *p).map(|e| state.remaining.remove(e)) {
|
||||||
@@ -140,6 +101,6 @@ async fn input(Json(input): Json<Input>) -> String {
|
|||||||
None => "ERROR".to_string()
|
None => "ERROR".to_string()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => "... He mais tu as déja pioché !".to_string()
|
None => "Vous avez déja pioché !".to_string()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user