Generate random chess position: Difference between revisions
Content added Content deleted
(Added Kotlin) |
(Scala contribution added.) |
||
Line 764: | Line 764: | ||
</pre> |
</pre> |
||
=={{header|Scala}}== |
|||
{{Out}}Best seen running in your browser [https://scastie.scala-lang.org/zdG9NQ4YSaShFRU7AS31GA Scastie (remote JVM)]. |
|||
<lang Scala>import scala.math.abs |
|||
import scala.util.Random |
|||
object RandomFen extends App { |
|||
val rand = new Random |
|||
private def createFen = { |
|||
val grid = Array.ofDim[Char](8, 8) |
|||
def placeKings(grid: Array[Array[Char]]): Unit = { |
|||
var r1, c1, r2, c2 = 0 |
|||
do { |
|||
r1 = rand.nextInt(8) |
|||
c1 = rand.nextInt(8) |
|||
r2 = rand.nextInt(8) |
|||
c2 = rand.nextInt(8) |
|||
} while (r1 == r2 || abs(r1 - r2) <= 1 || abs(c1 - c2) <= 1) |
|||
grid(r1)(c1) = 'K' |
|||
grid(r2)(c2) = 'k' |
|||
} |
|||
def placePieces(grid: Array[Array[Char]], |
|||
pieces: String, |
|||
isPawn: Boolean): Unit = { |
|||
val numToPlace = rand.nextInt(pieces.length) |
|||
for (n <- 0 until numToPlace) { |
|||
var r, c = 0 |
|||
do { |
|||
r = rand.nextInt(8) |
|||
c = rand.nextInt(8) |
|||
} while (grid(r)(c) != 0 || (isPawn && (r == 7 || r == 0))) |
|||
grid(r)(c) = pieces(n) |
|||
} |
|||
} |
|||
def toFen(grid: Array[Array[Char]]) = { |
|||
val fen = new StringBuilder |
|||
var countEmpty = 0 |
|||
for (r <- grid.indices) { |
|||
for (c <- grid.indices) { |
|||
val ch = grid(r)(c) |
|||
print(f"${if (ch == 0) '.' else ch}%2c ") |
|||
if (ch == 0) countEmpty += 1 |
|||
else { |
|||
if (countEmpty > 0) { |
|||
fen.append(countEmpty) |
|||
countEmpty = 0 |
|||
} |
|||
fen.append(ch) |
|||
} |
|||
} |
|||
if (countEmpty > 0) { |
|||
fen.append(countEmpty) |
|||
countEmpty = 0 |
|||
} |
|||
fen.append("/") |
|||
println() |
|||
} |
|||
fen.append(" w - - 0 1").toString |
|||
} |
|||
placeKings(grid) |
|||
placePieces(grid, "PPPPPPPP", isPawn = true) |
|||
placePieces(grid, "pppppppp", isPawn = true) |
|||
placePieces(grid, "RNBQBNR", isPawn = false) |
|||
placePieces(grid, "rnbqbnr", isPawn = false) |
|||
toFen(grid) |
|||
} |
|||
println(createFen) |
|||
}</lang> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |
||
{{trans|perl6}} |
{{trans|perl6}} |
||
Line 811: | Line 886: | ||
r2R3N/Q1n5/1N6/1N1R1RBB/8/Rn1b1r2/3QbNN1/2n3rQ w - - 0 1 |
r2R3N/Q1n5/1N6/1N1R1RBB/8/Rn1b1r2/3QbNN1/2n3rQ w - - 0 1 |
||
5b2/1R6/r4b1q/3Q4/8/8/8/5b2 w - - 0 1 |
5b2/1R6/r4b1q/3Q4/8/8/8/5b2 w - - 0 1 |
||
8/1BQ5/8/1q6/1q6/3B1Rq1/5b2/3N3R w - - 0 1 |
8/1BQ5/8/1q6/1q6/3B1Rq1/5b2/3N3R w - - 0 1</pre> |
||
</pre> |