Tic-tac-toe: Difference between revisions

1,945 bytes added ,  3 years ago
Added Tailspin solution
m (→‎{{header|Ruby}}: fix formatting by adding missing ‘<lang ruby>’)
(Added Tailspin solution)
Line 12,711:
Draw
Who do you want to play as ('o' or 'x'):
</pre>
 
=={{header|Tailspin}}==
<lang tailspin>
processor Tic-Tac-Toe
@: [1..9];
 
source isWonOrDone
[$@Tic-Tac-Toe(1..3) -> #, $@Tic-Tac-Toe(4..6) -> #, $@Tic-Tac-Toe(7..9) -> #,
$@Tic-Tac-Toe(1..9:3) -> #, $@Tic-Tac-Toe(2..9:3) -> #, $@Tic-Tac-Toe(3..9:3) -> #,
$@Tic-Tac-Toe([1,5,9]) -> #, $@Tic-Tac-Toe([3,5,7]) -> #
] -> \(
when <=[]?($@Tic-Tac-Toe <~[<1..9>]>)> do 'draw' !
when <~=[]> do $(1) !
\) !
when <[<=$(first)>+ VOID]> do '$(first); wins!'!
end isWonOrDone
 
source validMoves
$@Tic-Tac-Toe -> \[i](<1..9> $ !\) !
end validMoves
 
templates move
when <?($@Tic-Tac-Toe <[<=$.position>]>)> do @Tic-Tac-Toe($.position): $.mark;
$ !
otherwise
'Incorrect move$#10;' -> !OUT::write
end move
 
source showString
'$:1..9:3 -> '$#10;$@Tic-Tac-Toe($..$+2)...;';$#10;' !
end showString
end Tic-Tac-Toe
 
composer toInt
<INT>
end toInt
 
source play
def board: $Tic-Tac-Toe;
@: 'X';
templates getMove
[] -> #
when <=[]> do
$board::showString -> !OUT::write
'$@play; to move $board::validMoves;:$#10;' -> !OUT::write
[{mark: $@play, position: $IN::readline -> toInt} -> board::move] -> #
otherwise
$(1) !
end getMove
 
$getMove -> #
when <{}> do
'$.mark; played $.position;$#10;' -> !OUT::write
@: $@ -> \(<='X'> 'O'! <='O'> 'X' !\);
[$board::isWonOrDone] -> \(
when <=[]> do $getMove!
otherwise '$(1);$#10;' -> !OUT::write
\) -> #
end play
 
$play -> !VOID</lang>
{{out}}
<pre>
 
123
456
789
X to move [1, 2, 3, 4, 5, 6, 7, 8, 9]:
5
X played 5
 
123
4X6
789
O to move [1, 2, 3, 4, 6, 7, 8, 9]:
4
O played 4
 
123
OX6
789
X to move [1, 2, 3, 6, 7, 8, 9]:
1
X played 1
 
X23
OX6
789
O to move [2, 3, 6, 7, 8, 9]:
9
O played 9
 
X23
OX6
78O
X to move [2, 3, 6, 7, 8]:
2
X played 2
 
XX3
OX6
78O
O to move [3, 6, 7, 8]:
8
O played 8
 
XX3
OX6
7OO
X to move [3, 6, 7]:
3
X played 3
X wins!
</pre>
 
Anonymous user