Please don’t rely on this Gitea instance being around forever. If any of your build scripts use my (kageru’s) projects hosted here, check my Github or IEW on Github for encoding projects. If you can’t find what you’re looking for there, tell me to migrate it.

Part 1 of part1 is working

day7backup
Arranun 3 years ago
parent ad0be8ffaa
commit 415511204a

@ -1,9 +1,10 @@
import Data.List.Split
main = do
content <- getList <$> getContents
let input = changeInput content 12 2
putStrLn (show (compute input input 0))
let state = [3,0,4,0,99]
let input = [83]
let output = operation state state 0 input []
mapM putStrLn (map show output)
getList :: String -> [Int]
getList = map read . splitOn ","
@ -14,12 +15,12 @@ changeInput (begin:_:_:input) input1 input2= [begin] ++ [input1] ++ [input2] ++
func :: [Int] -> Int -> Int -> Int
func xs x y = do
let input = changeInput xs x y
head (compute input input 0)
head (compute input input 0 [] [] )
compute :: [Int] -> [Int] -> Int -> [Int]
compute (99:_) state index = state
compute (op:x:y:z:_) state index =
compute (drop newindex state) newstate newindex
compute :: [Int] -> [Int] -> Int -> [Int] -> [Int] -> [Int]
compute (99:_) state index input output = output
compute (op:x:y:z:_) state index input output=
compute (drop newindex state) newstate newindex input output
where
sum = if op == 1 then
(state !! x) + (state !! y)
@ -29,28 +30,35 @@ compute (op:x:y:z:_) state index =
newstate = (fst split) ++ [sum] ++ (drop 1 (snd split))
newindex = index + 4
operation :: [Int] -> [Int] -> Int -> [Int]
operation (1:x:y:z:_) state index = operation (drop newindex state) newstate newindex
operation :: [Int] -> [Int] -> Int -> [Int] -> [Int] -> [Int]
operation (99:_) state index input output =
output
operation (1:x:y:z:_) state index input output =
operation (drop newindex state) newstate newindex input output
where
sum = (state !! x) + (state !! y)
split = splitAt z state
newstate = (fst split) ++ [sum] ++ (drop 1(snd split))
newindex = index + 4
operation (2:x:y:z:_) state index = operation (drop newindex state) newstate newindex
where
operation (2:x:y:z:_) state index input output =
operation (drop newindex state) newstate newindex input output
where
sum = (state !! x) * (state !! y)
split = splitAt z state
newstate = (fst split) ++ [sum] ++ (drop 1 (snd split))
newindex = index + 4
operation (3:z:_) state index = operation (drop newindex state) newstate newindex
operation (3:z:_) state index input output=
operation (drop newindex state) newstate newindex newinput output
where
split = splitAt z state
newstate = insert state (1) z
newstate = insert state (head input) z
newinput = drop 1 input
newindex = index + 2
operation (4:z:_) state index = do
putStrLn( show (state !! z ))
let newindex = index + 2
operation (drop newindex state) state newindex
operation (4:z:_) state index input output=
operation (drop newindex state) state newindex input newoutput
where
newoutput = output ++ [(state !! z)]
newindex = index + 2
insert :: [Int] -> Int -> Int -> [Int]
insert xs value index = do

Loading…
Cancel
Save