Add 2020/kurdyukov4/try.sh + format/typo checks
This commit is contained in:
1 parent
b6039b0aef
commit
ab80ffd699
3 files changed
+95
-25
No files matched your search
+31
-25
@@ -14,14 +14,11 @@ make
|
|||||||
|
|
||||||
### Try:
|
### Try:
|
||||||
|
|
||||||
```sh
|
When running this, ask yourself why it gets progressively slower when the
|
||||||
./prog Shakespeare.txt 2000 10 1
|
context length decreases:
|
||||||
./prog Shakespeare.txt 2000 9 1
|
|
||||||
./prog Shakespeare.txt 2000 8 1
|
|
||||||
# ... Why does it get progressively slower when the context length decreases?
|
|
||||||
|
|
||||||
./prog Eugene_Onegin.txt 2000 10 1
|
```sh
|
||||||
# For those not knowing Russian, just to see how the UTF-8 characters are handled
|
./try.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
> Performance depends on the number of same hashes found.
|
> Performance depends on the number of same hashes found.
|
||||||
@@ -31,14 +28,18 @@ make
|
|||||||
|
|
||||||
## Judges' remarks:
|
## Judges' remarks:
|
||||||
|
|
||||||
We were able to [write our own program](rand.c) performing the same trick using the (still
|
We were able to [write our own program](rand.c) performing the same trick using
|
||||||
non-standard, for some reason) library function `memmem()`, but that way it
|
the (still non-standard, for some reason) library function `memmem()`, but that
|
||||||
works too fast regardless of the context length, and it's much less fun.
|
way it works too fast regardless of the context length, and it's much less fun.
|
||||||
|
|
||||||
> Wow, amazing! Very fast, but there is a drawback to randomness.
|
The author wrote in reply:
|
||||||
> If some string only appears after half the input, the first instance
|
|
||||||
> of this string will have a 50% chance of occurrence.
|
---
|
||||||
> Example:
|
|
||||||
|
Wow, amazing! Very fast, but there is a drawback to randomness.
|
||||||
|
If some string only appears after half the input, the first instance
|
||||||
|
of this string will have a 50% chance of occurrence.
|
||||||
|
Example:
|
||||||
|
|
||||||
```
|
```
|
||||||
echo "00000000000000000000 01 02 02 02 02 02 02" > test.txt
|
echo "00000000000000000000 01 02 02 02 02 02 02" > test.txt
|
||||||
@@ -51,19 +52,23 @@ echo "00000000000000000000 01 02 02 02 02 02 02" > test.txt
|
|||||||
> But this will happen very rarely on real data.
|
> But this will happen very rarely on real data.
|
||||||
> -- Author
|
> -- Author
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
Try using the same random seed and varying the context size.
|
Try using the same random seed and varying the context size.
|
||||||
|
|
||||||
BTW: what on Middle-earth is `lámatyávë`? It's Quenya, one of the languages of
|
BTW: what on Middle-earth is `lámatyávë`? It's Quenya, one of the languages of
|
||||||
the Elves in Tolkien's Legendarium. It means sound taste (plural is lámatyáver)
|
the Elves in Tolkien's Legendarium. It means sound taste (plural is lámatyáver)
|
||||||
and it refers to phonaesthesia - the pleasure of sound and form of words. It's
|
and it refers to phonaesthesia - in other words, it refers to the pleasure of
|
||||||
discussed in [Morgoth's Ring](https://en.wikipedia.org/wiki/Morgoth%27s_Ring),
|
sound and form of words. It's discussed in [Morgoth's
|
||||||
volume X of [History of Middle-earth
|
Ring](https://en.wikipedia.org/wiki/Morgoth%27s_Ring), volume X of [History of
|
||||||
(HoMe)](https://en.wikipedia.org/wiki/The_History_of_Middle-earth). Now can you
|
Middle-earth (HoMe)](https://en.wikipedia.org/wiki/The_History_of_Middle-earth).
|
||||||
appreciate the award title a bit better?
|
Now can you appreciate the award title a bit better?
|
||||||
|
|
||||||
|
|
||||||
## Author's remarks:
|
## Author's remarks:
|
||||||
|
|
||||||
|
|
||||||
### Building:
|
### Building:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -73,7 +78,7 @@ cc prog.c -o prog
|
|||||||
### Usage:
|
### Usage:
|
||||||
|
|
||||||
This program generates random text from the provided dictionary using a Markov
|
This program generates random text from the provided dictionary using a Markov
|
||||||
chain, outputs to `stdout`.
|
chain, outputting to `stdout`.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./prog input.txt 2000 10 12345
|
./prog input.txt 2000 10 12345
|
||||||
@@ -82,19 +87,19 @@ chain, outputs to `stdout`.
|
|||||||
Parameters are:
|
Parameters are:
|
||||||
|
|
||||||
1. dictionary filename
|
1. dictionary filename
|
||||||
Need at least the size of the book, the more the better (1Mb), you can
|
Need at least the size of the book, the more the better (1Mb); you can
|
||||||
concatenate several books into one file. This should be a text file (not
|
concatenate several books into one file. This should be a text file (not
|
||||||
`.doc`/`.pdf`). You can feed with books in `.fb2` format, metadata is
|
`.doc`/`.pdf`). You can feed it with books in `.fb2` format, metadata is
|
||||||
filtered. Whitespace characters are also filtered. For languages other than
|
filtered. Whitespace characters are also filtered. For languages other than
|
||||||
English, it's better to use ANSI encoding. You can use UTF, but you need to
|
English, it's better to use ANSI encoding. You can use UTF, but you need to
|
||||||
increase chain length (if one ANSI character is encoded as two UTF bytes,
|
increase the chain length (if one ANSI character is encoded as two UTF bytes,
|
||||||
then multiply chain length by two).
|
then multiply chain length by two).
|
||||||
|
|
||||||
2. bytes to generate (limited to 1Mb)
|
2. bytes to generate (limited to 1Mb)
|
||||||
|
|
||||||
3. chain length
|
3. chain length
|
||||||
Randomness and performance depend inversely on this parameter and the size
|
Randomness and performance depend inversely on this parameter and the size
|
||||||
of the dictionary. If you feel that bytes are generated too slowly, then you
|
of the dictionary. If you feel that the bytes are generated too slowly, then you
|
||||||
need to increase the length of the chain. This length means that any part of
|
need to increase the length of the chain. This length means that any part of
|
||||||
the output of this size in bytes exists somewhere in the dictionary.
|
the output of this size in bytes exists somewhere in the dictionary.
|
||||||
|
|
||||||
@@ -102,7 +107,8 @@ Parameters are:
|
|||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
You can try this with the inputs provided with [2019/mills](/2019/mills/prog.c) from the IOCCC winners.
|
You can try this with the inputs provided with
|
||||||
|
[2019/mills](/2019/mills/README.md) from the IOCCC winners.
|
||||||
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|||||||
Executable
+49
@@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# try.sh - demonstrate IOCCC winner 2020/kurdyukov4
|
||||||
|
#
|
||||||
|
|
||||||
|
# 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: ./prog Shakespeare.txt 2000 10 1: "
|
||||||
|
echo 1>&2
|
||||||
|
./prog Shakespeare.txt 2000 10 1
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./prog Shakespeare.txt 2000 9 1: "
|
||||||
|
echo 1>&2
|
||||||
|
./prog Shakespeare.txt 2000 9 1
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./prog Shakespeare.txt 2000 8 1: "
|
||||||
|
echo 1>&2
|
||||||
|
./prog Shakespeare.txt 2000 8 1
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./prog Eugene_Onegin.txt 2000 10 1: "
|
||||||
|
echo 1>&2
|
||||||
|
./prog Eugene_Onegin.txt 2000 10 1
|
||||||
|
|
||||||
|
echo "$ echo "00000000000000000000 01 02 02 02 02 02 02" > test.txt" 1>&2
|
||||||
|
echo "00000000000000000000 01 02 02 02 02 02 02" > test.txt
|
||||||
|
echo 1>&2
|
||||||
|
make rand >/dev/null || exit 0
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./prog test.txt 1000 2 123: "
|
||||||
|
echo 1>&2
|
||||||
|
./prog test.txt 1000 2 123
|
||||||
|
echo 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to run: ./rand test.txt 1000 2 123" 1>&2
|
||||||
|
echo 1>&2
|
||||||
|
./rand test.txt 1000 2 123
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -4426,6 +4426,21 @@ README.md. Naturally he's one of the ones who can read text even if it's even
|
|||||||
more jumbled but we know of others too.
|
more jumbled but we know of others too.
|
||||||
|
|
||||||
|
|
||||||
|
## <a name="2020_kurdyukov4"></a>[2020/kurdyukov4](/2020/kurdyukov4/prog.c) ([README.md](/2020/kurdyukov4/README.md))
|
||||||
|
|
||||||
|
[Cody](#cody) added the [try.sh](/2020/kurdyukov4/try.sh) script.
|
||||||
|
|
||||||
|
Cody also added from [2019/mills](/2019/mills/README.md) the text file
|
||||||
|
[Shakespeare.txt](/2020/kurdyukov4/Shakespeare.txt) as we are considering to
|
||||||
|
have each entry have a tarball with the entry by itself.
|
||||||
|
|
||||||
|
Also, to explain the confusing to most people award, Cody gave a quick
|
||||||
|
translation of `lámatyávë`, which comes from History of Middle-earth [HoMe],
|
||||||
|
volume X, Morgoth's Ring, which he also has (and which is part of the 12 volume
|
||||||
|
set by the late Christopher Tolkien, son and literary executor and heir to
|
||||||
|
J.R.R. Tolkien).
|
||||||
|
|
||||||
|
|
||||||
## <a name="2020_tsoj"></a>[2020/tsoj](/2020/tsoj/prog.c) ([README.md](/2020/tsoj/README.md))
|
## <a name="2020_tsoj"></a>[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
|
[Cody](#cody) added [alternate code](/2020/tsoj/README.md#alternate-code) that will feel
|
||||||
|
|||||||
Reference in new issue
Block a user