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
 | 
						|
*
 | 
						|
 | 
						|
[>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]-
 | 
						|
[>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<]
 | 
						|
++++++++++.
 |