diff --git a/2020/otterness/README.md b/2020/otterness/README.md
index bd5a2a68d..3a905a9af 100644
--- a/2020/otterness/README.md
+++ b/2020/otterness/README.md
@@ -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 [2020 otterness in bugs.md](/bugs.md#2020-otterness).
+
+
## To use:
```sh
@@ -15,27 +26,27 @@ make
### Try:
```sh
-wget -O cvikl.mid 'http://www.kunstderfuge.com/-/midi.asp?file=beethoven/symphony_6_1_(c)cvikl.mid'
./prog < cvikl.mid > output.mid
+# Play output.mid with your favorite player
-# Play output.mid with your favorite player
-wget -O entertainer.mid https://www.midiworld.com/download/3857
./prog < entertainer.mid > output2.mid
-# Play output.mid with your favorite player
+# Play output2.mid with your favorite player
```
## Judges' remarks:
-In an entry that boasts not using literals, one would expect to see straightforward ways to produce
-small integers like `!(x^x)<output.mid
```
@@ -77,20 +90,22 @@ it will exit with a specific status code. Meanings of the various status codes
are listed below, under the "Program error codes" heading. On success, the
program exits with a code of 0.
-#### Limitations
- 1. The program does not support MIDI files over 4 MB (specifically, it will
- not take input files larger than 2^22 - 1 bytes). This is unlikely to be a
- big limitation in practice, since even lengthy MIDIs are rarely over a
- couple hundred KB.
+### Limitations
- 2. Not all MIDIs set (or *correctly* set) their timing information, which will
- lead to the tempo of the drum beat not matching the track. This will be
- especially true for "live performance" .mid files.
+1. The program does not support MIDI files over 4 MB (specifically, it will
+not take input files larger than `2^22 - 1` bytes). This is unlikely to be a
+big limitation in practice, since even lengthy MIDIs are rarely over a
+couple hundred KB.
+
+2. Not all MIDIs set (or *correctly* set) their timing information, which will
+lead to the tempo of the drum beat not matching the track. This will be
+especially true for "live performance" .mid files.
+
+3. There may be some types of MIDI messages that the program is unable to
+correctly parse, but I have rarely seen this in practice. The largest
+cause of program failures, in my experience, has been Limitation 2.
- 3. There may be some types of MIDI messages that the program is unable to
- correctly parse, but I have rarely seen this in practice. The largest
- cause of program failures, in my experience, has been Limitation 2.
#### Obfuscation notes
@@ -103,13 +118,14 @@ simple uses of find-and-replace.
So, in a sense, this obfuscation is simply an intentional use of global
variables' classic problem: absolute spaghetti code. The absence of any sort
of literals has the added benefit of forcing any would-be reader to trace the
-contents of many variables starting from `main`, since, without literals, very
+contents of many variables starting from `main()`, since, without literals, very
little of the code gives any inherent visual cues as to its purpose.
I already took the liberty of running `prog.c` through `clang-format`, since it
still fits in the size limit and the formatting of the code was never intended
to be an obfuscation technique here.
+
#### Other remarks
MIDI files are generally divided up into one or more "tracks" that play
@@ -124,24 +140,25 @@ new track, containing the simple 4-note percussion sequence, to match the
length (in beats) of the longest-running track. It appends the new track onto
the end of the file, taking care to update the file header, as well.
+
### Program error codes
If the program encounters an error, it will exit with a nonzero code. The error
codes can be interpreted as follows:
- - `1`: Encountered an invalid MIDI variable-length integer in the input.
- - `2`: Attempted to write an invalid MIDI variable-length integer to output.
- (This would be an internal error).
- - `3`: Encountered an unsupported MIDI event in the input.
- - `4`: Encountered a bad MIDI track header in the input.
- - `5`: The input MIDI file uses SMPTE time division, which isn't supported.
- - `6`: Failed allocating a temporary buffer to hold a single copy of our "beat"
- messages.
- - `7`: Failed allocating a buffer to hold the new track data.
- - `8`: Failed allocating a buffer to hold the input file.
- - `9`: The input file was too large.
- - `10`: The input file's MIDI header was incorrect (but this isn't checked
- very thoroughly).
+- `1`: Encountered an invalid MIDI variable-length integer in the input.
+- `2`: Attempted to write an invalid MIDI variable-length integer to output.
+(This would be an internal error).
+- `3`: Encountered an unsupported MIDI event in the input.
+- `4`: Encountered a bad MIDI track header in the input.
+- `5`: The input MIDI file uses SMPTE time division, which isn't supported.
+- `6`: Failed allocating a temporary buffer to hold a single copy of our "beat"
+messages.
+- `7`: Failed allocating a buffer to hold the new track data.
+- `8`: Failed allocating a buffer to hold the input file.
+- `9`: The input file was too large.
+- `10`: The input file's MIDI header was incorrect (but this isn't checked
+very thoroughly).
## Copyright and CC BY-SA 4.0 License:
diff --git a/2020/otterness/cvikl.mid b/2020/otterness/cvikl.mid
new file mode 100644
index 000000000..b951700b4
Binary files /dev/null and b/2020/otterness/cvikl.mid differ
diff --git a/2020/otterness/entertainer.mid b/2020/otterness/entertainer.mid
new file mode 100644
index 000000000..9eafe2dad
Binary files /dev/null and b/2020/otterness/entertainer.mid differ
diff --git a/bugs.md b/bugs.md
index 5a514313f..752371093 100644
--- a/bugs.md
+++ b/bugs.md
@@ -3617,6 +3617,32 @@ exactly 16 bits per sample, but it allows any sample rate and any number of
audio channels.
+## 2020 otterness
+
+### STATUS: INABIAF - please **DO NOT** fix
+### Source code: [2020/otterness/prog.c](2020/otterness/prog.c)
+### Information: [2020/otterness/README.md](2020/otterness/README.md)
+
+The author listed the following limitations:
+
+1. The program does not support MIDI files over 4 MB (specifically, it will
+not take input files larger than `2^22 - 1` bytes). This is unlikely to be a
+big limitation in practice, since even lengthy MIDIs are rarely over a
+couple hundred KB.
+
+2. Not all MIDIs set (or *correctly* set) their timing information, which will
+lead to the tempo of the drum beat not matching the track. This will be
+especially true for "live performance" .mid files.
+
+3. There may be some types of MIDI messages that the program is unable to
+correctly parse, but I have rarely seen this in practice. The largest
+cause of program failures, in my experience, has been Limitation 2.
+
+See also the [Program error
+codes](/2020/otterness/README.md#program-error-codes) written by the author
+which lists some other conditions which should be considered features, not bugs.
+
+
# 2021
There was no IOCCC in 2021.
@@ -3632,25 +3658,6 @@ There was no IOCCC in 2022.
There was no IOCCC in 2023.
-# Final words
-
-We hope this document was of use to you in determining which entries are known
-to have a problem, what entries are known to have features that are not bugs and
-so on. We also thank you for going through this document and, if you propose any
-fixes via a [GitHub pull
-request](https://github.com/ioccc-src/temp-test-ioccc/pulls) or otherwise, we
-thank you as well for the help! We will happily add you to the
-[thanks](/thanks-for-help.md) file.
-
-There was no IOCCC in these years.
-
-# 2023
-
-Probably there will be no IOCCC in 2023 but we do hope to at least run the
-IOCCCMOCK contest this year. This depends entirely on the work in this repo
-and the [mkiocccentry](https://github.com/ioccc-src/mkiocccentry) being
-completed.
-
# Final words
We hope this document was of use to you in determining which entries are known
diff --git a/thanks-for-help.md b/thanks-for-help.md
index 51106ee4f..3c62d1b81 100644
--- a/thanks-for-help.md
+++ b/thanks-for-help.md
@@ -4443,6 +4443,15 @@ set by the late Christopher Tolkien, son and literary executor and heir to
J.R.R. Tolkien).
+## [2020/otterness](/2020/otterness/prog.c) ([README.md](/2020/otterness/README.md))
+
+
+[Cody](#cody) added the MIDI files [cvikl.mid](/2020/otterness/cvikl.mid) and
+[entertainer.mid](/2020/otterness/entertainer.mid) from the URLs we suggested so
+that one need not download them and to make sure they can always be obtained
+even if the domain or link goes dead.
+
+
## [2020/tsoj](/2020/tsoj/prog.c) ([README.md](/2020/tsoj/README.md))
[Cody](#cody) added [alternate code](/2020/tsoj/README.md#alternate-code) that will feel