Add 2018/yang/try.sh + format/typo checks
The try.sh script will ask if the user wants to see the spoilers before showing them. The rest of it is shown regardless (first). Format/typo check README.md file.
This commit is contained in:
1 parent
d077890560
commit
d643c1e38e
4 files changed
+106
-32
No files matched your search
+1
-1
@@ -234,7 +234,7 @@ generated12.c: msg7
|
|||||||
spoiler_for_the_truly_impatient: i_just_want_to_see_the_final_message
|
spoiler_for_the_truly_impatient: i_just_want_to_see_the_final_message
|
||||||
|
|
||||||
i_just_want_to_see_the_final_message: msg11.txt
|
i_just_want_to_see_the_final_message: msg11.txt
|
||||||
@cat $<
|
@${CAT} $<
|
||||||
|
|
||||||
msg11.txt: msg11 ${PROG}.c
|
msg11.txt: msg11 ${PROG}.c
|
||||||
@${RM} -f $@
|
@${RM} -f $@
|
||||||
|
|||||||
+31
-31
@@ -7,25 +7,20 @@ make
|
|||||||
|
|
||||||
## To use:
|
## To use:
|
||||||
|
|
||||||
|
The author suggested that after compilation one should look at the generated
|
||||||
|
files. For instance:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
more generated1.c
|
less generated1.c
|
||||||
more generated2.c
|
less generated2.c
|
||||||
more generated3.c
|
less generated3.c
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Try:
|
### Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./left < prog.c
|
./try.sh
|
||||||
./right < prog.c
|
|
||||||
./left < prog.c | ./left
|
|
||||||
|
|
||||||
./shift < prog.c
|
|
||||||
|
|
||||||
./msg0
|
|
||||||
./msg1
|
|
||||||
./msg2
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -36,7 +31,8 @@ code so you don't have to stare at it sideways or even upside down. Rotating
|
|||||||
this program left and recompiling will reveal other tools including a right rotate
|
this program left and recompiling will reveal other tools including a right rotate
|
||||||
and a shift program.
|
and a shift program.
|
||||||
|
|
||||||
Strange things happen when the world is upside down! It is entirely possible
|
Strange things happen [when the world is upside
|
||||||
|
down](https://en.wikipedia.org/wiki/Wacky_Wednesday_(book))! It is entirely possible
|
||||||
that this remark is completely misleading.
|
that this remark is completely misleading.
|
||||||
|
|
||||||
What exactly does the shift program do?
|
What exactly does the shift program do?
|
||||||
@@ -60,8 +56,8 @@ But what combinations will generate `./msg3`, `./msg4`, `./msg5`, `./msg6`,
|
|||||||
|
|
||||||
### Tools' usage:
|
### Tools' usage:
|
||||||
|
|
||||||
Nuko is a text rotator: given some text in stdin, Nuko will write the
|
`Nuko` is a text rotator: given some text in `stdin`, `Nuko` will write the
|
||||||
same text to stdout, but rotated 90 degrees counterclockwise.
|
same text to `stdout`, but rotated 90 degrees counterclockwise.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cc prog.c -o left
|
cc prog.c -o left
|
||||||
@@ -80,12 +76,12 @@ cc r1.c -o right
|
|||||||
|
|
||||||
For variety, this second tool rotates clockwise instead of
|
For variety, this second tool rotates clockwise instead of
|
||||||
counterclockwise. Also, it can handle files larger than 1024x1024,
|
counterclockwise. Also, it can handle files larger than 1024x1024,
|
||||||
depending on how much memory you got.
|
depending on how much memory you have.
|
||||||
|
|
||||||
Of course we wouldn't stop with just two rotations, if we continue to
|
Of course we wouldn't stop with just two rotations, if we continue to
|
||||||
rotate counterclockwise once more, we get another program. This
|
rotate counterclockwise once more, we get another program. This
|
||||||
program outputs a single message to stdout, which is the name of the
|
program outputs a single message to `stdout`, which is the name of the
|
||||||
series that Nuko came from.
|
series that `Nuko` came from.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./left < prog.c | ./left > r2.c
|
./left < prog.c | ./left > r2.c
|
||||||
@@ -104,13 +100,14 @@ cc r3.c -o shift
|
|||||||
|
|
||||||
Where this might be useful, besides ruining the formatting of certain
|
Where this might be useful, besides ruining the formatting of certain
|
||||||
files, is that it completes the set of tools needed to solve the
|
files, is that it completes the set of tools needed to solve the
|
||||||
puzzle that is embedded in prog.c
|
puzzle that is embedded in [prog.c](prog.c).
|
||||||
|
|
||||||
|
|
||||||
### Puzzle box:
|
### Puzzle box:
|
||||||
|
|
||||||
Notice how the edges of prog.c contain two notches. By rotating
|
Notice how the edges of [prog.c](prog.c) contain two notches. By rotating
|
||||||
prog.c and removing leading space, the code would be shifted one space
|
[prog.c](prog.c) and removing leading space, the code would be shifted one space
|
||||||
toward one of those notches (and creating a new notch on the other
|
toward one of those notches (and create a new notch on the other
|
||||||
side). This shifted code behaves slightly different from the original
|
side). This shifted code behaves slightly different from the original
|
||||||
program. For example, here are two more messages that can be
|
program. For example, here are two more messages that can be
|
||||||
produced:
|
produced:
|
||||||
@@ -122,14 +119,15 @@ produced:
|
|||||||
|
|
||||||
In total, there are 9 embedded strings that can be produced via a
|
In total, there are 9 embedded strings that can be produced via a
|
||||||
sequence of rotates and shifts, one of which can be used to extract
|
sequence of rotates and shifts, one of which can be used to extract
|
||||||
the 10th final string from prog.c. The intent is to simulate those
|
the 10th final string from [prog.c](prog.c). The intent is to simulate those
|
||||||
wooden puzzle boxes that can be opened by pushing and shifting various
|
wooden puzzle boxes that can be opened by pushing and shifting various
|
||||||
well-concealed seams. Thus, finding the correct sequence of rotates
|
well-concealed seams. Thus, finding the correct sequence of rotates
|
||||||
and shifts is left as an exercise to the reader (but if you are really
|
and shifts is left as an exercise to the reader (but if you are really
|
||||||
lazy, just read the Makefile).
|
lazy, just read the [Makefile](Makefile)).
|
||||||
|
|
||||||
Source code for all the tools needed to solve this puzzle are embedded
|
Source code for all the tools needed to solve this puzzle are embedded
|
||||||
in prog.c, all you need is a C compiler.
|
in [prog.c](prog.c), all you need is a C compiler.
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
@@ -137,24 +135,26 @@ in prog.c, all you need is a C compiler.
|
|||||||
achieve. Code still compiles even with one column of text shifted. This
|
achieve. Code still compiles even with one column of text shifted. This
|
||||||
required even more patience.
|
required even more patience.
|
||||||
|
|
||||||
- All rotated and shifted variants compiles without warnings. This involves
|
- All rotated and shifted variants compile without warnings. This involves
|
||||||
various tweaks to satisfy cases where compiler is overly protective, including
|
various tweaks to satisfy cases where the compiler is overly protective, including
|
||||||
but not limited to the "1125" at line 4 as opposed to "1025", to satisfy
|
but not limited to the "1125" at line 4 as opposed to "1025", to satisfy
|
||||||
`-Waggresive-loop-optimizations`.
|
`-Waggresive-loop-optimizations`.
|
||||||
|
|
||||||
- CRC32 of the code is embedded in the code itself.
|
- CRC32 of the code is embedded in the code itself.
|
||||||
|
|
||||||
- Process for writing prog.c is available in spoiler.html
|
- Process for writing [prog.c](prog.c) is available in
|
||||||
|
[spoiler.html](spoiler.html).
|
||||||
|
|
||||||
|
|
||||||
### Compatibility:
|
### Compatibility:
|
||||||
|
|
||||||
Nuko and the rotated tools accepts only ASCII files where each
|
`Nuko` and the rotated tools accept only ASCII files where each
|
||||||
character maps to exactly one byte. Also, end-of-line sequence is
|
character maps to exactly one byte. Also, end-of-line sequence is
|
||||||
assumed to be LF only, as opposed to CR-LF. All control characters
|
assumed to be LF only, as opposed to CR-LF. All control characters
|
||||||
are treated like normal printable characters, so files containing tabs
|
are treated like normal printable characters, so files containing tabs
|
||||||
will look weird after rotation, for example.
|
will look weird after rotation, for example.
|
||||||
|
|
||||||
Nuko has been verified to work with these compiler / OS combinations:
|
`Nuko` has been verified to work with these compiler / OS combinations:
|
||||||
|
|
||||||
- gcc 4.8.4 on Linux
|
- gcc 4.8.4 on Linux
|
||||||
- gcc 4.9.2 on Linux
|
- gcc 4.9.2 on Linux
|
||||||
@@ -166,7 +166,7 @@ Nuko has been verified to work with these compiler / OS combinations:
|
|||||||
- clang 5.0.1 on Cygwin
|
- clang 5.0.1 on Cygwin
|
||||||
- tcc 0.9.25 on JS/Linux
|
- tcc 0.9.25 on JS/Linux
|
||||||
|
|
||||||
Nuko compiles without warnings with all compilers above, even with
|
`Nuko` compiles without warnings with all compilers above, even with
|
||||||
`-Wall -Wextra -pedantic` for gcc and clang.
|
`-Wall -Wextra -pedantic` for gcc and clang.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Executable
+67
@@ -0,0 +1,67 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# try.sh - demonstrate IOCCC winner 2018/yang
|
||||||
|
#
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./left < prog.c (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
./left < prog.c | less -EXF
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./right < prog.c (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
./right < prog.c | less -EXF
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./left < prog.c | ./left (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
./left < prog.c | ./left | less -EXF
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./shift < prog.c (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
./shift < prog.c | less -EXF
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
echo "$ echo IOCCC | ./left" 1>&2
|
||||||
|
echo IOCCC | ./left
|
||||||
|
echo 1>&2
|
||||||
|
echo "$ echo IOCCC | ./right" 1>&2
|
||||||
|
echo IOCCC | ./right
|
||||||
|
echo 1>&2
|
||||||
|
echo "$ echo IOCCC | ./shift" 1>&2
|
||||||
|
echo IOCCC | ./shift
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
echo "$ ./msg0" 1>&2
|
||||||
|
./msg0
|
||||||
|
|
||||||
|
echo "$ ./msg1" 1>&2
|
||||||
|
./msg1
|
||||||
|
|
||||||
|
echo "$ ./msg2" 1>&2
|
||||||
|
./msg2
|
||||||
|
|
||||||
|
read -r -p "Do you wish to see some of the spoilers (Y/N)? "
|
||||||
|
if [[ "$REPLY" == "Y" || "$REPLY" == "y" ]]; then
|
||||||
|
echo "$ make spoilers" 1>&2
|
||||||
|
make spoilers
|
||||||
|
rm -f generated*.c msg*.c
|
||||||
|
echo "$ make i_give_up_show_me_the_spoilers"
|
||||||
|
make i_give_up_show_me_the_spoilers
|
||||||
|
echo 1>&2
|
||||||
|
for i in 0 1 2 3 4 5 6 7 8 10; do ./msg"$i"; done
|
||||||
|
./msg9 < prog.c
|
||||||
|
fi
|
||||||
@@ -3994,6 +3994,13 @@ Cody also added the [try.sh](/2018/hou/try.sh) script.
|
|||||||
[Cody](#cody) added the [try.sh](/2018/vokes/try.sh) script.
|
[Cody](#cody) added the [try.sh](/2018/vokes/try.sh) script.
|
||||||
|
|
||||||
|
|
||||||
|
## <a name="2018_yang"></a>[2018/yang](/2018/yang/prog.c) ([README.md](/2018/yang/README.md))
|
||||||
|
|
||||||
|
[Cody](#cody) added the [try.sh](/2018/yang/try.sh) script. This script will ask
|
||||||
|
if the user wants to see some of the spoilers and only show them if they type
|
||||||
|
`y` or `Y`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# <a name="2019"></a>2019
|
# <a name="2019"></a>2019
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user