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