ICFP 2007 Contest: https://web.archive.org/web/20090301164728/https://save-endo.cs.uu.nl/
at main 1.3 kB view raw
1mod dna; 2mod match_replace; 3 4use std::env; 5use std::fs; 6use std::fs::File; 7use std::io::Write; 8 9fn main() { 10 let args: Vec<String> = env::args().collect(); 11 if args.len() < 4 { 12 println!("Usage: {} <prefix file> <dna file> <rna file>", args[0]); 13 return; 14 } 15 16 let Ok(prefix) = fs::read_to_string(&args[1]) else { 17 println!("Failed to read prefix file at {}", &args[1]); 18 return; 19 }; 20 let Ok(dna) = fs::read_to_string(&args[2]) else { 21 println!("Failed to read dna file at {}", &args[2]); 22 return; 23 }; 24 25 let mut dna = dna::DnaRef::from_string(&prefix) + dna::DnaRef::from_string(&dna); 26 let Ok(mut rna_file) = File::create(&args[3]) else { 27 println!("Failed to create rna output file at {}", &args[3]); 28 return; 29 }; 30 let mut rna = Vec::new(); 31 loop { 32 if let Some(new_dna) = match_replace::match_replace(dna, &mut rna) { 33 dna = new_dna; 34 } else { 35 break; 36 } 37 38 for r in rna.iter() { 39 let rna_str: String = r.iter().map(|b| b.to_char()).collect(); 40 // Just tolerate a write error. 41 let _ = rna_file.write(rna_str.as_bytes()); 42 let _ = rna_file.write(b"\n"); 43 } 44 45 rna.clear(); 46 } 47 48 return; 49}