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:
2026-02-17 19:11:50 +01:00
parent 97c7b63217
commit f783ff0d6d
9 changed files with 58 additions and 20 deletions

View File

@@ -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):

View File

@@ -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:

View File

@@ -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(",")))

View File

@@ -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):

View 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

View File

@@ -0,0 +1 @@
from .intcode import interpret_intcode, Interpreter, Operation, Mode