pack 0.4.0

Solver for packing puzzle.
Documentation
extern crate pack;

use pack::puzzle::piece::{Position, Template};
use pack::puzzle::pieces::Bag;
use pack::puzzle::solver::solve;
use pack::util::target::rectangle;

fn main() {
    let target = rectangle(3, 20);
    let bag = pentominoes();

    solve(&target, bag, &mut |solution|{
        println!("{}", solution);
    });
}

pub fn pentominoes() -> Bag<(i8, i8)> {
    Bag::new(vec!(
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 0),
            Position::d2(2, 0),
            Position::d2(2, 1),
            Position::d2(2, 2),
        )),
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 0),
            Position::d2(1, 1),
            Position::d2(1, 2),
            Position::d2(2, 2),
        )),
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 0),
            Position::d2(2, 0),
            Position::d2(3, 0),
            Position::d2(2, 1),
        )),
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 0),
            Position::d2(1, 1),
            Position::d2(2, 1),
            Position::d2(2, 2),
        )),
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 0),
            Position::d2(2, 0),
            Position::d2(1, 1),
            Position::d2(1, 2),
        )),
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 0),
            Position::d2(1, 1),
            Position::d2(1, 2),
            Position::d2(2, 1),
        )),
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 0),
            Position::d2(2, 0),
            Position::d2(2, 1),
            Position::d2(3, 1),
        )),
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 0),
            Position::d2(2, 0),
            Position::d2(3, 0),
            Position::d2(3, 1),
        )),
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 0),
            Position::d2(2, 0),
            Position::d2(3, 0),
            Position::d2(4, 0),
        )),
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 1),
            Position::d2(2, 1),
            Position::d2(1, 1),
            Position::d2(2, 1),
        )),
        Template::new(vec!(
            Position::d2(0, 1),
            Position::d2(1, 0),
            Position::d2(1, 1),
            Position::d2(1, 2),
            Position::d2(2, 1),
        )),
        Template::new(vec!(
            Position::d2(0, 0),
            Position::d2(1, 0),
            Position::d2(2, 0),
            Position::d2(0, 1),
            Position::d2(2, 1),
        )),
    ))
}