Partial / not complete impl
This commit is contained in:
		
							parent
							
								
									f22ef7f7ba
								
							
						
					
					
						commit
						6acbdc53f1
					
				
					 1 changed files with 26 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
use std::collections::BTreeSet;
 | 
			
		||||
use std::fs::File;
 | 
			
		||||
use std::io::{self, BufRead, BufReader};
 | 
			
		||||
use std::io;
 | 
			
		||||
use std::iter::{repeat, successors};
 | 
			
		||||
 | 
			
		||||
fn next(c: (i32, i32), direction: &str) -> (i32, i32) {
 | 
			
		||||
| 
						 | 
				
			
			@ -14,8 +13,6 @@ fn next(c: (i32, i32), direction: &str) -> (i32, i32) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
fn direction_length(entry: String) -> (String, usize) {
 | 
			
		||||
    /// Creates a (direction, length) pair to later produce a string
 | 
			
		||||
    /// on a direction with the given length. E.g. given "R10" the output of
 | 
			
		||||
    (
 | 
			
		||||
        entry.chars().nth(0).unwrap().to_string(),
 | 
			
		||||
        entry[1..].parse().unwrap(),
 | 
			
		||||
| 
						 | 
				
			
			@ -46,19 +43,25 @@ fn distance(position: (i32, i32)) -> i32 {
 | 
			
		|||
    position.0.abs() + position.1.abs()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn main() -> io::Result<()> {
 | 
			
		||||
    let f = BufReader::new(File::open("day3-input.txt")?);
 | 
			
		||||
    let entries: Vec<BTreeSet<(i32, i32)>> = f
 | 
			
		||||
        .lines()
 | 
			
		||||
        .map(|line| line.unwrap().split(",").map(String::from).collect())
 | 
			
		||||
fn closest(input: String) -> Option<i32> {
 | 
			
		||||
    let entries: Vec<BTreeSet<(i32, i32)>> = input
 | 
			
		||||
        .trim()
 | 
			
		||||
        .split("\n")
 | 
			
		||||
        .map(|line| line.split(",").map(String::from).collect())
 | 
			
		||||
        .map(to_coordinates)
 | 
			
		||||
        .collect();
 | 
			
		||||
 | 
			
		||||
    let closest: Option<i32> = entries[0]
 | 
			
		||||
    entries[0]
 | 
			
		||||
        .intersection(&entries[1])
 | 
			
		||||
        .cloned()
 | 
			
		||||
        .map(distance)
 | 
			
		||||
        .min();
 | 
			
		||||
        .min()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn first(input: String) -> Option<i32> {}
 | 
			
		||||
 | 
			
		||||
pub fn main() -> io::Result<()> {
 | 
			
		||||
    let closest = closest(std::include_str!("../day3-input.txt").to_owned());
 | 
			
		||||
    println!("{:?}", closest);
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
| 
						 | 
				
			
			@ -80,3 +83,15 @@ fn test_coordinates_for_entry() {
 | 
			
		|||
    let input = "R2,U2".to_owned().split(",").map(String::from).collect();
 | 
			
		||||
    assert_eq!(to_coordinates(input), expected);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
fn test_part_one() {
 | 
			
		||||
    let input = "R75,D30,R83,U83,L12,D49,R71,U7,L72\n\
 | 
			
		||||
                 U62,R66,U55,R34,D71,R55,D58,R83"
 | 
			
		||||
        .to_owned();
 | 
			
		||||
    assert_eq!(closest(input), Some(159));
 | 
			
		||||
    let input = "R98,U47,R26,D63,R33,U87,L62,D20,R33,U53,R51\n\
 | 
			
		||||
                 U98,R91,D20,R16,D67,R40,U7,R15,U6,R7"
 | 
			
		||||
        .to_owned();
 | 
			
		||||
    assert_eq!(closest(input), Some(135));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue