mirror of
https://github.com/Noratrieb/brainfuck.git
synced 2026-01-17 06:45:01 +01:00
testing
This commit is contained in:
parent
4c1799c19d
commit
84a0f13244
2 changed files with 164 additions and 17 deletions
174
bfi-rust/bf.b
174
bfi-rust/bf.b
|
|
@ -1,11 +1,163 @@
|
||||||
++++++++++[>++++++++++<-]>>++++++++++>->>>>>>>>>>>>>>>>-->+++++++[->++
|
* 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
|
||||||
|
*
|
||||||
|
[>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]-
|
||||||
|
[>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<]
|
||||||
|
++++++++++.
|
||||||
|
|
@ -18,13 +18,8 @@ fn main() {
|
||||||
fn run(path: String) {
|
fn run(path: String) {
|
||||||
println!("Path: {}", path);
|
println!("Path: {}", path);
|
||||||
let program = fs::read_to_string(path).unwrap();
|
let program = fs::read_to_string(path).unwrap();
|
||||||
let program = minify(program);
|
|
||||||
println!("{}", program);
|
|
||||||
|
|
||||||
let start = SystemTime::now();
|
let start = SystemTime::now();
|
||||||
|
|
||||||
let out = o1::run(&*program);
|
let out = o1::run(&*program);
|
||||||
|
|
||||||
println!("{}\nFinished execution in {}ms", out, start.elapsed().unwrap().as_millis());
|
println!("{}\nFinished execution in {}ms", out, start.elapsed().unwrap().as_millis());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -35,7 +30,7 @@ fn run(path: String) {
|
||||||
/// most importantly: loop jumps should be immediate
|
/// most importantly: loop jumps should be immediate
|
||||||
///
|
///
|
||||||
mod o1 {
|
mod o1 {
|
||||||
use std::io::{stdin, Read};
|
use std::io::{stdin, Read, stdout, Write};
|
||||||
|
|
||||||
const MEM_SIZE: usize = 0xFFFF;
|
const MEM_SIZE: usize = 0xFFFF;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue