CoffeeLang

From Esolang
Jump to navigation Jump to search

CoffeeLang An Esoteric Two-Cup Coffee-Themed Stack Language Invented by Harshil Thakur, June 2025

Introduction

BeanLang is an esoteric programming language inspired by the ritual of late-night coding fueled by coffee. Its core model consists of two unbounded stacks, imaginatively called Cup 1 and Cup 2, which mirror the idea of a double-shot coffee machine—brewing separate data “shots” side by side. Each instruction in the language is named after a coffee drink or ingredient, turning otherwise mundane stack operations into playful puns. By juggling two cups of data instead of a single stack, BeanLang makes complex pointer gymnastics unnecessary and keeps your logic as fresh as your next espresso.

Commands

BeanLang’s 14 commands fall into five conceptual categories. In every command name, a suffix of ₁ or ₂ targets Cup 1 or Cup 2; otherwise the command naturally involves both cups.

Stack Manipulation

  • Espresso₁/₂ pushes the integer 1 onto the top of Cup 1 or Cup 2, respectively, providing your basic “coffee shot” of data.
  • Cappuccino₁/₂ duplicates the topmost value in the chosen cup, so you can reuse a shot without consuming it.
  • Ristretto₁/₂ pops and discards the top value from Cup 1 or Cup 2, acting as a quick clean-up of unwanted beans.

Arithmetic Operations

  • Americano pops one value from Cup 1 and one from Cup 2, sums them, and pushes the result back into Cup 1—ideal for both addition and (when Cup 2 holds 1) for subtraction.
  • LatteMacchiato pops one value from each cup, multiplies them, and pushes the product into Cup 2, enabling more advanced numeric routines.

Input/Output

  • Mocha₁/₂ pops the top value from the specified cup and prints it as the corresponding Unicode character.
  • Cortado₁/₂ pops the top value and prints its decimal digits, making it the go-to for numeric output.
  • Drip₁/₂ reads one integer from standard input and pushes it onto Cup 1 or Cup 2, respectively, for interactive programs.

Control Flow

  • Milk₁/₂ pops the top value x from the chosen cup; if x equals 0, it skips the very next instruction, providing a simple zero-check.
  • Sugar <label> performs an unconditional jump to the label `#<label>:` anywhere in the program.
  • <label>: defines a jump target for Sugar, marking positions for loops and branches.

Cross-Cup Transfers

  • Pour transfers the top bean from one cup to the other (pop one cup → push into its partner), enabling you to shuffle values between the two stacks without arithmetic.
  • Foam swaps the top values of Cup 1 and Cup 2 in a single instruction, handy for reordering two adjacent data cells.

Computational Class

BeanLang is Turing-complete, meaning it can simulate any Turing machine. A direct mapping to Brainfuck (BF) illustrates this completeness:
  • “+” / “–” (cell increments/decrements):
In BF, `+` increments the current tape cell. In BeanLang, you push 1 into Cup 1 via Espresso₁ and then run Americano (with Cup 2 holding 1) to add 1. To subtract, simply interpret Cup 2 = 1 as a negative decrement, or swap signage by keeping Cup 2 = −1.
  • “>” / “<” (move tape head):
Treat Cup 1’s top as the current BF cell. To move right, Pour that value into Cup 2, then Pour or Foam from Cup 2 back into Cup 1 the next saved cell. Reverse this sequence to move left, effectively shuttling your tape head.
  • “.” / “,” (I/O):
BF’s `.` outputs a character; BeanLang’s Mocha₁ does the same. BF’s `,` reads a byte; BeanLang’s Drip₁ reads an integer into Cup 1.
  • “[” / “]” (loops):
BF loops while the current cell ≠ 0. BeanLang implements a `while (Cup1 ≠ 0)` loop with:
#loop:
  Milk1         # pop top; if zero, skip next
    Sugar end   #   jump to end
  …loop body…
  Sugar loop    # unconditional jump back
#end:

Example Programs

Hello World

This program pushes each ASCII code for “Hello, World!\n” into Cup 1 and uses Mocha₁ to print:

   HOT
 // Build Cup2 = 1 for all subsequent Americano operations
 Espresso2      // Cup2 = [1]
 // “H” (72)
 Espresso1      // Cup1 = [1], Cup2 = [1]
 Americano      // Cup1 = [2], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [2,2]
 Americano      // Cup1 = [4]
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [4,4]
 Americano      // Cup1 = [8]
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [8,8]
 Americano      // Cup1 = [16]
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [16,16]
 Americano      // Cup1 = [32]
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [32,32]
 Americano      // Cup1 = [64]
 Espresso1      // Cup1 = [1,64]
 Americano      // Cup1 = [65]
 Espresso1      // Cup1 = [1,65]
 Americano      // Cup1 = [66]
 Espresso1      // Cup1 = [1,66]
 Americano      // Cup1 = [67]
 Espresso1      // Cup1 = [1,67]
 Americano      // Cup1 = [68]
 Espresso1      // Cup1 = [1,68]
 Americano      // Cup1 = [69]
 Espresso1      // Cup1 = [1,69]
 Americano      // Cup1 = [70]
 Espresso1      // Cup1 = [1,70]
 Americano      // Cup1 = [71]
 Espresso1      // Cup1 = [1,71]
 Americano      // Cup1 = [72]
 Mocha1         // prints “H”
 // “e” (101)
 // Ensure Cup2 = 1 for every Americano
 Espresso2      // Cup2 = [1]
 // Build 64 by doubling:
 Espresso1      // Cup1 = [1]
 Americano      // Cup1 = [2], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [2,2]
 Americano      // Cup1 = [4], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [4,4]
 Americano      // Cup1 = [8], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [8,8]
 Americano      // Cup1 = [16], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [16,16]
 Americano      // Cup1 = [32], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [32,32]
 Americano      // Cup1 = [64], Cup2 = []
 // Now increment from 64 to 101 (37 steps):
 Espresso1; Americano; Espresso2   // 65
 Espresso1; Americano; Espresso2   // 66
 Espresso1; Americano; Espresso2   // 67
 Espresso1; Americano; Espresso2   // 68
 Espresso1; Americano; Espresso2   // 69
 Espresso1; Americano; Espresso2   // 70
 Espresso1; Americano; Espresso2   // 71
 Espresso1; Americano; Espresso2   // 72
 Espresso1; Americano; Espresso2   // 73
 Espresso1; Americano; Espresso2   // 74
 Espresso1; Americano; Espresso2   // 75
 Espresso1; Americano; Espresso2   // 76
 Espresso1; Americano; Espresso2   // 77
 Espresso1; Americano; Espresso2   // 78
 Espresso1; Americano; Espresso2   // 79
 Espresso1; Americano; Espresso2   // 80
 Espresso1; Americano; Espresso2   // 81
 Espresso1; Americano; Espresso2   // 82
 Espresso1; Americano; Espresso2   // 83
 Espresso1; Americano; Espresso2   // 84
 Espresso1; Americano; Espresso2   // 85
 Espresso1; Americano; Espresso2   // 86
 Espresso1; Americano; Espresso2   // 87
 Espresso1; Americano; Espresso2   // 88
 Espresso1; Americano; Espresso2   // 89
 Espresso1; Americano; Espresso2   // 90
 Espresso1; Americano; Espresso2   // 91
 Espresso1; Americano; Espresso2   // 92
 Espresso1; Americano; Espresso2   // 93
 Espresso1; Americano; Espresso2   // 94
 Espresso1; Americano; Espresso2   // 95
 Espresso1; Americano; Espresso2   // 96
 Espresso1; Americano; Espresso2   // 97
 Espresso1; Americano; Espresso2   // 98
 Espresso1; Americano; Espresso2   // 99
 Espresso1; Americano; Espresso2   // 100
 Espresso1; Americano; Espresso2   // 101
 Mocha1         // pop & print ASCII 101 → “e”
 
