ICFP 2007 Contest: https://web.archive.org/web/20090301164728/https://save-endo.cs.uu.nl/

Two-argument dna2rna

Changed files
+29 -24
dna2rna
src
+3 -2
.gitignore
···
task/endo.dna
-
dna2rna/target/
-
rna2bmp/target/
+
rna2bmp/target/
+
rna/
+
bmp/
+26 -22
dna2rna/src/main.rs
···
fn main() {
let args: Vec<String> = env::args().collect();
-
if args.len() < 2 {
-
println!("Usage: {} <dna file>", args[0]);
+
if args.len() < 3 {
+
println!("Usage: {} <prefix file> <dna file>", args[0]);
return;
}
-
let contents = fs::read_to_string(&args[1]);
-
if let Ok(dna) = contents {
-
let mut dna = dna::DnaRef::from_string(&dna);
-
let mut rna = Vec::new();
-
loop {
-
if let Some(new_dna) = match_replace::match_replace(dna, &mut rna) {
-
dna = new_dna;
-
} else {
-
break;
-
}
+
let Ok(prefix) = fs::read_to_string(&args[1]) else {
+
println!("Could not open {}", args[1]);
+
return;
+
};
-
for r in rna.iter() {
-
for b in r {
-
print!("{}", b.to_char());
-
}
-
println!();
-
}
+
let Ok(dna) = fs::read_to_string(&args[2]) else {
+
println!("Could not open {}", args[2]);
+
return;
+
};
-
rna.clear();
+
let mut dna = dna::DnaRef::from_string(&prefix) + dna::DnaRef::from_string(&dna);
+
let mut rna = Vec::new();
+
loop {
+
if let Some(new_dna) = match_replace::match_replace(dna, &mut rna) {
+
dna = new_dna;
+
} else {
+
break;
}
-
} else {
-
println!("Could not open {}", args[1]);
-
return;
+
+
for r in rna.iter() {
+
for b in r {
+
print!("{}", b.to_char());
+
}
+
println!();
+
}
+
+
rna.clear();
}
}