Neurons and levels
This commit is contained in:
parent
69e690029d
commit
348b8d9a27
|
@ -0,0 +1,53 @@
|
|||
import sequtils, strutils
|
||||
import neurons
|
||||
|
||||
type
|
||||
Level* = ref object of RootObj
|
||||
neurons*: seq[Neuron]
|
||||
ClassicLevel* = ref object of Level
|
||||
width*: Positive
|
||||
RectangularLevel* = ClassicLevel
|
||||
|
||||
proc `[]`*(level: Level, index: Natural): Neuron =
|
||||
level.neurons[index]
|
||||
|
||||
method `$`*(level: Level): string {.base.} =
|
||||
level.neurons.mapIt($it).join(" ")
|
||||
|
||||
proc `[]`*(level: RectangularLevel, y: Natural, x: Natural): Neuron =
|
||||
level.neurons[y * level.width + x]
|
||||
|
||||
proc height*(level: RectangularLevel): Natural =
|
||||
level.neurons.len div level.width
|
||||
|
||||
method `$`*(level: ClassicLevel): string =
|
||||
for y in 0..<level.height:
|
||||
if y != 0:
|
||||
result.add "\n"
|
||||
for x in 0..<level.width:
|
||||
if x != 0:
|
||||
let
|
||||
slash = level[y, x-1] in level[y-1, x].connected
|
||||
backslash = level[y, x] in level[y-1, x-1].connected
|
||||
if slash:
|
||||
if backslash:
|
||||
result.add "X"
|
||||
else:
|
||||
result.add "/"
|
||||
else:
|
||||
if backslash:
|
||||
result.add "\\"
|
||||
else:
|
||||
result.add " "
|
||||
if level[y, x] in level[y-1, x].connected:
|
||||
result.add "|"
|
||||
else:
|
||||
result.add " "
|
||||
result.add "\n"
|
||||
for x in 0..<level.width:
|
||||
if x != 0:
|
||||
if level[y, x] in level[y, x-1].connected:
|
||||
result.add "-"
|
||||
else:
|
||||
result.add " "
|
||||
result.add $level[y, x]
|
|
@ -0,0 +1,15 @@
|
|||
type
|
||||
Neuron* = ref object of RootObj
|
||||
number*: Natural
|
||||
adjacent*: seq[Neuron]
|
||||
connected*: seq[Neuron]
|
||||
|
||||
proc init(neuron: Neuron, number: Natural = 0) =
|
||||
neuron.number = number
|
||||
|
||||
proc newNeuron*(number: Natural = 0): Neuron =
|
||||
new result
|
||||
result.init(number)
|
||||
|
||||
method `$`*(neuron: Neuron): string {.base.} =
|
||||
$neuron.number
|
|
@ -0,0 +1,10 @@
|
|||
import ../levels, ../neurons
|
||||
|
||||
let
|
||||
n0 = Neuron(number: 1)
|
||||
n1 = Neuron(number: 1, connected: @[n0])
|
||||
n2 = Neuron(number: 2, connected: @[n0, n1])
|
||||
l = Level(neurons: @[n0, n1, n2])
|
||||
c = ClassicLevel(neurons: @[n2, n1, n0, Neuron(number: 0)], width: 2)
|
||||
doAssert $l == "1 1 2"
|
||||
doAssert $c == "2-1\n|/ \n1 0"
|
|
@ -0,0 +1,4 @@
|
|||
import ../neurons
|
||||
|
||||
let n = Neuron(number: 3)
|
||||
doAssert $n == "3"
|
Loading…
Reference in New Issue