Format fix 2012/endoh2/README.sh + update try

The try section now has a new script 'everything.sh' which runs make
everything and then runs (with less) every executable so the user can
more easily see exactly what it does.
This commit is contained in:
Cody Boone Ferguson committed 2023-05-04 05:14:24 -07:00
1 parent 5d41e20499
commit f05d4a3533
3 files changed
+82 -42

No files matched your search

+48 -41
View File
@@ -27,25 +27,31 @@ gcc -o e e.c
./e > 271.c ./e > 271.c
``` ```
...
## Try: ## Try:
```sh ```sh
make pi ./everything.sh
make e
make everything
``` ```
## Judges' remarks: ## Judges' remarks:
A pi/e printing quasi-quine in ASCII art with a compressed font in it; A
what else to wish for in this program? Virtual machine emulation? [pi](https://en.wikipedia.org/wiki/Pi)/[e](https://en.wikipedia.org/wiki/E_(mathematical_constant))
printing quasi-[quine](https://en.wikipedia.org/wiki/Quine_(computing) in [ASCII
art](https://en.wikipedia.org/wiki/ASCII_art) with a compressed font in it; what
else to wish for in this program? [Virtual
machine](https://en.wikipedia.org/wiki/Virtual_machine) emulation?
## Author's remarks: ## Author's remarks:
Yeah, "Again". Sorry. But I don't feel guilty or uncomfortable. Yeah, "Again". Sorry. But I don't feel guilty or uncomfortable.
This entry is based on 'over-used themes' such as self reproducing This entry is based on 'over-used themes' such as self reproducing
program and pi or e computation. I know you're tired of them. program and [pi](https://en.wikipedia.org/wiki/Pi) or
[e](https://en.wikipedia.org/wiki/E_(mathematical_constant))) computation. I
know you're tired of them.
But have you ever seen **all-in-one**? But have you ever seen **all-in-one**?
@@ -54,57 +60,58 @@ But have you ever seen **all-in-one**?
This program generates a new program in the shape of the Greek letter This program generates a new program in the shape of the Greek letter
`pi`. Then, the generated program: `pi`. Then, the generated program:
- computes 3 digits of pi and prints it as a ASCII-art program that: - computes 3 digits of pi and prints it as an ASCII-art program that:
- computes 4 digits of pi and prints it as a ASCII-art program that: - computes 4 digits of pi and prints it as an ASCII-art program that:
- computes 5 digits of pi and prints it as a ASCII-art program that: - computes 5 digits of pi and prints it as an ASCII-art program that:
- computes 6 digits of pi and prints it as a ASCII-art program that: - computes 6 digits of pi and prints it as an ASCII-art program that:
- etc. - ...
One more thing... When you give a command line option "e" to the One more thing... When you give a command line argument `e` to the
first program, the generated one will compute Napier's constant first program, the generated one will compute [Napier's
constant](https://en.wikipedia.org/wiki/E_(mathematical_constant)))
rather than pi. rather than pi.
### Obfuscation ### Obfuscation
This program itself is in the shape of a spigot. This is derived This program itself is in the shape of a
from analogy with "spigot algorithm" which infinitely computes the [spigot](https://en.wikipedia.org/wiki/Tap_(valve)). This is derived from
value of a mathematical constant such as `pi` or `e`. analogy with [spigot algorithm](https://en.wikipedia.org/wiki/Spigot_algorithm)
which infinitely computes the value of a mathematical constant such as
[pi](https://en.wikipedia.org/wiki/Pi) or
[e](https://en.wikipedia.org/wiki/E_(mathematical_constant)).
<http://en.wikipedia.org/wiki/Spigot_algorithm> The two sets of programs, `314*.c` and `271*.c`, are almost the same
except their shape and constant computational part. I tailored the
common part to parse in both shapes (`3.14...` and `2.71...`), by
tweaking the computational order and adding meaningless code fragments.
The two sets of programs, 314\*.c and 271\*.c, are almost the same On the other hand, to make it fit inside one screen (80 x 25), my program is
except its shape and constant computation part. I tailored the shortened properly, more than it looks. (As you may know,
common part to parse in both shapes ("3.14..." and "2.71..."), by [quines](https://en.wikipedia.org/wiki/Quine_(computing)) need to make its
tweaking the computation order and adding meaningless code fragment. program size doubled.) For example, this program involves 3x5 bitmap font data
of ten characters (`0` -- `9`), as just 20 bytes: `G1%xJ{;Q7wunmuGuu%uu`. We
On the other hand, to make it fit inside one screen (80 x 25), my can decode character `n` as `275*s[n+10] - 8*s[n] - 8`. I solved the system of
program is shortened properly, more than it looks. (As you may [Bézout's identity](https://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity) to
know, Quine needs to make its program size doubled.) find the magic string, with the aid of a brute force. See `find-font-table.rb`
For example, this program involves 3x5 bitmap font data of ten in detail.
characters ('0' -- '9'), as just 20 bytes: "G1%xJ{;Q7wunmuGuu%uu".
We can decode character n as `275*s[n+10] - 8*s[n] - 8`. I solved the
system of Bezout's identities to find the magic string, with the
aid of a brute force. See `find-font-table.rb` in detail.
<http://en.wikipedia.org/wiki/B%C3%A9zout's_identity>
I used many other tricks for short coding. I used many other tricks for short coding.
I'm sorry that many ASCII-art-style winning entries of IOCCCs I'm sorry that many ASCII-art-style winning entries of
ignore preprocessor directives. In my program, #include is a part [IOCCC](https://www.ioccc.org/years.html) ignore [C preprocessor
of ASCII-art with comment padded. directives](https://en.wikipedia.org/wiki/C_preprocessor). In my program,
`#include` is a part of ASCII-art with comments padded.
These design requirements made my program well-obfuscated These design requirements made my program well-obfuscated
willy-nilly. willy-nilly.
### Portability ### Portability
I expect it to work in any major environment and C compiler. I expect it to work in any major environment and C compiler. To build with no
To build with no warning, it requires two C99 features: string warning, it requires two C99 features: string literal more than 509 characters
literal more than 509 characters and omissible return in main and not requiring a return in `main()` function. In fact, recent compilers with
function. In fact, recent compilers with "-std=c99 -Wall -W `-std=c99 -Wall -W -Wextra -pedantic` would say nothing.
-Wextra -pedantic" would say nothing.
gcc -std=c99 -Wall -W -Wextra -pedantic spigot.c gcc -std=c99 -Wall -W -Wextra -pedantic spigot.c
clang -std=c99 -Wall -W -Wextra -pedantic spigot.c clang -std=c99 -Wall -W -Wextra -pedantic spigot.c
@@ -141,7 +148,7 @@ etc...
You can do `make everything` for the process (with no `cat`). You can do `make everything` for the process (with no `cat`).
Note: The executable may return a failure (non-zero) exit status Note: The executable may return a failure (non-zero) exit status
unless -std=c99 option is given. unless `-std=c99` option is given.
## Copyright and CC BY-SA 4.0 License: ## Copyright and CC BY-SA 4.0 License:
+1 -1
View File
@@ -1,4 +1,4 @@
#include<stdio.h> /******** SpigotQuine -- usage: ./spigot [pi or e] ********/ #include<stdio.h> /******** SpigotQuine -- usage: ./endoh2 [pi or e] ********/
char*s="G1%%xJ{;Q7wunmuGuu%%uu#include<stdio.h>/*Spigot_Quine*/#include<stdli" char*s="G1%%xJ{;Q7wunmuGuu%%uu#include<stdio.h>/*Spigot_Quine*/#include<stdli"
"b.h>/*_IOCCC2012_*/int*e," "i,j,k,n" ";char*q" ",*a,*d,*z,*p=%s%c;" "b.h>/*_IOCCC2012_*/int*e," "i,j,k,n" ";char*q" ",*a,*d,*z,*p=%s%c;"
"int" "%cmain(){a=calloc(" "1,1e4+n*2);;for(*" "int" "%cmain(){a=calloc(" "1,1e4+n*2);;for(*"
+33
View File
@@ -0,0 +1,33 @@
#!/usr/bin/env bash
make everything || exit 1
run()
{
local program="$1"
echo "" 1>&2
echo -n "$ ./${program}" 1>&2
sleep 2
"./${program}" | less -K -e
}
echo "running everything with $(type -P less): " 1>&2
echo 1>&2
run pi
run 314
run 3141
run 31415
run 314159
run 3141592
run 31415926
run 314159265
run 3141592653
run 31415926535
run e 271
run 2718
run 27182
run 271828
run 2718281
run 27182818
run 271828182
run 2718281828
run 27182818284