2023-11-09 15:17:55 +01:00
|
|
|
f1 := 0
|
|
|
|
f2 := 0
|
|
|
|
f3 := 0
|
|
|
|
f4 := 0
|
|
|
|
f5 := 0
|
|
|
|
f6 := 0
|
|
|
|
f7 := 0
|
|
|
|
f8 := 0
|
|
|
|
f9 := 0
|
|
|
|
player := false
|
|
|
|
|
|
|
|
load_color := clr -> "echo".run_command(("-n", "-e", clr)).try((
|
|
|
|
(s, o, e) -> o
|
|
|
|
e -> ""
|
|
|
|
))
|
|
|
|
|
|
|
|
c_reset := "\\033[0m".load_color
|
|
|
|
c_green := "\\033[92m".load_color
|
|
|
|
c_blue := "\\033[94m".load_color
|
|
|
|
c_gray := "\\033[90m".load_color
|
|
|
|
c_magenta := "\\033[95m".load_color
|
|
|
|
|
|
|
|
pbf := (n, o) -> if n.eq(0)
|
|
|
|
(c_gray, o, c_reset).concat
|
|
|
|
else if n.signum.eq(1)
|
|
|
|
(c_blue, "x", c_reset).concat
|
|
|
|
else
|
|
|
|
(c_green, "o", c_reset).concat
|
|
|
|
|
|
|
|
print_board := board -> {
|
|
|
|
((f1, f2, f3), (f4, f5, f6), (f7, f8, f9)).enumerate.for_each((i, (a, b, c)) -> {
|
|
|
|
(c_gray, "|---|---|---|", c_reset).concat.println
|
|
|
|
m := 2.subtract(i).product(3).sum(1)
|
|
|
|
n := m.sum(1)
|
|
|
|
o := m.sum(2)
|
|
|
|
(
|
|
|
|
c_gray, "| ", (a, m).pbf,
|
|
|
|
c_gray, " | ", (b, n).pbf,
|
|
|
|
c_gray, " | ", (c, o).pbf,
|
|
|
|
c_gray, " |"
|
|
|
|
).concat.println
|
|
|
|
})
|
|
|
|
(c_gray, "|---|---|---|", c_reset).concat.println
|
|
|
|
}
|
|
|
|
|
|
|
|
check_board := () -> {
|
2023-11-09 15:22:00 +01:00
|
|
|
if (f1, f2, f3, f4, f5, f6, f7, f8, f9).filter(f -> f.eq(0)).len.eq(0) 0
|
2023-11-09 15:17:55 +01:00
|
|
|
else if (f1.eq(0).eq(false), (f1, f2, f3).eq).all f1
|
|
|
|
else if (f4.eq(0).eq(false), (f4, f5, f6).eq).all f4
|
|
|
|
else if (f7.eq(0).eq(false), (f7, f8, f9).eq).all f7
|
|
|
|
else if (f1.eq(0).eq(false), (f1, f4, f7).eq).all f1
|
|
|
|
else if (f2.eq(0).eq(false), (f2, f5, f8).eq).all f2
|
|
|
|
else if (f3.eq(0).eq(false), (f3, f6, f9).eq).all f3
|
|
|
|
else if (f1.eq(0).eq(false), (f1, f5, f9).eq).all f1
|
|
|
|
else if (f3.eq(0).eq(false), (f3, f5, f7).eq).all f3
|
|
|
|
}
|
|
|
|
|
2024-02-22 20:21:11 +01:00
|
|
|
loop {
|
2023-11-09 15:17:55 +01:00
|
|
|
(if player c_blue else c_green, "Turn: ", if player "x" else "o", c_reset).concat.println
|
|
|
|
().print_board
|
2024-02-22 20:21:11 +01:00
|
|
|
loop {
|
2023-11-09 15:17:55 +01:00
|
|
|
(if player c_blue else c_green, "> ", c_gray).concat.print
|
|
|
|
input := ().read_line.trim
|
|
|
|
input.parse_int.try((
|
2024-02-22 20:21:11 +01:00
|
|
|
(field) -> {
|
2023-11-09 15:17:55 +01:00
|
|
|
if (field.gt(0), field.ltoe(9)).all {
|
|
|
|
(l, m, r) := if field.gt(6) (&f1, &f2, &f3) else if field.gt(3) (&f4, &f5, &f6) else (&f7, &f8, &f9)
|
|
|
|
col := field.subtract(1).modulo(3)
|
|
|
|
f := if col.eq(0) l else if col.eq(1) m else r
|
|
|
|
if f.deref.eq(0) {
|
|
|
|
f = if player 1 else -1
|
|
|
|
(())
|
|
|
|
} else "field already occupied".println
|
|
|
|
} else {
|
|
|
|
"number must be 1 <= n <= 9".println
|
|
|
|
}
|
|
|
|
}
|
|
|
|
() -> "not a number!".println
|
|
|
|
))
|
2024-02-22 20:21:11 +01:00
|
|
|
}
|
2023-11-09 15:17:55 +01:00
|
|
|
&player = player.eq(false)
|
|
|
|
().check_board.try((
|
|
|
|
() -> (),
|
|
|
|
winner -> {
|
|
|
|
"".println
|
|
|
|
().print_board
|
|
|
|
if winner.eq(1) {
|
|
|
|
(c_blue, "The winner is X!", c_reset).concat.println
|
|
|
|
} else if winner.eq(-1) {
|
|
|
|
(c_green, "The winner is O!", c_reset).concat.println
|
|
|
|
} else {
|
|
|
|
(c_magenta, "Tie", c_reset).concat.println
|
|
|
|
}
|
|
|
|
(())
|
|
|
|
}
|
|
|
|
))
|
2024-02-22 20:21:11 +01:00
|
|
|
}
|