Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1d2dd6f

Browse files
committed
day18 part1 with 1 thread
1 parent4c5eae1 commit1d2dd6f

File tree

1 file changed

+23
-29
lines changed

1 file changed

+23
-29
lines changed

‎day19/src/main.rs

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ use std::collections::HashSet;
99
use std::thread;
1010
use std::sync::mpsc::{Sender,Receiver};
1111
use std::sync::mpsc;
12+
use std::sync::Arc;
1213

1314

1415
fnget_new_molecules(init_molecule:&str,from:&str,to:&str) ->Vec<String>{
15-
println!("{:?}", init_molecule);
1616
let splited_molecule:Vec<&str> = init_molecule.split(from).collect();
1717
let molecule_len = splited_molecule.len();
1818
(0..molecule_len -1).map(|i| splited_molecule.iter()
@@ -31,8 +31,8 @@ fn get_new_molecules(init_molecule: &str, from: &str, to: &str) -> Vec<String> {
3131

3232
}
3333

34-
fnapply_all_replacements(init_molecule:&str,replacements:Vec<(&str,&str)>) ->HashSet<String>{
35-
replacements.iter().map(|&(from, to)|get_new_molecules(init_molecule,from, to)).flat_map(|molecula| molecula).collect()
34+
fnapply_all_replacements(init_molecule:&str,replacements:&[(String,String)]) ->HashSet<String>{
35+
replacements.iter().map(|repl|get_new_molecules(init_molecule,&repl.0,&repl.1)).flat_map(|molecula| molecula).collect()
3636
}
3737

3838
fnmain(){
@@ -58,44 +58,38 @@ fn main() {
5858
};
5959
let lines:Vec<&str> = content.trim().split("\n").collect();
6060
let replacements_len = lines.len() -2;
61-
let molecule = lines[replacements_len +1];
62-
let replacements:Vec<(&str,&str)> = lines.iter()
61+
let molecule = lines[replacements_len +1].to_string();
62+
let replacements:Vec<(String,String)> = lines.iter()
6363
.take(replacements_len)
6464
.map(|&line|{
6565
let parts:Vec<&str> = line.split(" => ").collect();
66-
(parts[0], parts[1])})
66+
(parts[0].to_string(), parts[1].to_string())})
6767
.collect();
6868

69-
//let (tx, rx): (Sender<HashSet<String>>, Receiver<HashSet<String>>) = mpsc::channel();
69+
let(tx, rx):(Sender<HashSet<String>>,Receiver<HashSet<String>>) = mpsc::channel();
70+
let shared_repl =Arc::new(replacements.clone());
71+
let replacements_chunks = replacements_len / threads_count;
7072
for idin0..threads_count{
71-
//let thread_tx = tx.clone();
72-
let repl:Vec<(&str,&str)> = replacements.clone().iter().map(|&x| x).collect();//.skip(0).take(5).collect();
73+
let thread_tx = tx.clone();
74+
let repl = shared_repl.clone();
75+
let mol = molecule.clone();
76+
7377
thread::spawn(move ||{
74-
let molecules =apply_all_replacements(molecule,repl);
75-
//thread_tx.send(molecules).unwrap();
76-
println!("thread {} finished",34);
78+
let molecules =apply_all_replacements(&mol,&repl[..]);
79+
thread_tx.send(molecules).unwrap();
80+
println!("thread {} finished",id);
7781
});
7882
}
79-
println!("{:?}",&replacements[1..threads_count]);
80-
println!("{:?}", molecule);
8183

8284
let replaced_molecule =get_new_molecules("HOHOH","H","OO");
8385

84-
//let handle = thread::spawn(|| {
85-
// get_new_molecules("HOHOHHHHOHHHHHHHHHHOOOOOOOOOOOHHHHHHHHHHOOOOOOOOOO", "H", "OO")
86-
//});
87-
88-
//println!("{:?}", handle.join().unwrap());
89-
//thread::sleep(Duration::from_millis(50));
90-
//
91-
/*
92-
let mut result_molecules: HashSet<String>;
86+
letmut result_molecules:HashSet<String> =HashSet::new();
9387
for _in0..threads_count{
94-
// The `recv` method picks a message from the channel
95-
// `recv` will block the current thread if there no messages available
96-
rx.recv().unwrap();
88+
let molecules = rx.recv().unwrap();
89+
//println!("{:?}", molecules);
90+
result_molecules = result_molecules.union(&molecules).cloned().collect();
9791
}
98-
*/
99-
/*println!("{:?}", result_molecules);
100-
println!("{:?}", result_molecules.len());*/
92+
93+
//println!("{:?}", result_molecules);
94+
println!("{:?}", result_molecules.len());
10195
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp