gt

module
v0.4.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 26, 2026 License: MIT

README

gt

A simple AI-engineered command-line percentage calculator written in Go. No frontier AI models from Claude, OpenAI, Google, ec, were used for this project. The ones used were:

  • Qwen 3 Coder Next
  • GPT OSS 120b
  • Nemotron 3 Super
  • My human brain

This is a toy project created to experience with local LLMs and how good they are at their jobs.

     ┌────────────────────────────────┐
     │       G T Calculator           │
     │                                │
     │       (o.o)                    │
     │      /|   | \   5  6  *        │
     │     / |   |  \  _______        │
     │    /  |   |   \ / G T  \       │
     │   (   |   |    )%  +   |       │
     │    \  |   |  / | RPN   |       │
     │     \ |   | /  | Calc  |       │
     │      \|___|/   |_______|       │
     │        Result: 30              │
     └────────────────────────────────┘

Installation

go install codeberg.org/snonux/gt/cmd/gt@latest

Or using mage:

mage install

Usage

gt supports various percentage calculation formats and RPN (Reverse Polish Notation) stack calculations.

Percentage Calculations
Calculate X% of Y
gt '20% of 150'
# Output:
# 20.00% of 150.00 = 30.00
#   Steps: (20.00 / 100) * 150.00 = 0.20 * 150.00 = 30.00

gt 'what is 20% of 150'
# Output:
# 20.00% of 150.00 = 30.00
#   Steps: (20.00 / 100) * 150.00 = 0.20 * 150.00 = 30.00
Find what percentage X is of Y
gt '30 is what % of 150'
# Output:
# 30.00 is 20.00% of 150.00
#   Steps: (30.00 / 150.00) * 100 = 0.20 * 100 = 20.00%
Find the whole when X is Y% of it
gt '30 is 20% of what'
# Output:
# 30.00 is 20.00% of 150.00
#   Steps: (30.00 / 20.00) * 100 = 1.50 * 100 = 150.00
RPN (Reverse Polish Notation) Calculations

RPN (postfix notation) uses a stack-based approach where operators follow their operands. No parentheses needed!

Basic Arithmetic
gt '3 4 +'           # 3 + 4 = 7
# → 7

gt '3 4 -'           # 3 - 4 = -1
# → -1

gt '5 6 *'           # 5 * 6 = 30
# → 30

gt '20 4 /'          # 20 / 4 = 5
# → 5

gt '2 3 ^'           # 2^3 = 8
# → 8

gt '10 3 %'          # 10 % 3 = 1 (modulo)
# → 1
Expression Chaining
gt '3 4 + 4 4 - *'   # (3+4) * (4-4) = 0
# → 0

gt '1 2 + 3 *'       # (1+2) * 3 = 9
# → 9
Variables
gt 'x 5 ='           # Assign x = 5
# → x = 5

gt 'x 5 = x x +'     # x + x = 10
# → 10

gt 'pi 3.14159 = pi 2 *'  # 2 * π
# → 6.28318

# Note: Variable assignment works in bare mode (e.g., "gt 'x 5 ='").
# gt 'x 5 = x x +'  (works)
Variable Management
gt 'vars'            # List all variables
# x = 5

gt 'delete x'        # Delete a specific variable
# Variable removed

gt 'clear'           # Clear all variables
# All variables cleared
Working with Variables

Variables persist across commands in REPL mode but are cleared when exiting. In bare mode (single command), variables are only available within that command's execution context.

Example:

# In bare mode, variables don't persist between commands
gt 'x 5 ='           # Assign x = 5 (in this command only)
# → x = 5

gt x               # x is not defined in this separate command
# Error: variable not found

# In REPL mode, variables persist
> x 5 =            # Assign x = 5
> x                # x is still 5
5
> clear            # Clear all variables
> x                # x is now undefined
# Error: variable not found
Stack Operations
gt '1 2 3 dup'       # Duplicate top value
# → 1 2 3 3

gt '1 2 swap'        # Swap top two values
# → 2 1

gt '1 2 3 pop'       # Remove top value
# → 1 2

gt '1 2 3 show'      # Show stack without modifying
# → 1 2 3
REPL Mode Notes

In REPL mode, RPN operations maintain persistent state between commands. This allows you to build up values on the stack across multiple commands.

Example REPL session:

> 2 3 4 +        # Push 2, 3, 4; add last two
2 7
> +                  # Add top two: 2 + 7 = 9
9
> 5 *                # Multiply by 5: 9 * 5 = 45
45

To show the current stack without modifying it:

> show               # Show current stack state
45

Boolean-to-Number Coercion

Boolean values are automatically coerced to numbers when used in arithmetic operations:

  • true is treated as 1
  • false is treated as 0

This enables mixed boolean-numeric expressions:

gt 5 3 == 1 +      # 5 == 3 is false (0), 0 + 1 = 1
# → 1

gt 0 false +       # false is 0, 0 + 0 = 0
# → 0

gt true 2 *        # true is 1, 1 * 2 = 2
# → 2

gt 9 3 > 4 5 < +   # 9 > 3 is true (1), 4 < 5 is true (1), 1 + 1 = 2
# → 2

Note: The boolean result is shown as true/false when printed, but when used as an operand it behaves as the corresponding numeric value.

Hyper Operators

Hyper operators work on all values on the stack simultaneously:

gt '1 2 3 4 5 [+]'    # Sum all: 1+2+3+4+5 = 15
# → 15

gt '2 3 4 [*]'        # Multiply all: 2*3*4 = 24
# → 24

gt '10 3 2 [-]'       # 10 - 3 - 2 = 5
# → 5

gt '100 5 2 [/]'      # 100 / 5 / 2 = 10
# → 10

gt '2 3 2 [^]'        # (2^3)^2 = 64
# → 64

gt '100 7 3 [%]'      # 100 % 7 % 3 = 2
# → 2

Building

Using mage:

mage build

Or using go directly:

go build -o gt ./cmd/gt

Testing

mage test

Or for RPN-specific tests:

mage testRPN

Rational Number Mode (Optional)

The calculator supports precise rational number calculations using Go's *big.Rat type. By default, calculations use float64 for performance.

Enabling Rational Mode

In REPL mode, you can switch between float64 and rational number modes:

> rat on           # Enable rational number mode
Rational mode enabled

> rat off          # Disable rational number mode (default)
Rational mode disabled (using float64)

> rat toggle       # Switch to the other mode
Rational mode enabled

When rational mode is enabled:

  • Results are calculated with arbitrary precision
  • Output is displayed as a decimal approximation
  • Use rat off to return to standard float64 calculations

License

See LICENSE file for details.

Directories

Path Synopsis
cmd
gt command
Package gt provides a command-line percentage calculator with RPN support.
Package gt provides a command-line percentage calculator with RPN support.
Package internal provides version information for the gt application.
Package internal provides version information for the gt application.
rpn

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL