bf17 icon

BF snippets

bf17 | PRO | 03/29/19 06:54:23 PM UTC | 0 ⭐ | 378 👁️ | Never ⏰ | []
text |

6.89 KB

|

None

|

0 👍

/

0 👎

Brainfuck code snippets.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~- calculate base 256 checksum of a bunch of text
  use a BF interpreter that allows entering input into a buffer (i.e. not interactive)
+,[[[>+<-]],]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~- distribute N into memory: n, n-1, n-2, n-3, ... , n - n
++++++++ preload m0 with n
[[>+>+<<-]>[<+>-]>[<+>-]<-]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ breadcrumbs
fill contiguous memory with a trail N of breadcrumbs '1s'
N+
[>>[>]+[<]<-]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
load memory with variable length text string (for display module)
,[>>[>] +[<]<-
 [>>[>]<+[<]<-]
,]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Not N (not my discovery or code)
  !N = 255 - N
,'A' load N into m0 in this case 65
>-<[>-<-]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- move data pointer n cells to the right
++++++ load m0 with n
[>[-]<[>+<-]>-]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- delay/countdown timer, because sometimes brainfuck is just too fast
+[>-[-]<-]
+[>- [>-[-]<-] <-]
+[>- [>- [>- [>- [>- [>- [>- [>- [>-[-]<-] <-] <-] <-] <-] <-] <-] <-] <-]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- A + B with carry, 2 digit base 256 addition
A[B +
[temp0[B + temp0 -]
temp1[- zero - temp1] + zero [temp1 - zero[-]]
temp1[- carry + temp1]
A -]
for:
memory0 = A
m1 = carry
m2 = B
m3 = temp0
m4 = temp1
m5 = zero: value is always 0
++++>>--<<        start with m0=4 m2 = 254
[>>+            start add loop
[>+>+<<-]        move m3 back to m2
>[->-<]+>[<->[-]]    set m4 = (m4 == m5)
<[-<<<+>>>]        add m4 which is either a 1 or 0 to m1
<<<<-]            end main add loop
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
n/2
>>n
[-<+>[-<->>+>]<<]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check if N = 0
memory:
m0 = flag
m1 = N
m2 = 0: landing zone
m3 m4: breadcrumbs
>++++++        load N
>>+>+<<<       create breadcrumbs
[<+>-          assume that N will be 0 and set flag
[<-]           but N isn't 0 so reset flag
>              go to N
]              continue working on N
>>[>]<[-<]<<   place data pointer at the flag ~ clean up breadcrumbs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- A - B using A + Two's Compliment(B)
preload A
preload B
preload B2C with 255
B[B2C - B -]        compute Not B and put in B2C
B2C +            increment Not B to make it Two's Compliment
B2C [A + B2C -]        add A to Two's Compliment of B
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Truth Machine
+++++++[>+++++++>
+++++++<<-]>-<,>[
<->-]<[>>[.]]>>-.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is just a bat.
 ,             ,
|\   |\~/|   /|
| \__)o o(__/ |
\  \ / ^ \ /  /
 \=_=\   /=_=/
  \ /\\~//\ /  dmc
   '  " "  '
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
find non-zero
>>>-<<<          put a non zero value out in memory P
+[-[   <-<]>+]>  someone else
||||::::||||||:    similarities
+[-[[-]>-<]>+]<  mine
                 does not maintain original value
                 stops at P for value 1~254
                 stops at P-1 for value = 255
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
load fibonacci series in memory
>+[[>+>+<<-]>>[<<
+>>-]<<<[>>+>+<<<
-]>>>[<<<+>>>-]<]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>+[<[>>+>+<<<-]>>
>[<<<+>>>-]<<[>+>
+<<-]>>[<<+>>-]<]
>+            load the first two cells with 0 and 1
[            start perpetual loop
    <        go to A
    [>>+>+<<<-]    dup A into A+B and Temp0
    >>>        go to Temp0
    [<<<+>>>-]    move Temp0 back to A
    <<        go to B
    [>+>+<<-]    dup B into A+B and Temp0
    >>        go to Temp0
    [<<+>>-]    move Temp0 back to B
<            go to new B shifting all operations one to the right
]            close loop
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+[[>>+>+<<<
-]>>[<<+>>-
]<[<+>-]>>[
<<+>>-]<<<#]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fibonacci sequence
>-[[<+>>>-<-<+]>]
http://inversed.ru/InvMem.htm#InvMem_7
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
count up
>>>++++
[<<<        start with n in m3
[>+>+<<-]
>>[<<+>>-]
<+
>>-
[>+<-]>
]
<<<[<]        go back to m0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>++++++
[<<<[>+
>+<<-]>
>[<<+>>
-]<+>>-
[>+<-]>
]<<<[<]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
is N even or odd
>+++++++++++++++    load m1 with N
>>+>+<<<        create trail of breadcrumbs to locate position of P
[-[->]<]+        set m0 = 1 if odd
            set m1 = 1 if even
>>>[>]            resolve position
<[<]             of data pointer P
>->-<<            clean up breadcrumbs
<            set P to m1 if N is even
              or conversly 1 = even: 0 = odd
<<            use this one to set P to m0 if N is odd
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
N odd or even: bare minimum
    >,             load m1 with N
    
    [-[->]<]+      set m0 = 1 if odd
                   set m1 = 1 if even
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
N odd or even? clean version that resolves P
     >,              ~load m1 with N (not counted for golf scoring)
    >>+>+<<<        ~set 'trail of breadcrumbs' so we can figure out
                       where P is
    [-[->]<]+       ~if N is odd set m0 = 1
    >>>[>]          ~figure out where P is
    <[-<]<[-]<      ~go back to m1 and zero out if N is even
Pointer P ends on m0
  odd: m0 = 1
 even: m0 = 0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[m2 = (m0 > m1)]
m0 = d1
m1 = d2
m2 = G
m3 = landing zone (always zero)
m4 = copy of d2 used for calculation
m5 = start of breadcrumbs equal to d1
+++++>+++<             load d1 and d2
[>>>+>+<<<<-]         dup d1 to mem
>>>[<<<+>>>-]         restore d1
>[>[>]+[<]>-]         place breadcrumbs
<<<[>>+>+<<<-]        dup d2 to mem
>>[<<+>>-]>           restore d2
[>[-]<[>+<-]+>-]     compare d2 with breadcrumbs
>[<<[<]<+>>[>]]      set G (m2) to 1 if there are more breadcrumbs to the right
>[-]<<[-]<[[-]<]<    clean up breadcrumbs and stop on G
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 

Comments