day 6
This commit is contained in:
		
							parent
							
								
									3e379ce59d
								
							
						
					
					
						commit
						301acdcd7c
					
				
					 3 changed files with 2176 additions and 0 deletions
				
			
		
							
								
								
									
										2119
									
								
								day6.input
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2119
									
								
								day6.input
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										42
									
								
								day6.ml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								day6.ml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
module CS = Set.Make(Char)
 | 
			
		||||
 | 
			
		||||
let set_of_string str =
 | 
			
		||||
    let rec aux s i st =
 | 
			
		||||
        if i < 0 then st
 | 
			
		||||
        else aux s (i - 1) (CS.add s.[i] st) in
 | 
			
		||||
    aux str ((String.length str) - 1) CS.empty
 | 
			
		||||
 | 
			
		||||
let all_char_set = "abcdefghijklmnopqrstuvwxyz" |> set_of_string
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let read_lines name =
 | 
			
		||||
    let ic = open_in name in
 | 
			
		||||
    let try_read () =
 | 
			
		||||
        try Some (input_line ic)
 | 
			
		||||
        with End_of_file -> None in
 | 
			
		||||
    let rec loop acc group =
 | 
			
		||||
        match try_read () with
 | 
			
		||||
        | Some "" -> loop (group :: acc) []
 | 
			
		||||
        | Some s -> loop acc (s :: group)
 | 
			
		||||
        | None -> close_in ic; (group :: acc) in
 | 
			
		||||
    loop [] []
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let part1 filename =
 | 
			
		||||
    read_lines filename
 | 
			
		||||
    |> List.map (fun x -> x
 | 
			
		||||
                          |> (String.concat "")
 | 
			
		||||
                          |> set_of_string
 | 
			
		||||
                          |> CS.cardinal)
 | 
			
		||||
    |> List.fold_left (+) 0
 | 
			
		||||
 | 
			
		||||
let part2 filename =
 | 
			
		||||
    read_lines filename
 | 
			
		||||
    |> List.map (fun x -> x
 | 
			
		||||
                          |> List.map set_of_string
 | 
			
		||||
                          |> List.fold_left CS.inter all_char_set
 | 
			
		||||
                          |> CS.cardinal)
 | 
			
		||||
    |> List.fold_left (+) 0
 | 
			
		||||
 | 
			
		||||
let () = print_endline (string_of_int (part1 "day6.input"))
 | 
			
		||||
let () = print_endline (string_of_int (part2 "day6.input"))
 | 
			
		||||
							
								
								
									
										15
									
								
								day6.test
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								day6.test
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
abc
 | 
			
		||||
 | 
			
		||||
a
 | 
			
		||||
b
 | 
			
		||||
c
 | 
			
		||||
 | 
			
		||||
ab
 | 
			
		||||
ac
 | 
			
		||||
 | 
			
		||||
a
 | 
			
		||||
a
 | 
			
		||||
a
 | 
			
		||||
a
 | 
			
		||||
 | 
			
		||||
b
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue