mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
196 lines
5.7 KiB
Brainfuck
196 lines
5.7 KiB
Brainfuck
* factor an arbitrarily large positive integer
|
|
*
|
|
* Copyright (C) 1999 by Brian Raiter
|
|
* under the GNU General Public License
|
|
|
|
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-
|
|
|
|
*
|
|
* read in the number
|
|
*
|
|
|
|
<<<<<<<<<+
|
|
[-[>>>>>>>>>>][-]<<<<<<<<<<[[->>>>>>>>>>+<<<<<<<<<<]<<<<<<<<<<]
|
|
>>>>>>>>>>,----------]
|
|
>>>>>>>>>>[------------------------------------->>>>>>>>>->]
|
|
<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]-
|
|
|
|
*
|
|
* display the number and initialize the loop variable to two
|
|
*
|
|
|
|
[>++++++++++++++++++++++++++++++++++++++++++++++++.
|
|
------------------------------------------------<<<<<<<<<<<]
|
|
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
|
|
--------------------------.[-]
|
|
>>>>>>>>>>>>++<<<<+
|
|
|
|
*
|
|
* the main loop
|
|
*
|
|
|
|
[ [-]>>
|
|
|
|
*
|
|
* make copies of the number and the loop variable
|
|
*
|
|
|
|
[>>>>[-]>[-]>[-]>[-]
|
|
>[-]>[-]
|
|
<<<<<<<[->>>+>+<<<<]>>>>>>>>]
|
|
<<<<<<<<<<[>>>>>>[-<<<<+>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>>
|
|
[>[->>>+>>+<<<<<]>>>>>>>>>]
|
|
<<<<<<<<<<[>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>>
|
|
|
|
*
|
|
* divide the number by the loop variable
|
|
*
|
|
|
|
[>>>[-]>>>[-]>[-]>>>] initialize
|
|
<<<<<<<<<<[<<<<<<<<<<]
|
|
>>>>>>>>>[-]>>>>>>>+<<<<<<<<[+]+
|
|
[ ->> double divisor until above dividend
|
|
[>>>>>>[->++<]>>>>]<<<<<<<<<<
|
|
[>>>>>>>>[-]>[-]
|
|
<<<<[->>>++<<<]<<<<<<<<<<<<<<<]>>>>>>>>>>
|
|
[>>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<
|
|
[->--------->>>>>>>>>+<<<<<<<<<<[->+<]]]]]]]]]]]>>]
|
|
<<<<<<<<<<[>>>>>>>>>[-<+<<<+>>>>]<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>
|
|
[>>>>>>>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>
|
|
[-<--------->>>>>>>>>>>+<<<<<<<<<<[-<+>]]]]]]]]]]]>>>]
|
|
<<<<<<<<<<
|
|
[>>>>[->>>+>>+<<<<<]<<<<<<<<<<<<<<]
|
|
>>>>>>>>>>[>>>>>>>[-<<<+>>>]>>>]<<<<<<<<<<
|
|
[>>>>>>>>[->-<]>
|
|
[<<<<<<<<<[<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<]
|
|
>>>>>>>>>>>>>>>>>>>]
|
|
<<<<<<<<<<<<<<<<<<<]
|
|
>>>>>>>>>[+[+[+[+[+[+[+[+[+[+[[-]<+>]]]]]]]]]]]<
|
|
]
|
|
>>>>>>>>
|
|
[ subtract divisor from dividend
|
|
<<<<<<
|
|
[>>>>>>>>[-]>[-]<<<<<[->>>+>+<<<<]>>>>>>]<<<<<<<<<<
|
|
[>>>>>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]<<<<<<<<<<<<<<<]>>>>>>>>>>
|
|
[>>>>>>>>>[-<<<<+>>>>]>]<<<<<<<<<<
|
|
[>>>>>>>>[-<->]<<<<<<<<<<<<<<<<<<]>>>>>>>>>>
|
|
[>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<
|
|
[++++++++++[+>-<]>>>>>>>>>>-<<<<<<<<<<]]]]]]]]]]]>>>]
|
|
>>>>>>>+
|
|
[ if difference is nonnegative then
|
|
[-]<<<<<<<<<<<<<<<<< replace dividend and increment quotient
|
|
[>>>>[-]>>>>[-<<<<+>>>>]<<[->>+<<]<<<<<<<<<<<<<<<<]>>>>>>>>>>
|
|
[>>>>>>>>[->+<<<+>>]>>]<<<<<<<<<<
|
|
[>>>[->>>>>>+<<<<<<]<<<<<<<<<<<<<]>>>>>>>>>>
|
|
[>>>>>>>>>[-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
|
|
[-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
|
|
[-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
|
|
[-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
|
|
[-<<<<<<+>>>>>>[-<<<<<<--------->>>>>>>>>>>>>>>>+<<<<<<<<<<
|
|
[-<<<<<<+>>>>>>]]]]]]]]]]]>]
|
|
>>>>>>>
|
|
] halve divisor and loop until zero
|
|
<<<<<<<<<<<<<<<<<[<<<<<<<<<<]>>>>>>>>>>
|
|
[>>>>>>>>[-]<<[->+<]<[->>>+<<<]>>>>>]<<<<<<<<<<
|
|
[+>>>>>>>[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
|
|
[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
|
|
[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
|
|
[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
|
|
[-<<<<<<<+>>>>>>>]]]]]]]]]<<<<<<<
|
|
[->>>>>>>+<<<<<<<]-<<<<<<<<<<]
|
|
>>>>>>>
|
|
[-<<<<<<<<<<<+>>>>>>>>>>>]
|
|
>>>[>>>>>>>[-<<<<<<<<<<<+++++>>>>>>>>>>>]>>>]<<<<<<<<<<
|
|
[+>>>>>>>>[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
|
|
[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
|
|
[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
|
|
[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
|
|
[-<<<<<<<<+>>>>>>>>]]]]]]]]]<<<<<<<<
|
|
[->>>>>>>>+<<<<<<<<]-<<<<<<<<<<]
|
|
>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]>>
|
|
[>>>>>>>>[-<<<<<<<<<<<<<+++++>>>>>>>>>>>>>]>>]<<<<<<<<<<
|
|
[<<<<<<<<<<]>>>>>>>>>>
|
|
>>>>>>
|
|
]
|
|
<<<<<<
|
|
|
|
*
|
|
* make copies of the loop variable and the quotient
|
|
*
|
|
|
|
[>>>[->>>>+>+<<<<<]>>>>>>>]
|
|
<<<<<<<<<<
|
|
[>>>>>>>[-<<<<+>>>>]<<<<<[->>>>>+>>+<<<<<<<]<<<<<<<<<<<<]
|
|
>>>>>>>>>>[>>>>>>>[-<<<<<+>>>>>]>>>]<<<<<<<<<<
|
|
|
|
*
|
|
* break out of the loop if the quotient is larger than the loop variable
|
|
*
|
|
|
|
[>>>>>>>>>[-<->]<
|
|
[<<<<<<<<
|
|
[<<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<]
|
|
>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<]
|
|
>>>>>>>>[>-<[+[+[+[+[+[+[+[+[+[[-]>+<]]]]]]]]]]]>+
|
|
|
|
[ [-]
|
|
|
|
*
|
|
* partially increment the loop variable
|
|
*
|
|
|
|
<[-]+>>>>+>>>>>>>>[>>>>>>>>>>]<<<<<<<<<<
|
|
|
|
*
|
|
* examine the remainder for nonzero digits
|
|
*
|
|
|
|
[<<<<<<[<<<<[<<<<<<<<<<]>>>>+<<<<<<<<<<]<<<<]
|
|
>>>>>>>>>>>>>>>>>>>>[>>>>>>>>>>]<<<<<<<<<<[<<<<<<<<<<]
|
|
>>>>-
|
|
|
|
[ [+]
|
|
|
|
*
|
|
* decrement the loop variable and replace the number with the quotient
|
|
*
|
|
|
|
>>>>>>>>-<<[>[-]>>[-<<+>>]>>>>>>>]<<<<<<<<<<
|
|
|
|
*
|
|
* display the loop variable
|
|
*
|
|
|
|
[+>>[>>>>>>>>+>>]<<-<<<<<<<<<<]-
|
|
[>>++++++++++++++++++++++++++++++++++++++++++++++++.
|
|
------------------------------------------------<<<<<<<<<<<<]
|
|
++++++++++++++++++++++++++++++++.[-]>>>>
|
|
|
|
]
|
|
|
|
*
|
|
* normalize the loop variable
|
|
*
|
|
|
|
>>>>>>
|
|
[>>[->>>>>+<<<<<[->>>>>+<<<<<
|
|
[->>>>>+<<<<<[->>>>>+<<<<<
|
|
[->>>>>+<<<<<[->>>>>+<<<<<
|
|
[->>>>>+<<<<<[->>>>>+<<<<<
|
|
[->>>>>+<<<<<[->>>>>--------->>>>>+<<<<<<<<<<
|
|
[->>>>>+<<<<<]]]]]]]]]]]>>>>>>>>]
|
|
<<<<<<<<<<[>>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<<]
|
|
>>>>>>>>>
|
|
|
|
]<
|
|
|
|
]>>
|
|
|
|
*
|
|
* display the number and end
|
|
*
|
|
|
|
[>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]-
|
|
[>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<]
|
|
++++++++++.
|