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::Write; 12 13fn main() { 14 let args: Vec<String> = env::args().collect(); 15 if args.len() < 4 { 16 println!("Usage: {} <prefix file> <dna file> <rna file>", args[0]); 17 return; 18 } 19 20 let Ok(prefix) = fs::read_to_string(&args[1]) else { 21 println!("Failed to read prefix file at {}", &args[1]); 22 return; 23 }; 24 let Ok(dna) = fs::read_to_string(&args[2]) else { 25 println!("Failed to read dna file at {}", &args[2]); 26 return; 27 }; 28 29 let mut dna = dna::DnaRef::from_string(&prefix) + dna::DnaRef::from_string(&dna); 30 let Ok(mut rna_file) = File::create(&args[3]) else { 31 println!("Failed to create rna output file at {}", &args[3]); 32 return; 33 }; 34 let mut rna = Vec::new(); 35 loop { 36 if let Some(new_dna) = match_replace::match_replace(dna, &mut rna) { 37 dna = new_dna; 38 } else { 39 break; 40 } 41 42 for r in rna.iter() { 43 let rna_str: String = r.iter().map(|b| b.to_char()).collect(); 44 // Just tolerate a write error. 45 let _ = rna_file.write(rna_str.as_bytes()); 46 let _ = rna_file.write(b"\n"); 47 } 48 49 rna.clear(); 50 } 51 52 return; 53}