Nicolas Winkler 5 лет назад
Родитель
Сommit
3b7f786635
2 измененных файлов с 449 добавлено и 0 удалено
  1. 254 0
      examples/99bottles.bf
  2. 195 0
      examples/factor.bf

+ 254 - 0
examples/99bottles.bf

@@ -0,0 +1,254 @@
+# 100 bottles of beer in Brainf*ck
+# Copyright (C) 2008 Raphael Bois
+# 1671 brainf*ck instructions.
+# Published under GPL v2
+
+Initialization
+++    Counter for loop (a)
+>+    unused
+>++   Counter for loop (b)
+>     Flag for 'no more'
+>+    Flag for not 'no more'
+>>>   (5) to (7) : temporary values
+++++++++++[->+>+>++++++++++<<<]>>>    10 10 100 in (8) (9) (10)
+>++++++++++   10 in (11)
+[-
+   >+++++           50  in (12)
+   >++++++++++      100 in (13)
+   >+++++++++++     110 in (14)
+   >++++++++        80  in (15)
+   >++++++++        80  in (16)
+   >+++             30  in (17)
+   >++++            40  in (18)
+   >+               10  in (19)
+   <<<<<<<<]
++
+>-- +             48  '0'   plus 1 in (12)
+>++ +             102 'f'   plus 1 in (13)
+>+++++ +          115 's'   plus 1 in (14)
+>-- +             78  'N'   plus 1 in (15)
+>++++ +           84  'T'   plus 1 in (16)
+>++ +             32  ' '   plus 1 in (17)
+>++++ +           44  comma plus 1 in (18)
+> +               10  LF    plus 1 in (19)
+
+stuff for writing parts of the song
+>+   select stuff
+>+   select stuff
+>+   write song part 3
+>++  write song part 1
+>+   write song part 2
+>+   Flag for 'end of song'
+>++  Flag for not 'end of song'
+
+All bytes are at val plus 1
+Go back to (7) with final initialization step (remove 1 to all bytes)
+[-<]
+
+<<<<<<< at (0)
+[ loop (a)
+-
+
+>> at (2)
+[ loop (b)
+
+  >>>>>>>> at (10)
+  [ start loop
+
+    <<<<<<< at (3)
+    [->[-]
+      print '(N|n)o more'
+      >>>>>>>>>>>.  '(N|n)'
+      <----.        'o'
+      >>>.          ' '
+      <<<--.        'm'
+      ++.           'o'
+      +++.+         'r'
+      <-.+          'e'
+      <<+<<<<<<<<
+    ]+> at (4)
+    [-<[-]>>>>> at (9)
+      prints number (using (9) and (10))
+      [>>>+<<<<+<+<+>>>-]<<<[->>>+<<<]> at (6)
+      [>>>>>>+<<<<<<-]>>>>>[[-]>.<]<<<<[>>>>>-<<<<<-]>> at (9)
+      [<<+<+<+>>>>-]<<<<[->>>>+<<<<]> at (6)
+      [>>>>>>+<<<<<<-]>>>>>>.<<<<<[>>>>>-<<<<<-] at (7)
+
+      memorize in (11) if (10) not 1
+      >>>[-<<<+<+>>>>]<<<<[->>>>+<<<<]>-[[-]>>>>+<<<<]<<< at (4)
+    ]+
+
+    >>>>>>>> at (12)
+    print ' bottle(s) of beer'
+    >>>>>.      ' '
+    <<<<----.    'b'
+    >----.       'o'
+    +++++..-     'tt'
+    <++++++++++. 'l'
+    -------.     'e'
+    <<[[-]>>>.<<<]>> 's' if (11)==1 ie if (10)!=1
+    >>>>.        ' '
+    <<<----.     'o'
+    <+.          'f'
+    >>>>.        ' '
+    <<<<----.    'b'
+    +++..+       'ee'
+    >+++.+       'r'
+
+    [>] at (20)
+
+    +>+>[->+<<-<-
+         print ' on the wall' DOT LF LF
+         <<<.            ' '
+         <<<----.        'o'
+         -.              'n'
+         >>>.            ' '
+         <<<++++++.      't'
+         <++.            'h'
+         ---.            'e'
+         >>>>.           ' '
+         <<<+++.         'w'
+         <----.          'a'
+         +++++++++++..   'll'
+         ------>----     reset to 'f' and 's'
+         >---------- ---------- ---------- -- sets (15) to 'N'
+
+         >>>++.--  DOT
+         >..       LF LF
+    >>>] at (22)
+
+    >>>[->[-]<<<<<<<[<]<[-]>>[>]>>>>>]+ if end of song reset bottles counter
+    >[-<[-] at (25)
+      <<<< at (21)
+      [->>[->+<<<<-
+           print ' on the wall' COMMA ' '
+           <<<.            ' '
+           <<<----.        'o'
+           -.              'n'
+           >>>.            ' '
+           <<<++++++.      't'
+           <++.            'h'
+           ---.            'e'
+           >>>>.           ' '
+           <<<+++.         'w'
+           <----.          'a'
+           +++++++++++..   'll'
+
+           ------>----     reset (13) and (14) to 'f' and 's'
+           >++++++++++ ++++++++++ ++++++++++ ++ sets (15) to 'n'
+
+           >>>.            comma
+           <.              ' '
+      >>>>>>]<<]< at (20)
+
+      [->>>>[-<<+< at (21)
+             <<<++.--       DOT
+             >.             LF
+
+             [<]<<<<<<<< at (3)
+             [->[-]<]+>  at (4)
+             [-<[-]>
+               >>>>>>>>>>>>.  'T'
+               <<<-----.      'a'
+               ++++++++++.    'k'
+               ------.        'e'
+               >>>>.          ' '
+               <<<----.       'o'
+               -.             'n'
+               <.             'e'
+               >>>>.          ' '
+               <<<<-.         'd'
+               >+.            'o'
+               ++++++++.      'w'
+               ---------.     'n'
+               >>>.           ' '
+               <<<<---.       'a'
+               >.             'n'
+               <+++.          'd'
+               >>>>.          ' '
+               <<<++.         'p'
+               <---.          'a'
+               >+++..         'ss'
+               >>>.           ' '
+               <<<<++++++++.  'i'
+               >+.            't'
+               >>>.           ' '
+               <<<<--------.  'a'
+               >--.           'r'
+               ---.           'o'
+               ++++++.        'u'
+               -------.       'n'
+               <+++.          'd'
+               ++>+++++       reset (13) and (14) to 'f' and 's'
+               >>>>.          comma
+               <.             ' '
+
+               [<]<<<<<<< at (4)
+             ]+
+
+            >>>>>> at (10)
+            decrements values
+            -<<<+>>[<<[-]<+<+>>>>-]<<<<[>-<[-]]>[->>>+<<<]>[->->+++++++++<<]>>> at (10)
+
+         >>[>]>>>>] at (24)
+      <<<<] at (20)
+
+    >>>>>>]+ at (26)
+
+    <<<<<<<[<]< at (10)
+  ]
+  +<+
+  <<<<<<+< at (2)
+  -
+]
+
+print 'Go to the store and buy some more' comma ' '
+
+  >>>>>>>>>>[>]>>>>> at (25)
+  [->[-]<]+> at (26)
+  [-<[-]
+    <<<<<<<<< at (16)
+    -------------.   'G'
+    <<----.          'o'
+    >>>.             ' '
+    <<<+++++.        't'
+    -----.           'o'
+    >>>.             ' '
+    <<<+++++.        't'
+    <++.             'h'
+    ---.             'e'
+    >>>>.            ' '
+    <<<-.            's'
+    +.               't'
+    -----.           'o'
+    +++.             'r'
+    <.               'e'
+    >>>>.            ' '
+    <<<<----.        'a'
+    >----.           'n'
+    <+++.            'd'
+    >>>>.            ' '
+    <<<<--.          'b'
+    >+++++++.        'u'
+    ++++.            'y'
+    >>>.             ' '
+    <<<------.       's'
+    ----.            'o'
+    --.              'm'
+    <+++.            'e'
+    >>>>.            ' '
+    <<<.             'm'
+    ++.              'o'
+    +++.+            'r'
+    <.+              'e'
+    >>>>>.           coma
+    <.               ' '
+    >>>>>>>>>
+  ]+
+
+  Initialize last loop to print final '99 bottles of beer on the wall' DOT
+  <[-]+<[-]<[-]<[-]+<<< at (19)
+  [<]<[-]<[-]<[-]<[-] at (7)
+  ++++++++++[->+>+>++++++++++<<<]>->->-
+  <<<<<<[-]+<[-]<+<< at (0)
+]

+ 195 - 0
examples/factor.bf

@@ -0,0 +1,195 @@
+* 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
+*
+
+[>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]-
+[>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<]
+++++++++++.