mod dna; mod match_replace; use std::env; use std::fs; use std::fs::File; use std::io::Write; fn main() { let args: Vec = env::args().collect(); if args.len() < 4 { println!("Usage: {} ", args[0]); return; } let Ok(prefix) = fs::read_to_string(&args[1]) else { println!("Failed to read prefix file at {}", &args[1]); return; }; let Ok(dna) = fs::read_to_string(&args[2]) else { println!("Failed to read dna file at {}", &args[2]); return; }; let mut dna = dna::DnaRef::from_string(&prefix) + dna::DnaRef::from_string(&dna); let Ok(mut rna_file) = File::create(&args[3]) else { println!("Failed to create rna output file at {}", &args[3]); return; }; let mut rna = Vec::new(); loop { if let Some(new_dna) = match_replace::match_replace(dna, &mut rna) { dna = new_dna; } else { break; } for r in rna.iter() { let rna_str: String = r.iter().map(|b| b.to_char()).collect(); // Just tolerate a write error. let _ = rna_file.write(rna_str.as_bytes()); let _ = rna_file.write(b"\n"); } rna.clear(); } return; }