Add ntdb
This commit is contained in:
parent
d7379bbb1d
commit
6d67ce11fb
BIN
ntdb/ntdb.exe
Normal file
BIN
ntdb/ntdb.exe
Normal file
Binary file not shown.
14
ntdb/ntdb.nimble
Normal file
14
ntdb/ntdb.nimble
Normal file
@ -0,0 +1,14 @@
|
||||
# Package
|
||||
|
||||
version = "0.1.0"
|
||||
author = "Heav"
|
||||
description = "A database of cellular automata patterns that can be searched in various ways."
|
||||
license = "GPL-3.0-or-later"
|
||||
srcDir = "src"
|
||||
installExt = @["nim"]
|
||||
bin = @["ntdb"]
|
||||
|
||||
|
||||
# Dependencies
|
||||
|
||||
requires "nim >= 1.4.6"
|
8
ntdb/src/ntdb.nim
Normal file
8
ntdb/src/ntdb.nim
Normal file
@ -0,0 +1,8 @@
|
||||
# This is just an example to get you started. A typical hybrid package
|
||||
# uses this file as the main entry point of the application.
|
||||
|
||||
import ntdbpkg/submodule
|
||||
import ntdbpkg/NTtables
|
||||
|
||||
when isMainModule:
|
||||
echo parseOTfragment("23")
|
6
ntdb/src/ntdbpkg/NTtables.nim
Normal file
6
ntdb/src/ntdbpkg/NTtables.nim
Normal file
@ -0,0 +1,6 @@
|
||||
const
|
||||
# all transitions with N neighbors
|
||||
OTtable*: array[9, uint64] = [0b1u64 shl 0, 0b11 shl 1, 0b111111 shl 3, 0b1111111111 shl 9, 0b1111111111111 shl 19, 0b1111111111 shl 32, 0b111111 shl 42, 0b11 shl 48, 0b1 shl 50]
|
||||
|
||||
# all transitions in alphabetical order. PRs welcome. i haven't done it yet.
|
||||
|
43
ntdb/src/ntdbpkg/submodule.nim
Normal file
43
ntdb/src/ntdbpkg/submodule.nim
Normal file
@ -0,0 +1,43 @@
|
||||
import NTtables
|
||||
import strutils
|
||||
|
||||
# represents a 2d isotropic non-totalistic Moore neighborhood CA rule.
|
||||
# each bit of b/s represents a transition.
|
||||
# transitions start at the least significant bit and are
|
||||
# in order from lowest number of neighbors to highest, alphabetically
|
||||
# (w.r.t hensel notation)
|
||||
# for example, 5 is "01e"
|
||||
type INTRule* = object
|
||||
b*: uint64
|
||||
s*: uint64
|
||||
|
||||
# represents a "range" of rules.
|
||||
# this is the set of all rules which have all the transitions of
|
||||
# the minimum rule and no transitions that the maximum rule doesn't have.
|
||||
# all evolutions of patterns have a rule range like this that they work in.
|
||||
type INTRange* = object
|
||||
min*: INTRule
|
||||
max*: INTRule
|
||||
|
||||
# determine if a rule is within a rule range
|
||||
proc inrange*(rule: INTRule, range: INTRange): bool =
|
||||
# bitwise check for if all bits in the min rule are present in the given rule
|
||||
# the parentheses are due to BEE where bee is
|
||||
# xor somehow having a weird precedence and acting on a boolean without these.
|
||||
if (rule.b xor range.min.b) != rule.b: result = false
|
||||
elif (rule.s xor range.min.s) != rule.s: result = false
|
||||
|
||||
# bitwise check for if only bits in the max rule are present in the given rule
|
||||
elif (rule.b or range.max.b) != range.max.b: result = false
|
||||
elif (rule.s or range.max.s) != range.max.s: result = false
|
||||
|
||||
else: result = true
|
||||
|
||||
# converts a char digit to all transitions with that amount of neighbors
|
||||
proc OTc(c: char): uint64 =
|
||||
result = OTTable[int(c)-48]
|
||||
|
||||
# deprecated
|
||||
proc parseOTfragment*(frag: string): uint64 =
|
||||
for c in items(frag):
|
||||
result = result or OTc(c)
|
1
ntdb/tests/config.nims
Normal file
1
ntdb/tests/config.nims
Normal file
@ -0,0 +1 @@
|
||||
switch("path", "$projectDir/../src")
|
12
ntdb/tests/test1.nim
Normal file
12
ntdb/tests/test1.nim
Normal file
@ -0,0 +1,12 @@
|
||||
# This is just an example to get you started. You may wish to put all of your
|
||||
# tests into a single file, or separate them into multiple `test1`, `test2`
|
||||
# etc. files (better names are recommended, just make sure the name starts with
|
||||
# the letter 't').
|
||||
#
|
||||
# To run these tests, simply execute `nimble test`.
|
||||
|
||||
import unittest
|
||||
|
||||
import projectspkg/submodule
|
||||
test "correct welcome":
|
||||
check getWelcomeMessage() == "Hello, World!"
|
Loading…
Reference in New Issue
Block a user