Merge pull request #1722 from xexyl/yang2019-try
This commit is contained in:
9 files changed
+320
-53
No files matched your search
+38
-9
@@ -139,8 +139,16 @@ all: data ${TARGET}
|
|||||||
clean clobber install love haste waste maker easter_egg \
|
clean clobber install love haste waste maker easter_egg \
|
||||||
sandwich supernova deep_magic magic charon pluto
|
sandwich supernova deep_magic magic charon pluto
|
||||||
|
|
||||||
|
# Variable to decide if the emulator should save state (default no)
|
||||||
|
#
|
||||||
|
SAVE=0
|
||||||
|
MAP=MAP_PRIVATE
|
||||||
|
ifneq ($((SAVE)),0)
|
||||||
|
MAP=MAP_SHARED
|
||||||
|
endif
|
||||||
|
|
||||||
${PROG}: ${PROG}.c rk05.bsd.fs
|
${PROG}: ${PROG}.c rk05.bsd.fs
|
||||||
${CC} ${CFLAGS} -DI='"rk05.bsd.fs"' -DA=4096 -DS=0173030 -DW=MAP_PRIVATE -DT= -DX=5 -DY=128 \
|
${CC} ${CFLAGS} -DI='"rk05.bsd.fs"' -DA=4096 -DS=0173030 -DW=${MAP} -DT= -DX=5 -DY=128 \
|
||||||
-DV=270 -DP='"89!>@@89T=@@89\"89DQ@K89$$89Q1@H0@@@P@1@@"' ${PROG}.c -o $@ ${LDFLAGS}
|
-DV=270 -DP='"89!>@@89T=@@89\"89DQ@K89$$89Q1@H0@@@P@1@@"' ${PROG}.c -o $@ ${LDFLAGS}
|
||||||
|
|
||||||
rk05.bsd.fs: empty.fs.bz2 builddisk.bsd bsd.img.bz2
|
rk05.bsd.fs: empty.fs.bz2 builddisk.bsd bsd.img.bz2
|
||||||
@@ -148,6 +156,10 @@ rk05.bsd.fs: empty.fs.bz2 builddisk.bsd bsd.img.bz2
|
|||||||
${BZIP2} -dc empty.fs.bz2 > rk05.bsd.fs
|
${BZIP2} -dc empty.fs.bz2 > rk05.bsd.fs
|
||||||
${BZIP2} -dc bsd.img.bz2 | ./builddisk.bsd
|
${BZIP2} -dc bsd.img.bz2 | ./builddisk.bsd
|
||||||
|
|
||||||
|
# NOTE: we don't set -DW=${MAP} here because it's already set to MAP_SHARED and
|
||||||
|
# we don't want to break anything here. The default for the program itself is
|
||||||
|
# MAP_PRIVATE but it's possible that if MAP is set to MAP_PRIVATE then having W
|
||||||
|
# set to MAP_PRIVATE here could be a problem as it's meant to be MAP_SHARED.
|
||||||
builddisk.bsd: ${PROG}.c
|
builddisk.bsd: ${PROG}.c
|
||||||
${CC} ${CFLAGS} -DI='"rk05.bsd.fs"' -DA=4096 -DS=0 -DW=MAP_SHARED -DT= -DX=0 -DY=0 -DV=270 \
|
${CC} ${CFLAGS} -DI='"rk05.bsd.fs"' -DA=4096 -DS=0 -DW=MAP_SHARED -DT= -DX=0 -DY=0 -DV=270 \
|
||||||
-DP='"Q@ 89D?A E@#?@$$D@H?<@E@$$8CA1@H8CJ4EH8CA1@L8CJ4FH)@!F@H%@$$1@H?@%89\"?<@89T89!Q@\"89$$89Q1@[%@#1@D<@ @EHO??@X@@@@@@@1@@"' \
|
-DP='"Q@ 89D?A E@#?@$$D@H?<@E@$$8CA1@H8CJ4EH8CA1@L8CJ4FH)@!F@H%@$$1@H?@%89\"?<@89T89!Q@\"89$$89Q1@[%@#1@D<@ @EHO??@X@@@@@@@1@@"' \
|
||||||
@@ -158,6 +170,10 @@ rk05.v6.fs: empty.fs.bz2 builddisk.v6 v6.img.bz2
|
|||||||
${BZIP2} -dc empty.fs.bz2 > rk05.v6.fs
|
${BZIP2} -dc empty.fs.bz2 > rk05.v6.fs
|
||||||
${BZIP2} -dc v6.img.bz2 | ./builddisk.v6
|
${BZIP2} -dc v6.img.bz2 | ./builddisk.v6
|
||||||
|
|
||||||
|
# NOTE: we don't set -DW=${MAP} here because it's already set to MAP_SHARED and
|
||||||
|
# we don't want to break anything here. The default for the program itself is
|
||||||
|
# MAP_PRIVATE but it's possible that if MAP is set to MAP_PRIVATE then having W
|
||||||
|
# set to MAP_PRIVATE here could be a problem as it's meant to be MAP_SHARED.
|
||||||
builddisk.v6: ${PROG}.c
|
builddisk.v6: ${PROG}.c
|
||||||
${CC} ${CFLAGS} -DI='"rk05.v6.fs"' -DA=4096 -DS=0 -DW=MAP_SHARED -DT= -DX=0 -DY=0 -DV=270 \
|
${CC} ${CFLAGS} -DI='"rk05.v6.fs"' -DA=4096 -DS=0 -DW=MAP_SHARED -DT= -DX=0 -DY=0 -DV=270 \
|
||||||
-DP='"Q@ 89D?A E@#?@$$D@H?<@E@$$8CA1@H8CJ4EH8CA1@L8CJ4FH)@!F@H%@$$1@H?@%89\"?<@89T89!Q@\"89$$89Q1@[%@#1@D<@ @EHO??@X@@@@@@@1@@"' \
|
-DP='"Q@ 89D?A E@#?@$$D@H?<@E@$$8CA1@H8CJ4EH8CA1@L8CJ4FH)@!F@H%@$$1@H?@%89\"?<@89T89!Q@\"89$$89Q1@[%@#1@D<@ @EHO??@X@@@@@@@1@@"' \
|
||||||
@@ -170,24 +186,37 @@ empty.fs.bz2: boot.dat
|
|||||||
${BZIP2} empty.fs
|
${BZIP2} empty.fs
|
||||||
|
|
||||||
v0: ${PROG}.c Makefile v0.image.fs
|
v0: ${PROG}.c Makefile v0.image.fs
|
||||||
@echo "This IOCCC25 Makefile preserves the state of v0.image.fs at the time it won."
|
${CC} ${CFLAGS} -DI='"v0.image.fs"' -DA=4096 -DS=0 -DW=${MAP} \
|
||||||
@echo "If you want to look for v0.image.fs updates, try: ${CURL} ${IMAGE_FS_URL} -o v0.image.fs"
|
|
||||||
@echo "Warning: any updates from ${IMAGE_FS_URL} are unofficial and are not part of the IOCCC."
|
|
||||||
${CC} ${CFLAGS} -DI='"v0.image.fs"' -DA=4096 -DS=0 -DW=MAP_PRIVATE \
|
|
||||||
-DT="INLCR|ICRNL,0,0,ECHO" -DX=5 -DY=128 -DV=200 \
|
-DT="INLCR|ICRNL,0,0,ECHO" -DX=5 -DY=128 -DV=200 \
|
||||||
-DP='"89!?@@89T=@@89\"Q@M89DQ@L89$$89Q1@I0A@@P@X@@1@@"' ${PROG}.c -o $@
|
-DP='"89!?@@89T=@@89\"Q@M89DQ@L89$$89Q1@I0A@@P@X@@1@@"' ${PROG}.c -o $@
|
||||||
|
@echo ""
|
||||||
|
@echo "This IOCCC25 Makefile preserves the state of v0.image.fs at the time it won."
|
||||||
|
@echo "If you want to look for v0.image.fs updates, try:"
|
||||||
|
@echo ""
|
||||||
|
@echo " ${CURL} ${IMAGE_FS_URL} -o v0.image.fs"
|
||||||
|
@echo ""
|
||||||
|
@echo "Warning: any updates from ${IMAGE_FS_URL}"
|
||||||
|
@echo "are unofficial and are not part of this IOCCC entry."
|
||||||
|
@echo ""
|
||||||
|
|
||||||
v6: empty.fs.bz2 builddisk.v6 v6.img.bz2 rk05.v6.fs
|
v6: empty.fs.bz2 builddisk.v6 v6.img.bz2 rk05.v6.fs
|
||||||
${CC} ${CFLAGS} -DI='"rk05.v6.fs"' -DA=4096 -DS=0173030 -DW=MAP_PRIVATE -DT= -DX=5 -DY=128 \
|
${CC} ${CFLAGS} -DI='"rk05.v6.fs"' -DA=4096 -DS=0173030 -DW=${MAP} -DT= -DX=5 -DY=128 \
|
||||||
-DV=270 -DP='"89!>@@89T=@@89\"89DQ@K89$$89Q1@H0@@@P@1@@"' ${PROG}.c -o $@ ${LDFLAGS}
|
-DV=270 -DP='"89!>@@89T=@@89\"89DQ@K89$$89Q1@H0@@@P@1@@"' ${PROG}.c -o $@ ${LDFLAGS}
|
||||||
|
|
||||||
v6.img.bz2: v6.tape.gz
|
v6.img.bz2: v6.tape.gz
|
||||||
@echo "This IOCCC25 Makefile preserves the state of v6.tape.gz at the time it won."
|
|
||||||
@echo "If you want to look for v6.tape.gz updates, try: ${CURL} ${V6_TAPE_URL} -o v6.tape.gz"
|
|
||||||
@echo "Warning: any updates from ${V6_TAPE_URL} are unofficial and are not part of the IOCCC."
|
|
||||||
${RM} -f v6.tape
|
${RM} -f v6.tape
|
||||||
${GZIP_PROG} -c -d v6.tape.gz | ${DD} of=v6.img count=4000 skip=100
|
${GZIP_PROG} -c -d v6.tape.gz | ${DD} of=v6.img count=4000 skip=100
|
||||||
${BZIP2} v6.img
|
${BZIP2} v6.img
|
||||||
|
@echo ""
|
||||||
|
@echo "This IOCCC25 Makefile preserves the state of v6.tape.gz at the time it won."
|
||||||
|
@echo "If you want to look for v6.tape.gz updates, try:"
|
||||||
|
@echo ""
|
||||||
|
@echo " ${CURL} ${V6_TAPE_URL} -o v6.tape.gz"
|
||||||
|
@echo ""
|
||||||
|
@echo "Warning: any updates from ${V6_TAPE_URL}"
|
||||||
|
@echo "are unofficial and are not part of this IOCCC entry."
|
||||||
|
@echo ""
|
||||||
|
|
||||||
|
|
||||||
# alternative executable
|
# alternative executable
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -4,12 +4,25 @@
|
|||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you wish to save state so that you can run the program and keep files changed
|
||||||
|
(for instance you don't want to compile `mullender.c` again) you can compile it
|
||||||
|
like:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make clobber SAVE=1 all
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure that if you do add a file (including by compiling code) that before
|
||||||
|
you exit (ctrl-e) you type in `sync`! Otherwise the file might not exist or it
|
||||||
|
will be corrupt if it does.
|
||||||
|
|
||||||
|
|
||||||
### Bugs and (Mis)features:
|
### Bugs and (Mis)features:
|
||||||
|
|
||||||
The current status of this entry is:
|
The current status of this entry is:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
STATUS: known bug - please help us fix
|
||||||
STATUS: INABIAF - please **DO NOT** fix
|
STATUS: INABIAF - please **DO NOT** fix
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,15 @@ e
|
|||||||
indent
|
indent
|
||||||
indent.c
|
indent.c
|
||||||
indent.o
|
indent.o
|
||||||
|
input.txt
|
||||||
|
original.txt
|
||||||
output.txt
|
output.txt
|
||||||
|
output1.txt
|
||||||
|
output2.txt
|
||||||
prog
|
prog
|
||||||
prog.orig
|
prog.orig
|
||||||
|
scrambled.txt
|
||||||
|
scrambled1.txt
|
||||||
|
scrambled2.txt
|
||||||
|
scrambled3.txt
|
||||||
|
unscrambled.txt
|
||||||
+32
-40
@@ -5,6 +5,17 @@ make
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Bugs and (Mis)features:
|
||||||
|
|
||||||
|
The current status of this entry is:
|
||||||
|
|
||||||
|
```
|
||||||
|
STATUS: INABIAF - please **DO NOT** fix
|
||||||
|
```
|
||||||
|
|
||||||
|
For more detailed information see [2019 yang in bugs.md](/bugs.md#2019-yang).
|
||||||
|
|
||||||
|
|
||||||
## To use:
|
## To use:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -25,28 +36,7 @@ cat a b c d | ./prog
|
|||||||
### Try:
|
### Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./prog prog.c a b c d e
|
./try.sh
|
||||||
|
|
||||||
cat a
|
|
||||||
|
|
||||||
cat b
|
|
||||||
|
|
||||||
cat c
|
|
||||||
|
|
||||||
cat d
|
|
||||||
|
|
||||||
cat e
|
|
||||||
|
|
||||||
cat a b c d e | ./prog
|
|
||||||
|
|
||||||
cat a b c d e | ./prog | diff - prog.c
|
|
||||||
|
|
||||||
./prog prog.c | ruby prog.c
|
|
||||||
|
|
||||||
|
|
||||||
./prog violet.c | ruby prog.c
|
|
||||||
|
|
||||||
./prog violet.c | ruby violet.c
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -108,13 +98,13 @@ can simply use `cat` to unscramble the output text.
|
|||||||
cat output.txt
|
cat output.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
It might seem like nothing was scrambled, but you can try passing the
|
It might seem like nothing was scrambled, but you can try passing the output
|
||||||
output through `strings(1)` and see that most of the original strings
|
through `strings(1)` and see that most of the original strings are gone. What
|
||||||
are gone. What happened is that the original text has been shuffled
|
happened is that the original text has been shuffled with ANSI cursor
|
||||||
with ANSI cursor positioning codes inserted such that characters are
|
positioning codes inserted in such a way that characters are printed in random
|
||||||
printed in random order. This effect is more visible if there is a
|
order. This effect is more visible if there is a delay after each character is
|
||||||
delay after each character is printed. For convenience, a utility is
|
printed. For convenience, a utility is included in the source to output
|
||||||
included in the source to output characters slowly:
|
characters slowly:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./prog input.txt | ruby prog.c
|
./prog input.txt | ruby prog.c
|
||||||
@@ -146,14 +136,14 @@ For files that are larger than your terminal window, `cat` will not be
|
|||||||
sufficient for unscrambling because any scrolling causes the character
|
sufficient for unscrambling because any scrolling causes the character
|
||||||
positions to be misaligned. But fear not, this utility also includes
|
positions to be misaligned. But fear not, this utility also includes
|
||||||
unscrambling functionality. If no argument is specified, input will
|
unscrambling functionality. If no argument is specified, input will
|
||||||
be read through stdin and unscrambled to stdout:
|
be read through `stdin` and unscrambled to `stdout`:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./prog < scrambled.txt > unscrambled.txt
|
./prog < scrambled.txt > unscrambled.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
Where this is useful is that if you scramble the input to multiple
|
Where this is useful is that if you scramble the input to multiple
|
||||||
files and unscramble each output files individually, those output
|
files and unscramble each output file individually, those output
|
||||||
files can be printed on transparencies and distributed separately.
|
files can be printed on transparencies and distributed separately.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -181,8 +171,8 @@ A simple text scrambling utility might not have required a screenful
|
|||||||
of code, but this particular one natively supports UTF-8.
|
of code, but this particular one natively supports UTF-8.
|
||||||
Specifically: individual UTF-8 byte sequences will not be split into
|
Specifically: individual UTF-8 byte sequences will not be split into
|
||||||
broken ones, and the utility is aware of full-width versus half-width
|
broken ones, and the utility is aware of full-width versus half-width
|
||||||
differences such that cursor is positioned correctly for most CJK
|
differences such that the cursor is positioned correctly for most CJK
|
||||||
input. `sample_input.txt` demonstrates this feature with a mix of
|
input. [sample_input.txt](sample_input.txt) demonstrates this feature with a mix of
|
||||||
Basic Latin and Japanese characters.
|
Basic Latin and Japanese characters.
|
||||||
|
|
||||||
Output cursor positions will most definitely be wrong for inputs
|
Output cursor positions will most definitely be wrong for inputs
|
||||||
@@ -191,17 +181,19 @@ be possible to unscramble those text back to the original using this
|
|||||||
same utility, since the utility is self-consistent in how cursor
|
same utility, since the utility is self-consistent in how cursor
|
||||||
positions are handled.
|
positions are handled.
|
||||||
|
|
||||||
|
|
||||||
### Error handling
|
### Error handling
|
||||||
|
|
||||||
If any file can not be opened for reading or writing, an error is
|
If any file can not be opened for reading or writing, an error is
|
||||||
printed to stderr, and the utility will exit with nonzero status.
|
printed to `stderr`, and the utility will exit with nonzero status.
|
||||||
|
|
||||||
If there isn't enough memory, the utility will likely crash.
|
If there isn't enough memory, the utility will likely crash.
|
||||||
|
|
||||||
If input contains CR-LF end of line sequences, those CRs are silently
|
If input contains CR-LF end of line sequences, those `CR`s are silently
|
||||||
dropped. In fact, most control codes are silently ignored except line
|
dropped. In fact, most control codes are silently ignored except line
|
||||||
feeds (preserved) and tabs (expanded to 8 spaces).
|
feeds (preserved) and tabs (expanded to 8 spaces).
|
||||||
|
|
||||||
|
|
||||||
### Compatibility
|
### Compatibility
|
||||||
|
|
||||||
Verified to work and compiles without warnings on these environments:
|
Verified to work and compiles without warnings on these environments:
|
||||||
@@ -212,13 +204,13 @@ Verified to work and compiles without warnings on these environments:
|
|||||||
* clang 5.0.1 on Cygwin
|
* clang 5.0.1 on Cygwin
|
||||||
* gcc 4.8.4 on Linux
|
* gcc 4.8.4 on Linux
|
||||||
|
|
||||||
|
|
||||||
### Full version
|
### Full version
|
||||||
|
|
||||||
I tried really hard to make `prog.c` fit in a 80x25 terminal without
|
I tried really hard to make `prog.c` fit in a 80x25 terminal without wrapping.
|
||||||
wrapping. If I were not constrained by space, I would have made an
|
If I were not constrained by space, I would have made an ASCII art out of it.
|
||||||
ASCII art out of it. `violet.c` is that program, and also comes with
|
[violet.c](violet.c) is that program, and also comes with the minor benefit of
|
||||||
the minor benefit of supporting lines longer than a million columns
|
supporting lines longer than a million columns depending on `sizeof(int)`.
|
||||||
depending on `sizeof(int)`.
|
|
||||||
|
|
||||||
Violet is named after [Violet
|
Violet is named after [Violet
|
||||||
Evergarden](https://en.wikipedia.org/wiki/Violet_Evergarden) in the story with
|
Evergarden](https://en.wikipedia.org/wiki/Violet_Evergarden) in the story with
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
IOCCC 2019 Most
|
||||||
|
in need of
|
||||||
|
transparency
|
||||||
|
by Don Yang!
|
||||||
@@ -11,5 +11,3 @@
|
|||||||
あぁ おおo ぉオオ しい シシシシシシ CCCCc cCc
|
あぁ おおo ぉオオ しい シシシシシシ CCCCc cCc
|
||||||
ぁあ おぉおぉお しぃしぃしっ シシシシ CCCCccCCC
|
ぁあ おぉおぉお しぃしぃしっ シシシシ CCCCccCCC
|
||||||
(*゚ー゚)
|
(*゚ー゚)
|
||||||
|
|
||||||
|
|
||||||
Executable
+168
@@ -0,0 +1,168 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# try.sh - demonstrate IOCCC winner 2019/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 scramble ioccc.txt into five files: "
|
||||||
|
echo 1>&2
|
||||||
|
echo "$ ./prog ioccc.txt a b c d e" 1>&2
|
||||||
|
./prog ioccc.txt a b c d e
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part a with cat: "
|
||||||
|
clear
|
||||||
|
cat a
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part b with cat: "
|
||||||
|
clear
|
||||||
|
cat b
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part c with cat: "
|
||||||
|
clear
|
||||||
|
cat c
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part d with cat: "
|
||||||
|
clear
|
||||||
|
cat d
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part e with cat: "
|
||||||
|
clear
|
||||||
|
cat e
|
||||||
|
|
||||||
|
echo "$ cat a b c d e | ./prog" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to unscramble all parts: "
|
||||||
|
echo 1>&2
|
||||||
|
cat a b c d e | ./prog
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
echo "$ cat a b c d e | ./prog | diff - ioccc.txt" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to continue: "
|
||||||
|
echo 1>&2
|
||||||
|
cat a b c d e | ./prog | diff -s - ioccc.txt
|
||||||
|
|
||||||
|
LINES="$(tput lines)"
|
||||||
|
COLS="$(tput cols)"
|
||||||
|
if [[ "$COLS" -lt 75 || "$LINES" -lt 13 ]]; then
|
||||||
|
# if screen size < 75 x 13 then exit
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to scramble sample_input.txt into five files: "
|
||||||
|
echo 1>&2
|
||||||
|
echo "$ ./prog sample_input.txt a b c d e" 1>&2
|
||||||
|
./prog sample_input.txt a b c d e
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part a with cat: "
|
||||||
|
clear
|
||||||
|
cat a
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part b with cat: "
|
||||||
|
clear
|
||||||
|
cat b
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part c with cat: "
|
||||||
|
clear
|
||||||
|
cat c
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part d with cat: "
|
||||||
|
clear
|
||||||
|
cat d
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part e with cat: "
|
||||||
|
clear
|
||||||
|
cat e
|
||||||
|
|
||||||
|
echo "$ cat a b c d e | ./prog" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to unscramble all parts: "
|
||||||
|
echo 1>&2
|
||||||
|
cat a b c d e | ./prog
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
echo "$ cat a b c d e | ./prog | diff - sample_input.txt" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to continue: "
|
||||||
|
echo 1>&2
|
||||||
|
cat a b c d e | ./prog | diff -s - sample_input.txt
|
||||||
|
|
||||||
|
|
||||||
|
if [[ "$COLS" -lt 80 || "$LINES" -lt 25 ]]; then
|
||||||
|
# if screen size < 80 x 25 then exit
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: cat prog.c: "
|
||||||
|
echo 1>&2
|
||||||
|
cat prog.c
|
||||||
|
|
||||||
|
echo 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to scramble prog.c into five files: "
|
||||||
|
echo 1>&2
|
||||||
|
echo "$ ./prog prog.c a b c d e" 1>&2
|
||||||
|
./prog prog.c a b c d e
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part a with cat: "
|
||||||
|
clear
|
||||||
|
cat a
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part b with cat: "
|
||||||
|
clear
|
||||||
|
cat b
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part c with cat: "
|
||||||
|
clear
|
||||||
|
cat c
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part d with cat: "
|
||||||
|
clear
|
||||||
|
cat d
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to unscramble part e with cat: "
|
||||||
|
clear
|
||||||
|
cat e
|
||||||
|
|
||||||
|
echo "$ cat a b c d e | ./prog" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to unscramble all parts: "
|
||||||
|
echo 1>&2
|
||||||
|
cat a b c d e | ./prog
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
echo "$ cat a b c d e | ./prog | diff - prog.c" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to continue: "
|
||||||
|
echo 1>&2
|
||||||
|
cat a b c d e | ./prog | diff -s - prog.c
|
||||||
|
|
||||||
|
# For the next three we have to see if ruby is installed
|
||||||
|
RUBY="$(type -P ruby)"
|
||||||
|
|
||||||
|
if [[ -n "$RUBY" ]]; then
|
||||||
|
read -r -p "Do you want to see the slow scrambling: ./prog prog.c | ruby prog.c (Y/N)? "
|
||||||
|
if [[ "$REPLY" == "y" || "$REPLY" == "Y" ]]; then
|
||||||
|
echo "This may take a while, hit ctrl-c to exit script." 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
./prog prog.c | ruby prog.c
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -r -p "Do you want to see the slow scrambling: ./prog violet.c | ruby prog.c (Y/N)? "
|
||||||
|
if [[ "$REPLY" == "y" || "$REPLY" == "Y" ]]; then
|
||||||
|
echo "This may take a while, hit ctrl-c to exit script." 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
./prog violet.c | ruby prog.c
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -r -p "Do you want to see the slow scrambling: ./prog violet.c | ruby violet.c (Y/N)? "
|
||||||
|
if [[ "$REPLY" == "y" || "$REPLY" == "Y" ]]; then
|
||||||
|
echo "This may take a while, hit ctrl-c to exit script." 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
./prog violet.c | ruby violet.c
|
||||||
|
fi
|
||||||
|
fi
|
||||||
@@ -3185,10 +3185,25 @@ but this is expected and the file `ioccc.html` will be generated properly.
|
|||||||
|
|
||||||
## 2018 mills
|
## 2018 mills
|
||||||
|
|
||||||
### STATUS: INABIAF - please **DO NOT** fix
|
### STATUS: known bug - please help us fix
|
||||||
### Source code: [2018/mills/prog.c](2018/mills/prog.c)
|
### Source code: [2018/mills/prog.c](2018/mills/prog.c)
|
||||||
### Information: [2018/mills/README.md](2018/mills/README.md)
|
### Information: [2018/mills/README.md](2018/mills/README.md)
|
||||||
|
|
||||||
|
After exiting the program (with ctrl-e) if you try running it again you will
|
||||||
|
likely see:
|
||||||
|
|
||||||
|
```
|
||||||
|
>bootT5pw
|
||||||
|
]h_ 8D3[]
|
||||||
|
```
|
||||||
|
|
||||||
|
where `[]` is the cursor. When this happens if you hit enter (this is necessary
|
||||||
|
or else it'll happen again) and then exit again (ctrl-e) and run `prog` again
|
||||||
|
it'll be okay.
|
||||||
|
|
||||||
|
|
||||||
|
### STATUS: INABIAF - please **DO NOT** fix
|
||||||
|
|
||||||
The author stated that if you make a typo it can happen that the boot loader can
|
The author stated that if you make a typo it can happen that the boot loader can
|
||||||
crash and halt. If this is the case type ctrl-e to quit the emulator and try
|
crash and halt. If this is the case type ctrl-e to quit the emulator and try
|
||||||
again.
|
again.
|
||||||
@@ -3198,7 +3213,11 @@ do this you should type `make clobber all` and try again.
|
|||||||
|
|
||||||
Cody caused a funny problem where it showed `ERROR` after each command. The
|
Cody caused a funny problem where it showed `ERROR` after each command. The
|
||||||
solution was to hit ctrl-e and start again. He does not know if this is what was
|
solution was to hit ctrl-e and start again. He does not know if this is what was
|
||||||
referred to by the author though he doesn't think he made a typo either.
|
referred to by the author but there was likely no typo involved.
|
||||||
|
|
||||||
|
Cody notes that if you are using the saved mode you must type `sync` prior to
|
||||||
|
exiting the program or else the next time you run it the file will not exist (or
|
||||||
|
in the case of compiled code it won't be executable).
|
||||||
|
|
||||||
|
|
||||||
## 2018 vokes
|
## 2018 vokes
|
||||||
@@ -3382,6 +3401,21 @@ This program will not validate input so it might fail or get stuck if invoked
|
|||||||
erroneously.
|
erroneously.
|
||||||
|
|
||||||
|
|
||||||
|
## 2019 yang
|
||||||
|
|
||||||
|
### STATUS: INABIAF - please **DO NOT** fix
|
||||||
|
### Source code: [2019/yang/prog.c](2019/yang/prog.c)
|
||||||
|
### Information: [2019/yang/README.md](2019/yang/README.md)
|
||||||
|
|
||||||
|
The author noted that if the program runs out of memory it is likely to crash.
|
||||||
|
|
||||||
|
The author also stated that 'if input contains CR-LF end of line sequences,
|
||||||
|
those `CR`s are silently dropped. In fact, most control codes are silently
|
||||||
|
ignored except line feeds (preserved) and tabs (expanded to 8 spaces).'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 2020
|
# 2020
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4066,6 +4066,18 @@ that's probably true: let's just say that for the IOCCC I'm (Cody) a weasel! :-)
|
|||||||
Cody also added the [try.sh](/2018/hou/try.sh) script.
|
Cody also added the [try.sh](/2018/hou/try.sh) script.
|
||||||
|
|
||||||
|
|
||||||
|
## <a name="2018_mills"></a>[2018/mills](/2018/mills/prog.c) ([README.md](/2018/mills/README.md))
|
||||||
|
|
||||||
|
[Cody](#cody), based on the author's remarks, made it possible to save state
|
||||||
|
between runs of the program so that one can resume where they left off. It
|
||||||
|
should be noted that there is a bug in the entry (irrespective of save state
|
||||||
|
option) where running `./prog` twice in a row involves having to hit (the second
|
||||||
|
run) enter and then exit and then start the program again. Also if you do add a
|
||||||
|
file you should run `sync` prior to exiting or else the file might not exist or
|
||||||
|
it might be corrupt. See [2018/mills in bugs.md](/bugs.md#2018-mills) for more
|
||||||
|
details on the bug.
|
||||||
|
|
||||||
|
|
||||||
## <a name="2018_poikola"></a>[2018/poikola](/2018/poikola/prog.c) ([README.md[(/2018/poikola/README.md))
|
## <a name="2018_poikola"></a>[2018/poikola](/2018/poikola/prog.c) ([README.md[(/2018/poikola/README.md))
|
||||||
|
|
||||||
[Cody](#cody) added the missing `docs` rule to the Makefile that forms a PDF
|
[Cody](#cody) added the missing `docs` rule to the Makefile that forms a PDF
|
||||||
@@ -4200,6 +4212,14 @@ He also added the script [try.sh](/2019/karns/try.sh) to showcase the entry a
|
|||||||
bit more easily.
|
bit more easily.
|
||||||
|
|
||||||
|
|
||||||
|
## <a name="2019_yang"></a>[2019/yang](/2019/yang/prog.c) ([README.md](/2019/yang/README.md]))
|
||||||
|
|
||||||
|
[Cody](#cody) added the [try.sh](/2019/yang/try.sh) script which also involved
|
||||||
|
slightly updating the [sample_input.txt](/2019/yang/sample_input.txt) file
|
||||||
|
(removed trailing newlines as it resulted in `diff` showing differences when it
|
||||||
|
shouldn't) and adding the [ioccc.txt](/2019/yang/ioccc.txt) file.
|
||||||
|
|
||||||
|
|
||||||
# <a name="2020"></a>2020
|
# <a name="2020"></a>2020
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user