Rust/2019/09: add solution
This commit is contained in:
parent
329492750f
commit
54b5ced2f1
5 changed files with 42 additions and 3 deletions
|
@ -55,12 +55,12 @@
|
|||
|[**21**](https://adventofcode.com/2020/day/21) [<img height=12 src=".assets/py.svg">](Python/2020/21.py "Python solution for 2020/21")|[**22**](https://adventofcode.com/2020/day/22) [<img height=12 src=".assets/py.svg">](Python/2020/22.py "Python solution for 2020/22")|[**23**](https://adventofcode.com/2020/day/23) [<img height=12 src=".assets/py.svg">](Python/2020/23.py "Python solution for 2020/23")|[**24**](https://adventofcode.com/2020/day/24) [<img height=12 src=".assets/py.svg">](Python/2020/24.py "Python solution for 2020/24")|[**25**](https://adventofcode.com/2020/day/25) [<img height=12 src=".assets/py.svg">](Python/2020/25.py "Python solution for 2020/25")|26|27|
|
||||
|28|29|30|31||||
|
||||
|
||||
## [2019](https://adventofcode.com/2019) ([<img height=18 src=".assets/py.svg"> Python](Python/2019): 25/25 | [<img height=18 src=".assets/ua.png"> Uiua](Uiua/2019): 6/25 | [<img height=18 src=".assets/rs.svg"> Rust](Rust/2019): 2/25)
|
||||
## [2019](https://adventofcode.com/2019) ([<img height=18 src=".assets/py.svg"> Python](Python/2019): 25/25 | [<img height=18 src=".assets/ua.png"> Uiua](Uiua/2019): 6/25 | [<img height=18 src=".assets/rs.svg"> Rust](Rust/2019): 3/25)
|
||||
|Mo|Tu|We|Th|Fr|Sa|Su|
|
||||
|-|-|-|-|-|-|-|
|
||||
|||||||[**1**](https://adventofcode.com/2019/day/1) [<img height=12 src=".assets/py.svg">](Python/2019/01.py "Python solution for 2019/01") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgriipzii5XiiaBAXG4uCgrin5woLystMuKMisO3MykKLyviiaEoLytb4peM4peM4o2iKC4tMuKMisO3M3ziiaUwKV0pCg== "Uiua solution for 2019/01")|
|
||||
|[**2**](https://adventofcode.com/2019/day/2) [<img height=12 src=".assets/rs.svg">](Rust/2019/02.rs "Rust solution for 2019/02") [<img height=12 src=".assets/py.svg">](Python/2019/02.py "Python solution for 2019/02") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgrilIzilIDilbRJbnRjb2RlCiAgUGFyc2Ug4oaQIG1hcOKHoeKKuOKnuyDiipzii5XiiIjiioJALStAMOKHoTEwLgogIE9wIOKGmiDijaQu4omlMC7il78xMDAKICBNb2RlIOKGmiDil78xMOKMisO34oG_4oqZMTArMgogIFJlYWQg4oaaIOKsmjDiqKwoZ2V04oqZ4peMfOKImHxnZXQrKSDiioMoTW9kZeKKmShnZXR84peMKXxnZXQrKzHiipniipnil4x84ouF4ouF4oqZ4oiYKQogIFdyaXRlIOKGmiBpbnNlcnQ64oqZKOKorCjiipnil4x84o2kLjB8Kykg4oqDKE1vZGXiipkoZ2V0fOKXjCl8Z2V0Kysx4oqZ4oqZ4peMfOKLheKLheKKmeKImCkpCiAgQmluT3AhIOKGmiArNOKKg-KLheKLheKKmeKImFdyaXRl4oqZMuKXoSheMOKKgyhSZWFkMXxSZWFkMCkpCiAgT3BBZGQgIOKGmiBCaW5PcCErCiAgT3BNdWwgIOKGmiBCaW5PcCHDlwogIElucHV0ISAg4oaaICsy4oqD4ouF4ouF4oqZ4oiYV3JpdGXiioMo4ouF4ouF4ouF4oiYfDB84oqZ4oqZ4oiYKSDiipniipniipleMAogIE91dHB1dCEg4oaaICsyIOKKmeKKmeKKmV4wIOKKgyjii4XiipniipniiJh84oqZ4ouF4ouF4peMKSDil6EoUmVhZDApCiAgSm1wISAgICAg4oaaIOKorCgrM-KXjHziipnil4wpXjDil6HiioMoUmVhZDB8UmVhZDEpCiAgSm1wVHJ1ZSAg4oaaIEptcCEo4omgMCkKICBKbXBGYWxzZSDihpogSm1wISg9MCkKICBMdCDihpogQmluT3AhPAogIEVxIOKGmiBCaW5PcCEoPSkKICBCYXNlIOKGmiArMuKKmSs64pehKFJlYWQwKQogIFN0ZXDigLwgIOKGmiDiqKwo4oqZ4oqZ4oqZ4oiYfE9wQWRkfE9wTXVsfElucHV0IV4wfE91dHB1dCFeMXxKbXBUcnVlfEptcEZhbHNlfEx0fEVxfEJhc2UpT3Dil6EoZ2V04oqZ4peMKQogIElzRG9uZSDihpog4omNOTlnZXTiipnil4wKICBSdW7igLwg4oaQIOKXjOKXjOKNoihTdGVw4oC8XjBeMXzCrElzRG9uZSkwIDAK4pSU4pSA4pW0CgpJbnRjb2RlflBhcnNlCgpSdW5XaXRoSW5wdXQg4oaQIOKKouKNnOKKmTBJbnRjb2RlflJ1buKAvCgufOKXjCnijZziio_il4wxXzI6CgriioMo4oqXMTk2OTA3MjDiiaFSdW5XaXRoSW5wdXTima3igoLih6ExMDBfMTAwwqR8UnVuV2l0aElucHV0IDEyXzIpCg== "Uiua solution for 2019/02")|[**3**](https://adventofcode.com/2019/day/3) [<img height=12 src=".assets/py.svg">](Python/2019/03.py "Python solution for 2019/03") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgriiKnCsOKWocKw4oqf4oqc4pah4omgQFxuLgriiKkoXCvilr064oqP4oqZW-KIqeKKuMKv4oq44oeM4oehMl3iipfiipkiTFJVRCLiipwo4oqZ4ouVwrDiioIp4omgQCwuKQoK4pehKOKWveKKuOKIiCkK4oqDKC_ihqcrKzLiiKniipfin5w6fC_ihqfiiaEvK-KMtSkK "Uiua solution for 2019/03")|[**4**](https://adventofcode.com/2019/day/4) [<img height=12 src=".assets/py.svg">](Python/2019/04.py "Python solution for 2019/04") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgriipzii5XiiIgrQDDih6ExMC4K4o2cLeKHocKw4oqfKzBfMQoKQ2hlY2shIOKGkCDihqfiioMoL-KGpV4w4oqc4qe7KzHiirjiipt84omN4oeh4oq44qe74o2PKSDCsOKLlQriiKkvK-KJoeKKg0NoZWNrISg9MilDaGVjayEo4omlMikK "Uiua solution for 2019/04")|[**5**](https://adventofcode.com/2019/day/5) [<img height=12 src=".assets/rs.svg">](Rust/2019/05.rs "Rust solution for 2019/05") [<img height=12 src=".assets/py.svg">](Python/2019/05.py "Python solution for 2019/05") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgrilIzilIDilbRJbnRjb2RlCiAgUGFyc2Ug4oaQIG1hcOKHoeKKuOKnuyDiipzii5XiiIjiioJALStAMOKHoTEwLgogIE9wIOKGmiDijaQu4omlMC7il78xMDAKICBNb2RlIOKGmiDil78xMOKMisO34oG_4oqZMTArMgogIFJlYWQg4oaaIOKsmjDiqKwoZ2V04oqZ4peMfOKImHxnZXQrKSDiioMoTW9kZeKKmShnZXR84peMKXxnZXQrKzHiipniipnil4x84ouF4ouF4oqZ4oiYKQogIFdyaXRlIOKGmiBpbnNlcnQ64oqZKOKorCjiipnil4x84o2kLjB8Kykg4oqDKE1vZGXiipkoZ2V0fOKXjCl8Z2V0Kysx4oqZ4oqZ4peMfOKLheKLheKKmeKImCkpCiAgQmluT3AhIOKGmiArNOKKg-KLheKLheKKmeKImFdyaXRl4oqZMuKXoSheMOKKgyhSZWFkMXxSZWFkMCkpCiAgT3BBZGQgIOKGmiBCaW5PcCErCiAgT3BNdWwgIOKGmiBCaW5PcCHDlwogIElucHV0ISAg4oaaICsy4oqD4ouF4ouF4oqZ4oiYV3JpdGXiioMo4ouF4ouF4ouF4oiYfDB84oqZ4oqZ4oiYKSDiipniipniipleMAogIE91dHB1dCEg4oaaICsyIOKKmeKKmeKKmV4wIOKKgyjii4XiipniipniiJh84oqZ4ouF4ouF4peMKSDil6EoUmVhZDApCiAgSm1wISAgICAg4oaaIOKorCgrM-KXjHziipnil4wpXjDil6HiioMoUmVhZDB8UmVhZDEpCiAgSm1wVHJ1ZSAg4oaaIEptcCEo4omgMCkKICBKbXBGYWxzZSDihpogSm1wISg9MCkKICBMdCDihpogQmluT3AhPAogIEVxIOKGmiBCaW5PcCEoPSkKICBCYXNlIOKGmiArMuKKmSs64pehKFJlYWQwKQogIFN0ZXDigLwgIOKGmiDiqKwo4oqZ4oqZ4oqZ4oiYfE9wQWRkfE9wTXVsfElucHV0IV4wfE91dHB1dCFeMXxKbXBUcnVlfEptcEZhbHNlfEx0fEVxfEJhc2UpT3Dil6EoZ2V04oqZ4peMKQogIElzRG9uZSDihpog4omNOTlnZXTiipnil4wKICBSdW7igLwg4oaQIOKXjOKXjOKNoihTdGVw4oC8XjBeMXzCrElzRG9uZSkwIDAK4pSU4pSA4pW0CgpJbnRjb2RlflBhcnNlCgriiKko4o2kLi_Dlz0wOsKw4oqCIOKLheKKmeKXjEludGNvZGV-UnVu4oC8KCx84oqCKeKKmVtdOik1LDEK "Uiua solution for 2019/05")|[**6**](https://adventofcode.com/2019/day/6) [<img height=12 src=".assets/py.svg">](Python/2019/06.py "Python solution for 2019/06")|[**7**](https://adventofcode.com/2019/day/7) [<img height=12 src=".assets/py.svg">](Python/2019/07.py "Python solution for 2019/07")|[**8**](https://adventofcode.com/2019/day/8) [<img height=12 src=".assets/py.svg">](Python/2019/08.py "Python solution for 2019/08")|
|
||||
|[**9**](https://adventofcode.com/2019/day/9) [<img height=12 src=".assets/py.svg">](Python/2019/09.py "Python solution for 2019/09") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgrilIzilIDilbRJbnRjb2RlCiAgUGFyc2Ug4oaQIG1hcOKHoeKKuOKnuyDiipzii5XiiIjiioJALStAMOKHoTEwLgogIE9wIOKGmiDijaQu4omlMC7il78xMDAKICBNb2RlIOKGmiDil78xMOKMisO34oG_4oqZMTArMgogIFJlYWQg4oaaIOKsmjDiqKwoZ2V04oqZ4peMfOKImHxnZXQrKSDiioMoTW9kZeKKmShnZXR84peMKXxnZXQrKzHiipniipnil4x84ouF4ouF4oqZ4oiYKQogIFdyaXRlIOKGmiBpbnNlcnQ64oqZKOKorCjiipnil4x84o2kLjB8Kykg4oqDKE1vZGXiipkoZ2V0fOKXjCl8Z2V0Kysx4oqZ4oqZ4peMfOKLheKLheKKmeKImCkpCiAgQmluT3AhIOKGmiArNOKKg-KLheKLheKKmeKImFdyaXRl4oqZMuKXoSheMOKKgyhSZWFkMXxSZWFkMCkpCiAgT3BBZGQgIOKGmiBCaW5PcCErCiAgT3BNdWwgIOKGmiBCaW5PcCHDlwogIElucHV0ISAg4oaaICsy4oqD4ouF4ouF4oqZ4oiYV3JpdGXiioMo4ouF4ouF4ouF4oiYfDB84oqZ4oqZ4oiYKSDiipniipniipleMAogIE91dHB1dCEg4oaaICsyIOKKmeKKmeKKmV4wIOKKgyjii4XiipniipniiJh84oqZ4ouF4ouF4peMKSDil6EoUmVhZDApCiAgSm1wISAgICAg4oaaIOKorCgrM-KXjHziipnil4wpXjDil6HiioMoUmVhZDB8UmVhZDEpCiAgSm1wVHJ1ZSAg4oaaIEptcCEo4omgMCkKICBKbXBGYWxzZSDihpogSm1wISg9MCkKICBMdCDihpogQmluT3AhPAogIEVxIOKGmiBCaW5PcCEoPSkKICBCYXNlIOKGmiArMuKKmSs64pehKFJlYWQwKQogIFN0ZXDigLwgIOKGmiDiqKwo4oqZ4oqZ4oqZ4oiYfE9wQWRkfE9wTXVsfElucHV0IV4wfE91dHB1dCFeMXxKbXBUcnVlfEptcEZhbHNlfEx0fEVxfEJhc2UpT3Dil6EoZ2V04oqZ4peMKQogIElzRG9uZSDihpog4omNOTlnZXTiipnil4wKICBSdW7igLwg4oaQIOKXjOKXjOKNoihTdGVw4oC8XjBeMXzCrElzRG9uZSkwIDAK4pSU4pSA4pW0CgpJbnRjb2RlflBhcnNlCgosMuKKmTEK4oqZ4peM4peM4oipSW50Y29kZX5SdW7igLwoLnziiJgpCg== "Uiua solution for 2019/09")|[**10**](https://adventofcode.com/2019/day/10) [<img height=12 src=".assets/py.svg">](Python/2019/10.py "Python solution for 2019/10")|[**11**](https://adventofcode.com/2019/day/11) [<img height=12 src=".assets/py.svg">](Python/2019/11.py "Python solution for 2019/11")|[**12**](https://adventofcode.com/2019/day/12) [<img height=12 src=".assets/py.svg">](Python/2019/12.py "Python solution for 2019/12")|[**13**](https://adventofcode.com/2019/day/13) [<img height=12 src=".assets/py.svg">](Python/2019/13.py "Python solution for 2019/13")|[**14**](https://adventofcode.com/2019/day/14) [<img height=12 src=".assets/py.svg">](Python/2019/14.py "Python solution for 2019/14")|[**15**](https://adventofcode.com/2019/day/15) [<img height=12 src=".assets/py.svg">](Python/2019/15.py "Python solution for 2019/15")|
|
||||
|[**9**](https://adventofcode.com/2019/day/9) [<img height=12 src=".assets/rs.svg">](Rust/2019/09.rs "Rust solution for 2019/09") [<img height=12 src=".assets/py.svg">](Python/2019/09.py "Python solution for 2019/09") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgrilIzilIDilbRJbnRjb2RlCiAgUGFyc2Ug4oaQIG1hcOKHoeKKuOKnuyDiipzii5XiiIjiioJALStAMOKHoTEwLgogIE9wIOKGmiDijaQu4omlMC7il78xMDAKICBNb2RlIOKGmiDil78xMOKMisO34oG_4oqZMTArMgogIFJlYWQg4oaaIOKsmjDiqKwoZ2V04oqZ4peMfOKImHxnZXQrKSDiioMoTW9kZeKKmShnZXR84peMKXxnZXQrKzHiipniipnil4x84ouF4ouF4oqZ4oiYKQogIFdyaXRlIOKGmiBpbnNlcnQ64oqZKOKorCjiipnil4x84o2kLjB8Kykg4oqDKE1vZGXiipkoZ2V0fOKXjCl8Z2V0Kysx4oqZ4oqZ4peMfOKLheKLheKKmeKImCkpCiAgQmluT3AhIOKGmiArNOKKg-KLheKLheKKmeKImFdyaXRl4oqZMuKXoSheMOKKgyhSZWFkMXxSZWFkMCkpCiAgT3BBZGQgIOKGmiBCaW5PcCErCiAgT3BNdWwgIOKGmiBCaW5PcCHDlwogIElucHV0ISAg4oaaICsy4oqD4ouF4ouF4oqZ4oiYV3JpdGXiioMo4ouF4ouF4ouF4oiYfDB84oqZ4oqZ4oiYKSDiipniipniipleMAogIE91dHB1dCEg4oaaICsyIOKKmeKKmeKKmV4wIOKKgyjii4XiipniipniiJh84oqZ4ouF4ouF4peMKSDil6EoUmVhZDApCiAgSm1wISAgICAg4oaaIOKorCgrM-KXjHziipnil4wpXjDil6HiioMoUmVhZDB8UmVhZDEpCiAgSm1wVHJ1ZSAg4oaaIEptcCEo4omgMCkKICBKbXBGYWxzZSDihpogSm1wISg9MCkKICBMdCDihpogQmluT3AhPAogIEVxIOKGmiBCaW5PcCEoPSkKICBCYXNlIOKGmiArMuKKmSs64pehKFJlYWQwKQogIFN0ZXDigLwgIOKGmiDiqKwo4oqZ4oqZ4oqZ4oiYfE9wQWRkfE9wTXVsfElucHV0IV4wfE91dHB1dCFeMXxKbXBUcnVlfEptcEZhbHNlfEx0fEVxfEJhc2UpT3Dil6EoZ2V04oqZ4peMKQogIElzRG9uZSDihpog4omNOTlnZXTiipnil4wKICBSdW7igLwg4oaQIOKXjOKXjOKNoihTdGVw4oC8XjBeMXzCrElzRG9uZSkwIDAK4pSU4pSA4pW0CgpJbnRjb2RlflBhcnNlCgosMuKKmTEK4oqZ4peM4peM4oipSW50Y29kZX5SdW7igLwoLnziiJgpCg== "Uiua solution for 2019/09")|[**10**](https://adventofcode.com/2019/day/10) [<img height=12 src=".assets/py.svg">](Python/2019/10.py "Python solution for 2019/10")|[**11**](https://adventofcode.com/2019/day/11) [<img height=12 src=".assets/py.svg">](Python/2019/11.py "Python solution for 2019/11")|[**12**](https://adventofcode.com/2019/day/12) [<img height=12 src=".assets/py.svg">](Python/2019/12.py "Python solution for 2019/12")|[**13**](https://adventofcode.com/2019/day/13) [<img height=12 src=".assets/py.svg">](Python/2019/13.py "Python solution for 2019/13")|[**14**](https://adventofcode.com/2019/day/14) [<img height=12 src=".assets/py.svg">](Python/2019/14.py "Python solution for 2019/14")|[**15**](https://adventofcode.com/2019/day/15) [<img height=12 src=".assets/py.svg">](Python/2019/15.py "Python solution for 2019/15")|
|
||||
|[**16**](https://adventofcode.com/2019/day/16) [<img height=12 src=".assets/py.svg">](Python/2019/16.py "Python solution for 2019/16")|[**17**](https://adventofcode.com/2019/day/17) [<img height=12 src=".assets/py.svg">](Python/2019/17.py "Python solution for 2019/17")|[**18**](https://adventofcode.com/2019/day/18) [<img height=12 src=".assets/py.svg">](Python/2019/18.py "Python solution for 2019/18")|[**19**](https://adventofcode.com/2019/day/19) [<img height=12 src=".assets/py.svg">](Python/2019/19.py "Python solution for 2019/19")|[**20**](https://adventofcode.com/2019/day/20) [<img height=12 src=".assets/py.svg">](Python/2019/20.py "Python solution for 2019/20")|[**21**](https://adventofcode.com/2019/day/21) [<img height=12 src=".assets/py.svg">](Python/2019/21.py "Python solution for 2019/21")|[**22**](https://adventofcode.com/2019/day/22) [<img height=12 src=".assets/py.svg">](Python/2019/22.py "Python solution for 2019/22")|
|
||||
|[**23**](https://adventofcode.com/2019/day/23) [<img height=12 src=".assets/py.svg">](Python/2019/23.py "Python solution for 2019/23")|[**24**](https://adventofcode.com/2019/day/24) [<img height=12 src=".assets/py.svg">](Python/2019/24.py "Python solution for 2019/24")|[**25**](https://adventofcode.com/2019/day/25) [<img height=12 src=".assets/py.svg">](Python/2019/25.py "Python solution for 2019/25")|26|27|28|29|
|
||||
|30|31||||||
|
||||
|
|
24
Rust/2019/09.rs
Normal file
24
Rust/2019/09.rs
Normal file
|
@ -0,0 +1,24 @@
|
|||
#![feature(test)]
|
||||
|
||||
use aoc::intcode::{get_output, Int};
|
||||
|
||||
type Input = Vec<Int>;
|
||||
|
||||
fn setup(input: &str) -> Input {
|
||||
input
|
||||
.split(',')
|
||||
.map(|x| x.trim().parse().unwrap())
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn part1(input: &Input) -> Int {
|
||||
let output = get_output(input.iter().copied(), [1]).unwrap();
|
||||
*output.last().unwrap()
|
||||
}
|
||||
|
||||
fn part2(input: &Input) -> Int {
|
||||
let output = get_output(input.iter().copied(), [2]).unwrap();
|
||||
output[0]
|
||||
}
|
||||
|
||||
aoc::main!(2019, 9);
|
|
@ -7,7 +7,7 @@ aoc::year! {
|
|||
// "06.rs",
|
||||
// "07.rs",
|
||||
// "08.rs",
|
||||
// "09.rs",
|
||||
"09.rs",
|
||||
// "10.rs",
|
||||
// "11.rs",
|
||||
// "12.rs",
|
||||
|
|
|
@ -77,6 +77,9 @@ path = "2019/02.rs"
|
|||
[[bin]]
|
||||
name = "2019_05"
|
||||
path = "2019/05.rs"
|
||||
[[bin]]
|
||||
name = "2019_09"
|
||||
path = "2019/09.rs"
|
||||
|
||||
# 2020
|
||||
[[bin]]
|
||||
|
|
|
@ -20,6 +20,7 @@ pub fn get_output(
|
|||
pub struct Vm<I: Input, O: Output> {
|
||||
mem: FxHashMap<Int, Int>,
|
||||
ip: Int,
|
||||
base: Int,
|
||||
inp: I,
|
||||
out: O,
|
||||
}
|
||||
|
@ -39,6 +40,7 @@ impl<I: Input, O: Output> Vm<I, O> {
|
|||
.map(|(i, x)| (i as _, x))
|
||||
.collect(),
|
||||
ip: 0,
|
||||
base: 0,
|
||||
inp: input,
|
||||
out: output,
|
||||
}
|
||||
|
@ -106,6 +108,10 @@ impl<I: Input, O: Output> Vm<I, O> {
|
|||
self.write_arg(out, (self.read_arg(in1) == self.read_arg(in2)) as _)?;
|
||||
self.ip += 4;
|
||||
}
|
||||
Op::Base(offset) => {
|
||||
self.base += self.read_arg(offset);
|
||||
self.ip += 2;
|
||||
}
|
||||
Op::Halt => return Ok(false),
|
||||
}
|
||||
|
||||
|
@ -132,6 +138,7 @@ impl<I: Input, O: Output> Vm<I, O> {
|
|||
},
|
||||
7 => Op::Lt { in1, in2, out },
|
||||
8 => Op::Eq { in1, in2, out },
|
||||
9 => Op::Base(in1),
|
||||
99 => Op::Halt,
|
||||
code => return Err(Error::InvalidOpcode { ip: self.ip, code }),
|
||||
})
|
||||
|
@ -143,6 +150,7 @@ impl<I: Input, O: Output> Vm<I, O> {
|
|||
Ok(match mode {
|
||||
0 => Arg::Addr(arg),
|
||||
1 => Arg::Immediate(arg),
|
||||
2 => Arg::Relative(arg),
|
||||
_ => {
|
||||
return Err(Error::InvalidArgMode {
|
||||
ip: self.ip,
|
||||
|
@ -157,6 +165,7 @@ impl<I: Input, O: Output> Vm<I, O> {
|
|||
match arg {
|
||||
Arg::Addr(addr) => self.read(addr),
|
||||
Arg::Immediate(value) => value,
|
||||
Arg::Relative(offset) => self.read(self.base + offset),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -164,6 +173,7 @@ impl<I: Input, O: Output> Vm<I, O> {
|
|||
Ok(match arg {
|
||||
Arg::Addr(addr) => self.write(addr, value),
|
||||
Arg::Immediate(_) => return Err(Error::WriteImmediate { ip: self.ip }),
|
||||
Arg::Relative(offset) => self.write(self.base + offset, value),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -178,6 +188,7 @@ enum Op {
|
|||
Jne { arg: Arg, addr: Arg }, // 6
|
||||
Lt { in1: Arg, in2: Arg, out: Arg }, // 7
|
||||
Eq { in1: Arg, in2: Arg, out: Arg }, // 8
|
||||
Base(Arg), // 9
|
||||
Halt, // 99
|
||||
}
|
||||
|
||||
|
@ -185,6 +196,7 @@ enum Op {
|
|||
enum Arg {
|
||||
Addr(Int),
|
||||
Immediate(Int),
|
||||
Relative(Int),
|
||||
}
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue