60 lines
1.7 KiB
Plaintext
60 lines
1.7 KiB
Plaintext
Function noCelda(celda As String) As String
|
|
Return Iif(celda = "1", "0", "1")
|
|
End Function
|
|
|
|
Function invierteBits(regla As Integer) As String
|
|
Dim reglaBits As String = ""
|
|
For i As Integer = 0 To 7
|
|
reglaBits &= (regla Shr i) And 1
|
|
Next
|
|
Return reglaBits
|
|
End Function
|
|
|
|
Sub ecaInfinito(celdas As String, regla As Integer, n As Integer, ret() As String)
|
|
Dim As Integer i, j, k, indice
|
|
Dim reglaBits As String = invierteBits(regla)
|
|
Dim vecinoSgte(7) As String
|
|
For i = 0 To 7
|
|
vecinoSgte(i) = Mid(reglaBits, i + 1, 1)
|
|
Next
|
|
|
|
For i = 0 To n - 1
|
|
ret(i) = celdas
|
|
celdas = noCelda(Mid(celdas, 1, 1)) & noCelda(Mid(celdas, 1, 1)) & celdas & noCelda(Mid(celdas, Len(celdas), 1)) & noCelda(Mid(celdas, Len(celdas), 1))
|
|
Dim celdasNuevas As String = ""
|
|
For j = 0 To Len(celdas) - 3
|
|
indice = 0
|
|
For k = 0 To 2
|
|
indice = indice * 2 + Val(Mid(celdas, j + k + 1, 1))
|
|
Next
|
|
celdasNuevas &= vecinoSgte(indice)
|
|
Next
|
|
celdas = celdasNuevas
|
|
Next
|
|
End Sub
|
|
|
|
Sub Evolucionar(lineas As Integer)
|
|
Dim As Integer i, j, k, regla
|
|
Dim reglas(1) As Integer = {90, 30}
|
|
|
|
Dim s(24) As String
|
|
Dim salida As String
|
|
|
|
For i = 0 To 1
|
|
regla = reglas(i)
|
|
Print !"\nRule: "; regla; " ("; invierteBits(regla); ")"
|
|
ecaInfinito("1", regla, lineas, s())
|
|
For j = 0 To lineas - 1
|
|
salida = ""
|
|
For k = 1 To Len(s(j))
|
|
salida &= Iif(Mid(s(j), k, 1) = "0", ".", "#")
|
|
Next
|
|
Print j + 1; ": "; Space(lineas - j - 1); salida
|
|
Next
|
|
Next
|
|
End Sub
|
|
|
|
Evolucionar(25)
|
|
|
|
Sleep
|