mirror of
https://github.com/mx42/adventofcode.git
synced 2026-01-14 13:59:51 +01:00
Add 2020 day 12
This commit is contained in:
759
haskellAoC/inputs/2020/12
Normal file
759
haskellAoC/inputs/2020/12
Normal file
@@ -0,0 +1,759 @@
|
||||
F70
|
||||
S4
|
||||
E3
|
||||
S4
|
||||
L90
|
||||
N4
|
||||
R90
|
||||
W3
|
||||
F75
|
||||
S5
|
||||
L90
|
||||
E1
|
||||
S4
|
||||
F98
|
||||
N4
|
||||
R90
|
||||
S3
|
||||
L90
|
||||
W1
|
||||
F39
|
||||
W2
|
||||
L90
|
||||
E1
|
||||
F99
|
||||
S3
|
||||
E5
|
||||
F63
|
||||
N4
|
||||
F26
|
||||
E1
|
||||
R180
|
||||
F58
|
||||
N3
|
||||
F4
|
||||
E1
|
||||
F45
|
||||
E4
|
||||
R90
|
||||
E3
|
||||
F76
|
||||
S1
|
||||
F22
|
||||
R90
|
||||
N1
|
||||
W1
|
||||
F76
|
||||
W1
|
||||
N5
|
||||
E3
|
||||
L180
|
||||
S5
|
||||
F87
|
||||
W4
|
||||
L90
|
||||
F9
|
||||
S2
|
||||
F11
|
||||
N4
|
||||
L180
|
||||
S3
|
||||
R90
|
||||
F92
|
||||
L90
|
||||
S1
|
||||
E4
|
||||
R90
|
||||
W1
|
||||
F1
|
||||
S2
|
||||
L90
|
||||
F27
|
||||
N3
|
||||
E1
|
||||
N1
|
||||
E3
|
||||
L180
|
||||
S1
|
||||
S5
|
||||
R180
|
||||
W5
|
||||
W5
|
||||
F60
|
||||
S5
|
||||
W5
|
||||
L270
|
||||
N3
|
||||
R90
|
||||
F65
|
||||
S5
|
||||
F53
|
||||
W5
|
||||
L90
|
||||
N1
|
||||
W5
|
||||
L180
|
||||
F87
|
||||
W2
|
||||
R180
|
||||
S2
|
||||
F77
|
||||
N1
|
||||
F81
|
||||
L180
|
||||
E5
|
||||
N5
|
||||
W4
|
||||
L90
|
||||
W4
|
||||
L90
|
||||
E3
|
||||
N2
|
||||
L90
|
||||
W2
|
||||
S1
|
||||
F19
|
||||
W1
|
||||
F82
|
||||
N4
|
||||
R270
|
||||
E5
|
||||
L90
|
||||
N3
|
||||
R90
|
||||
F81
|
||||
L270
|
||||
W3
|
||||
R90
|
||||
L270
|
||||
N3
|
||||
F53
|
||||
E2
|
||||
F84
|
||||
R90
|
||||
S2
|
||||
F39
|
||||
R180
|
||||
N1
|
||||
L90
|
||||
F11
|
||||
S2
|
||||
W5
|
||||
F20
|
||||
W1
|
||||
N4
|
||||
R90
|
||||
F76
|
||||
E3
|
||||
S5
|
||||
E3
|
||||
S5
|
||||
W5
|
||||
S2
|
||||
L90
|
||||
N3
|
||||
E3
|
||||
S5
|
||||
F27
|
||||
W1
|
||||
L90
|
||||
F65
|
||||
W3
|
||||
R180
|
||||
F84
|
||||
W2
|
||||
N5
|
||||
F43
|
||||
L180
|
||||
W3
|
||||
F11
|
||||
W2
|
||||
R90
|
||||
N1
|
||||
R90
|
||||
N5
|
||||
W1
|
||||
S4
|
||||
N4
|
||||
F88
|
||||
N3
|
||||
F87
|
||||
W3
|
||||
L90
|
||||
F77
|
||||
S5
|
||||
F18
|
||||
N4
|
||||
F97
|
||||
E5
|
||||
S5
|
||||
R90
|
||||
F94
|
||||
N5
|
||||
L180
|
||||
F8
|
||||
N4
|
||||
R90
|
||||
W2
|
||||
N2
|
||||
L180
|
||||
F4
|
||||
R90
|
||||
W4
|
||||
S3
|
||||
R90
|
||||
F38
|
||||
S3
|
||||
E1
|
||||
N5
|
||||
F4
|
||||
E3
|
||||
R90
|
||||
S4
|
||||
F95
|
||||
E5
|
||||
F77
|
||||
F32
|
||||
W5
|
||||
F3
|
||||
R90
|
||||
N1
|
||||
W3
|
||||
F96
|
||||
L270
|
||||
N2
|
||||
E2
|
||||
F30
|
||||
S3
|
||||
W2
|
||||
R90
|
||||
F57
|
||||
R90
|
||||
E1
|
||||
R90
|
||||
N5
|
||||
E1
|
||||
N4
|
||||
W4
|
||||
N1
|
||||
W2
|
||||
F47
|
||||
N5
|
||||
W3
|
||||
L90
|
||||
N4
|
||||
F50
|
||||
E3
|
||||
R90
|
||||
F27
|
||||
N3
|
||||
F78
|
||||
N2
|
||||
R90
|
||||
F100
|
||||
S3
|
||||
F67
|
||||
R90
|
||||
N4
|
||||
R90
|
||||
N4
|
||||
F88
|
||||
S4
|
||||
E2
|
||||
S2
|
||||
F31
|
||||
S5
|
||||
R90
|
||||
W3
|
||||
R180
|
||||
W2
|
||||
F97
|
||||
F31
|
||||
N1
|
||||
L90
|
||||
S4
|
||||
F50
|
||||
N3
|
||||
W2
|
||||
L180
|
||||
F85
|
||||
L180
|
||||
E3
|
||||
L90
|
||||
F95
|
||||
N4
|
||||
L90
|
||||
E1
|
||||
S2
|
||||
R180
|
||||
N2
|
||||
F19
|
||||
N5
|
||||
E5
|
||||
S1
|
||||
W5
|
||||
R90
|
||||
N1
|
||||
L180
|
||||
F76
|
||||
S4
|
||||
E5
|
||||
S2
|
||||
S5
|
||||
E3
|
||||
F53
|
||||
L90
|
||||
S3
|
||||
E4
|
||||
S1
|
||||
E1
|
||||
L90
|
||||
F54
|
||||
W1
|
||||
S1
|
||||
E2
|
||||
N1
|
||||
R90
|
||||
S3
|
||||
R90
|
||||
F63
|
||||
L90
|
||||
W4
|
||||
L90
|
||||
F47
|
||||
L90
|
||||
E5
|
||||
F23
|
||||
W2
|
||||
F97
|
||||
E3
|
||||
L90
|
||||
N4
|
||||
F54
|
||||
W3
|
||||
S4
|
||||
W3
|
||||
S2
|
||||
F67
|
||||
W1
|
||||
S4
|
||||
R90
|
||||
S5
|
||||
R90
|
||||
W4
|
||||
L180
|
||||
L90
|
||||
S4
|
||||
F19
|
||||
F42
|
||||
S4
|
||||
F91
|
||||
R90
|
||||
L180
|
||||
F64
|
||||
L180
|
||||
W4
|
||||
R90
|
||||
F32
|
||||
N3
|
||||
F18
|
||||
E2
|
||||
L180
|
||||
N4
|
||||
E2
|
||||
N1
|
||||
E4
|
||||
N4
|
||||
F54
|
||||
W5
|
||||
F50
|
||||
N3
|
||||
L90
|
||||
N5
|
||||
R90
|
||||
F100
|
||||
E4
|
||||
N1
|
||||
E3
|
||||
L90
|
||||
F8
|
||||
L90
|
||||
E4
|
||||
L270
|
||||
F95
|
||||
L90
|
||||
F44
|
||||
E5
|
||||
R90
|
||||
F79
|
||||
N5
|
||||
F61
|
||||
S2
|
||||
F71
|
||||
L90
|
||||
F4
|
||||
N3
|
||||
F25
|
||||
L180
|
||||
F7
|
||||
W4
|
||||
F96
|
||||
R90
|
||||
S1
|
||||
R90
|
||||
W1
|
||||
F9
|
||||
N2
|
||||
W5
|
||||
F1
|
||||
R90
|
||||
N2
|
||||
F36
|
||||
W4
|
||||
R90
|
||||
F96
|
||||
W2
|
||||
F26
|
||||
S2
|
||||
F28
|
||||
E4
|
||||
N1
|
||||
F33
|
||||
N5
|
||||
F51
|
||||
W2
|
||||
S1
|
||||
F40
|
||||
N3
|
||||
F67
|
||||
E3
|
||||
S2
|
||||
R90
|
||||
W1
|
||||
S3
|
||||
E3
|
||||
L90
|
||||
F75
|
||||
E3
|
||||
N5
|
||||
E2
|
||||
F52
|
||||
E3
|
||||
F7
|
||||
N4
|
||||
F4
|
||||
S4
|
||||
L90
|
||||
S2
|
||||
W5
|
||||
F85
|
||||
F7
|
||||
L180
|
||||
E1
|
||||
L90
|
||||
E2
|
||||
S3
|
||||
R180
|
||||
N3
|
||||
E2
|
||||
R90
|
||||
N5
|
||||
F6
|
||||
N2
|
||||
L90
|
||||
W1
|
||||
R90
|
||||
R90
|
||||
F91
|
||||
E2
|
||||
N4
|
||||
R90
|
||||
S2
|
||||
E3
|
||||
S3
|
||||
L90
|
||||
W3
|
||||
F61
|
||||
S1
|
||||
L90
|
||||
W3
|
||||
N2
|
||||
E1
|
||||
R180
|
||||
E2
|
||||
W5
|
||||
R90
|
||||
F65
|
||||
N4
|
||||
W3
|
||||
F54
|
||||
E1
|
||||
N3
|
||||
E5
|
||||
L180
|
||||
S4
|
||||
N3
|
||||
E5
|
||||
R90
|
||||
S3
|
||||
R90
|
||||
S4
|
||||
W4
|
||||
F31
|
||||
S5
|
||||
R90
|
||||
N2
|
||||
E3
|
||||
F49
|
||||
F47
|
||||
W3
|
||||
F79
|
||||
R270
|
||||
W2
|
||||
F90
|
||||
S3
|
||||
F73
|
||||
L180
|
||||
F14
|
||||
W4
|
||||
F27
|
||||
R90
|
||||
F75
|
||||
L90
|
||||
N5
|
||||
R90
|
||||
N4
|
||||
L90
|
||||
N4
|
||||
E2
|
||||
S1
|
||||
W1
|
||||
S4
|
||||
W5
|
||||
W1
|
||||
F7
|
||||
W5
|
||||
L180
|
||||
E1
|
||||
S1
|
||||
F82
|
||||
F36
|
||||
N2
|
||||
L90
|
||||
E1
|
||||
L90
|
||||
S4
|
||||
L180
|
||||
N2
|
||||
W3
|
||||
F21
|
||||
R270
|
||||
F18
|
||||
R180
|
||||
F93
|
||||
L90
|
||||
W2
|
||||
F4
|
||||
E1
|
||||
R90
|
||||
E2
|
||||
S3
|
||||
W4
|
||||
F30
|
||||
E1
|
||||
F69
|
||||
W5
|
||||
R90
|
||||
E2
|
||||
L180
|
||||
S4
|
||||
W1
|
||||
N1
|
||||
E3
|
||||
L90
|
||||
E3
|
||||
R90
|
||||
F69
|
||||
R90
|
||||
S2
|
||||
L90
|
||||
N4
|
||||
F13
|
||||
L90
|
||||
E2
|
||||
L90
|
||||
N2
|
||||
W2
|
||||
N5
|
||||
S4
|
||||
F70
|
||||
R90
|
||||
F67
|
||||
E4
|
||||
F62
|
||||
L270
|
||||
F98
|
||||
L90
|
||||
E5
|
||||
F15
|
||||
E5
|
||||
R90
|
||||
W3
|
||||
E2
|
||||
F25
|
||||
R180
|
||||
F7
|
||||
L180
|
||||
W4
|
||||
S3
|
||||
F42
|
||||
R180
|
||||
R270
|
||||
N1
|
||||
R180
|
||||
S2
|
||||
F37
|
||||
E2
|
||||
F72
|
||||
N5
|
||||
W5
|
||||
F61
|
||||
F43
|
||||
W3
|
||||
R90
|
||||
R270
|
||||
N5
|
||||
R270
|
||||
E4
|
||||
L90
|
||||
W4
|
||||
F31
|
||||
F43
|
||||
L180
|
||||
S3
|
||||
W4
|
||||
R90
|
||||
F20
|
||||
E2
|
||||
S5
|
||||
L90
|
||||
F75
|
||||
R90
|
||||
F52
|
||||
W3
|
||||
L90
|
||||
N5
|
||||
W5
|
||||
N4
|
||||
R90
|
||||
F52
|
||||
W3
|
||||
F91
|
||||
E1
|
||||
N2
|
||||
F81
|
||||
R90
|
||||
E2
|
||||
L90
|
||||
F24
|
||||
E2
|
||||
L180
|
||||
E1
|
||||
F55
|
||||
E1
|
||||
L90
|
||||
E5
|
||||
R90
|
||||
F23
|
||||
S3
|
||||
R180
|
||||
S3
|
||||
F8
|
||||
L180
|
||||
S1
|
||||
N3
|
||||
F90
|
||||
N5
|
||||
W3
|
||||
N4
|
||||
L90
|
||||
N3
|
||||
W5
|
||||
R90
|
||||
E4
|
||||
S4
|
||||
F89
|
||||
W3
|
||||
N2
|
||||
R90
|
||||
F18
|
||||
R180
|
||||
W5
|
||||
E4
|
||||
F100
|
||||
N4
|
||||
F40
|
||||
E3
|
||||
S2
|
||||
E2
|
||||
F16
|
||||
R90
|
||||
S2
|
||||
L180
|
||||
F58
|
||||
W1
|
||||
F70
|
||||
S1
|
||||
R90
|
||||
W3
|
||||
L90
|
||||
S4
|
||||
F48
|
||||
R90
|
||||
W1
|
||||
N5
|
||||
E3
|
||||
R90
|
||||
E1
|
||||
L90
|
||||
F1
|
||||
R90
|
||||
N1
|
||||
E3
|
||||
F39
|
||||
W3
|
||||
R90
|
||||
E3
|
||||
L90
|
||||
N5
|
||||
R90
|
||||
S3
|
||||
W4
|
||||
R180
|
||||
E1
|
||||
S3
|
||||
F56
|
||||
L90
|
||||
F98
|
||||
N2
|
||||
W4
|
||||
F67
|
||||
R90
|
||||
W3
|
||||
S1
|
||||
F33
|
||||
R90
|
||||
F42
|
||||
L90
|
||||
R90
|
||||
E4
|
||||
R90
|
||||
E3
|
||||
F74
|
||||
E4
|
||||
R270
|
||||
F62
|
||||
S5
|
||||
L90
|
||||
E4
|
||||
F21
|
||||
73
haskellAoC/src/Y2020/Day12.hs
Normal file
73
haskellAoC/src/Y2020/Day12.hs
Normal file
@@ -0,0 +1,73 @@
|
||||
module Y2020.Day12 (y20day12) where
|
||||
|
||||
data Instruction =
|
||||
GoNorth Int |
|
||||
GoSouth Int |
|
||||
GoWest Int |
|
||||
GoEast Int |
|
||||
TurnLeft |
|
||||
TurnRight |
|
||||
TurnAround |
|
||||
Forward Int deriving (Show)
|
||||
|
||||
-- Orientations
|
||||
-- Right = 0
|
||||
-- Bottom = 1
|
||||
-- Left = 2
|
||||
-- Top = 3
|
||||
data State = State {
|
||||
pos :: (Int, Int)
|
||||
, turn :: Int
|
||||
} deriving (Show)
|
||||
|
||||
data StateP2 = StateP2 {
|
||||
shipPos :: (Int, Int)
|
||||
, waypointPos :: (Int, Int)
|
||||
} deriving (Show)
|
||||
|
||||
parseInput :: String -> Instruction
|
||||
parseInput ('N':n) = GoNorth (read n)
|
||||
parseInput ('S':n) = GoSouth (read n)
|
||||
parseInput ('W':n) = GoWest (read n)
|
||||
parseInput ('E':n) = GoEast (read n)
|
||||
parseInput ('F':n) = Forward (read n)
|
||||
parseInput "L90" = TurnLeft
|
||||
parseInput "L270" = TurnRight
|
||||
parseInput "R90" = TurnRight
|
||||
parseInput "R270" = TurnLeft
|
||||
parseInput (_:"180") = TurnAround
|
||||
parseInput _ = error "Wrong instruction"
|
||||
|
||||
applyInstruction :: State -> Instruction -> State
|
||||
applyInstruction (State (x, y) t) (GoNorth n) = State (x, y + n) t
|
||||
applyInstruction (State (x, y) t) (GoSouth n) = State (x, y -n) t
|
||||
applyInstruction (State (x, y) t) (GoWest n) = State (x - n, y) t
|
||||
applyInstruction (State (x, y) t) (GoEast n) = State (x + n, y) t
|
||||
applyInstruction (State p t) TurnRight = State p $ (t + 1) `mod` 4
|
||||
applyInstruction (State p t) TurnAround = State p $ (t + 2) `mod` 4
|
||||
applyInstruction (State p t) TurnLeft = State p $ (t + 3) `mod` 4
|
||||
applyInstruction (State (x, y) t) (Forward n) = State (moveForward t) t
|
||||
where moveForward 0 = (x + n, y)
|
||||
moveForward 1 = (x, y - n)
|
||||
moveForward 2 = (x - n, y)
|
||||
moveForward 3 = (x, y + n)
|
||||
|
||||
applyInstructionP2 :: StateP2 -> Instruction -> StateP2
|
||||
applyInstructionP2 (StateP2 sp (x, y)) (GoNorth n) = StateP2 sp (x, y + n)
|
||||
applyInstructionP2 (StateP2 sp (x, y)) (GoSouth n) = StateP2 sp (x, y - n)
|
||||
applyInstructionP2 (StateP2 sp (x, y)) (GoWest n) = StateP2 sp (x - n, y)
|
||||
applyInstructionP2 (StateP2 sp (x, y)) (GoEast n) = StateP2 sp (x + n, y)
|
||||
applyInstructionP2 (StateP2 sp (x, y)) TurnLeft = StateP2 sp (-y, x)
|
||||
applyInstructionP2 (StateP2 sp (x, y)) TurnRight = StateP2 sp (y, -x)
|
||||
applyInstructionP2 (StateP2 sp (x, y)) TurnAround = StateP2 sp (-x, -y)
|
||||
applyInstructionP2 (StateP2 (x, y) wp@(x', y')) (Forward n) = StateP2 (x + (n * x'), y + (n * y')) wp
|
||||
|
||||
y20day12 :: [String] -> (String, String)
|
||||
y20day12 input = (part1, part2)
|
||||
where part1 = show $ sum $ map abs $ [fst endposP1, snd endposP1]
|
||||
part2 = show $ sum $ map abs $ [fst endposP2, snd endposP2]
|
||||
start = State (0, 0) 0
|
||||
startP2 = StateP2 (0, 0) (10, 1)
|
||||
journey = map parseInput input
|
||||
(State endposP1 _) = foldl applyInstruction start journey
|
||||
(StateP2 endposP2 _) = foldl applyInstructionP2 startP2 journey
|
||||
@@ -11,6 +11,7 @@ import Y2020.Day08
|
||||
import Y2020.Day09
|
||||
import Y2020.Day10
|
||||
import Y2020.Day11
|
||||
import Y2020.Day12
|
||||
|
||||
year2020 :: String -> [String] -> (String, String)
|
||||
year2020 "01" = y20day01
|
||||
@@ -24,3 +25,4 @@ year2020 "08" = y20day08
|
||||
year2020 "09" = y20day09
|
||||
year2020 "10" = y20day10
|
||||
year2020 "11" = y20day11
|
||||
year2020 "12" = y20day12
|
||||
|
||||
Reference in New Issue
Block a user