diff --git a/www/images/.gitkeep b/www/data/css/.gitkeep similarity index 100% rename from www/images/.gitkeep rename to www/data/css/.gitkeep diff --git a/www/data/styles.css b/www/data/css/styles.css similarity index 100% rename from www/data/styles.css rename to www/data/css/styles.css diff --git a/www/data/images/.gitkeep b/www/data/images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/www/images/favicon.png b/www/data/images/favicon.png similarity index 100% rename from www/images/favicon.png rename to www/data/images/favicon.png diff --git a/www/images/log/bsod_1.jpg b/www/data/images/log/bsod_1.jpg similarity index 100% rename from www/images/log/bsod_1.jpg rename to www/data/images/log/bsod_1.jpg diff --git a/www/images/log/bsod_2.jpg b/www/data/images/log/bsod_2.jpg similarity index 100% rename from www/images/log/bsod_2.jpg rename to www/data/images/log/bsod_2.jpg diff --git a/www/images/log/captcha_img.png b/www/data/images/log/captcha_img.png similarity index 100% rename from www/images/log/captcha_img.png rename to www/data/images/log/captcha_img.png diff --git a/www/images/log/ms_de_v1.jpg b/www/data/images/log/ms_de_v1.jpg similarity index 100% rename from www/images/log/ms_de_v1.jpg rename to www/data/images/log/ms_de_v1.jpg diff --git a/www/images/log/ms_de_v2.jpg b/www/data/images/log/ms_de_v2.jpg similarity index 100% rename from www/images/log/ms_de_v2.jpg rename to www/data/images/log/ms_de_v2.jpg diff --git a/www/images/log/ms_de_v3.jpg b/www/data/images/log/ms_de_v3.jpg similarity index 100% rename from www/images/log/ms_de_v3.jpg rename to www/data/images/log/ms_de_v3.jpg diff --git a/www/images/log/ms_de_v4.jpg b/www/data/images/log/ms_de_v4.jpg similarity index 100% rename from www/images/log/ms_de_v4.jpg rename to www/data/images/log/ms_de_v4.jpg diff --git a/www/images/logo.png b/www/data/images/logo.png similarity index 100% rename from www/images/logo.png rename to www/data/images/logo.png diff --git a/www/images/program_thumbnails/All in One.png b/www/data/images/program_thumbnails/All in One.png similarity index 100% rename from www/images/program_thumbnails/All in One.png rename to www/data/images/program_thumbnails/All in One.png diff --git a/www/images/program_thumbnails/Beepster.png b/www/data/images/program_thumbnails/Beepster.png similarity index 100% rename from www/images/program_thumbnails/Beepster.png rename to www/data/images/program_thumbnails/Beepster.png diff --git a/www/images/program_thumbnails/BefunUtils.png b/www/data/images/program_thumbnails/BefunUtils.png similarity index 100% rename from www/images/program_thumbnails/BefunUtils.png rename to www/data/images/program_thumbnails/BefunUtils.png diff --git a/www/images/program_thumbnails/BefunZ.png b/www/data/images/program_thumbnails/BefunZ.png similarity index 100% rename from www/images/program_thumbnails/BefunZ.png rename to www/data/images/program_thumbnails/BefunZ.png diff --git a/www/images/program_thumbnails/Blitzer.png b/www/data/images/program_thumbnails/Blitzer.png similarity index 100% rename from www/images/program_thumbnails/Blitzer.png rename to www/data/images/program_thumbnails/Blitzer.png diff --git a/www/images/program_thumbnails/Borderline Defense.png b/www/data/images/program_thumbnails/Borderline Defense.png similarity index 100% rename from www/images/program_thumbnails/Borderline Defense.png rename to www/data/images/program_thumbnails/Borderline Defense.png diff --git a/www/images/program_thumbnails/ClipCorn.png b/www/data/images/program_thumbnails/ClipCorn.png similarity index 100% rename from www/images/program_thumbnails/ClipCorn.png rename to www/data/images/program_thumbnails/ClipCorn.png diff --git a/www/images/program_thumbnails/Crystal Grid.png b/www/data/images/program_thumbnails/Crystal Grid.png similarity index 100% rename from www/images/program_thumbnails/Crystal Grid.png rename to www/data/images/program_thumbnails/Crystal Grid.png diff --git a/www/images/program_thumbnails/Deal or no Deal.png b/www/data/images/program_thumbnails/Deal or no Deal.png similarity index 100% rename from www/images/program_thumbnails/Deal or no Deal.png rename to www/data/images/program_thumbnails/Deal or no Deal.png diff --git a/www/images/program_thumbnails/Dynamic Link Fighters.png b/www/data/images/program_thumbnails/Dynamic Link Fighters.png similarity index 100% rename from www/images/program_thumbnails/Dynamic Link Fighters.png rename to www/data/images/program_thumbnails/Dynamic Link Fighters.png diff --git a/www/images/program_thumbnails/ExtendedGitGraph.png b/www/data/images/program_thumbnails/ExtendedGitGraph.png similarity index 100% rename from www/images/program_thumbnails/ExtendedGitGraph.png rename to www/data/images/program_thumbnails/ExtendedGitGraph.png diff --git a/www/images/program_thumbnails/Graveyard of Numbers.png b/www/data/images/program_thumbnails/Graveyard of Numbers.png similarity index 100% rename from www/images/program_thumbnails/Graveyard of Numbers.png rename to www/data/images/program_thumbnails/Graveyard of Numbers.png diff --git a/www/images/program_thumbnails/H2O.png b/www/data/images/program_thumbnails/H2O.png similarity index 100% rename from www/images/program_thumbnails/H2O.png rename to www/data/images/program_thumbnails/H2O.png diff --git a/www/images/program_thumbnails/HexSolver.png b/www/data/images/program_thumbnails/HexSolver.png similarity index 100% rename from www/images/program_thumbnails/HexSolver.png rename to www/data/images/program_thumbnails/HexSolver.png diff --git a/www/images/program_thumbnails/Infinity Tournament.png b/www/data/images/program_thumbnails/Infinity Tournament.png similarity index 100% rename from www/images/program_thumbnails/Infinity Tournament.png rename to www/data/images/program_thumbnails/Infinity Tournament.png diff --git a/www/images/program_thumbnails/Keygen Dancer.png b/www/data/images/program_thumbnails/Keygen Dancer.png similarity index 100% rename from www/images/program_thumbnails/Keygen Dancer.png rename to www/data/images/program_thumbnails/Keygen Dancer.png diff --git a/www/images/program_thumbnails/LAN-Control.png b/www/data/images/program_thumbnails/LAN-Control.png similarity index 100% rename from www/images/program_thumbnails/LAN-Control.png rename to www/data/images/program_thumbnails/LAN-Control.png diff --git a/www/images/program_thumbnails/LightShow.png b/www/data/images/program_thumbnails/LightShow.png similarity index 100% rename from www/images/program_thumbnails/LightShow.png rename to www/data/images/program_thumbnails/LightShow.png diff --git a/www/images/program_thumbnails/Logistixx.png b/www/data/images/program_thumbnails/Logistixx.png similarity index 100% rename from www/images/program_thumbnails/Logistixx.png rename to www/data/images/program_thumbnails/Logistixx.png diff --git a/www/images/program_thumbnails/NedSchend.png b/www/data/images/program_thumbnails/NedSchend.png similarity index 100% rename from www/images/program_thumbnails/NedSchend.png rename to www/data/images/program_thumbnails/NedSchend.png diff --git a/www/images/program_thumbnails/Niripsa.png b/www/data/images/program_thumbnails/Niripsa.png similarity index 100% rename from www/images/program_thumbnails/Niripsa.png rename to www/data/images/program_thumbnails/Niripsa.png diff --git a/www/images/program_thumbnails/Passpad.png b/www/data/images/program_thumbnails/Passpad.png similarity index 100% rename from www/images/program_thumbnails/Passpad.png rename to www/data/images/program_thumbnails/Passpad.png diff --git a/www/images/program_thumbnails/Penner-Bot.png b/www/data/images/program_thumbnails/Penner-Bot.png similarity index 100% rename from www/images/program_thumbnails/Penner-Bot.png rename to www/data/images/program_thumbnails/Penner-Bot.png diff --git a/www/images/program_thumbnails/Serpilicum.png b/www/data/images/program_thumbnails/Serpilicum.png similarity index 100% rename from www/images/program_thumbnails/Serpilicum.png rename to www/data/images/program_thumbnails/Serpilicum.png diff --git a/www/images/program_thumbnails/SharkSim.png b/www/data/images/program_thumbnails/SharkSim.png similarity index 100% rename from www/images/program_thumbnails/SharkSim.png rename to www/data/images/program_thumbnails/SharkSim.png diff --git a/www/images/program_thumbnails/Sieb des Eratosthenes.png b/www/data/images/program_thumbnails/Sieb des Eratosthenes.png similarity index 100% rename from www/images/program_thumbnails/Sieb des Eratosthenes.png rename to www/data/images/program_thumbnails/Sieb des Eratosthenes.png diff --git a/www/images/program_thumbnails/Smart Directory Lister.png b/www/data/images/program_thumbnails/Smart Directory Lister.png similarity index 100% rename from www/images/program_thumbnails/Smart Directory Lister.png rename to www/data/images/program_thumbnails/Smart Directory Lister.png diff --git a/www/images/program_thumbnails/SuperBitBros.png b/www/data/images/program_thumbnails/SuperBitBros.png similarity index 100% rename from www/images/program_thumbnails/SuperBitBros.png rename to www/data/images/program_thumbnails/SuperBitBros.png diff --git a/www/images/program_thumbnails/TicTacToe.png b/www/data/images/program_thumbnails/TicTacToe.png similarity index 100% rename from www/images/program_thumbnails/TicTacToe.png rename to www/data/images/program_thumbnails/TicTacToe.png diff --git a/www/images/program_thumbnails/Wikipedia - The Game.png b/www/data/images/program_thumbnails/Wikipedia - The Game.png similarity index 100% rename from www/images/program_thumbnails/Wikipedia - The Game.png rename to www/data/images/program_thumbnails/Wikipedia - The Game.png diff --git a/www/images/program_thumbnails/Ziegenproblem.png b/www/data/images/program_thumbnails/Ziegenproblem.png similarity index 100% rename from www/images/program_thumbnails/Ziegenproblem.png rename to www/data/images/program_thumbnails/Ziegenproblem.png diff --git a/www/images/program_thumbnails/absCanvas.png b/www/data/images/program_thumbnails/absCanvas.png similarity index 100% rename from www/images/program_thumbnails/absCanvas.png rename to www/data/images/program_thumbnails/absCanvas.png diff --git a/www/images/program_thumbnails/exeExtract.png b/www/data/images/program_thumbnails/exeExtract.png similarity index 100% rename from www/images/program_thumbnails/exeExtract.png rename to www/data/images/program_thumbnails/exeExtract.png diff --git a/www/images/program_thumbnails/jCircuits.png b/www/data/images/program_thumbnails/jCircuits.png similarity index 100% rename from www/images/program_thumbnails/jCircuits.png rename to www/data/images/program_thumbnails/jCircuits.png diff --git a/www/images/program_thumbnails/jClipCorn.png b/www/data/images/program_thumbnails/jClipCorn.png similarity index 100% rename from www/images/program_thumbnails/jClipCorn.png rename to www/data/images/program_thumbnails/jClipCorn.png diff --git a/www/images/program_thumbnails/jQCCounter.png b/www/data/images/program_thumbnails/jQCCounter.png similarity index 100% rename from www/images/program_thumbnails/jQCCounter.png rename to www/data/images/program_thumbnails/jQCCounter.png diff --git a/www/data/javascript/.gitkeep b/www/data/javascript/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/www/fragments/header.php b/www/fragments/header.php index 790702e..179ca73 100644 --- a/www/fragments/header.php +++ b/www/fragments/header.php @@ -1,6 +1,6 @@
rank | +points | +name | +||
$current | "; + echo "".$entry['POINTS']." | "; + echo "".$entry['PLAYER']." | "; + echo "||
[more points] | '; + else + echo ''; + echo ' | '; + if ($start + $pagesize < count($entries)) + echo ' | [less points] | '; + else + echo ''; + echo ' |
|
| IFV | A vertical If
+`:` | DUP | Duplicates the TOS
+`\` | SWAP | Swaps two values from the stack
+`$` | POP | Removes the TOS
+`.` | OUT-INT | Outputs the TOS as a number
+`,` | OUT-ASC | Outputs the TOS as a character
+`&` | IN-INT | Asks the user for a number and puts it on the stack
+`~` | IN-ASC | Asks the user for a character and puts it on the stack
+`p` | PUT | Sets a field to a specific value
+`g` | GET | Gets the value of a field and pushes it onto the stack
+`@` | STOP | Stops the program execution
+`"` | STRMODE | Starts/Stops the stringmode
+`0`-`9` | NUMBERS | Pushes the respective number onto the stack
+
+[^tos]: TOS = top of stack
+
+[^pfix]: Postfix = [Postfix notation][6]
+
+
+ [1]: http://i.imgur.com/Jkks7Uy.gif?1
+ [2]: http://i.imgur.com/Z5Ljr5Z.gif?1
+ [3]: http://i.imgur.com/82FKwkM.gif?1
+ [4]: http://i.imgur.com/AqpsPRW.gif?1
+ [5]: http://i.imgur.com/rxqZhIJ.gif?1
+ [6]: http://en.wikipedia.org/wiki/Reverse_Polish_notation
\ No newline at end of file
diff --git a/www/statics/blog/bfjoust.md b/www/statics/blog/bfjoust.md
new file mode 100644
index 0000000..00d1cf6
--- /dev/null
+++ b/www/statics/blog/bfjoust.md
@@ -0,0 +1,33 @@
+My BFJoust bot
+---------------------
+
+[Brainfuck Joust](http://esolangs.org/wiki/BF_Joust) is a tournament for Bots written in [brainfuck](http://esolangs.org/wiki/Brainfuck) *(or at least in a brainfuck-like language)*.
+
+The board consist of 10 to 30 fields, one player starts left and one player right. The value of every field goes from `-127` to `128` and then wraps around, every field has a value of zero, except the two starting fields (the "flags"), they have a value of `128`.
+
+Your goal is to zero the enemy flag for two consecutive cycles and you loose if you either leave the board or the enemy zeroes your flag first. Of course the bots are written in brainfuck, which adds a whole lot of interesting limitations due to brainfucks minimalistic (7) set of operations.
+
+The thing that surprised me the most is the [strategically depth](http://esolangs.org/wiki/BF_Joust_strategies) of the game (despite the simple rules and language) and the fact that there are [extremely efficient and complex programs](http://codu.org/eso/bfjoust/in_egobot/) out there.
+
+So here is my own bot *(originally made for [stackexchange](http://codegolf.stackexchange.com/questions/36645/brainfedbotsforbattling-a-brainf-tournament))*, it can't really keep up with the big ones from egojoust but I'm fairly proud of it:
+
+```
+{{CODE}}
+```
+
+A few notes to the BFJoust extensions to the brainfuck language:
+
+`(a)*n` repeats the command `a` n-times.
+`(a{b}c)%n` equals `(a)%n b (c)%n` but allows unmatched square-brackets in `a` or `b`.
+
+So you see it's merely more than syntactic sugar, and probably more a precompiler than anything else.
+But be aware, I personally made the experience in my js interpreter that treating is as a precompiler is not always a good idea. Because once you start expanding the code, the result can become pretty big pretty fast.
+
+BFJoust with javascript
+-------------------------------
+
+I wrote a little [BFJoust script](https://maximum-sonata.codio.io/index.html) where you can let two bots visually fight against each other, but as I said above I did the mistake of expanding the code before running it, so this only works with programs that won't expand to an insanely large brainfuck code.
+
+And at last a few words to the arena: In BFJoust there are 40 different settings, every board length two times. One time normal and one time with one bot inverted (`+` <-> `-`). This way you can eliminate luck and see which bot performs better.
+
+
diff --git a/www/fragments/blog/borderlinedef.md b/www/statics/blog/borderlinedef.md
similarity index 100%
rename from www/fragments/blog/borderlinedef.md
rename to www/statics/blog/borderlinedef.md
diff --git a/www/fragments/blog/bsod.md b/www/statics/blog/bsod.md
similarity index 100%
rename from www/fragments/blog/bsod.md
rename to www/statics/blog/bsod.md
diff --git a/www/fragments/blog/cleanup.md b/www/statics/blog/cleanup.md
similarity index 100%
rename from www/fragments/blog/cleanup.md
rename to www/statics/blog/cleanup.md
diff --git a/www/fragments/blog/crystalgrid.md b/www/statics/blog/crystalgrid.md
similarity index 100%
rename from www/fragments/blog/crystalgrid.md
rename to www/statics/blog/crystalgrid.md
diff --git a/www/fragments/blog/funupdate.md b/www/statics/blog/funupdate.md
similarity index 100%
rename from www/fragments/blog/funupdate.md
rename to www/statics/blog/funupdate.md
diff --git a/www/fragments/blog/hack.md b/www/statics/blog/hack.md
similarity index 100%
rename from www/fragments/blog/hack.md
rename to www/statics/blog/hack.md
diff --git a/www/fragments/blog/inftournament.md b/www/statics/blog/inftournament.md
similarity index 100%
rename from www/fragments/blog/inftournament.md
rename to www/statics/blog/inftournament.md
diff --git a/www/fragments/blog/initial.md b/www/statics/blog/initial.md
similarity index 100%
rename from www/fragments/blog/initial.md
rename to www/statics/blog/initial.md
diff --git a/www/fragments/blog/lancontrol.md b/www/statics/blog/lancontrol.md
similarity index 100%
rename from www/fragments/blog/lancontrol.md
rename to www/statics/blog/lancontrol.md
diff --git a/www/fragments/blog/language.txt b/www/statics/blog/language.txt
similarity index 100%
rename from www/fragments/blog/language.txt
rename to www/statics/blog/language.txt
diff --git a/www/fragments/blog/more_euler.md b/www/statics/blog/more_euler.md
similarity index 100%
rename from www/fragments/blog/more_euler.md
rename to www/statics/blog/more_euler.md
diff --git a/www/statics/blog/net_format_spec.md b/www/statics/blog/net_format_spec.md
new file mode 100644
index 0000000..9b24440
--- /dev/null
+++ b/www/statics/blog/net_format_spec.md
@@ -0,0 +1,126 @@
+.Net format specifier Cheat Sheet
+============================
+
+Here my (growing) collection of C# format specifier, this is not a complete list but rather a collection of specifier I needed in the past:
+
+###Short syntax summary
+
+```csharp
+"{0,5:000;0.#;0}"
+```
+
+```plain
+{
+0 // The index of the displayed object
+,5 // A padding of 5
+000;0.#;0 // The format string
+}
+```
+
+```plain
+000 // The format for positive numbers (min 3 places, fill missing with zeroes)
+;
+0.# // The format for negative numbers (at least one digit before decimal point, maximum one after)
+;
+0 // The format for zeros (one digit - a zero)
+```
+
+###Align right with leading spaces
+
+```csharp
+"{0,6}" // min-width: 6 character
+```
+
+###Digits after decimal point
+
+```csharp
+"{0:0.00}" // exactly 2 digits after decimal point
+"{0:0.##}" // maximal 2 digits after decimal point
+```
+
+###Align positive & negative numbers with leading zeros
+
+```csharp
+/* integer: */
+"{0:0000;-000}" // min-width: 4 character
+
+/* float: */
+"{0:0000.00;-000.00}" // min-width: 4 character + 2 decimal places
+```
+
+###Remove minus sign
+
+```csharp
+"{0:0;0}"
+```
+
+###Show thousand seperator
+
+```csharp
+"{0:#,0}" // only for integer
+```
+
+###Scale numbers
+
+```csharp
+"{0:#,#}" // normal number
+"{0:#,##0, kilo}" // (number/1000) kilo
+"{0:#,##0,, mill}" // (number/1000/1000) million
+"{0:#,##0,,, bill}" // (number/1000/1000/1000) billion
+```
+
+> **see: ** [stackoverflow.com](http://stackoverflow.com/questions/11731996/string-format-numbers-thousands-123k-millions-123m-billions-123b)
+
+###Right align currency
+
+```csharp
+"{0,10:#,##0.00}" // Right aligned & always 2 decimal places
+```
+
+> **see: ** [stackoverflow.com](http://stackoverflow.com/questions/7422625/right-align-currency-in-string-format)
+
+###Align strings
+
+```csharp
+"{0,-10}" // Left aligned, min-width: 10 chars
+"{0,10}" // Right aligned, min-width: 10 chars
+```
+
+###Datetime formatting
+
+```csharp
+"s" // second
+"m" // minute
+"t" // AM/PM
+"h" // hour (1-12)
+"H" // hour (0-23)
+"d" // day
+"M" // month
+"y" // year
+"z" // timezone offset
+
+"{0:D/M/yyyy}" // z.B.: 28/2/2013"
+```
+
+###Only show positive numbers
+
+```csharp
+"{0:#.#####;'';}"
+```
+
+###Add a prefix/suffix
+
+```csharp
+"{0:(0)}" // ( number )
+"{0:_0_}" // _number_
+```
+
+###Format Hexadecimal
+
+```csharp
+"{0:X}" // z.B.: 138D5
+"{0:x}" // z.B.: 138d5
+"{0:X8}" // z.B.: 000138D5
+"0x{0:X8}" // z.B.: 0x000138D5
+```
+
diff --git a/www/fragments/blog/newlayout.txt b/www/statics/blog/newlayout.txt
similarity index 100%
rename from www/fragments/blog/newlayout.txt
rename to www/statics/blog/newlayout.txt
diff --git a/www/statics/blog/rapla_css.md b/www/statics/blog/rapla_css.md
new file mode 100644
index 0000000..cc6abce
--- /dev/null
+++ b/www/statics/blog/rapla_css.md
@@ -0,0 +1,25 @@
+Rapla Enhancement Script
+=====================
+
+![rapla_logo](/data/blog/Rapscript/logo.png)
+
+I don't think many of you know [rapla](https://code.google.com/p/rapla/). And you should probably be thankful about that. But if you happen to study at the DHBW-KA, or any other place that uses rapla you could be interested in my enhancement-script.
+
+Rapla is a Resource scheduling and event planing software (mostly used for timetables), and my rapscript enhances the *(not very good)* online view.
+
+![full_preview](/data/blog/Rapscript/preview.png)
+
+It contains the following features:
+
+ - Highlight courses you participate in
+ - Highlight special events (free days, etc. ^_^)
+ - Cleaner style
+ - Highlight current day
+ - Highlight current hour
+ - Show horizontal time marker, that moves in realtime (the red line)
+ - Show on weekends (saturday / sunday) the next week insted of the current
+
+The script works on [Greasemonkey](https://addons.mozilla.org/de/firefox/addon/greasemonkey/) for Firefox or [Tampermonkey](https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo) for Google Chrome and can be downloaded from this Gist:
+
+[Open Gist](https://gist.github.com/Mikescher/f3d51a40dd0c5228df86)
+
diff --git a/www/fragments/blog/spammers.md b/www/statics/blog/spammers.md
similarity index 100%
rename from www/fragments/blog/spammers.md
rename to www/statics/blog/spammers.md
diff --git a/www/statics/blog/sudoku_befunge.md b/www/statics/blog/sudoku_befunge.md
new file mode 100644
index 0000000..c881297
--- /dev/null
+++ b/www/statics/blog/sudoku_befunge.md
@@ -0,0 +1,200 @@
+A sudoku solver in Befunge-93
+=======================
+
+![sudoku debug](/data/blog/SudokuSolver/sudoku.png)
+
+Because of [this project euler puzzle](https://www.mikescher.com/blog/1/Project_Euler_with_Befunge/problem-096) I spend the last few days implementing a sudoku solver in befunge-93 (as always I ignored the 80x25 size restriction because otherwise befunge-93 would be not turing-complete and I'm pretty sure this problem impossible).
+
+There are two general types of sudoku problems, the one were in every step there is an cell with an obvious solution (these are the easy ones) and the ones were you have to guess sometimes (or deploy more complex strategies).
+My solver is universal and can solve both ones. If there are no obvious cells it tries to make an smart guess and if the guess was wrong we backtrack and try with the next number.
+
+Below i try to describe my general approach and a few caveats I stumbled across. You can look at the full up-to-date source code on [github](https://github.com/Mikescher/BefungePrograms).
+
+~~~
+v XX ########### ########### ############################# #############################
+ C C #36 2 89# # # # # # #
+ PPPPP # 361 # # # # # # #
+ XXX # # # # # # # #
+ LLLLLL #8 3 6 2# # # # # # #
+ PMMMM #4 6 3 7# # # # ########## # # #
+ MM MMM #6 7 1 8# # # # ################## # # #
+ XXX XX # # # # # ################## # # #
+ # 418 # # # # ####################### # # #
+ #97 3 14# # # # ####################### # # ####### #
+ ########### ########### # #################### # # ############ #
+ # #################### # # ############### #
+> 492*+11p9:*:9*61p>1-v # ################ # # ################# #
+ >9+\9/1+p:0\:9%11g+\9/1+p:| # ############ # # ################# #
+ ^%9:\+*86%+88 g+1/9\+9%9::$#:< # ############ # # ######## ######## #
+v1/*93\+*75%*93:\0:-1