mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +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
 | |
| *
 | |
| 
 | |
| [>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]-
 | |
| [>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<]
 | |
| ++++++++++.
 |