Compare commits
	
		
			2 Commits
		
	
	
		
			67fd4e2085
			...
			5b21b1db58
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5b21b1db58 | |||
| 88321a2614 | 
| @ -1,6 +1,6 @@ | ||||
| fun sortAsc (l: int list) : int list = ListMergeSort.sort (op >) l | ||||
| fun sortAsc (l : int list) : int list = ListMergeSort.sort (op >) l | ||||
| 
 | ||||
| fun sum (l: int list) : int = foldl (op +) 0 l | ||||
| fun sum (l : int list) : int = foldl (op +) 0 l | ||||
| 
 | ||||
| fun substrToInt (substr: substring) : int = valOf (Int.fromString (Substring.string substr)) | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										30
									
								
								day_3.sml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								day_3.sml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| fun numberAt (i : int) = fn (s : string) => | ||||
|   if i >= String.size s then NONE | ||||
|   else SOME (Substring.takel Char.isDigit (Substring.extract (s, i, NONE))) | ||||
| 
 | ||||
| fun substrToInt (n : substring) = valOf (Int.fromString (Substring.string n)) | ||||
| 
 | ||||
| fun sum (l : int list) : int = foldl (op +) 0 l | ||||
| 
 | ||||
| val file = TextIO.openIn "day_3.txt" | ||||
| val input = TextIO.inputAll file; | ||||
| TextIO.closeIn file; | ||||
| 
 | ||||
| val instructions = List.tabulate ((size input), (fn i => | ||||
|   let | ||||
|     val n1 = numberAt (i + 4) input | ||||
|     val n2 = Option.mapPartial (fn n => numberAt (i + 5 + Substring.size n) input) n1 | ||||
|   in | ||||
|     if isSome n1 andalso isSome n2 andalso | ||||
|       String.substring (input, i, 4) = "mul(" andalso | ||||
|       String.sub (input, i + 4 + Substring.size (valOf n1)) = #"," andalso | ||||
|       String.sub (input, i + 5 + Substring.size (valOf n1) + Substring.size (valOf n2)) = #")" | ||||
|     then SOME (n1, n2) else NONE | ||||
| end)) | ||||
| 
 | ||||
| val instructions = List.mapPartial | ||||
|   (fn (num) => case num of SOME (SOME x, SOME y) => SOME (substrToInt x, substrToInt y) | _ => NONE) | ||||
|   instructions | ||||
| 
 | ||||
| val result = sum (map (op *) instructions) | ||||
| 
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user