From 9ee572fa9f0a2ee82db6f44cf08a8f606fcba038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Schw=C3=B6rer?= Date: Mon, 8 Dec 2014 11:31:34 +0100 Subject: [PATCH] Added Markdown description for BefunGen/BefunRep --- .../BefunGen/01_Manuals/BefunRep.markdown | 52 ++++++++++++++++++ .../BefunGen/01_Manuals/BefunRep_Main.png | Bin 0 -> 48301 bytes .../programs/desc/BefunGen/index.markdown | 45 ++++++++++++++- 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 www/data/programs/desc/BefunGen/01_Manuals/BefunRep.markdown create mode 100644 www/data/programs/desc/BefunGen/01_Manuals/BefunRep_Main.png diff --git a/www/data/programs/desc/BefunGen/01_Manuals/BefunRep.markdown b/www/data/programs/desc/BefunGen/01_Manuals/BefunRep.markdown new file mode 100644 index 0000000..08e94f7 --- /dev/null +++ b/www/data/programs/desc/BefunGen/01_Manuals/BefunRep.markdown @@ -0,0 +1,52 @@ +BefunRep is an command line tool to calculate Befunge93 number representations + +![BEFUNREP_MAINWINDOW](/data/programs/desc/BefunGen/01_Manuals/BefunRep_Main.png) + +To execute BefunRep you need to open the windows command line (cmd.exe). + +The representations are saved in a "safe", you can give the safe-path with the parameter **safe**. +There are three safe-formats available: binary (.bin), CSV (.csv) and JSON (.json). But for most cases the binary safe is the best, especially for bigger safes. + +When you first generate a safe you have to give him a number range with the parameters **lower** and **upper** + +> **\> BefunRep -safe="binsafe.bin" -lower=0 -upper=1000 -reset** + +The **reset** command resets the safe if the file already exists. + +You can update an existing safe and search for improvements + +> **\> BefunRep -safe="binsafe.bin"** + +Here the existing limits in the safe are re-used. But you can also extend a safe and give him a new range. + +> **\> BefunRep -safe="binsafe.bin" -lower=-100 -upper=3500** + +As you can see with every iteration on the same range there is a chance to find a few improvements. +You can also specify a fixed amount of iterations with the parameter **iterations**. A negative iteration number will result in calculations until no more improvements can be found. + +> **\> BefunRep -safe="binsafe.bin" -reset -lower=-100 -upper=3500 -iterations=-1** + +When you calculate a new safe you will get a lot of console output, this will probably slow your program down. The parameter **quiet** (or just **q**) prevents the "Found improvement" output. +Also you can specify a statistics level from 0 to 3 with **stats**, this regulates the safe statistics you can see at the end of the program. + +> **\> BefunRep -safe="binsafe.bin" -reset -lower=-100 -upper=3500 -iterations=-1 -q -stats=3** + +If you already have an safe and don't want to calculate anything so you only see its statistics you can use iterations=0 + +> **\> BefunRep -safe="binsafe.bin" -iterations=0 -stats=3** + +The binary safe format is not really human readable, to get the results in a better format use the **out** parameter. Supported formats are CSV (.csv), JSON (.json) and XML (.xml). XML and JSON are useful to redirect it to other programs and CSV to manually read them, because CSV doesn't need to escape any characters. + +> **\> BefunRep -safe="binsafe.bin" -reset -lower=-100 -upper=3500 -iterations=-1 -q -out="csvoutput.csv"** + +Similiar to the statistics you can also use the iterations=0 trick to generate an output of an existing safe + +> **\> BefunRep -safe="binsafe.bin" -iterations=0 -out="csvoutput.csv"** + +Internally BefunRep has multiple algorithms that are executed one after the other. Normally all are executed but you can also specify a single one to use with the parameter **algorithm** + +> **\> BefunRep -safe="binsafe.bin" -reset -lower=-100 -upper=3500 -algorithm=3** + +If you need a list of the possible arguments execute BefunRep without any arguments or with **help** + +> **\> BefunRep -help** diff --git a/www/data/programs/desc/BefunGen/01_Manuals/BefunRep_Main.png b/www/data/programs/desc/BefunGen/01_Manuals/BefunRep_Main.png new file mode 100644 index 0000000000000000000000000000000000000000..c2d6417ce82461e5dba103a10354069437b504e5 GIT binary patch literal 48301 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≪IZG{{tv?aUZA=^OGjJZJEl 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≧Osd1i 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�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 literal 0 HcmV?d00001 diff --git a/www/data/programs/desc/BefunGen/index.markdown b/www/data/programs/desc/BefunGen/index.markdown index 812acd6..78f44c1 100644 --- a/www/data/programs/desc/BefunGen/index.markdown +++ b/www/data/programs/desc/BefunGen/index.markdown @@ -1,12 +1,15 @@ -*BefunGen, a Befunge-93 code generator from a procedural C-like language* +*BefunGen, a Befunge-93 code generator from a procedural C-like language* +**(Over time this has more become my collection of various Befunge tools. Many of them are quite useful alone but still, most are centered around BefunGen.)** > **NOTE:** > > BefunGen is a collection of multiple programs: +> > - **BefunGen**: A TextFunge to Befunge-93 compiler > - **BefunExec**: A fast Befunge-93 interpreter > - **BefunHighlight**: A intelligent Befunge-93 syntax-highlighter > - **BefunWrite**: An IDE for TextFunge +> - **BefunRep**: An commandline tool to calculate number representations in Befunge   @@ -84,3 +87,43 @@ BefunHighlight tries to solve this by evaluating every possible path an program Based on these informations it's now possible for another program to better highlight the source code. Be aware that **p**ut and **g**et operations will invalidate the calculated values and it is needed to update them. + +## BefunRep + +A common problem with Befunge is the *(efficient)* representation of big numbers. *(= putting a number on the stack with the least amount of instructions)* + +BefunRep is a commandline tool to generate a list of representations for all numbers in a specified range. I'm pretty sure the calculation of the optimal representation is a NP complete. But BefunRep tries to to find good representations for all numbers via various algorithms. And it does a pretty good job. It finds for all the numbers between -1 million and +1 million representations with a maximum of eleven characters. + +Here an example call to BefunRep: + +> **\> BefunRep.exe -lower=0 -upper=1000 -iterations=3 -stats=3 -q -safe="safe.bin" -out="out.csv" -reset** + +This calculates the numbers from **0** to **1000**. +With a maximum of **3** iterations *(use -1 to calculate until no more improvmenets can be found)* +Safe the results in binary format in the file **safe.bin** +If the safe already exists it will be reseted (-**reset**) +And exports the results readable to **out.csv** + +You can also update an existing safe + +> **\> BefunRep.exe -safe="safe.bin" -iterations=-1** + +Or don't calculate anything and only output an existing safe into another format + +> **\> BefunRep.exe -safe="safe.bin" -iterations=0 -stats=3 -out="out.json"** + +Here an example of a few calculated values: + +Number | Representation +-------|---------------- +113564 | `"tY!"**3/` +113565 | `"qC-"**3/` +113566 | `"[' "**2-` +113567 | `"[' "**1-` +113568 | `"[' "**` +113569 | `"~~U"++:*` +113570 | `"[' "**2+` +113571 | `"wj"*5+9*` +113572 | `"[' "**4+` +113573 | `"[' "**5+` +113574 | `"E~(&"*+*`