ICFP 2007 Contest: https://web.archive.org/web/20090301164728/https://save-endo.cs.uu.nl/

Update main.rs to run a DNA file

Changed files
+36 -5
dna2rna
+2 -3
dna2rna/src/dna.rs
···
}
impl Base {
-
fn from_char(c: char) -> Option<Base> {
+
pub fn from_char(c: char) -> Option<Base> {
match c {
'I' => Some(Base::I),
'C' => Some(Base::C),
···
}
}
-
#[cfg(test)]
-
fn to_char(&self) -> char {
+
pub fn to_char(&self) -> char {
match self {
Base::I => 'I',
Base::C => 'C',
+34 -2
dna2rna/src/main.rs
···
mod dna;
+
mod match_replace;
mod parser;
mod pattern;
mod rna;
mod template;
+
use std::env;
+
use std::fs;
+
fn main() {
-
let dna = dna::DnaRef::from_string("ICFP");
-
println!("Back to string: {}", dna.to_string());
+
let args: Vec<String> = env::args().collect();
+
if args.len() < 2 {
+
println!("Usage: {} <dna file>", args[0]);
+
return;
+
}
+
+
let contents = fs::read_to_string(&args[1]);
+
if let Ok(dna) = contents {
+
let mut dna = dna::DnaRef::from_string(&dna);
+
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() {
+
for b in r {
+
print!("{}", b.to_char());
+
}
+
println!();
+
}
+
+
rna.clear();
+
}
+
} else {
+
println!("Could not open {}", args[1]);
+
return;
+
}
}