mirror of
https://github.com/thib8956/advent-of-code.git
synced 2026-02-27 10:48:14 +00:00
chore: make intcode an installable package
- Move intcode/ from 2019/ folder to the root of the repository - The package is automatically installed with the adventofcode package with `pip install -e .` command
This commit is contained in:
@@ -1,9 +1,4 @@
|
|||||||
# TODO replace PYTHONPATH hack with a proper solution, like making intcode an
|
from adventofcode.intcode import interpret_intcode, Interpreter
|
||||||
# installed module https://stackoverflow.com/a/50194143
|
|
||||||
import sys
|
|
||||||
from pathlib import Path
|
|
||||||
sys.path.append(str(Path(__file__).absolute().parent.parent / "intcode"))
|
|
||||||
from intcode import interpret_intcode, Interpreter
|
|
||||||
|
|
||||||
|
|
||||||
def paint(program, initial_state):
|
def paint(program, initial_state):
|
||||||
|
|||||||
@@ -8,8 +8,7 @@ from pathlib import Path
|
|||||||
from collections import defaultdict, Counter
|
from collections import defaultdict, Counter
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
sys.path.append(str(Path(__file__).absolute().parent.parent / "intcode"))
|
from adventofcode.intcode import interpret_intcode, Interpreter
|
||||||
from intcode import interpret_intcode, Interpreter
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class State:
|
class State:
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
sys.path.append(str(Path(__file__).absolute().parent.parent / "intcode"))
|
|
||||||
|
|
||||||
from itertools import cycle, permutations
|
from itertools import cycle, permutations
|
||||||
from intcode import interpret_intcode, Interpreter
|
from adventofcode.intcode import interpret_intcode, Interpreter
|
||||||
|
|
||||||
def main(inp):
|
def main(inp):
|
||||||
mem = list(map(int, inp.readline().rstrip().split(",")))
|
mem = list(map(int, inp.readline().rstrip().split(",")))
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
# TODO replace PYTHONPATH hack with a proper solution, like making intcode an
|
from adventofcode.intcode import interpret_intcode
|
||||||
# installed module https://stackoverflow.com/a/50194143
|
|
||||||
import sys
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
sys.path.append(str(Path(__file__).absolute().parent.parent / "intcode"))
|
|
||||||
|
|
||||||
from intcode import interpret_intcode
|
|
||||||
|
|
||||||
|
|
||||||
def main(inp):
|
def main(inp):
|
||||||
|
|||||||
53
adventofcode/intcode/README.md
Normal file
53
adventofcode/intcode/README.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# Intcode
|
||||||
|
|
||||||
|
Interpreter for the Intcode programming language used in Advent of Code 2019.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
The package is automatically installed with the adventofcode package:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -e .
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```python
|
||||||
|
from adventofcode.intcode import interpret_intcode, Interpreter
|
||||||
|
|
||||||
|
# Simple execution
|
||||||
|
result = interpret_intcode([1, 0, 0, 0, 99])
|
||||||
|
print(result.memory) # [2, 0, 0, 0, 99]
|
||||||
|
|
||||||
|
# With stdin
|
||||||
|
result = interpret_intcode([3, 0, 99, 0], stdin=[42])
|
||||||
|
print(result.stdout) # [42]
|
||||||
|
|
||||||
|
# For more control, use the Interpreter class
|
||||||
|
interpreter = Interpreter([3, 9, 8, 9, 10, 9, 4, 9, 99, -1, 8])
|
||||||
|
interpreter.stdin = [8]
|
||||||
|
interpreter.interpret()
|
||||||
|
print(interpreter.stdout) # [1]
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
### `interpret_intcode(program, stdin=[])`
|
||||||
|
Execute an Intcode program and return the Interpreter object.
|
||||||
|
|
||||||
|
- `program`: List of integers representing the Intcode program
|
||||||
|
- `stdin`: List of integers to use as input
|
||||||
|
|
||||||
|
### `class Interpreter`
|
||||||
|
Intcode interpreter with more control options.
|
||||||
|
|
||||||
|
- `stdin`: List of integers for input
|
||||||
|
- `stdout`: List of integers for output
|
||||||
|
- `memory`: The program memory
|
||||||
|
- `halted`: Boolean indicating if the program has halted
|
||||||
|
- `interpret(break_on_input=False, break_on_output=True)`: Run the interpreter
|
||||||
|
|
||||||
|
### Enums
|
||||||
|
- `Operation`: ADDITION, MULTIPLICATION, INPUT, OUTPUT, JMP_IF_TRUE, JMP_IF_FALSE, LESS_THAN, EQUALS, BASE, TERMINATION
|
||||||
|
- `Mode`: POSITION, IMMEDIATE, RELATIVE
|
||||||
|
|
||||||
1
adventofcode/intcode/__init__.py
Normal file
1
adventofcode/intcode/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from .intcode import interpret_intcode, Interpreter, Operation, Mode
|
||||||
Reference in New Issue
Block a user