Add 2015/muth/try.sh + format/typo checks
This commit is contained in:
1 parent
8d020bac96
commit
af310e0b3a
3 files changed
+82
-22
No files matched your search
+31
-22
@@ -15,13 +15,7 @@ make -B [MACHINE=your_machine.h] [TAPE=your_tape.h] [X=[0|1|2|3|4|5|6|7|8|9]] [V
|
|||||||
### Try:
|
### Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
make -B V=2 run
|
./try.sh
|
||||||
|
|
||||||
strings prog | grep '(,)'
|
|
||||||
|
|
||||||
make -B MACHINE=machine_times2.h TAPE=tape_five.h V=1 run
|
|
||||||
|
|
||||||
make -B MACHINE=machine_chaos_5_2.h X=5 run
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -51,21 +45,28 @@ even without conditionals and recursive file inclusion as some kind of a
|
|||||||
- make target `run` runs `./prog` and filters a little statistics out of the verbose output
|
- make target `run` runs `./prog` and filters a little statistics out of the verbose output
|
||||||
- `X` (defaults to 3) sets the maximum number of steps: *M*(`X`) ~ 8<sup>`X`</sup>
|
- `X` (defaults to 3) sets the maximum number of steps: *M*(`X`) ~ 8<sup>`X`</sup>
|
||||||
|
|
||||||
|
|
||||||
### Limitations
|
### Limitations
|
||||||
|
|
||||||
If the machine does not halt after *M*(`X`) steps, you will see unexpanded macros in the output.
|
If the machine does not halt after *M*(`X`) steps, you will see unexpanded
|
||||||
|
macros in the output.
|
||||||
|
|
||||||
|
|
||||||
### Compiler warnings
|
### Compiler warnings
|
||||||
|
|
||||||
If `V=1` or `V=2` is used, you may see "`warning: string length is greater than the length '4095' ISO C99 compilers are required to support`".
|
If `V=1` or `V=2` is used, you may see "`warning: string length is greater than
|
||||||
|
the length '4095' ISO C99 compilers are required to support`".
|
||||||
|
|
||||||
|
|
||||||
### Programming
|
### Programming
|
||||||
|
|
||||||
Implementing your own Turing machine is easy. Take a look at the supplied header files for examples.
|
Implementing your own Turing machine is easy. Take a look at the supplied header
|
||||||
|
files for examples.
|
||||||
|
|
||||||
|
|
||||||
#### Tape Symbols
|
#### Tape Symbols
|
||||||
|
|
||||||
Every symbol used (except "`_`") must be explicitly declared using
|
Every symbol used (except `_`) must be explicitly declared using
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#define sym_SYMBOL(sym, _SYMBOL) sym
|
#define sym_SYMBOL(sym, _SYMBOL) sym
|
||||||
@@ -77,9 +78,11 @@ Example:
|
|||||||
#define sym_1(sym, _1) sym
|
#define sym_1(sym, _1) sym
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
#### Tape
|
#### Tape
|
||||||
|
|
||||||
The initial content of the tape must be defined in the tape header using a triple like:
|
The initial content of the tape must be defined in the tape header using a
|
||||||
|
triple like:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#define tape ((((,),...l2), l1), c, (r1, (r2..., (,))))
|
#define tape ((((,),...l2), l1), c, (r1, (r2..., (,))))
|
||||||
@@ -89,26 +92,32 @@ The initial content of the tape must be defined in the tape header using a tripl
|
|||||||
- `c` is the symbol at the current position
|
- `c` is the symbol at the current position
|
||||||
- `r1`, `r2`, ... are the symbols to the right
|
- `r1`, `r2`, ... are the symbols to the right
|
||||||
|
|
||||||
The empty pairs "`(,)`" represent the continuations of the tape, filled with underscore symbols ("`_`"). They are expanded on demand.
|
The empty pairs `(,)` represent the continuations of the tape, filled with
|
||||||
|
underscore symbols (`_`). They are expanded on demand.
|
||||||
|
|
||||||
|
|
||||||
#### State Machine
|
#### State Machine
|
||||||
|
|
||||||
All transitions are defined in the machine header using the syntax
|
All transitions are defined in the machine header using the syntax
|
||||||
|
|
||||||
#define CURRENT_SCANNED (WRITE, MOVEMENT, NEXT)
|
```
|
||||||
|
#define CURRENT_SCANNED (WRITE, MOVEMENT, NEXT)
|
||||||
|
```
|
||||||
|
|
||||||
where
|
where
|
||||||
|
|
||||||
- `CURRENT` is the current state
|
- `CURRENT` is the current state.
|
||||||
- `SCANNED` is the symbol at the current position
|
- `SCANNED` is the symbol at the current position.
|
||||||
- the whitespace before the parentheses is significant
|
- The whitespace before the parentheses is significant.
|
||||||
- `WRITE` is the symbol to be written to the tape
|
- `WRITE` is the symbol to be written to the tape.
|
||||||
- `MOVEMENT` is "`L`" for left, "`R`" for right, or nothing
|
- `MOVEMENT` is `L` for left, `R` for right; don't specify anything if you
|
||||||
- `NEXT` is the next state
|
want no movement.
|
||||||
|
- `NEXT` is the next state.
|
||||||
|
|
||||||
There must be a state "`A`" defined, which becomes the initial state of the machine.
|
There must be a state `A` defined, which becomes the initial state of the
|
||||||
|
machine.
|
||||||
|
|
||||||
To halt the machine, use the keyword "`break`" as in
|
To halt the machine, use the keyword `break` as in
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#define A_1 (2, break)
|
#define A_1 (2, break)
|
||||||
|
|||||||
Executable
+46
@@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# try.sh - demonstrate IOCCC winner 2015/muth
|
||||||
|
#
|
||||||
|
|
||||||
|
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
|
||||||
|
# this way allows us to have the user specify a different compiler in an easy
|
||||||
|
# way.
|
||||||
|
if [[ -z "$CC" ]]; then
|
||||||
|
CC="cc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
make CC="$CC" all >/dev/null || exit 1
|
||||||
|
|
||||||
|
# clear screen after compilation so that only the entry is shown
|
||||||
|
clear
|
||||||
|
|
||||||
|
|
||||||
|
echo "$ make -B V=2 run" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to continue (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
make CC="${CC}" -B V=2 run | less -EXF
|
||||||
|
echo 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
echo "$ strings prog | grep '(,)'" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to continue (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
strings prog | grep '(,)' | less -EXF
|
||||||
|
echo 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
for h in machine*.h; do
|
||||||
|
for t in tape*.h; do
|
||||||
|
echo "$ make CC=\"\${CC}\" -B MACHINE=$h TAPE=$t V=1 run" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to continue (q to exit): "
|
||||||
|
if [[ "$REPLY" == "q" || "$REPLY" == "Q" ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo 1>&2
|
||||||
|
make -B MACHINE="$h" TAPE="$t" V=1 run
|
||||||
|
echo 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
@@ -3803,6 +3803,11 @@ simply typing `make back_to` or `make mullender`.
|
|||||||
(Linux doesn't seem to but macOS does).
|
(Linux doesn't seem to but macOS does).
|
||||||
|
|
||||||
|
|
||||||
|
## [2015/muth](2015/muth/prog.c) ([README.md](2015/muth/README.md))
|
||||||
|
|
||||||
|
[Cody](#cody) added the [try.sh](2015/muth/try.sh) script.
|
||||||
|
|
||||||
|
|
||||||
## [2015/yang](2015/yang/prog.c) ([README.md](2015/yang/README.md]))
|
## [2015/yang](2015/yang/prog.c) ([README.md](2015/yang/README.md]))
|
||||||
|
|
||||||
[Cody](#cody) fixed an unfortunate typo in the Makefile that was preventing some of the
|
[Cody](#cody) fixed an unfortunate typo in the Makefile that was preventing some of the
|
||||||
|
|||||||
Reference in new issue
Block a user