Nim game

You are encouraged to solve this task according to the task description, using any language you may know.
Nim is a simple game where the second player ─── if they know the trick ─── will always win.



The game has only 3 rules:

   start with   12   tokens
   each player takes   1,  2,  or  3   tokens in turn
  the player who takes the last token wins.


To win every time,   the second player simply takes 4 minus the number the first player took.   So if the first player takes 1,   the second takes 3 ─── if the first player takes 2,   the second should take 2 ─── and if the first player takes 3,   the second player will take 1.



Task

Design a simple Nim game where the human player goes first, and the computer always wins. The game should enforce the rules.




BYTE FUNC PlayerTurn(BYTE tokens)
  BYTE t,max
 
  IF tokens<3 THEN
    max=tokens
  ELSE
    max=3
  FI
 
  DO
    PrintF("How many tokens would you like to take (1-%B)? ",max)
    t=InputB()
  UNTIL t>=1 AND t<=max
  OD
  PrintF("Player takes %B tokens.%E",t)
  t=tokens-t
  IF t=0 THEN
    PrintE("Player wins.")
  FI
RETURN (t)
 
BYTE FUNC ComputerTurn(BYTE tokens)
  BYTE t
 
  t=tokens MOD 4
  PrintF("Computer takes %B tokens.%E",t)
  t=tokens-t
  IF t=0 THEN
    PrintE("Computer wins.")
  FI
RETURN (t)
 
PROC Main()
  BYTE tokens=[12],t
  BYTE player=[1]
 
  WHILE tokens>0
  DO
    PrintF("Available tokens: %B%E",tokens)
    IF player THEN
      tokens=PlayerTurn(tokens)
    ELSE
      tokens=ComputerTurn(tokens)
    FI
    player=1-player
  OD
RETURN