# `gno.land/p/moul/x/daily/rps/v0` **The rock-paper-scissors move**: `Parse`, `Move.String`, `Beats`. Stateless, so every realm that plays the game agrees on what `"r"` means and who wins. ```go import "gno.land/p/moul/x/daily/rps/v0" m, ok := rps.Parse(" Paper ") // rps.Paper, true; "p" works too m.String() // "paper" rps.Beats(rps.Paper, rps.Rock) // 1: the first move wins (0 tie, 2 the second wins) ``` `Move` is ordered rock, paper, scissors so that `(a - b) mod 3` is the verdict. **Consumers:** [`rps`](https://github.com/moul/gno-contracts/tree/main/r/moul/x/daily/rps), [`rpsmatch`](https://github.com/moul/gno-contracts/tree/main/r/moul/x/daily/rpsmatch), [`rpsoracle`](https://github.com/moul/gno-contracts/tree/main/r/moul/x/daily/rpsoracle), [`rpsduel`](https://github.com/moul/gno-contracts/tree/main/r/moul/x/daily/rpsduel), each of which carried its own copy of this logic before. --- Part of **[moul/gno-contracts](https://github.com/moul/gno-contracts)** โ€” moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage. > ๐Ÿงช **Highly experimental โ€” potentially vibe-coded.** Not audited; may break, change, or be removed at any time. Do not use with anything of value. Full disclaimer: [DISCLAIMER](https://github.com/moul/gno-contracts/blob/main/DISCLAIMER.md).