Simplex (part 1)

(def ^:const starting-marbles 1)
(defn get-move []
  (rand-int (+ starting-marbles 1)))
(defn find-winner [a-move b-move]
  (if (> a-move b-move)
    :a
    (if (< a-move b-move)
      :b
      :tie)))
(defn play []
  (let [a-move (get-move)
        b-move (get-move)]
    (println (format "player a move: %d\nplayer b move: %d" a-move b-move))
    (find-winner a-move b-move)))
(play)
0.3s

Lessons Learned

As I'm trying to learn and improve my Clojure skills, here are some lessons I learned while writing this code:

Appendix

I originally wrote the code for this game in Python:

from typing import Optional, Tuple
starting_marbles = 10
def calculate_payout(player_a_move, player_b_move) -> Tuple[int]:
    money = ((starting_marbles - player_a_move), (starting_marbles - player_b_move))
    if player_a_move > player_b_move:
        return (money[0] + 100, money[1])
    elif player_a_move < player_b_move:
        return (money[0], money[1] + 100)
    else:
        return (money[0] + 50, money[1] + 50)
def get_marbles_to_place() -> int:
    """Determine how many numbers to play."""
    # these values are just demonstrative... we'll update them later
    player_a_marbles = 9
    player_b_marbles = 10
    return player_a_marbles, player_b_marbles
def play():
    player_a_move, player_b_move = get_marbles_to_place()
    return calculate_payout(player_a_move, player_b_move)
play()
0.0s
Runtimes (2)