Солитер (алгоритм)

Многие помнят игру на Windows XP под названием солитер (FreeCell). Код ниже является алгоритмом данного пасьянса. Для корректного отображения в консоли , следует выбрать нужный шрифт , поддерживающий отображение карточных мастей.

Платформы: Windows , Linux
Автор кода: неизвестен

soliter.png 

 

 
Dim Shared As String*13 s_suits = Chr(5,4,3,6), s_nums = "A23456789TJQK"

#DEFINE RMAX32 &h7FFFFFFF

Dim Shared As Integer seed = 1

Function  rnd_() As Integer
    seed = (seed * 214013 + 2531011) And RMAX32
    Return seed Shr 16
End Function

Sub srnd(x As Integer) 
    seed = x
End Sub
 
Sub show(c As Integer Ptr)
    Dim As Integer i
    While i < 52
        Print Chr(s_nums[*c \ 4]);Chr(s_suits[*c Mod 4]),
        i+=1
        If ((i Mod 8) = 0 orelse i = 52) Then Print
    c+=1
    Wend    
End Sub



 
Sub deal(s As Integer, t As Integer Ptr)

    Dim As Integer i, j
    srnd(s)
 
    For i = 0 To 51
        t[i] = 51 - i
    Next
    
    For i = 0 To 50
        j = 51 - rnd_ Mod (52 - i)
        s = t[i]
        t[i] = t[j]
        t[j] = s
    Next
End Sub
 

Dim As Integer s, card(51)
    s = 617
 
    deal(s, @card(0))
    Print "Hand ="; s
    show(@card(0))
Sleep