// Print l
// Ensure Cup2 = 1 for every Americano
 Espresso2      // Cup2 = [1]
 // Build 64 by doubling:
 Espresso1      // Cup1 = [1]
 Americano      // Cup1 = [2], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [2,2]
 Americano      // Cup1 = [4], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [4,4]
 Americano      // Cup1 = [8], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [8,8]
 Americano      // Cup1 = [16], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [16,16]
 Americano      // Cup1 = [32], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [32,32]
 Americano      // Cup1 = [64], Cup2 = []
 // Now increment from 64 to 108 (44 times):
 //   Espresso1; Americano; Espresso2
 Espresso1
 Americano
 Espresso2   // 65
 Espresso1
 Americano
 Espresso2   // 66
 Espresso1
 Americano
 Espresso2   // 67
 Espresso1
 Americano
 Espresso2   // 68
 Espresso1
 Americano
 Espresso2   // 69
 Espresso1
 Americano
 Espresso2   // 70
 Espresso1
 Americano
 Espresso2   // 71
 Espresso1
 Americano
 Espresso2   // 72
 Espresso1
 Americano
 Espresso2   // 73
 Espresso1
 Americano
 Espresso2   // 74
 Espresso1
 Americano
 Espresso2   // 75
 Espresso1
 Americano
 Espresso2   // 76
 Espresso1
 Americano
 Espresso2   // 77
 Espresso1
 Americano
 Espresso2   // 78
 Espresso1
 Americano
 Espresso2   // 79
 Espresso1
 Americano
 Espresso2   // 80
 Espresso1
 Americano
 Espresso2   // 81
 Espresso1
 Americano
 Espresso2   // 82
 Espresso1
 Americano
 Espresso2   // 83
 Espresso1
 Americano
 Espresso2   // 84
 Espresso1
 Americano
 Espresso2   // 85
 Espresso1
 Americano
 Espresso2   // 86
 Espresso1
 Americano
 Espresso2   // 87
 Espresso1
 Americano
 Espresso2   // 88
 Espresso1
 Americano
 Espresso2   // 89
 Espresso1
 Americano
 Espresso2   // 90
 Espresso1
 Americano
 Espresso2   // 91
 Espresso1
 Americano
 Espresso2   // 92
 Espresso1
 Americano
 Espresso2   // 93
 Espresso1
 Americano
 Espresso2   // 94
 Espresso1
 Americano
 Espresso2   // 95
 Espresso1
 Americano
 Espresso2   // 96
 Espresso1
 Americano
 Espresso2   // 97
 Espresso1
 Americano
 Espresso2   // 98
 Espresso1
 Americano
 Espresso2   // 99
 Espresso1
 Americano
 Espresso2   // 100
 Espresso1
 Americano
 Espresso2   // 101
 Espresso1
 Americano
 Espresso2   // 102
 Espresso1
 Americano
 Espresso2   // 103
 Espresso1
 Americano
 Espresso2   // 104
 Espresso1
 Americano
 Espresso2   // 105
 Espresso1
 Americano
 Espresso2   // 106
 Espresso1
 Americano
 Espresso2   // 107
 Espresso1
 Americano
 Espresso2   // 108
 Mocha1         // pop & print ASCII 108 → “l”
 
 // Print l
 // Ensure Cup2 = 1 for every Americano
 Espresso2      // Cup2 = [1]
 // Build 64 by doubling:
 Espresso1      // Cup1 = [1]
 Americano      // Cup1 = [2], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [2,2]
 Americano      // Cup1 = [4], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [4,4]
 Americano      // Cup1 = [8], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [8,8]
 Americano      // Cup1 = [16], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [16,16]
 Americano      // Cup1 = [32], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [32,32]
 Americano      // Cup1 = [64], Cup2 = []
 // Now increment from 64 to 108 (44 times):
 //   Espresso1; Americano; Espresso2
 Espresso1
 Americano
 Espresso2   // 65
 Espresso1
 Americano
 Espresso2   // 66
 Espresso1
 Americano
 Espresso2   // 67
 Espresso1
 Americano
 Espresso2   // 68
 Espresso1
 Americano
 Espresso2   // 69
 Espresso1
 Americano
 Espresso2   // 70
 Espresso1
 Americano
 Espresso2   // 71
 Espresso1
 Americano
 Espresso2   // 72
 Espresso1
 Americano
 Espresso2   // 73
 Espresso1
 Americano
 Espresso2   // 74
 Espresso1
 Americano
 Espresso2   // 75
 Espresso1
 Americano
 Espresso2   // 76
 Espresso1
 Americano
 Espresso2   // 77
 Espresso1
 Americano
 Espresso2   // 78
 Espresso1
 Americano
 Espresso2   // 79
 Espresso1
 Americano
 Espresso2   // 80
 Espresso1
 Americano
 Espresso2   // 81
 Espresso1
 Americano
 Espresso2   // 82
 Espresso1
 Americano
 Espresso2   // 83
 Espresso1
 Americano
 Espresso2   // 84
 Espresso1
 Americano
 Espresso2   // 85
 Espresso1
 Americano
 Espresso2   // 86
 Espresso1
 Americano
 Espresso2   // 87
 Espresso1
 Americano
 Espresso2   // 88
 Espresso1
 Americano
 Espresso2   // 89
 Espresso1
 Americano
 Espresso2   // 90
 Espresso1
 Americano
 Espresso2   // 91
 Espresso1
 Americano
 Espresso2   // 92
 Espresso1
 Americano
 Espresso2   // 93
 Espresso1
 Americano
 Espresso2   // 94
 Espresso1
 Americano
 Espresso2   // 95
 Espresso1
 Americano
 Espresso2   // 96
 Espresso1
 Americano
 Espresso2   // 97
 Espresso1
 Americano
 Espresso2   // 98
 Espresso1
 Americano
 Espresso2   // 99
 Espresso1
 Americano
 Espresso2   // 100
 Espresso1
 Americano
 Espresso2   // 101
 Espresso1
 Americano
 Espresso2   // 102
 Espresso1
 Americano
 Espresso2   // 103
 Espresso1
 Americano
 Espresso2   // 104
 Espresso1
 Americano
 Espresso2   // 105
 Espresso1
 Americano
 Espresso2   // 106
 Espresso1
 Americano
 Espresso2   // 107
 Espresso1
 Americano
 Espresso2   // 108
 Mocha1         // pop & print ASCII 108 → “l”
 // print o
 // Ensure Cup2 = 1 for every Americano
 Espresso2      // Cup2 = [1]
 // Build 64 by doubling:
 Espresso1      // Cup1 = [1]
 Americano      // Cup1 = [2], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [2,2]
 Americano      // Cup1 = [4], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [4,4]
 Americano      // Cup1 = [8], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [8,8]
 Americano      // Cup1 = [16], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [16,16]
 Americano      // Cup1 = [32], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [32,32]
 Americano      // Cup1 = [64], Cup2 = []
 // Now increment from 64 to 111 (47 steps):
 //   Espresso1; Americano; Espresso2
 Espresso1; Americano; Espresso2   // 65
 Espresso1; Americano; Espresso2   // 66
 Espresso1; Americano; Espresso2   // 67
 Espresso1; Americano; Espresso2   // 68
 Espresso1; Americano; Espresso2   // 69
 Espresso1; Americano; Espresso2   // 70
 Espresso1; Americano; Espresso2   // 71
 Espresso1; Americano; Espresso2   // 72
 Espresso1; Americano; Espresso2   // 73
 Espresso1; Americano; Espresso2   // 74
 Espresso1; Americano; Espresso2   // 75
 Espresso1; Americano; Espresso2   // 76
 Espresso1; Americano; Espresso2   // 77
 Espresso1; Americano; Espresso2   // 78
 Espresso1; Americano; Espresso2   // 79
 Espresso1; Americano; Espresso2   // 80
 Espresso1; Americano; Espresso2   // 81
 Espresso1; Americano; Espresso2   // 82
 Espresso1; Americano; Espresso2   // 83
 Espresso1; Americano; Espresso2   // 84
 Espresso1; Americano; Espresso2   // 85
 Espresso1; Americano; Espresso2   // 86
 Espresso1; Americano; Espresso2   // 87
 Espresso1; Americano; Espresso2   // 88
 Espresso1; Americano; Espresso2   // 89
 Espresso1; Americano; Espresso2   // 90
 Espresso1; Americano; Espresso2   // 91
 Espresso1; Americano; Espresso2   // 92
 Espresso1; Americano; Espresso2   // 93
 Espresso1; Americano; Espresso2   // 94
 Espresso1; Americano; Espresso2   // 95
 Espresso1; Americano; Espresso2   // 96
 Espresso1; Americano; Espresso2   // 97
 Espresso1; Americano; Espresso2   // 98
 Espresso1; Americano; Espresso2   // 99
 Espresso1; Americano; Espresso2   // 100
 Espresso1; Americano; Espresso2   // 101
 Espresso1; Americano; Espresso2   // 102
 Espresso1; Americano; Espresso2   // 103
 Espresso1; Americano; Espresso2   // 104
 Espresso1; Americano; Espresso2   // 105
 Espresso1; Americano; Espresso2   // 106
 Espresso1; Americano; Espresso2   // 107
 Espresso1; Americano; Espresso2   // 108
 Espresso1; Americano; Espresso2   // 109
 Espresso1; Americano; Espresso2   // 110
 Espresso1; Americano; Espresso2   // 111
 Mocha1         // pop & print ASCII 111 → “o”
 
 // print one space
 // Ensure Cup2 = 1 for every Americano
 Espresso2      // Cup2 = [1]
 // Build 32 via doubling:
 Espresso1      // Cup1 = [1]
 Americano      // Cup1 = [2], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [2,2]
 Americano      // Cup1 = [4], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [4,4]
 Americano      // Cup1 = [8], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [8,8]
 Americano      // Cup1 = [16], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [16,16]
 Americano      // Cup1 = [32], Cup2 = []
 Mocha1         // pop & print ASCII 32 → “ ”
 
 // print W
 // Prepare Cup2 = 1 for all increments
 Espresso2      // Cup2 = [1]
 // Start Cup1 at 1
 Espresso1      // Cup1 = [1]
 // Increment Cup1 by 1 until it reaches 87 (ASCII for ‘W’)
 Espresso2; Americano   //  2
 Espresso2; Americano   //  3
 Espresso2; Americano   //  4
 Espresso2; Americano   //  5
 Espresso2; Americano   //  6
 Espresso2; Americano   //  7
 Espresso2; Americano   //  8
 Espresso2; Americano   //  9
 Espresso2; Americano   // 10
 Espresso2; Americano   // 11
 Espresso2; Americano   // 12
 Espresso2; Americano   // 13
 Espresso2; Americano   // 14
 Espresso2; Americano   // 15
 Espresso2; Americano   // 16
 Espresso2; Americano   // 17
 Espresso2; Americano   // 18
 Espresso2; Americano   // 19
 Espresso2; Americano   // 20
 Espresso2; Americano   // 21
 Espresso2; Americano   // 22
 Espresso2; Americano   // 23
 Espresso2; Americano   // 24
 Espresso2; Americano   // 25
 Espresso2; Americano   // 26
 Espresso2; Americano   // 27
 Espresso2; Americano   // 28
 Espresso2; Americano   // 29
 Espresso2; Americano   // 30
 Espresso2; Americano   // 31
 Espresso2; Americano   // 32
 Espresso2; Americano   // 33
 Espresso2; Americano   // 34
 Espresso2; Americano   // 35
 Espresso2; Americano   // 36
 Espresso2; Americano   // 37
 Espresso2; Americano   // 38
 Espresso2; Americano   // 39
 Espresso2; Americano   // 40
 Espresso2; Americano   // 41
 Espresso2; Americano   // 42
 Espresso2; Americano   // 43
 Espresso2; Americano   // 44
 Espresso2; Americano   // 45
 Espresso2; Americano   // 46
 Espresso2; Americano   // 47
 Espresso2; Americano   // 48
 Espresso2; Americano   // 49
 Espresso2; Americano   // 50
 Espresso2; Americano   // 51
 Espresso2; Americano   // 52
 Espresso2; Americano   // 53
 Espresso2; Americano   // 54
 Espresso2; Americano   // 55
 Espresso2; Americano   // 56
 Espresso2; Americano   // 57
 Espresso2; Americano   // 58
 Espresso2; Americano   // 59
 Espresso2; Americano   // 60
 Espresso2; Americano   // 61
 Espresso2; Americano   // 62
 Espresso2; Americano   // 63
 Espresso2; Americano   // 64
 Espresso2; Americano   // 65
 Espresso2; Americano   // 66
 Espresso2; Americano   // 67
 Espresso2; Americano   // 68
 Espresso2; Americano   // 69
 Espresso2; Americano   // 70
 Espresso2; Americano   // 71
 Espresso2; Americano   // 72
 Espresso2; Americano   // 73
 Espresso2; Americano   // 74
 Espresso2; Americano   // 75
 Espresso2; Americano   // 76
 Espresso2; Americano   // 77
 Espresso2; Americano   // 78
 Espresso2; Americano   // 79
 Espresso2; Americano   // 80
 Espresso2; Americano   // 81
 Espresso2; Americano   // 82
 Espresso2; Americano   // 83
 Espresso2; Americano   // 84
 Espresso2; Americano   // 85
 Espresso2; Americano   // 86
 Espresso2; Americano   // 87
 Mocha1         // pop & print ASCII 87 → “W”
 // print o
 // Ensure Cup2 = 1 for every Americano
 Espresso2      // Cup2 = [1]
 // Build 64 by doubling:
 Espresso1      // Cup1 = [1]
 Americano      // Cup1 = [2], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [2,2]
 Americano      // Cup1 = [4], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [4,4]
 Americano      // Cup1 = [8], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [8,8]
 Americano      // Cup1 = [16], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [16,16]
 Americano      // Cup1 = [32], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [32,32]
 Americano      // Cup1 = [64], Cup2 = []
 // Now increment from 64 to 111 (47 steps):
 //   Espresso1; Americano; Espresso2
 Espresso1; Americano; Espresso2   // 65
 Espresso1; Americano; Espresso2   // 66
 Espresso1; Americano; Espresso2   // 67
 Espresso1; Americano; Espresso2   // 68
 Espresso1; Americano; Espresso2   // 69
 Espresso1; Americano; Espresso2   // 70
 Espresso1; Americano; Espresso2   // 71
 Espresso1; Americano; Espresso2   // 72
 Espresso1; Americano; Espresso2   // 73
 Espresso1; Americano; Espresso2   // 74
 Espresso1; Americano; Espresso2   // 75
 Espresso1; Americano; Espresso2   // 76
 Espresso1; Americano; Espresso2   // 77
 Espresso1; Americano; Espresso2   // 78
 Espresso1; Americano; Espresso2   // 79
 Espresso1; Americano; Espresso2   // 80
 Espresso1; Americano; Espresso2   // 81
 Espresso1; Americano; Espresso2   // 82
 Espresso1; Americano; Espresso2   // 83
 Espresso1; Americano; Espresso2   // 84
 Espresso1; Americano; Espresso2   // 85
 Espresso1; Americano; Espresso2   // 86
 Espresso1; Americano; Espresso2   // 87
 Espresso1; Americano; Espresso2   // 88
 Espresso1; Americano; Espresso2   // 89
 Espresso1; Americano; Espresso2   // 90
 Espresso1; Americano; Espresso2   // 91
 Espresso1; Americano; Espresso2   // 92
 Espresso1; Americano; Espresso2   // 93
 Espresso1; Americano; Espresso2   // 94
 Espresso1; Americano; Espresso2   // 95
 Espresso1; Americano; Espresso2   // 96
 Espresso1; Americano; Espresso2   // 97
 Espresso1; Americano; Espresso2   // 98
 Espresso1; Americano; Espresso2   // 99
 Espresso1; Americano; Espresso2   // 100
 Espresso1; Americano; Espresso2   // 101
 Espresso1; Americano; Espresso2   // 102
 Espresso1; Americano; Espresso2   // 103
 Espresso1; Americano; Espresso2   // 104
 Espresso1; Americano; Espresso2   // 105
 Espresso1; Americano; Espresso2   // 106
 Espresso1; Americano; Espresso2   // 107
 Espresso1; Americano; Espresso2   // 108
 Espresso1; Americano; Espresso2   // 109
 Espresso1; Americano; Espresso2   // 110
 Espresso1; Americano; Espresso2   // 111
 Mocha1         // pop & print ASCII 111 → “o”
 
 // Prepare Cup2 = 1 for every Americano
 Espresso2      // Cup2 = [1]
 // Start Cup1 at 1 (ASCII 1)
 Espresso1      // Cup1 = [1]
 // Increment Cup1 by 1 until it reaches 114 (ASCII for ‘r’):
 Espresso2; Americano   // Cup1 = [2]
 Espresso2; Americano   // Cup1 = [3]
 Espresso2; Americano   // Cup1 = [4]
 Espresso2; Americano   // Cup1 = [5]
 Espresso2; Americano   // Cup1 = [6]
 Espresso2; Americano   // Cup1 = [7]
 Espresso2; Americano   // Cup1 = [8]
 Espresso2; Americano   // Cup1 = [9]
 Espresso2; Americano   // Cup1 = [10]
 Espresso2; Americano   // Cup1 = [11]
 Espresso2; Americano   // Cup1 = [12]
 Espresso2; Americano   // Cup1 = [13]
 Espresso2; Americano   // Cup1 = [14]
 Espresso2; Americano   // Cup1 = [15]
 Espresso2; Americano   // Cup1 = [16]
 Espresso2; Americano   // Cup1 = [17]
 Espresso2; Americano   // Cup1 = [18]
 Espresso2; Americano   // Cup1 = [19]
 Espresso2; Americano   // Cup1 = [20]
 Espresso2; Americano   // Cup1 = [21]
 Espresso2; Americano   // Cup1 = [22]
 Espresso2; Americano   // Cup1 = [23]
 Espresso2; Americano   // Cup1 = [24]
 Espresso2; Americano   // Cup1 = [25]
 Espresso2; Americano   // Cup1 = [26]
 Espresso2; Americano   // Cup1 = [27]
 Espresso2; Americano   // Cup1 = [28]
 Espresso2; Americano   // Cup1 = [29]
 Espresso2; Americano   // Cup1 = [30]
 Espresso2; Americano   // Cup1 = [31]
 Espresso2; Americano   // Cup1 = [32]
 Espresso2; Americano   // Cup1 = [33]
 Espresso2; Americano   // Cup1 = [34]
 Espresso2; Americano   // Cup1 = [35]
 Espresso2; Americano   // Cup1 = [36]
 Espresso2; Americano   // Cup1 = [37]
 Espresso2; Americano   // Cup1 = [38]
 Espresso2; Americano   // Cup1 = [39]
 Espresso2; Americano   // Cup1 = [40]
 Espresso2; Americano   // Cup1 = [41]
 Espresso2; Americano   // Cup1 = [42]
 Espresso2; Americano   // Cup1 = [43]
 Espresso2; Americano   // Cup1 = [44]
 Espresso2; Americano   // Cup1 = [45]
 Espresso2; Americano   // Cup1 = [46]
 Espresso2; Americano   // Cup1 = [47]
 Espresso2; Americano   // Cup1 = [48]
 Espresso2; Americano   // Cup1 = [49]
 Espresso2; Americano   // Cup1 = [50]
 Espresso2; Americano   // Cup1 = [51]
 Espresso2; Americano   // Cup1 = [52]
 Espresso2; Americano   // Cup1 = [53]
 Espresso2; Americano   // Cup1 = [54]
 Espresso2; Americano   // Cup1 = [55]
 Espresso2; Americano   // Cup1 = [56]
 Espresso2; Americano   // Cup1 = [57]
 Espresso2; Americano   // Cup1 = [58]
 Espresso2; Americano   // Cup1 = [59]
 Espresso2; Americano   // Cup1 = [60]
 Espresso2; Americano   // Cup1 = [61]
 Espresso2; Americano   // Cup1 = [62]
 Espresso2; Americano   // Cup1 = [63]
 Espresso2; Americano   // Cup1 = [64]
 Espresso2; Americano   // Cup1 = [65]
 Espresso2; Americano   // Cup1 = [66]
 Espresso2; Americano   // Cup1 = [67]
 Espresso2; Americano   // Cup1 = [68]
 Espresso2; Americano   // Cup1 = [69]
 Espresso2; Americano   // Cup1 = [70]
 Espresso2; Americano   // Cup1 = [71]
 Espresso2; Americano   // Cup1 = [72]
 Espresso2; Americano   // Cup1 = [73]
 Espresso2; Americano   // Cup1 = [74]
 Espresso2; Americano   // Cup1 = [75]
 Espresso2; Americano   // Cup1 = [76]
 Espresso2; Americano   // Cup1 = [77]
 Espresso2; Americano   // Cup1 = [78]
 Espresso2; Americano   // Cup1 = [79]
 Espresso2; Americano   // Cup1 = [80]
 Espresso2; Americano   // Cup1 = [81]
 Espresso2; Americano   // Cup1 = [82]
 Espresso2; Americano   // Cup1 = [83]
 Espresso2; Americano   // Cup1 = [84]
 Espresso2; Americano   // Cup1 = [85]
 Espresso2; Americano   // Cup1 = [86]
 Espresso2; Americano   // Cup1 = [87]
 Espresso2; Americano   // Cup1 = [88]
 Espresso2; Americano   // Cup1 = [89]
 Espresso2; Americano   // Cup1 = [90]
 Espresso2; Americano   // Cup1 = [91]
 Espresso2; Americano   // Cup1 = [92]
 Espresso2; Americano   // Cup1 = [93]
 Espresso2; Americano   // Cup1 = [94]
 Espresso2; Americano   // Cup1 = [95]
 Espresso2; Americano   // Cup1 = [96]
 Espresso2; Americano   // Cup1 = [97]
 Espresso2; Americano   // Cup1 = [98]
 Espresso2; Americano   // Cup1 = [99]
 Espresso2; Americano   // Cup1 = [100]
 Espresso2; Americano   // Cup1 = [101]
 Espresso2; Americano   // Cup1 = [102]
 Espresso2; Americano   // Cup1 = [103]
 Espresso2; Americano   // Cup1 = [104]
 Espresso2; Americano   // Cup1 = [105]
 Espresso2; Americano   // Cup1 = [106]
 Espresso2; Americano   // Cup1 = [107]
 Espresso2; Americano   // Cup1 = [108]
 Espresso2; Americano   // Cup1 = [109]
 Espresso2; Americano   // Cup1 = [110]
 Espresso2; Americano   // Cup1 = [111]
 Espresso2; Americano   // Cup1 = [112]
 Espresso2; Americano   // Cup1 = [113]
 Espresso2; Americano   // Cup1 = [114]
 Mocha1         // pop & print ASCII 114 → “r”
