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) | 50 |
Name of the user account (user_name) | 'Zip' |
Age of the user account (user_age) | 112735331 |
Page ID (page_id) | 23975 |
Page namespace (page_namespace) | 0 |
Page title (without namespace) (page_title) | 'Sike' |
Full page title (page_prefixedtitle) | 'Sike' |
Action (action) | 'edit' |
Edit summary/reason (summary) | 'Sike is turing complete.' |
Old content model (old_content_model) | 'wikitext' |
New content model (new_content_model) | 'wikitext' |
Old page wikitext, before the edit (old_wikitext) | ''''Sike''' [ˈsi.ke] (''SEE-kay'') is a [[deque]]-based esoteric programming language created by [[User:Zip]], based on the idea of both ''code'' and and ''data'' sharing the same collection. Instructions are shifted (i.e. dequeued) from the front of the deque, and data is popped from the back of the deque.
The name is from [https://tokipona.org/ toki pona] and means something like ''circle'' or ''cycle''.
== Syntax and Types ==
Sike has fairly traditional syntax similar to many stack-based languages. The program is a sequence of whitespace-delimited tokens. Tokens can be either a ''number'', a ''character'', or a ''word''.
All tokens, once parsed, become the program's initial deque.
=== Numbers ===
Numbers are 64-bit signed integers. They optionally begin with a minus <code>-</code>, and then contain a sequence of digits. Examples:
<span style="color:#f60;">0</span>
<span style="color:#f60;">20</span>
<span style="color:#e16;">-</span><span style="color:#f60;">1234</span>
=== Characters ===
Characters represent a single unicode codepoint. They start with quote <code>'</code> followed optionally by any character (encoded in UTF-8). If no character is specified, the character represents space (U+0020). Alternatively, after the quote a character may contain <code>u</code> followed by a hexadecimal number specifying a unicode codepoint. Examples:
<span style="color:#7d8;">'A</span> <span style="color:#999;"># LATIN CAPITAL LETTER A U+0041
</span><span style="color:#7d8;">'</span> <span style="color:#999;"># SPACE U+0020
</span><span style="color:#7d8;">'u0A</span> <span style="color:#999;"># LINE FEED U+000A</span>
=== Words ===
Tokens that do not start with quote and can not be parsed as a number are parsed as words. There is a limited number of valid words, and new words can not be defined. Examples:
<span style="color:#e16;">dup</span>
<span style="color:#e16;">swap</span>
<span style="color:#e16;">unpack</span>
=== Packs ===
In addition, there are ''packs'' which are groups of tokens surrounded by brackets <code>[]</code>. There does not need to be whitespace between brackets and surrounding tokens. Examples:
<span style="color:#999;"># Pack containing 1, 2, and 3
</span><span style="color:#5af;">[</span> <span style="color:#f60;">1</span> <span style="color:#f60;">2</span> <span style="color:#f60;">3</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">[</span><span style="color:#f60;">1</span> <span style="color:#f60;">2</span> <span style="color:#f60;">3</span><span style="color:#5af;">]</span>
<span style="color:#999;"># Empty pack
</span><span style="color:#5af;">[</span><span style="color:#5af;">]</span>
<span style="color:#5af;">[</span> <span style="color:#5af;">]</span>
<span style="color:#999;"># Packs may be nested
</span><span style="color:#5af;">[</span> <span style="color:#f60;">1</span> <span style="color:#f60;">2</span> <span style="color:#5af;">[</span> <span style="color:#f60;">3</span> <span style="color:#f60;">4</span> <span style="color:#5af;">]</span> <span style="color:#5af;">]</span>
=== Keep tokens ===
A token may also be marked ''keep'', meaning that after evaluation it is to be pushed to the back of the deque. Keep tokens begin with a dot <code>.</code>:
<span style="color:#999;"># Keep tokens of different types
</span><span style="color:#5af;">.</span><span style="color:#f60;">1</span>
<span style="color:#5af;">.</span><span style="color:#5af;">[</span> <span style="color:#f60;">1</span> <span style="color:#f60;">2</span> <span style="color:#f60;">3</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">.</span><span style="color:#7d8;">'A</span>
<span style="color:#5af;">.</span><span style="color:#e16;">swap</span>
=== Comments ===
Comments start with <code>#</code> and end at the end of the line. Examples:
<span style="color:#999;"># hello
</span><span style="color:#e16;">pack</span> <span style="color:#e16;">unpack</span> <span style="color:#999;"># do nothing</span>
== Execution ==
The program continuously runs cycles until the deque is empty. Each cycle, a value is shifted from the front of the deque and executed. The action that takes place depends on the type of the value:
* ''Words'': The corresponding word action is executed.
* ''Numbers, Characters'': The number or character is printed to <code>stdout</code>.
* ''Packs'': The pack is ''unpacked'', i.e. all values inside the pack are pushed to the back of the deque.
If the value is marked keep, it is pushed to the end only after its execution finishes.
== Words ==
The following list contains all words. The effect of each word is written in [https://gforth.org/manual/Notation.html Forth-like stack notation.]
Conditional operators output either the integer zero or one.
* <code>dup</code>: x -- x x
* <code>drop</code>: x --
* <code>swap</code>: x y -- y x
* <code>over</code>: x y -- x y x
* <code>dupd</code>: x y -- x x y
* <code>swapd</code>: x y z -- y x z
* <code>nip</code>: x y -- y
* <code>rotl</code>: x y z -- y z x
* <code>rotr</code>: x y z -- z x y
* <code>swapn</code>: x ...[n-1 items] y n -- y ... x (when ''n'' is zero, this is no-op)
* <code>+</code>: x y -- x+y
* <code>-</code>: x y -- x-y
* <code>*</code>: x y -- x*y
* <code>/</code>: x y -- x/y
* <code>%</code>: x y -- x%y
* <code>=</code>: x y -- x=y
* <code>!=</code>: x y -- x!=y
* <code><</code>: x y -- x<y
* <code>></code>: x y -- x>y
* <code><=</code>: x y -- x<=y
* <code>>=</code>: x y -- x>=y
* <code>and</code> x y - x&&y
* <code>or</code> x y -- x||y
* <code>not</code> x -- !x
* <code>neg</code> x -- -x
* <code>keep</code>: x -- .x
* <code>unkeep</code>: .x -- x
* <code>toggle-keep</code>: x -- .x ; .x -- x
* <code>if</code>: cond true false -- true|false (''true'' is outputted when ''cond'' ≠ 0, otherwise ''false'' is outputted.)
* <code>pack</code>: x -- [ x ]
* <code>packn</code>: ...[n items] n -- [ ... ]
* <code>unpack</code>: [ ... ] - ...
* <code>input</code>: -- c (reads a single character from <code>stdin</code>)
* <code>ord</code>: c -- n (converts a character to a number representing its unicode codepoint)
* <code>chr</code>: n -- c (converts a number representing a unicode codepoint to the corresponding character)
== Example Programs ==
=== Hello, World! ===
Prints <code>Hello, World!</code> to <code>stdout</code>.
<span style="color:#7d8;">'H</span> <span style="color:#7d8;">'e</span> <span style="color:#7d8;">'l</span> <span style="color:#7d8;">'l</span> <span style="color:#7d8;">'o</span> <span style="color:#7d8;">',</span> <span style="color:#7d8;">'</span> <span style="color:#7d8;">'W</span> <span style="color:#7d8;">'o</span> <span style="color:#7d8;">'r</span> <span style="color:#7d8;">'l</span> <span style="color:#7d8;">'d</span> <span style="color:#7d8;">'!</span> <span style="color:#7d8;">'u0A</span>
=== [[Cat]] ===
This program outputs its input.
<span style="color:#5af;">.</span><span style="color:#e16;">input</span>
=== [[Truth Machine]] ===
Takes a single character as input. When that character is <code>0</code>, prints <code>0</code> and returns immediately. Otherwise, prints <code>1</code> forever.
<span style="color:#e16;">input</span> <span style="color:#e16;">ord</span> <span style="color:#5af;">[</span> <span style="color:#f60;">48</span> <span style="color:#5af;">]</span> <span style="color:#e16;">-</span> <span style="color:#5af;">[</span> <span style="color:#f60;">0</span> <span style="color:#5af;">.</span><span style="color:#f60;">1</span> <span style="color:#5af;">]</span> <span style="color:#e16;">if</span>
=== Counter ===
Counts up forever, outputting numbers delimited by space.
<span style="color:#5af;">.</span><span style="color:#5af;">[</span> <span style="color:#e16;">dup</span> <span style="color:#5af;">[</span> <span style="color:#f60;">1</span> <span style="color:#5af;">]</span> <span style="color:#e16;">+</span> <span style="color:#e16;">pack</span> <span style="color:#5af;">[</span> <span style="color:#7d8;">'</span> <span style="color:#5af;">]</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">[</span> <span style="color:#f60;">0</span> <span style="color:#5af;">]</span>
=== Limited Counter ===
Same as the previous, but only counts up to 10.
<span style="color:#5af;">.</span><span style="color:#5af;">[</span>
<span style="color:#999;"># increase n
</span> <span style="color:#e16;">dup</span> <span style="color:#5af;">[</span> <span style="color:#f60;">1</span> <span style="color:#5af;">]</span> <span style="color:#e16;">+</span> <span style="color:#e16;">pack</span>
<span style="color:#999;"># compare n to 10 and drop everything if greater
</span> <span style="color:#e16;">over</span> <span style="color:#5af;">[</span> <span style="color:#f60;">10</span> <span style="color:#5af;">]</span> < <span style="color:#5af;">[</span> <span style="color:#5af;">[</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#7d8;">'u0A</span> <span style="color:#5af;">]</span> <span style="color:#5af;">[</span><span style="color:#5af;">]</span> <span style="color:#5af;">]</span> <span style="color:#e16;">if</span> <span style="color:#e16;">unpack</span>
<span style="color:#999;"># add space to print
</span> <span style="color:#5af;">[</span> <span style="color:#7d8;">'</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">]</span>
<span style="color:#5af;">[</span> <span style="color:#f60;">0</span> <span style="color:#5af;">]</span>
=== [[FizzBuzz]] ===
Does the classic FizzBuzz problem. This program does not halt.
<span style="color:#5af;">[</span><span style="color:#5af;">[</span> <span style="color:#f60;">0</span> <span style="color:#5af;">]</span><span style="color:#5af;">]</span>
<span style="color:#5af;">.</span><span style="color:#5af;">[</span>
<span style="color:#5af;">[</span><span style="color:#f60;">1</span><span style="color:#5af;">]</span> <span style="color:#e16;">+</span>
<span style="color:#999;"># select "Fizz" if n%3==0
</span> <span style="color:#e16;">dup</span> <span style="color:#5af;">[</span><span style="color:#f60;">3</span><span style="color:#5af;">]</span> <span style="color:#e16;">%</span> <span style="color:#5af;">[</span> <span style="color:#5af;">[</span><span style="color:#7d8;">'F</span> <span style="color:#7d8;">'i</span> <span style="color:#7d8;">'z</span> <span style="color:#7d8;">'z</span><span style="color:#5af;">]</span> <span style="color:#5af;">[</span><span style="color:#5af;">]</span> <span style="color:#5af;">]</span> <span style="color:#e16;">if</span>
<span style="color:#999;"># select "Buzz" if n%5==0
</span> <span style="color:#e16;">swap</span> <span style="color:#e16;">dup</span> <span style="color:#5af;">[</span><span style="color:#f60;">5</span><span style="color:#5af;">]</span> <span style="color:#e16;">%</span> <span style="color:#5af;">[</span> <span style="color:#5af;">[</span><span style="color:#7d8;">'B</span> <span style="color:#7d8;">'u</span> <span style="color:#7d8;">'z</span> <span style="color:#7d8;">'z</span><span style="color:#5af;">]</span> <span style="color:#5af;">[</span><span style="color:#5af;">]</span> <span style="color:#5af;">]</span> <span style="color:#e16;">if</span>
<span style="color:#999;"># push `[drop]` when n%3==0||n%5==0, empty pack otherwise
</span> <span style="color:#e16;">swap</span> <span style="color:#e16;">dup</span> <span style="color:#5af;">[</span><span style="color:#f60;">5</span><span style="color:#5af;">]</span> <span style="color:#e16;">%</span> <span style="color:#e16;">over</span> <span style="color:#5af;">[</span><span style="color:#f60;">3</span><span style="color:#5af;">]</span> <span style="color:#e16;">%</span> <span style="color:#e16;">or</span> <span style="color:#5af;">[</span> <span style="color:#e16;">drop</span> <span style="color:#5af;">[</span><span style="color:#5af;">]</span> <span style="color:#5af;">]</span> <span style="color:#e16;">if</span>
<span style="color:#999;"># create two packs of the number
</span> <span style="color:#999;"># one is for output, the other is for preserving the state of the counter
</span> <span style="color:#e16;">swap</span> <span style="color:#e16;">pack</span> <span style="color:#e16;">dup</span> <span style="color:#e16;">rotl</span>
<span style="color:#999;"># note: above two instructions make sure that the number is only
</span> <span style="color:#999;"># printed when we haven't pushed either Fizz or Buzz
</span>
<span style="color:#999;"># print newline (deferred)
</span> <span style="color:#999;"># swap necessary to keep number on top of stack
</span> <span style="color:#5af;">[</span> <span style="color:#5af;">[</span><span style="color:#7d8;">'u0A</span><span style="color:#5af;">]</span> <span style="color:#e16;">swap</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">]</span>
== Interpreter ==
[https://sr.ht/~thezipcreator/sike/ An interpreter for Sike written in C can be obtained here.]
=== Debugging ===
The official interpreter supports extra debugging features. When run with the <code>-d</code> flag, the interpreter starts in ''debug mode''. When in debug mode, the program can be stepped through cycle-by-cycle by pressing enter. <code>continue</code> or <code>c</code> can be typed to continue execution from the current position without stepping.
Breakpoints may also be inserted. For example:
<span style="color:#f60;">1</span> <span style="color:#f60;">2</span> breakpoint <span style="color:#f60;">3</span>
will trigger a breakpoint when <code>2</code> is executed. Breakpoints are not words; instead they simply mark the previous token as having a breakpoint. When a breakpoint is triggered, stepping is reactivated.
== External resources ==
[https://zipsegv.net/software/esolangs/sike.html Official Sike documentation] - Same content as this article.
[[Category:2025]] [[Category:Deque-based]] [[Category:Implemented]] [[Category:Self-modifying]] [[Category:Unknown computational class]]' |
New page wikitext, after the edit (new_wikitext) | ''''Sike''' [ˈsi.ke] (''SEE-kay'') is a [[deque]]-based esoteric programming language created by [[User:Zip]], based on the idea of both ''code'' and and ''data'' sharing the same collection. Instructions are shifted (i.e. dequeued) from the front of the deque, and data is popped from the back of the deque.
The name is from [https://tokipona.org/ toki pona] and means something like ''circle'' or ''cycle''.
== Syntax and Types ==
Sike has fairly traditional syntax similar to many stack-based languages. The program is a sequence of whitespace-delimited tokens. Tokens can be either a ''number'', a ''character'', or a ''word''.
All tokens, once parsed, become the program's initial deque.
=== Numbers ===
Numbers are 64-bit signed integers. They optionally begin with a minus <code>-</code>, and then contain a sequence of digits. Examples:
<span style="color:#f60;">0</span>
<span style="color:#f60;">20</span>
<span style="color:#e16;">-</span><span style="color:#f60;">1234</span>
=== Characters ===
Characters represent a single unicode codepoint. They start with quote <code>'</code> followed optionally by any character (encoded in UTF-8). If no character is specified, the character represents space (U+0020). Alternatively, after the quote a character may contain <code>u</code> followed by a hexadecimal number specifying a unicode codepoint. Examples:
<span style="color:#7d8;">'A</span> <span style="color:#999;"># LATIN CAPITAL LETTER A U+0041
</span><span style="color:#7d8;">'</span> <span style="color:#999;"># SPACE U+0020
</span><span style="color:#7d8;">'u0A</span> <span style="color:#999;"># LINE FEED U+000A</span>
=== Words ===
Tokens that do not start with quote and can not be parsed as a number are parsed as words. There is a limited number of valid words, and new words can not be defined. Examples:
<span style="color:#e16;">dup</span>
<span style="color:#e16;">swap</span>
<span style="color:#e16;">unpack</span>
=== Packs ===
In addition, there are ''packs'' which are groups of tokens surrounded by brackets <code>[]</code>. There does not need to be whitespace between brackets and surrounding tokens. Examples:
<span style="color:#999;"># Pack containing 1, 2, and 3
</span><span style="color:#5af;">[</span> <span style="color:#f60;">1</span> <span style="color:#f60;">2</span> <span style="color:#f60;">3</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">[</span><span style="color:#f60;">1</span> <span style="color:#f60;">2</span> <span style="color:#f60;">3</span><span style="color:#5af;">]</span>
<span style="color:#999;"># Empty pack
</span><span style="color:#5af;">[</span><span style="color:#5af;">]</span>
<span style="color:#5af;">[</span> <span style="color:#5af;">]</span>
<span style="color:#999;"># Packs may be nested
</span><span style="color:#5af;">[</span> <span style="color:#f60;">1</span> <span style="color:#f60;">2</span> <span style="color:#5af;">[</span> <span style="color:#f60;">3</span> <span style="color:#f60;">4</span> <span style="color:#5af;">]</span> <span style="color:#5af;">]</span>
=== Keep tokens ===
A token may also be marked ''keep'', meaning that after evaluation it is to be pushed to the back of the deque. Keep tokens begin with a dot <code>.</code>:
<span style="color:#999;"># Keep tokens of different types
</span><span style="color:#5af;">.</span><span style="color:#f60;">1</span>
<span style="color:#5af;">.</span><span style="color:#5af;">[</span> <span style="color:#f60;">1</span> <span style="color:#f60;">2</span> <span style="color:#f60;">3</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">.</span><span style="color:#7d8;">'A</span>
<span style="color:#5af;">.</span><span style="color:#e16;">swap</span>
=== Comments ===
Comments start with <code>#</code> and end at the end of the line. Examples:
<span style="color:#999;"># hello
</span><span style="color:#e16;">pack</span> <span style="color:#e16;">unpack</span> <span style="color:#999;"># do nothing</span>
== Execution ==
The program continuously runs cycles until the deque is empty. Each cycle, a value is shifted from the front of the deque and executed. The action that takes place depends on the type of the value:
* ''Words'': The corresponding word action is executed.
* ''Numbers, Characters'': The number or character is printed to <code>stdout</code>.
* ''Packs'': The pack is ''unpacked'', i.e. all values inside the pack are pushed to the back of the deque.
If the value is marked keep, it is pushed to the end only after its execution finishes.
== Words ==
The following list contains all words. The effect of each word is written in [https://gforth.org/manual/Notation.html Forth-like stack notation.]
Conditional operators output either the integer zero or one.
* <code>dup</code>: x -- x x
* <code>drop</code>: x --
* <code>swap</code>: x y -- y x
* <code>over</code>: x y -- x y x
* <code>dupd</code>: x y -- x x y
* <code>swapd</code>: x y z -- y x z
* <code>nip</code>: x y -- y
* <code>rotl</code>: x y z -- y z x
* <code>rotr</code>: x y z -- z x y
* <code>swapn</code>: x ...[n-1 items] y n -- y ... x (when ''n'' is zero, this is no-op)
* <code>+</code>: x y -- x+y
* <code>-</code>: x y -- x-y
* <code>*</code>: x y -- x*y
* <code>/</code>: x y -- x/y
* <code>%</code>: x y -- x%y
* <code>=</code>: x y -- x=y
* <code>!=</code>: x y -- x!=y
* <code><</code>: x y -- x<y
* <code>></code>: x y -- x>y
* <code><=</code>: x y -- x<=y
* <code>>=</code>: x y -- x>=y
* <code>and</code> x y - x&&y
* <code>or</code> x y -- x||y
* <code>not</code> x -- !x
* <code>neg</code> x -- -x
* <code>keep</code>: x -- .x
* <code>unkeep</code>: .x -- x
* <code>toggle-keep</code>: x -- .x ; .x -- x
* <code>if</code>: cond true false -- true|false (''true'' is outputted when ''cond'' ≠ 0, otherwise ''false'' is outputted.)
* <code>pack</code>: x -- [ x ]
* <code>packn</code>: ...[n items] n -- [ ... ]
* <code>unpack</code>: [ ... ] - ...
* <code>input</code>: -- c (reads a single character from <code>stdin</code>)
* <code>ord</code>: c -- n (converts a character to a number representing its unicode codepoint)
* <code>chr</code>: n -- c (converts a number representing a unicode codepoint to the corresponding character)
== Example Programs ==
=== Hello, World! ===
Prints <code>Hello, World!</code> to <code>stdout</code>.
<span style="color:#7d8;">'H</span> <span style="color:#7d8;">'e</span> <span style="color:#7d8;">'l</span> <span style="color:#7d8;">'l</span> <span style="color:#7d8;">'o</span> <span style="color:#7d8;">',</span> <span style="color:#7d8;">'</span> <span style="color:#7d8;">'W</span> <span style="color:#7d8;">'o</span> <span style="color:#7d8;">'r</span> <span style="color:#7d8;">'l</span> <span style="color:#7d8;">'d</span> <span style="color:#7d8;">'!</span> <span style="color:#7d8;">'u0A</span>
=== [[Cat]] ===
This program outputs its input.
<span style="color:#5af;">.</span><span style="color:#e16;">input</span>
=== [[Truth Machine]] ===
Takes a single character as input. When that character is <code>0</code>, prints <code>0</code> and returns immediately. Otherwise, prints <code>1</code> forever.
<span style="color:#e16;">input</span> <span style="color:#e16;">ord</span> <span style="color:#5af;">[</span> <span style="color:#f60;">48</span> <span style="color:#5af;">]</span> <span style="color:#e16;">-</span> <span style="color:#5af;">[</span> <span style="color:#f60;">0</span> <span style="color:#5af;">.</span><span style="color:#f60;">1</span> <span style="color:#5af;">]</span> <span style="color:#e16;">if</span>
=== Counter ===
Counts up forever, outputting numbers delimited by space.
<span style="color:#5af;">.</span><span style="color:#5af;">[</span> <span style="color:#e16;">dup</span> <span style="color:#5af;">[</span> <span style="color:#f60;">1</span> <span style="color:#5af;">]</span> <span style="color:#e16;">+</span> <span style="color:#e16;">pack</span> <span style="color:#5af;">[</span> <span style="color:#7d8;">'</span> <span style="color:#5af;">]</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">[</span> <span style="color:#f60;">0</span> <span style="color:#5af;">]</span>
=== Limited Counter ===
Same as the previous, but only counts up to 10.
<span style="color:#5af;">.</span><span style="color:#5af;">[</span>
<span style="color:#999;"># increase n
</span> <span style="color:#e16;">dup</span> <span style="color:#5af;">[</span> <span style="color:#f60;">1</span> <span style="color:#5af;">]</span> <span style="color:#e16;">+</span> <span style="color:#e16;">pack</span>
<span style="color:#999;"># compare n to 10 and drop everything if greater
</span> <span style="color:#e16;">over</span> <span style="color:#5af;">[</span> <span style="color:#f60;">10</span> <span style="color:#5af;">]</span> < <span style="color:#5af;">[</span> <span style="color:#5af;">[</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#e16;">drop</span> <span style="color:#7d8;">'u0A</span> <span style="color:#5af;">]</span> <span style="color:#5af;">[</span><span style="color:#5af;">]</span> <span style="color:#5af;">]</span> <span style="color:#e16;">if</span> <span style="color:#e16;">unpack</span>
<span style="color:#999;"># add space to print
</span> <span style="color:#5af;">[</span> <span style="color:#7d8;">'</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">]</span>
<span style="color:#5af;">[</span> <span style="color:#f60;">0</span> <span style="color:#5af;">]</span>
=== [[FizzBuzz]] ===
Does the classic FizzBuzz problem. This program does not halt.
<span style="color:#5af;">[</span><span style="color:#5af;">[</span> <span style="color:#f60;">0</span> <span style="color:#5af;">]</span><span style="color:#5af;">]</span>
<span style="color:#5af;">.</span><span style="color:#5af;">[</span>
<span style="color:#5af;">[</span><span style="color:#f60;">1</span><span style="color:#5af;">]</span> <span style="color:#e16;">+</span>
<span style="color:#999;"># select "Fizz" if n%3==0
</span> <span style="color:#e16;">dup</span> <span style="color:#5af;">[</span><span style="color:#f60;">3</span><span style="color:#5af;">]</span> <span style="color:#e16;">%</span> <span style="color:#5af;">[</span> <span style="color:#5af;">[</span><span style="color:#7d8;">'F</span> <span style="color:#7d8;">'i</span> <span style="color:#7d8;">'z</span> <span style="color:#7d8;">'z</span><span style="color:#5af;">]</span> <span style="color:#5af;">[</span><span style="color:#5af;">]</span> <span style="color:#5af;">]</span> <span style="color:#e16;">if</span>
<span style="color:#999;"># select "Buzz" if n%5==0
</span> <span style="color:#e16;">swap</span> <span style="color:#e16;">dup</span> <span style="color:#5af;">[</span><span style="color:#f60;">5</span><span style="color:#5af;">]</span> <span style="color:#e16;">%</span> <span style="color:#5af;">[</span> <span style="color:#5af;">[</span><span style="color:#7d8;">'B</span> <span style="color:#7d8;">'u</span> <span style="color:#7d8;">'z</span> <span style="color:#7d8;">'z</span><span style="color:#5af;">]</span> <span style="color:#5af;">[</span><span style="color:#5af;">]</span> <span style="color:#5af;">]</span> <span style="color:#e16;">if</span>
<span style="color:#999;"># push `[drop]` when n%3==0||n%5==0, empty pack otherwise
</span> <span style="color:#e16;">swap</span> <span style="color:#e16;">dup</span> <span style="color:#5af;">[</span><span style="color:#f60;">5</span><span style="color:#5af;">]</span> <span style="color:#e16;">%</span> <span style="color:#e16;">over</span> <span style="color:#5af;">[</span><span style="color:#f60;">3</span><span style="color:#5af;">]</span> <span style="color:#e16;">%</span> <span style="color:#e16;">or</span> <span style="color:#5af;">[</span> <span style="color:#e16;">drop</span> <span style="color:#5af;">[</span><span style="color:#5af;">]</span> <span style="color:#5af;">]</span> <span style="color:#e16;">if</span>
<span style="color:#999;"># create two packs of the number
</span> <span style="color:#999;"># one is for output, the other is for preserving the state of the counter
</span> <span style="color:#e16;">swap</span> <span style="color:#e16;">pack</span> <span style="color:#e16;">dup</span> <span style="color:#e16;">rotl</span>
<span style="color:#999;"># note: above two instructions make sure that the number is only
</span> <span style="color:#999;"># printed when we haven't pushed either Fizz or Buzz
</span>
<span style="color:#999;"># print newline (deferred)
</span> <span style="color:#999;"># swap necessary to keep number on top of stack
</span> <span style="color:#5af;">[</span> <span style="color:#5af;">[</span><span style="color:#7d8;">'u0A</span><span style="color:#5af;">]</span> <span style="color:#e16;">swap</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">]</span>
== Computational class ==
Sike is [[Turing complete]]. This can be shown by a translation argument; the following python code (written by [[User:Pro465|Moja]]) translates [[cyclic tag]] to Sike:
<span style="color:#e16;">def</span> <span style="color:#84f;">step</span>(n):
<span style="color:#e16;">return</span> [<span style="color:#7d8;">"[[]]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">f"[</span><span style="color:#f44;">{</span><span style="color:#f60;">2</span><span style="color:#5af;">*</span>n<span style="color:#f44;">}</span><span style="color:#7d8;">]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"swapn"</span>]<span style="color:#5af;">*</span><span style="color:#f60;">2</span>
<span style="color:#e16;">def</span> <span style="color:#84f;">convert_bit</span>(bit<span style="color:#5af;">,</span> n):
<span style="color:#e16;">if</span> bit<span style="color:#5af;">==</span><span style="color:#7d8;">"0"</span>:
<span style="color:#e16;">return</span> <span style="color:#84f;">step</span>(n)
<span style="color:#e16;">else</span>:
<span style="color:#e16;">return</span> [<span style="color:#7d8;">f"[</span><span style="color:#f44;">{</span><span style="color:#f60;">2</span><span style="color:#5af;">*</span>n<span style="color:#f44;">}</span><span style="color:#7d8;">]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"packn"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"dup"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"unpack"</span><span style="color:#5af;">,</span>
<span style="color:#7d8;">f"[</span><span style="color:#f44;">{</span><span style="color:#f60;">2</span><span style="color:#5af;">*</span>n<span style="color:#5af;">-</span><span style="color:#f60;">1</span><span style="color:#f44;">}</span><span style="color:#7d8;">]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"packn"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"drop"</span><span style="color:#5af;">,</span>
<span style="color:#7d8;">"unpack"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"unpack"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"swapn"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"unpack"</span>] <span style="color:#5af;">+</span> <span style="color:#84f;">step</span>(n)
<span style="color:#e16;">def</span> <span style="color:#84f;">convert_block</span>(b<span style="color:#5af;">,</span> n):
res<span style="color:#5af;">=</span>[]
<span style="color:#e16;">for</span> bit <span style="color:#e16;">in</span> b:
res<span style="color:#5af;">+=</span><span style="color:#84f;">convert_bit</span>(bit<span style="color:#5af;">,</span> n)
res<span style="color:#5af;">+=</span>[<span style="color:#7d8;">"[]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">f"</span><span style="color:#f44;">{</span><span style="color:#84f;">len</span>(res)<span style="color:#5af;">+</span><span style="color:#f60;">1</span><span style="color:#f44;">}</span><span style="color:#7d8;">"</span>]
<span style="color:#e16;">return</span> <span style="color:#7d8;">f"[[</span><span style="color:#f44;">{</span><span style="color:#7d8;">' '</span>.<span style="color:#84f;">join</span>(res)<span style="color:#f44;">}</span><span style="color:#7d8;">]] drop"</span>
<span style="color:#e16;">def</span> <span style="color:#84f;">convert_prog</span>(table<span style="color:#5af;">,</span> input):
n<span style="color:#5af;">=</span><span style="color:#84f;">len</span>(table)
<span style="color:#e16;">return</span> (<span style="color:#7d8;">" "</span>.<span style="color:#84f;">join</span>(<span style="color:#7d8;">" "</span>.<span style="color:#84f;">join</span>(<span style="color:#84f;">convert_bit</span>(bit<span style="color:#5af;">,</span> n)) <span style="color:#e16;">for</span> bit <span style="color:#e16;">in</span> input)<span style="color:#5af;">+</span><span style="color:#7d8;">" "</span><span style="color:#5af;">+</span>
<span style="color:#7d8;">" "</span>.<span style="color:#84f;">join</span>(<span style="color:#84f;">convert_block</span>(b<span style="color:#5af;">,</span> n) <span style="color:#e16;">for</span> b <span style="color:#e16;">in</span> table))
input<span style="color:#5af;">=</span><span style="color:#7d8;">"100"</span><span style="color:#5af;">*</span><span style="color:#f60;">1</span>
table<span style="color:#5af;">=</span>[<span style="color:#7d8;">"010001"</span><span style="color:#5af;">,</span><span style="color:#7d8;">"100"</span><span style="color:#5af;">,</span><span style="color:#7d8;">"100100100"</span><span style="color:#5af;">,</span><span style="color:#7d8;">""</span><span style="color:#5af;">,</span><span style="color:#7d8;">""</span><span style="color:#5af;">,</span><span style="color:#7d8;">""</span>]
<span style="color:#84f;">print</span>(<span style="color:#84f;">convert_prog</span>(table<span style="color:#5af;">,</span>input))
== Interpreter ==
[https://sr.ht/~thezipcreator/sike/ An interpreter for Sike written in C can be obtained here.]
=== Debugging ===
The official interpreter supports extra debugging features. When run with the <code>-d</code> flag, the interpreter starts in ''debug mode''. When in debug mode, the program can be stepped through cycle-by-cycle by pressing enter. <code>continue</code> or <code>c</code> can be typed to continue execution from the current position without stepping.
Breakpoints may also be inserted. For example:
<span style="color:#f60;">1</span> <span style="color:#f60;">2</span> breakpoint <span style="color:#f60;">3</span>
will trigger a breakpoint when <code>2</code> is executed. Breakpoints are not words; instead they simply mark the previous token as having a breakpoint. When a breakpoint is triggered, stepping is reactivated.
== External resources ==
[https://zipsegv.net/software/esolangs/sike.html Official Sike documentation] - Same content as this article.
[[Category:2025]] [[Category:Deque-based]] [[Category:Implemented]] [[Category:Self-modifying]] [[Category:Turing complete]]' |
Unified diff of changes made by edit (edit_diff) | '@@ -138,4 +138,33 @@
</span> <span style="color:#5af;">[</span> <span style="color:#5af;">[</span><span style="color:#7d8;">'u0A</span><span style="color:#5af;">]</span> <span style="color:#e16;">swap</span> <span style="color:#5af;">]</span>
<span style="color:#5af;">]</span>
+== Computational class ==
+Sike is [[Turing complete]]. This can be shown by a translation argument; the following python code (written by [[User:Pro465|Moja]]) translates [[cyclic tag]] to Sike:
+ <span style="color:#e16;">def</span> <span style="color:#84f;">step</span>(n):
+ <span style="color:#e16;">return</span> [<span style="color:#7d8;">"[[]]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">f"[</span><span style="color:#f44;">{</span><span style="color:#f60;">2</span><span style="color:#5af;">*</span>n<span style="color:#f44;">}</span><span style="color:#7d8;">]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"swapn"</span>]<span style="color:#5af;">*</span><span style="color:#f60;">2</span>
+
+ <span style="color:#e16;">def</span> <span style="color:#84f;">convert_bit</span>(bit<span style="color:#5af;">,</span> n):
+ <span style="color:#e16;">if</span> bit<span style="color:#5af;">==</span><span style="color:#7d8;">"0"</span>:
+ <span style="color:#e16;">return</span> <span style="color:#84f;">step</span>(n)
+ <span style="color:#e16;">else</span>:
+ <span style="color:#e16;">return</span> [<span style="color:#7d8;">f"[</span><span style="color:#f44;">{</span><span style="color:#f60;">2</span><span style="color:#5af;">*</span>n<span style="color:#f44;">}</span><span style="color:#7d8;">]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"packn"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"dup"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"unpack"</span><span style="color:#5af;">,</span>
+ <span style="color:#7d8;">f"[</span><span style="color:#f44;">{</span><span style="color:#f60;">2</span><span style="color:#5af;">*</span>n<span style="color:#5af;">-</span><span style="color:#f60;">1</span><span style="color:#f44;">}</span><span style="color:#7d8;">]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"packn"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"drop"</span><span style="color:#5af;">,</span>
+ <span style="color:#7d8;">"unpack"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"unpack"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"swapn"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"unpack"</span>] <span style="color:#5af;">+</span> <span style="color:#84f;">step</span>(n)
+
+ <span style="color:#e16;">def</span> <span style="color:#84f;">convert_block</span>(b<span style="color:#5af;">,</span> n):
+ res<span style="color:#5af;">=</span>[]
+ <span style="color:#e16;">for</span> bit <span style="color:#e16;">in</span> b:
+ res<span style="color:#5af;">+=</span><span style="color:#84f;">convert_bit</span>(bit<span style="color:#5af;">,</span> n)
+ res<span style="color:#5af;">+=</span>[<span style="color:#7d8;">"[]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">f"</span><span style="color:#f44;">{</span><span style="color:#84f;">len</span>(res)<span style="color:#5af;">+</span><span style="color:#f60;">1</span><span style="color:#f44;">}</span><span style="color:#7d8;">"</span>]
+ <span style="color:#e16;">return</span> <span style="color:#7d8;">f"[[</span><span style="color:#f44;">{</span><span style="color:#7d8;">' '</span>.<span style="color:#84f;">join</span>(res)<span style="color:#f44;">}</span><span style="color:#7d8;">]] drop"</span>
+
+ <span style="color:#e16;">def</span> <span style="color:#84f;">convert_prog</span>(table<span style="color:#5af;">,</span> input):
+ n<span style="color:#5af;">=</span><span style="color:#84f;">len</span>(table)
+ <span style="color:#e16;">return</span> (<span style="color:#7d8;">" "</span>.<span style="color:#84f;">join</span>(<span style="color:#7d8;">" "</span>.<span style="color:#84f;">join</span>(<span style="color:#84f;">convert_bit</span>(bit<span style="color:#5af;">,</span> n)) <span style="color:#e16;">for</span> bit <span style="color:#e16;">in</span> input)<span style="color:#5af;">+</span><span style="color:#7d8;">" "</span><span style="color:#5af;">+</span>
+ <span style="color:#7d8;">" "</span>.<span style="color:#84f;">join</span>(<span style="color:#84f;">convert_block</span>(b<span style="color:#5af;">,</span> n) <span style="color:#e16;">for</span> b <span style="color:#e16;">in</span> table))
+
+ input<span style="color:#5af;">=</span><span style="color:#7d8;">"100"</span><span style="color:#5af;">*</span><span style="color:#f60;">1</span>
+ table<span style="color:#5af;">=</span>[<span style="color:#7d8;">"010001"</span><span style="color:#5af;">,</span><span style="color:#7d8;">"100"</span><span style="color:#5af;">,</span><span style="color:#7d8;">"100100100"</span><span style="color:#5af;">,</span><span style="color:#7d8;">""</span><span style="color:#5af;">,</span><span style="color:#7d8;">""</span><span style="color:#5af;">,</span><span style="color:#7d8;">""</span>]
+
+ <span style="color:#84f;">print</span>(<span style="color:#84f;">convert_prog</span>(table<span style="color:#5af;">,</span>input))
== Interpreter ==
@@ -150,3 +179,3 @@
[https://zipsegv.net/software/esolangs/sike.html Official Sike documentation] - Same content as this article.
-[[Category:2025]] [[Category:Deque-based]] [[Category:Implemented]] [[Category:Self-modifying]] [[Category:Unknown computational class]]
+[[Category:2025]] [[Category:Deque-based]] [[Category:Implemented]] [[Category:Self-modifying]] [[Category:Turing complete]]
' |
New page size (new_size) | 19828 |
Old page size (old_size) | 14659 |
Lines added in edit (added_lines) | [
0 => '== Computational class ==',
1 => 'Sike is [[Turing complete]]. This can be shown by a translation argument; the following python code (written by [[User:Pro465|Moja]]) translates [[cyclic tag]] to Sike: ',
2 => ' <span style="color:#e16;">def</span> <span style="color:#84f;">step</span>(n):',
3 => ' <span style="color:#e16;">return</span> [<span style="color:#7d8;">"[[]]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">f"[</span><span style="color:#f44;">{</span><span style="color:#f60;">2</span><span style="color:#5af;">*</span>n<span style="color:#f44;">}</span><span style="color:#7d8;">]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"swapn"</span>]<span style="color:#5af;">*</span><span style="color:#f60;">2</span>',
4 => ' ',
5 => ' <span style="color:#e16;">def</span> <span style="color:#84f;">convert_bit</span>(bit<span style="color:#5af;">,</span> n):',
6 => ' <span style="color:#e16;">if</span> bit<span style="color:#5af;">==</span><span style="color:#7d8;">"0"</span>:',
7 => ' <span style="color:#e16;">return</span> <span style="color:#84f;">step</span>(n)',
8 => ' <span style="color:#e16;">else</span>:',
9 => ' <span style="color:#e16;">return</span> [<span style="color:#7d8;">f"[</span><span style="color:#f44;">{</span><span style="color:#f60;">2</span><span style="color:#5af;">*</span>n<span style="color:#f44;">}</span><span style="color:#7d8;">]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"packn"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"dup"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"unpack"</span><span style="color:#5af;">,</span>',
10 => ' <span style="color:#7d8;">f"[</span><span style="color:#f44;">{</span><span style="color:#f60;">2</span><span style="color:#5af;">*</span>n<span style="color:#5af;">-</span><span style="color:#f60;">1</span><span style="color:#f44;">}</span><span style="color:#7d8;">]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"packn"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"drop"</span><span style="color:#5af;">,</span> ',
11 => ' <span style="color:#7d8;">"unpack"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"unpack"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"swapn"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">"unpack"</span>] <span style="color:#5af;">+</span> <span style="color:#84f;">step</span>(n)',
12 => ' ',
13 => ' <span style="color:#e16;">def</span> <span style="color:#84f;">convert_block</span>(b<span style="color:#5af;">,</span> n):',
14 => ' res<span style="color:#5af;">=</span>[]',
15 => ' <span style="color:#e16;">for</span> bit <span style="color:#e16;">in</span> b:',
16 => ' res<span style="color:#5af;">+=</span><span style="color:#84f;">convert_bit</span>(bit<span style="color:#5af;">,</span> n)',
17 => ' res<span style="color:#5af;">+=</span>[<span style="color:#7d8;">"[]"</span><span style="color:#5af;">,</span> <span style="color:#7d8;">f"</span><span style="color:#f44;">{</span><span style="color:#84f;">len</span>(res)<span style="color:#5af;">+</span><span style="color:#f60;">1</span><span style="color:#f44;">}</span><span style="color:#7d8;">"</span>]',
18 => ' <span style="color:#e16;">return</span> <span style="color:#7d8;">f"[[</span><span style="color:#f44;">{</span><span style="color:#7d8;">' '</span>.<span style="color:#84f;">join</span>(res)<span style="color:#f44;">}</span><span style="color:#7d8;">]] drop"</span>',
19 => ' ',
20 => ' <span style="color:#e16;">def</span> <span style="color:#84f;">convert_prog</span>(table<span style="color:#5af;">,</span> input):',
21 => ' n<span style="color:#5af;">=</span><span style="color:#84f;">len</span>(table)',
22 => ' <span style="color:#e16;">return</span> (<span style="color:#7d8;">" "</span>.<span style="color:#84f;">join</span>(<span style="color:#7d8;">" "</span>.<span style="color:#84f;">join</span>(<span style="color:#84f;">convert_bit</span>(bit<span style="color:#5af;">,</span> n)) <span style="color:#e16;">for</span> bit <span style="color:#e16;">in</span> input)<span style="color:#5af;">+</span><span style="color:#7d8;">" "</span><span style="color:#5af;">+</span>',
23 => ' <span style="color:#7d8;">" "</span>.<span style="color:#84f;">join</span>(<span style="color:#84f;">convert_block</span>(b<span style="color:#5af;">,</span> n) <span style="color:#e16;">for</span> b <span style="color:#e16;">in</span> table))',
24 => ' ',
25 => ' input<span style="color:#5af;">=</span><span style="color:#7d8;">"100"</span><span style="color:#5af;">*</span><span style="color:#f60;">1</span>',
26 => ' table<span style="color:#5af;">=</span>[<span style="color:#7d8;">"010001"</span><span style="color:#5af;">,</span><span style="color:#7d8;">"100"</span><span style="color:#5af;">,</span><span style="color:#7d8;">"100100100"</span><span style="color:#5af;">,</span><span style="color:#7d8;">""</span><span style="color:#5af;">,</span><span style="color:#7d8;">""</span><span style="color:#5af;">,</span><span style="color:#7d8;">""</span>]',
27 => ' ',
28 => ' <span style="color:#84f;">print</span>(<span style="color:#84f;">convert_prog</span>(table<span style="color:#5af;">,</span>input))',
29 => '[[Category:2025]] [[Category:Deque-based]] [[Category:Implemented]] [[Category:Self-modifying]] [[Category:Turing complete]]'
] |
Unix timestamp of change (timestamp) | '1762885554' |