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.




BEGIN # play Nim #
    # gets a single character answer from standin and returns it #
    PROC answer = ( STRING prompt )CHAR:
         BEGIN
             STRING s;
             INT left := 0;
             WHILE print( ( prompt, "> " ) );
                   read( ( s, newline ) );
                   left      := LWB s;
                   INT right := UPB s;
                   WHILE IF left  > right THEN FALSE ELSE s[ left  ] = " " FI DO left  +:= 1 OD;
                   WHILE IF right < left  THEN FALSE ELSE s[ right ] = " " FI DO right -:= 1 OD;
                   left /= right
             DO
                 print( ( "Please reply with a single character", newline ) )
             OD;
             s[ left ]
         END # answer # ;
    # play one game #
    INT    tokens := 12;
    STRING suffix := "";
    WHILE
        CHAR  user;
        WHILE user := answer( "There are "
                            + whole( tokens, 0 )
                            + " tokens"
                            + suffix
                            + ", how many do you want to take (1, 2 or 3)"
                            );
              user /= "1" AND user /= "2" AND user /= "3"
        DO
            print( ( "please answer 1, 2 or 3", newline ) )
        OD;
        INT move = ABS user - ABS "0";
        print( ( "I take ", whole( 4 - move, 0 ), newline ) );
        suffix  := " left";
        tokens -:= 4;
        tokens > 0
    DO SKIP OD;
    print( ( "I win!", newline ) )
END