Mascarpone Joust

From Esolang
Jump to navigation Jump to search

Mascarpone Joust is a programming game by User:BoundedBeans inspired by Core War and BF Joust.

All normal Mascarpone commands are allowed other than:

. , @ 0 1

Storage and execution

There are two Mascarpone programs. They each either share or have a stack and either share or have a current interpreter. There are two main variations: SS Mascarpone Joust (stack-sharing) and IS Mascarpone Joust (interpreter-sharing). Both programs loop back to the start when finished.

Win/Loss conditions

A program loses when:

  • it pops the string "Goodbye world!" (in the way where running "[Goodbye world!]" or "'['G'o'o'd'b'y'e' 'w'o'r'l'd'!']" with the default interpreter would push it onto the stack) for some operation. In IS it is determined by which interpreter initiated the command or operation)
  • its current interpreter becomes completely full of no-ops (SS only)
  • it pushes the string "Halting..." onto the stack (this could be achieved in SS by hiding an operation inside of an interpreter on the stack that does this, to be accidentally executed by its interpreter, or in IS by hiding an operation that the attacker never uses but the victim relies on. In IS it is determined by which interpreter initiated the command or operation)

A program wins when the other loses.

Possible strategies

  • (SS) Hide the string "Halting..." onto the stack, pushing characters with some swapping to insure it doesn't lose itself
  • (SS) Find a vulnerability where the opponent deifies an interpreter, have the program force it to deify an no-op one instead (this cannot be achieved by 0 or 1, since they are banned)
  • (SS) Push "Goodbye world!" and time it so that the opponent pops it for *
  • (IS) Hide an operation inside of the interpreter which causes the opponent to execute something that causes them to lose
  • (IS) Hide an operation inside of the interpreter which pushes an operation that the opponent will execute
  • (IS) Hide an operation inside of the interpreter which pushes a string that the opponent will turn into an operation and execute
  • (IS) Perform a command that sets up the opponents command to meet a losing condition, but do not run that command yourself

See also