Guest User

TicTacToe, revisited

a guest
Jun 30th, 2021
679
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.54 KB | None | 0 0
  1. val K = longArrayOf(
  2.     70320323L, 3776269545455558848L, 5106692820075657L, 6522059812712648770L, 5814642453354577965L,
  3.     1027020759832628608L, 9002849727976455L, 8212599733517910111L, 7793718349913016577L, 146085592623448519L,
  4.     1729710224984639780L, 5234468166645618029L, 11862640801499364L, 5269935331050000536L, 7476254520486161413L,
  5.     1338456232617455302L, 309144500929368792L, 7008551100276283009L, 7837871429671563846L, -6131181776293688662L,
  6.     -6270531672383771958L, -5856180509835875478L, -6130900291653297986L, -6147800516097542406L, -6057436028180189526L,
  7.     -5014008135579637206L, -3122143898056856918L, -6725515837430912349L, -4995994700588864982L, -4611322360682922326L,
  8.     -6147507299173031286L, -6148861914678302038L, -6149653746249880662L, -6149055429270110198L, 768614334257080960L,
  9.     7555743857542605480L, 295736392978979136L, -6143285191705187736L, -5284258747153470806L, -6723968773031022934L,
  10.     -6166929641649214806L, 3072194241450650174L, -6911573723524279675L, 5362285956288962644L, -9104384079812695591L,
  11.     -2636248950953496918L, -8460897373749331327L, -6293753357426573606L, 11451476650L,
  12. )
  13.  
  14. fun str(g: Int, b: Int, s: Int = 7): String {
  15.     var c = 790929830514519072L
  16.     return (0..8).joinToString("") { i ->
  17.         val r = (0..g).fold(emptyList<Int>()) { l, m ->
  18.             val d = (m / 2 + 1..g / 2).fold(b) { b, r -> b / (9 - r * 2) }
  19.             l + ((0..8) - l)[listOf(d % (9 - m), K[m / 6 * 10 + m / 2 * (m / 2) + d / (21 + m / 6 * 11)]
  20.                 .shr(d % (21 + m / 6 * 11) * (3 - m / 6)).mod(9 - m + m % 5 / 3 * 2))[m % 2]]
  21.         }.indexOf(i) % 2
  22.         c -= (r - 1) / 2 * 2097152
  23.         "${c.shr(r * 7 + s).mod(128).toChar()}${c.shr(42 + i % 3 * 7).mod(128).toChar()}"
  24.     }
  25. }
  26.  
  27. fun ask(r: Int): Int {
  28.     println("Enter a number between 1 and ${9 - r}")
  29.     return (0..8 - r).elementAtOrNull((readLine()!!.toIntOrNull() ?: 0) - 1) ?: ask(r)
  30. }
  31.  
  32. fun main() {
  33.     var b = 0
  34.     for (r in 0..8) {
  35.         if (r % 2 == 0) {
  36.             print(str(r - 1, b, 28) + "Where do you wanna place the X? ")
  37.             b = b * (9 - r) + ask(r)
  38.             println(str(r, b))
  39.         } else {
  40.             println("Thinking...\n")
  41.             Thread.sleep(750)
  42.             println(str(r, b))
  43.             if (r / 5L and K[19 - r % 7 * 3 + b / (r / 2 * 11 - 1)].shr(b % (r / 2 * 11 - 1) * (3 - r / 6) + r % 3) > 0) {
  44.                 println("You lost :)")
  45.                 return
  46.             }
  47.             println("Your turn!\n")
  48.             Thread.sleep(750)
  49.         }
  50.     }
  51.     println("Even :(")
  52. }
Advertisement
Add Comment
Please, Sign In to add comment