Deal cards for FreeCell: Difference between revisions
Content added Content deleted
m (→{{header|Run BASIC}}: typos) |
(Added Kotlin) |
||
Line 1,662: | Line 1,662: | ||
} |
} |
||
</lang> |
</lang> |
||
=={{header|Kotlin}}== |
|||
<lang scala>// version 1.1.3 |
|||
class Lcg(val a: Long, val c: Long, val m: Long, val d: Long, val s: Long) { |
|||
private var state = s |
|||
fun nextInt(): Long { |
|||
state = (a * state + c) % m |
|||
return state / d |
|||
} |
|||
} |
|||
const val CARDS = "A23456789TJQK" |
|||
const val SUITS = "♣♦♥♠" |
|||
fun deal(): Array<String?> { |
|||
val cards = arrayOfNulls<String>(52) |
|||
for (i in 0 until 52) { |
|||
val card = CARDS[i / 4] |
|||
val suit = SUITS[i % 4] |
|||
cards[i] = "$card$suit" |
|||
} |
|||
return cards |
|||
} |
|||
fun game(n: Int) { |
|||
require(n > 0) |
|||
println("Game #$n:") |
|||
val msc = Lcg(214013, 2531011, 1 shl 31, 1 shl 16, n.toLong()) |
|||
val cards = deal() |
|||
for (m in 52 downTo 1) { |
|||
val index = (msc.nextInt() % m).toInt() |
|||
val temp = cards[index] |
|||
cards[index] = cards[m - 1] |
|||
print("$temp ") |
|||
if ((53 - m) % 8 == 0) println() |
|||
} |
|||
println("\n") |
|||
} |
|||
fun main(args: Array<String>) { |
|||
game(1) |
|||
game(617) |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Game #1: |
|||
J♦ 2♦ 9♥ J♣ 5♦ 7♥ 7♣ 5♥ |
|||
K♦ K♣ 9♠ 5♠ A♦ Q♣ K♥ 3♥ |
|||
2♠ K♠ 9♦ Q♦ J♠ A♠ A♥ 3♣ |
|||
4♣ 5♣ T♠ Q♥ 4♥ A♣ 4♦ 7♠ |
|||
3♠ T♦ 4♠ T♥ 8♥ 2♣ J♥ 7♦ |
|||
6♦ 8♠ 8♦ Q♠ 6♣ 3♦ 8♣ T♣ |
|||
6♠ 9♣ 2♥ 6♥ |
|||
Game #617: |
|||
7♦ A♦ 5♣ 3♠ 5♠ 8♣ 2♦ A♥ |
|||
T♦ 7♠ Q♦ A♣ 6♦ 8♥ A♠ K♥ |
|||
T♥ Q♣ 3♥ 9♦ 6♠ 8♦ 3♦ T♣ |
|||
K♦ 5♥ 9♠ 3♣ 8♠ 7♥ 4♦ J♠ |
|||
4♣ Q♠ 9♣ 9♥ 7♣ 6♥ 2♣ 2♠ |
|||
4♠ T♠ 2♥ 5♦ J♣ 6♣ J♥ Q♥ |
|||
J♦ K♠ K♣ 4♥ |
|||
</pre> |
|||
=={{header|Logo}}== |
=={{header|Logo}}== |