Skip to main content

UPI Basics

Solver input and output

Solver is a program that communicates via standard I/O.


Solver responds to commands from viewer.

  • Command from viewer is a single line sent to solver's Standard Input but empty lines and lines starting with hash character (#) are ignored.
  • Each command from solver gets a response from a solver.
    • The client can send many commands without waiting for a reply from solver
    • The solver will answer all commands in the same order in which they are sent to the solver.
  • Solver's reponse can be one or more lines or an error.
  • When running solver from another program it's recommended to call set_end_string END command at the start. The solver will print the END string after each response.

If the given command doesn't request data of any kind solver will respond with <command> ok!.

Other communication

Solver sometimes can print to stdout lines which are not command responses. Notably they are:

  • Lines sent by solver at the startup.
PioSOLVER-edge 2.0 (Jan 01 2021, 00:00:01)
(c) Piotr Lopusiewicz
registered to [email protected]

it's recommended to send some command to a solver (e.g. set_end_string END or is_ready) and start parsing communication after receiving expected response (e.g. is_ready ok!)

  • Solver Updates

Solver calculation is run in the background and it prints solving updates every now and then. It can be either single line of a from:

SOLVER: stopped (requested)

or a multiline message starting with a line SOLVER: and ending with END string. It's guaranteed that it will not overlap with command responses.

running time: 52.977
EV OOP: 181.767
EV IP: 293.233
OOP's MES: 242.008
IP's MES: 343.408
Exploitable for: 55.209