Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
85
Task/Arrays/Brainf---/arrays.bf
Normal file
85
Task/Arrays/Brainf---/arrays.bf
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
===========[
|
||||
ARRAY DATA STRUCTURE
|
||||
|
||||
AUTHOR: Keith Stellyes
|
||||
WRITTEN: June 2016
|
||||
|
||||
This is a zero-based indexing array data structure, it assumes the following
|
||||
precondition:
|
||||
|
||||
>INDEX<|NULL|VALUE|NULL|VALUE|NULL|VALUE|NULL
|
||||
|
||||
(Where >< mark pointer position, and | separates addresses)
|
||||
|
||||
It relies heavily on [>] and [<] both of which are idioms for
|
||||
finding the next left/right null
|
||||
|
||||
HOW INDEXING WORKS:
|
||||
It runs a loop _index_ number of times, setting that many nulls
|
||||
to a positive, so it can be skipped by the mentioned idioms.
|
||||
Basically, it places that many "milestones".
|
||||
|
||||
EXAMPLE:
|
||||
If we seek index 2, and our array is {1 , 2 , 3 , 4 , 5}
|
||||
|
||||
FINDING INDEX 2:
|
||||
(loop to find next null, set to positive, as a milestone
|
||||
decrement index)
|
||||
|
||||
index
|
||||
2 |0|1|0|2|0|3|0|4|0|5|0
|
||||
1 |0|1|1|2|0|3|0|4|0|5|0
|
||||
0 |0|1|1|2|1|3|0|4|0|5|0
|
||||
|
||||
===========]
|
||||
|
||||
=======UNIT TEST=======
|
||||
SET ARRAY {48 49 50}
|
||||
>>++++++++++++++++++++++++++++++++++++++++++++++++>>
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++>>
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
<<<<<<++ Move back to index and set it to 2
|
||||
=======================
|
||||
|
||||
===RETRIEVE ELEMENT AT INDEX===
|
||||
|
||||
=ACCESS INDEX=
|
||||
[>>[>]+[<]<-] loop that sets a null to a positive for each iteration
|
||||
First it moves the pointer from index to first value
|
||||
Then it uses a simple loop that finds the next null
|
||||
it sets the null to a positive (1 in this case)
|
||||
Then it uses that same loop reversed to find the first
|
||||
null which will always be one right of our index
|
||||
so we decrement our index
|
||||
Finally we decrement pointer from the null byte to our
|
||||
index and decrement it
|
||||
|
||||
>> Move pointer to the first value otherwise we can't loop
|
||||
|
||||
[>]< This will find the next right null which will always be right
|
||||
of the desired value; then go one left
|
||||
|
||||
|
||||
. Output the value (In the unit test this print "2"
|
||||
|
||||
[<[-]<] Reset array
|
||||
|
||||
===ASSIGN VALUE AT INDEX===
|
||||
|
||||
STILL NEED TO ADJUST UNIT TESTS
|
||||
|
||||
NEWVALUE|>INDEX<|NULL|VALUE etc
|
||||
|
||||
[>>[>]+[<]<-] Like above logic except it empties the value and doesn't reset
|
||||
>>[>]<[-]
|
||||
|
||||
[<]< Move pointer to desired value note that where the index was stored
|
||||
is null because of the above loop
|
||||
|
||||
[->>[>]+[<]<] If NEWVALUE is GREATER than 0 then decrement it & then find the
|
||||
newly emptied cell and increment it
|
||||
|
||||
[>>[>]<+[<]<<-] Move pointer to first value find right null move pointer left
|
||||
then increment where we want our NEWVALUE to be stored then
|
||||
return back by finding leftmost null then decrementing pointer
|
||||
twice then decrement our NEWVALUE cell
|
||||
Loading…
Add table
Add a link
Reference in a new issue