Clean Room implementation of the backend of SpaceChem (https://www.zachtronics.com/spacechem).
Project description
SChem
https://pypi.org/project/schem/. Install with pip install schem
Clean Room implementation of the backend of SpaceChem (https://www.zachtronics.com/spacechem).
Usage (CLI)
python -m schem [-h] [--version] [-l LEVEL_FILE] [--max-cycles MAX_CYCLES]
[--check-precog] [--max-precog-check-cycles MAX_PRECOG_CHECK_CYCLES]
[--seed SEED] [--hash-states HASH_STATES]
[--export] [--no-run] [--strict]
[--json | --verbose] [--debug [DEBUG]]
[solution_files ...]
E.g. python -m schem
will validate the cycles-reactors-symbols score of any solution export(s) in the user's clipboard. See python -m schem --help
for details.
Usage (python)
Supposing level_export
, solution_export
are strings as exported by SpaceChem CE:
from schem import Level, Solution
# Load a solution
solution = Solution(solution_export) # Auto-use appropriate official level
solution = Solution(solution_export, level=level_export) # Custom level
solution = Solution(solution_export, level=Level(level_export)) # Alternative
# Run a solution
solution.run()
# => Score(cycles=45, reactors=1, symbols=14)
# Check the expected score that was in the export's metadata
solution.expected_score
# => Score(cycles=44, reactors=1, symbols=14)
# Reset the run state of a solution
solution.reset()
# Validate that a solution matched its expected score
solution.validate()
# =/> ScoreError("[Of Pancakes and Spaceships] 44-1-14 "Cycles" by Zig: Expected 44 cycles but got 45.")
# Check if a solution uses precognition
solution.is_precognitive() # slow
# => False
# Bundle method for calling validate() if expected score is present, else run(), optionally checking precog,
# and returning a dict of all this info and any error
solution.evaluate()
# => {"level_name": "Tunnels III",
# "resnet_id": (1, 1, 3), # Volume, Issue, Puzzle
# "author": "Zig",
# "cycles": 244,
# "reactors": 1,
# "symbols": 14,
# "solution_name": "symbols",
# "error": ScoreError("[Tunnels III] 243-1-14 \"symbols\" by Zig: Expected 243 cycles but got 244.")
#}
solution.evaluate(check_precog=True)
# => {"level_name": "Challenge: Going Green",
# "author": "Zig",
# "cycles: 3578,
# "reactors": 1,
# "symbols": 103,
# "solution_name": "assumes 2nd input",
# "precog": true,
# "precog_explanation": "Solution is precognitive; failed whenever molecule 2 was Hydrogen Sulfide, for 9 such
# appearances (whereas solution success rate was otherwise 100%)."
#}
# Re-export the solution. Sorts export lines to ensure uniqueness
solution.export_str()
# => "SOLUTION:..."
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
schem-0.34.1.tar.gz
(250.9 kB
view details)
Built Distribution
schem-0.34.1-py3-none-any.whl
(208.0 kB
view details)
File details
Details for the file schem-0.34.1.tar.gz
.
File metadata
- Download URL: schem-0.34.1.tar.gz
- Upload date:
- Size: 250.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90b4dfe375f7b66d1f0db5bf4007337819a78cf07ef1a4a8db59a96de3bc04e5 |
|
MD5 | 5320557597f5895b99c8198ffe38c09a |
|
BLAKE2b-256 | 06f552a8a0da810704e3d478dd31bf1b63f21fd346206b14903d1e2044505f15 |
File details
Details for the file schem-0.34.1-py3-none-any.whl
.
File metadata
- Download URL: schem-0.34.1-py3-none-any.whl
- Upload date:
- Size: 208.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9993cf2069feb6d67c9694af022f0e19e316bcd3a3d369f9a6d4790575c4098b |
|
MD5 | 13bfe35d3bdaee683c4a6fa87c1515e1 |
|
BLAKE2b-256 | a8ceea3c2083efd0849b02ab7e9e46149872d887edf1b4099e90dae7d03866ef |