Skip to main content

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)

Uploaded Source

Built Distribution

schem-0.34.1-py3-none-any.whl (208.0 kB view details)

Uploaded Python 3

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

Hashes for schem-0.34.1.tar.gz
Algorithm Hash digest
SHA256 90b4dfe375f7b66d1f0db5bf4007337819a78cf07ef1a4a8db59a96de3bc04e5
MD5 5320557597f5895b99c8198ffe38c09a
BLAKE2b-256 06f552a8a0da810704e3d478dd31bf1b63f21fd346206b14903d1e2044505f15

See more details on using hashes here.

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

Hashes for schem-0.34.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9993cf2069feb6d67c9694af022f0e19e316bcd3a3d369f9a6d4790575c4098b
MD5 13bfe35d3bdaee683c4a6fa87c1515e1
BLAKE2b-256 a8ceea3c2083efd0849b02ab7e9e46149872d887edf1b4099e90dae7d03866ef

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page