Neurons and levels

This commit is contained in:
xigoi 2020-07-05 16:42:05 +02:00
parent 69e690029d
commit 348b8d9a27
4 changed files with 82 additions and 0 deletions

53
levels.nim Normal file
View File

@ -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]

15
neurons.nim Normal file
View File

@ -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

10
tests/levels.nim Normal file
View File

@ -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"

4
tests/neurons.nim Normal file
View File

@ -0,0 +1,4 @@
import ../neurons
let n = Neuron(number: 3)
doAssert $n == "3"