Add bubblebabble

This commit is contained in:
Neale Pickett 2024-03-28 15:59:36 -06:00 committed by Neale Pickett
parent c66c6aea95
commit 26949ae6e9
3 changed files with 83 additions and 4 deletions

View File

@ -17,6 +17,7 @@ TARGETS += entropy
TARGETS += freq
TARGETS += histogram
TARGETS += printy
TARGETS += bubblebabble
SCRIPTS += octets

View File

@ -313,10 +313,35 @@ Reads the first number of each line, and prints a histogram.
0a ◙ # 1
41 A ######## 8
61 a ################ 16
$ echo 'aaaaaaaaAAAAAAAAaaaaaaaa' | freq | histogram -d 4
0a ◙ 1
41 A ## 8
61 a #### 16
$ echo aaaaaabcccc | freq | histogram
0a ◙ # 1
61 a ###### 6
62 b # 1
63 c #### 4
$ echo aaaaaabcccc | freq | histogram | sort -nk 4
0a ◙ # 1
62 b # 1
63 c #### 4
61 a ###### 6
## bubblebabble: print bubblebabble digest of input
Prints a [bubblebabble digest](https://web.mit.edu/kenta/www/one/bubblebabble/spec/jrtrjwzi/draft-huima-01.txt)
of the input.
This is a *digest*, not a *hash*:
it can be reversed.
If you write `unbubblebabble` before I do,
please send it to me :)
$ printf '' | bubblebabble
xexax
$ printf 1234567890 | bubblebabble
xesef-disof-gytuf-katof-movif-baxux
$ printf Pineapple | bubblebabble
xigak-nyryk-humil-bosek-sonax
Example Recipes

53
bubblebabble.c Executable file
View File

@ -0,0 +1,53 @@
#include <stdio.h>
/** Compute bubble babble for input buffer.
*
* The generated output will be of length 6*((inlen/2)+1), including the
* trailing NULL.
*
* Test vectors:
* `' (empty string) `xexax'
* `1234567890' `xesef-disof-gytuf-katof-movif-baxux'
* `Pineapple' `xigak-nyryk-humil-bosek-sonax'
*/
static char const consonants[] = "bcdfghklmnprstvz";
static char const vowels[] = "aeiouy";
int
main(int argc, char *argv[])
{
int seed = 1;
putchar('x');
while (1) {
int c;
c = getchar();
if (EOF == c) {
putchar(vowels[seed % 6]);
putchar('x');
putchar(vowels[seed / 6]);
break;
}
putchar(vowels[(((c >> 6) & 3) + seed) % 6]);
putchar(consonants[(c >> 2) & 15]);
putchar(vowels[((c & 3) + (seed / 6)) % 6]);
seed = (seed * 5) + (c * 7);
c = getchar();
seed = (seed + c) % 36;
if (EOF == c) {
break;
}
putchar(consonants[(c >> 4) & 15]);
putchar('-');
putchar(consonants[c & 15]);
}
putchar('x');
putchar('\n');
return 0;
}