mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			30 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Brainfuck
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Brainfuck
		
	
	
	
	
	
# ROT13 cipher
 | 
						|
 | 
						|
-,+[                         Read first character and start outer character reading loop
 | 
						|
    -[                       Skip forward if character is 0
 | 
						|
        >>++++[>++++++++<-]  Set up divisor (32) for division loop
 | 
						|
                               (MEMORY LAYOUT: dividend copy remainder divisor quotient zero zero)
 | 
						|
        <+<-[                Set up dividend (x minus 1) and enter division loop
 | 
						|
            >+>+>-[>>>]      Increase copy and remainder / reduce divisor / Normal case: skip forward
 | 
						|
            <[[>+<-]>>+>]    Special case: move remainder back to divisor and increase quotient
 | 
						|
            <<<<<-           Decrement dividend
 | 
						|
        ]                    End division loop
 | 
						|
    ]>>>[-]+                 End skip loop; zero former divisor and reuse space for a flag
 | 
						|
    >--[-[<->+++[-]]]<[         Zero that flag unless quotient was 2 or 3; zero quotient; check flag
 | 
						|
        ++++++++++++<[       If flag then set up divisor (13) for second division loop
 | 
						|
                               (MEMORY LAYOUT: zero copy dividend divisor remainder quotient zero zero)
 | 
						|
            >-[>+>>]         Reduce divisor; Normal case: increase remainder
 | 
						|
            >[+[<+>-]>+>>]   Special case: increase remainder / move it back to divisor / increase quotient
 | 
						|
            <<<<<-           Decrease dividend
 | 
						|
        ]                    End division loop
 | 
						|
        >>[<+>-]             Add remainder back to divisor to get a useful 13
 | 
						|
        >[                   Skip forward if quotient was 0
 | 
						|
            -[               Decrement quotient and skip forward if quotient was 1
 | 
						|
                -<<[-]>>     Zero quotient and divisor if quotient was 2
 | 
						|
            ]<<[<<->>-]>>    Zero divisor and subtract 13 from copy if quotient was 1
 | 
						|
        ]<<[<<+>>-]          Zero divisor and add 13 to copy if quotient was 0
 | 
						|
    ]                        End outer skip loop (jump to here if ((character minus 1)/32) was not 2 or 3)
 | 
						|
    <[-]                     Clear remainder from first division if second division was skipped
 | 
						|
    <.[-]                    Output ROT13ed character from copy and clear it
 | 
						|
    <-,+                     Read next character
 | 
						|
]                            End character reading loop |