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}