// Print l
// Ensure Cup2 = 1 for every Americano
 Espresso2      // Cup2 = [1]
 // Build 64 by doubling:
 Espresso1      // Cup1 = [1]
 Americano      // Cup1 = [2], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [2,2]
 Americano      // Cup1 = [4], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [4,4]
 Americano      // Cup1 = [8], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [8,8]
 Americano      // Cup1 = [16], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [16,16]
 Americano      // Cup1 = [32], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [32,32]
 Americano      // Cup1 = [64], Cup2 = []
 // Now increment from 64 to 108 (44 times):
 //   Espresso1; Americano; Espresso2
 Espresso1
 Americano
 Espresso2   // 65
 Espresso1
 Americano
 Espresso2   // 66
 Espresso1
 Americano
 Espresso2   // 67
 Espresso1
 Americano
 Espresso2   // 68
 Espresso1
 Americano
 Espresso2   // 69
 Espresso1
 Americano
 Espresso2   // 70
 Espresso1
 Americano
 Espresso2   // 71
 Espresso1
 Americano
 Espresso2   // 72
 Espresso1
 Americano
 Espresso2   // 73
 Espresso1
 Americano
 Espresso2   // 74
 Espresso1
 Americano
 Espresso2   // 75
 Espresso1
 Americano
 Espresso2   // 76
 Espresso1
 Americano
 Espresso2   // 77
 Espresso1
 Americano
 Espresso2   // 78
 Espresso1
 Americano
 Espresso2   // 79
 Espresso1
 Americano
 Espresso2   // 80
 Espresso1
 Americano
 Espresso2   // 81
 Espresso1
 Americano
 Espresso2   // 82
 Espresso1
 Americano
 Espresso2   // 83
 Espresso1
 Americano
 Espresso2   // 84
 Espresso1
 Americano
 Espresso2   // 85
 Espresso1
 Americano
 Espresso2   // 86
 Espresso1
 Americano
 Espresso2   // 87
 Espresso1
 Americano
 Espresso2   // 88
 Espresso1
 Americano
 Espresso2   // 89
 Espresso1
 Americano
 Espresso2   // 90
 Espresso1
 Americano
 Espresso2   // 91
 Espresso1
 Americano
 Espresso2   // 92
 Espresso1
 Americano
 Espresso2   // 93
 Espresso1
 Americano
 Espresso2   // 94
 Espresso1
 Americano
 Espresso2   // 95
 Espresso1
 Americano
 Espresso2   // 96
 Espresso1
 Americano
 Espresso2   // 97
 Espresso1
 Americano
 Espresso2   // 98
 Espresso1
 Americano
 Espresso2   // 99
 Espresso1
 Americano
 Espresso2   // 100
 Espresso1
 Americano
 Espresso2   // 101
 Espresso1
 Americano
 Espresso2   // 102
 Espresso1
 Americano
 Espresso2   // 103
 Espresso1
 Americano
 Espresso2   // 104
 Espresso1
 Americano
 Espresso2   // 105
 Espresso1
 Americano
 Espresso2   // 106
 Espresso1
 Americano
 Espresso2   // 107
 Espresso1
 Americano
 Espresso2   // 108
 Mocha1         // pop & print ASCII 108 → “l”
 
 // print d
 // Prepare Cup2 = 1 for every Americano
 Espresso2      // Cup2 = [1]
 // Build 64 by doubling:
 Espresso1      // Cup1 = [1]
 Americano      // Cup1 = [2], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [2,2]
 Americano      // Cup1 = [4], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [4,4]
 Americano      // Cup1 = [8], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [8,8]
 Americano      // Cup1 = [16], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [16,16]
 Americano      // Cup1 = [32], Cup2 = []
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [32,32]
 Americano      // Cup1 = [64], Cup2 = []
 // Now increment from 64 to 100 (36 steps):
 Espresso1; Americano; Espresso2   // 65
 Espresso1; Americano; Espresso2   // 66
 Espresso1; Americano; Espresso2   // 67
 Espresso1; Americano; Espresso2   // 68
 Espresso1; Americano; Espresso2   // 69
 Espresso1; Americano; Espresso2   // 70
 Espresso1; Americano; Espresso2   // 71
 Espresso1; Americano; Espresso2   // 72
 Espresso1; Americano; Espresso2   // 73
 Espresso1; Americano; Espresso2   // 74
 Espresso1; Americano; Espresso2   // 75
 Espresso1; Americano; Espresso2   // 76
 Espresso1; Americano; Espresso2   // 77
 Espresso1; Americano; Espresso2   // 78
 Espresso1; Americano; Espresso2   // 79
 Espresso1; Americano; Espresso2   // 80
 Espresso1; Americano; Espresso2   // 81
 Espresso1; Americano; Espresso2   // 82
 Espresso1; Americano; Espresso2   // 83
 Espresso1; Americano; Espresso2   // 84
 Espresso1; Americano; Espresso2   // 85
 Espresso1; Americano; Espresso2   // 86
 Espresso1; Americano; Espresso2   // 87
 Espresso1; Americano; Espresso2   // 88
 Espresso1; Americano; Espresso2   // 89
 Espresso1; Americano; Espresso2   // 90
 Espresso1; Americano; Espresso2   // 91
 Espresso1; Americano; Espresso2   // 92
 Espresso1; Americano; Espresso2   // 93
 Espresso1; Americano; Espresso2   // 94
 Espresso1; Americano; Espresso2   // 95
 Espresso1; Americano; Espresso2   // 96
 Espresso1; Americano; Espresso2   // 97
 Espresso1; Americano; Espresso2   // 98
 Espresso1; Americano; Espresso2   // 99
 Espresso1; Americano; Espresso2   // 100
 Mocha1         // pop & print ASCII 100 → “d”
 // print !
 // Ensure Cup2 = 1 for every Americano
 Espresso2      // Cup2 = [1]
 // Build 2
 Espresso1      // Cup1 = [1]
 Americano      // Cup1 = [2], Cup2 = []
 // Build 4
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [2,2]
 Americano      // Cup1 = [4], Cup2 = []
 // Build 8
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [4,4]
 Americano      // Cup1 = [8], Cup2 = []
 // Build 16
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [8,8]
 Americano      // Cup1 = [16], Cup2 = []
 // Build 32
 Espresso2      // Cup2 = [1]
 Cappuccino1    // Cup1 = [16,16]
 Americano      // Cup1 = [32], Cup2 = []
 // Increment to 33
 Espresso2      // Cup2 = [1]
 Espresso1      // Cup1 = [1,32]
 Americano      // Cup1 = [33]
 Mocha1         // pop & print ASCII 33 → “!”
COOL


Countdown Timer

This program counts down from 5 to 1, printing each number, then terminates:

HOT
  // Build Cup2 = 1
  Espresso2      // Cup2=[1]
  // Build Cup1 = 5 by iteratively adding 1 via Americano
  Espresso1      // Cup1=[1], Cup2=[1]
  Americano      // Cup1=[2], Cup2=[]
  Espresso2      // Cup2=[1]
  Espresso1      // Cup1=[1,2], Cup2=[1]
  Americano      // Cup1=[3], Cup2=[]
  // …repeat until Cup1=[5]…
loop:
  Cortado1       // Pop & print current Cup1 value
  Americano      // Pop both; push (Cup1−Cup2) → decrement
  Milk1          // Pop new Cup1; if zero, skip next
    Sugar end    //   Exit when Cup1 hits 0
  Sugar loop     //   Otherwise, repeat
#end:
  COOL           // End of program