Examine individual changes
This page allows you to examine the variables generated by the Abuse Filter for an individual change.
Variables generated for this change
Variable | Value |
---|---|
Edit count of the user (user_editcount) | 62 |
Name of the user account (user_name) | 'BrainFuckGirl' |
Age of the user account (user_age) | 21861255 |
Page ID (page_id) | 8305 |
Page namespace (page_namespace) | 0 |
Page title (without namespace) (page_title) | 'Beam' |
Full page title (page_prefixedtitle) | 'Beam' |
Action (action) | 'edit' |
Edit summary/reason (summary) | '/* Example programs */ "Hello, world!" program' |
Old content model (old_content_model) | 'wikitext' |
New content model (new_content_model) | 'wikitext' |
Old page wikitext, before the edit (old_wikitext) | ''''Beam''' is yet another two dimensional language thought of around mid-2010 by [[User:Feuermonster]] and implemented and published in 2012.
* The start-up direction is right.
* There is a beam which holds an 8bit unsigned value.
* Also there is a store which can hold an arbitrary large positive value. If it drops below zero it's wrapped to 255.
* Then there is an infinite amount of 8bit memory cells.
* The implementation uses NUL (\0) if no character could be read from stdin.
* Every character which is not an instruction is a NOP.
== Instructions ==
<pre>
> Set the direction to right
< Set the direction to left
^ Set the direction to up
v Set the direction to down
+ Increment the beam
- Decrement the beam
@ Output the beam as character
: Output the beam as number
/ Redirect the control flow like this:
|
----/ /---
|
(90 degrees to the left)
\ Redirect the control flow like this:
|
-----\ \----
|
(90 degrees to the right)
! If the beam is not 0, reverse the control flow. (It bounces off the !)
? If the beam is 0, reverse the control flow. (It bounces off the ?)
| Reverse the control flow if coming from a right/left-direction
_ Reverse the control flow if coming from a up/down-direction
H stop the program
S store = beam
L beam = store
s memory[beam] = store
g store = memory[beam]
P memory[store] = beam
p beam = memory[store]
u If beam != store change direction to up
n if beam != store change direction to down
` Decrement the store
' Increment the store
) If store != 0 change direction to left
( If store != 0 change direction to right
r Read character from input
</pre>
It should be noted, that 'u' and 'n' perform 32bit comparison: if the store exceeds 255 the comparison
beam != store is always true since beam can not exceed 255. Lines are not padded to equal length. A compliant
interpreter is not allowed to do this!
== Example programs ==
=== Reverse stdin ===
<pre>
<nowiki>
'> rP n
^!p'<vn(`<
^ <
>'p!`>`p@ v
Hnp`<
^ <
</nowiki>
</pre>
Painfully written by hand.
A faster version (thanks to [[User:Fizzie]]):
<pre>
<nowiki>
>'p!rP(`)n>'p!`v
^ < H(`p@p`)H
H
</nowiki>
</pre>
Fastest version in the west (also thanks to [[User:Fizzie]]):
<pre>
<nowiki>
v
(>``v
! H(p`@`p)H
P H
'
r
'
P
!
>^
</nowiki>
</pre>
=== [[Truth-machine]] ===
<pre>
rS>@)
</pre>
(Expects NUL or SOH from stdin.)
Codegolfed; 5 bytes.
=== Hello ===
Prints <code>Hello!</code>
<pre>
'''''v
>`++++++++++++++)++@v
v++++++@-(++++++++++`<'''<
>+@@+++@>-!'''>`++++++++++)v
@+++<
</pre>
=== Even / Odd ===
Reads from stdin and tests if the value (ascii value) is even or odd.
If it is even, it prints a zero, else a one.
<pre>
rv`<
:u'<
>-- u:
</pre>
=== Cat ===
<pre>
>r@nH
^ <
</pre>
=== Compare ===
Reads in two ascii characters and prints out the smaller one.
<pre>
rP'Pr'P'P```v <
H @p'''u``p''<
>p-P''p-P``pu'p@
</pre>
== Turing completeness ==
Brainfuck programs can be translated to Beam programs.
This mechanism works with the 'u' instruction and marking cells to restore the store.
'''Brainfuck'''
<pre>
,[>+>+<<-]++++++[>--------<-]>[>.<]>.
</pre>
'''Beam''' (translation with the bf2beam perl script)
<pre>
v > v > v > v
>'''rP>`p+P'p(`)uv>'>'p?-P'''p+P''p+P````p-Pv>p++++++P>`p+P'p(`)uv>'>'p?-P'''p--------P``p-Pv>''>`p+P'p(`)uv>'>'p?-P'''p@``v>''p@H
> '>'p?-P' ^ > '>'p?-P' ^ > '>'p?-P' ^
^ < ^ < ^ <
</pre>
== Beam constants ==
Constants to set the beam to a specific value (requires store to be zero.). This list is not complete. Help me!
{| class="wikitable"
!Number
!Code
!Bytes
!Cycles
!Cycles / Bytes
!Cycles / Number
|-
|24
|<code><nowiki>'''>`++++++++)</nowiki></code>
|14
|34
|2.42
|1.42
|-
|24
|<code><nowiki>'''''>`+++++)-</nowiki></code>
|14
|42
|3
|1.75
|-
|25
|<code><nowiki>'''''>`+++++)</nowiki></code>
|13
|41
|3.15
|1.64
|-
|25
|<code><nowiki>'''>`++++++++)+</nowiki></code>
|15
|35
|2.33
|1.39
|-
|26
|<code><nowiki>'''''>`+++++)+</nowiki></code>
|14
|42
|3
|1.61
|-
|26
|<code><nowiki>'''>`+++++++++)-</nowiki></code>
|16
|38
|2.38
|1.46
|-
|27
|<code><nowiki>'''>`+++++++++)</nowiki></code>
|15
|37
|2.46
|1.37
|-
|28
|<code><nowiki>'''''''>`++++)</nowiki></code>
|14
|50
|3.57
|1.78
|-
|28
|<code><nowiki>'''>`+++++++++)+</nowiki></code>
|16
|38
|2.38
|1.36
|-
|28
|<code><nowiki>'''''>`++++++)--</nowiki></code>
|16
|48
|3
|1.71
|-
|}
== Implementation ==
* [http://mroman.ch/djang_media/public/eso/Beam.java Java interpreter] (DEADLINK)
* [http://eso.mroman.ch/beam/ Javascript interpreter with 2D trace] (DEADLINK)
* [http://codegolf.stackexchange.com/a/57190/42545 Online (HTML/Javascript) interpreter]
== Work in progress ==
* Finding Beam constants.
* Describing some techniques to program in Beam.
* WeBeam (to program webpages).
Help is always welcome.
== External resources ==
* [http://p.zem.fi/bf2beam.pl Brainfuck to Beam translation script]
[[Category:Languages]]
[[Category:2012]]
[[Category:Cell-based]]
[[Category:Implemented]]
[[Category:Turing complete]]
[[Category:Two-dimensional languages]]' |
New page wikitext, after the edit (new_wikitext) | ''''Beam''' is yet another two dimensional language thought of around mid-2010 by [[User:Feuermonster]] and implemented and published in 2012.
* The start-up direction is right.
* There is a beam which holds an 8bit unsigned value.
* Also there is a store which can hold an arbitrary large positive value. If it drops below zero it's wrapped to 255.
* Then there is an infinite amount of 8bit memory cells.
* The implementation uses NUL (\0) if no character could be read from stdin.
* Every character which is not an instruction is a NOP.
== Instructions ==
<pre>
> Set the direction to right
< Set the direction to left
^ Set the direction to up
v Set the direction to down
+ Increment the beam
- Decrement the beam
@ Output the beam as character
: Output the beam as number
/ Redirect the control flow like this:
|
----/ /---
|
(90 degrees to the left)
\ Redirect the control flow like this:
|
-----\ \----
|
(90 degrees to the right)
! If the beam is not 0, reverse the control flow. (It bounces off the !)
? If the beam is 0, reverse the control flow. (It bounces off the ?)
| Reverse the control flow if coming from a right/left-direction
_ Reverse the control flow if coming from a up/down-direction
H stop the program
S store = beam
L beam = store
s memory[beam] = store
g store = memory[beam]
P memory[store] = beam
p beam = memory[store]
u If beam != store change direction to up
n if beam != store change direction to down
` Decrement the store
' Increment the store
) If store != 0 change direction to left
( If store != 0 change direction to right
r Read character from input
</pre>
It should be noted, that 'u' and 'n' perform 32bit comparison: if the store exceeds 255 the comparison
beam != store is always true since beam can not exceed 255. Lines are not padded to equal length. A compliant
interpreter is not allowed to do this!
== Example programs ==
=== Reverse stdin ===
<pre>
<nowiki>
'> rP n
^!p'<vn(`<
^ <
>'p!`>`p@ v
Hnp`<
^ <
</nowiki>
</pre>
Painfully written by hand.
A faster version (thanks to [[User:Fizzie]]):
<pre>
<nowiki>
>'p!rP(`)n>'p!`v
^ < H(`p@p`)H
H
</nowiki>
</pre>
Fastest version in the west (also thanks to [[User:Fizzie]]):
<pre>
<nowiki>
v
(>``v
! H(p`@`p)H
P H
'
r
'
P
!
>^
</nowiki>
</pre>
=== [[Truth-machine]] ===
<pre>
rS>@)
</pre>
(Expects NUL or SOH from stdin.)
Codegolfed; 5 bytes.
=== Hello ===
Prints <code>Hello!</code>
<pre>
'''''v
>`++++++++++++++)++@v
v++++++@-(++++++++++`<'''<
>+@@+++@>-!'''>`++++++++++)v
@+++<
</pre>
=== [[Hello, world!]] ===
Prints <code>Hello, world!</code> (by [[User:BrainFuckGirl|BrainFuckGirl]])
<pre>
'''''>`++++++++++++++)++@'''-v
v''@+++@@+++++++@(++++++++++`<
>-!'>`++++++++++++++)++@-----v
v------------(+++`<'S@-------<
>@--------@+++@------@-------v
H____@+++(++++++`<'''''!-<+@-<
</pre>
=== Even / Odd ===
Reads from stdin and tests if the value (ascii value) is even or odd.
If it is even, it prints a zero, else a one.
<pre>
rv`<
:u'<
>-- u:
</pre>
=== Cat ===
<pre>
>r@nH
^ <
</pre>
=== Compare ===
Reads in two ascii characters and prints out the smaller one.
<pre>
rP'Pr'P'P```v <
H @p'''u``p''<
>p-P''p-P``pu'p@
</pre>
== Turing completeness ==
Brainfuck programs can be translated to Beam programs.
This mechanism works with the 'u' instruction and marking cells to restore the store.
'''Brainfuck'''
<pre>
,[>+>+<<-]++++++[>--------<-]>[>.<]>.
</pre>
'''Beam''' (translation with the bf2beam perl script)
<pre>
v > v > v > v
>'''rP>`p+P'p(`)uv>'>'p?-P'''p+P''p+P````p-Pv>p++++++P>`p+P'p(`)uv>'>'p?-P'''p--------P``p-Pv>''>`p+P'p(`)uv>'>'p?-P'''p@``v>''p@H
> '>'p?-P' ^ > '>'p?-P' ^ > '>'p?-P' ^
^ < ^ < ^ <
</pre>
== Beam constants ==
Constants to set the beam to a specific value (requires store to be zero.). This list is not complete. Help me!
{| class="wikitable"
!Number
!Code
!Bytes
!Cycles
!Cycles / Bytes
!Cycles / Number
|-
|24
|<code><nowiki>'''>`++++++++)</nowiki></code>
|14
|34
|2.42
|1.42
|-
|24
|<code><nowiki>'''''>`+++++)-</nowiki></code>
|14
|42
|3
|1.75
|-
|25
|<code><nowiki>'''''>`+++++)</nowiki></code>
|13
|41
|3.15
|1.64
|-
|25
|<code><nowiki>'''>`++++++++)+</nowiki></code>
|15
|35
|2.33
|1.39
|-
|26
|<code><nowiki>'''''>`+++++)+</nowiki></code>
|14
|42
|3
|1.61
|-
|26
|<code><nowiki>'''>`+++++++++)-</nowiki></code>
|16
|38
|2.38
|1.46
|-
|27
|<code><nowiki>'''>`+++++++++)</nowiki></code>
|15
|37
|2.46
|1.37
|-
|28
|<code><nowiki>'''''''>`++++)</nowiki></code>
|14
|50
|3.57
|1.78
|-
|28
|<code><nowiki>'''>`+++++++++)+</nowiki></code>
|16
|38
|2.38
|1.36
|-
|28
|<code><nowiki>'''''>`++++++)--</nowiki></code>
|16
|48
|3
|1.71
|-
|}
== Implementation ==
* [http://mroman.ch/djang_media/public/eso/Beam.java Java interpreter] (DEADLINK)
* [http://eso.mroman.ch/beam/ Javascript interpreter with 2D trace] (DEADLINK)
* [http://codegolf.stackexchange.com/a/57190/42545 Online (HTML/Javascript) interpreter]
== Work in progress ==
* Finding Beam constants.
* Describing some techniques to program in Beam.
* WeBeam (to program webpages).
Help is always welcome.
== External resources ==
* [http://p.zem.fi/bf2beam.pl Brainfuck to Beam translation script]
[[Category:Languages]]
[[Category:2012]]
[[Category:Cell-based]]
[[Category:Implemented]]
[[Category:Turing complete]]
[[Category:Two-dimensional languages]]' |
Unified diff of changes made by edit (edit_diff) | '@@ -119,4 +119,16 @@
>+@@+++@>-!'''>`++++++++++)v
@+++<
+</pre>
+
+=== [[Hello, world!]] ===
+Prints <code>Hello, world!</code> (by [[User:BrainFuckGirl|BrainFuckGirl]])
+
+<pre>
+'''''>`++++++++++++++)++@'''-v
+v''@+++@@+++++++@(++++++++++`<
+>-!'>`++++++++++++++)++@-----v
+v------------(+++`<'S@-------<
+>@--------@+++@------@-------v
+H____@+++(++++++`<'''''!-<+@-<
</pre>
' |
New page size (new_size) | 5813 |
Old page size (old_size) | 5510 |
Lines added in edit (added_lines) | [
0 => '</pre>',
1 => '',
2 => '=== [[Hello, world!]] ===',
3 => 'Prints <code>Hello, world!</code> (by [[User:BrainFuckGirl|BrainFuckGirl]])',
4 => '',
5 => '<pre>',
6 => ''''''>`++++++++++++++)++@'''-v',
7 => 'v''@+++@@+++++++@(++++++++++`<',
8 => '>-!'>`++++++++++++++)++@-----v',
9 => 'v------------(+++`<'S@-------<',
10 => '>@--------@+++@------@-------v',
11 => 'H____@+++(++++++`<'''''!-<+@-<'
] |
Unix timestamp of change (timestamp) | '1754651394' |