Skip to content

Instantly share code, notes, and snippets.

@clusterfudge
Last active October 29, 2021 21:31
Show Gist options
  • Save clusterfudge/be110c9a9c277fd88b22f00dc758a7c9 to your computer and use it in GitHub Desktop.
Save clusterfudge/be110c9a9c277fd88b22f00dc758a7c9 to your computer and use it in GitHub Desktop.

Revisions

  1. clusterfudge revised this gist Oct 29, 2021. 1 changed file with 13 additions and 13 deletions.
    26 changes: 13 additions & 13 deletions main.cpp
    Original file line number Diff line number Diff line change
    @@ -7,8 +7,8 @@ char BUFFER[BUFFER_SIZE];
    short BUFFER_INDEX = 0;
    const int BIGINT_SIZE = 2048;
    char BIGINT[BIGINT_SIZE];
    short BIGINT_INDEX = 2047;
    short BIGINT_HEAD = 2047;
    short BIGINT_INDEX = BIGINT_SIZE - 1;
    short BIGINT_HEAD = BIGINT_SIZE - 1;

    char FIZZ[5] = "fizz";
    char BUZZ[5] = "buzz";
    @@ -23,7 +23,7 @@ void incr() {
    BIGINT[BIGINT_INDEX] += 1;
    }
    BIGINT_HEAD = BIGINT_INDEX < BIGINT_HEAD ? BIGINT_INDEX : BIGINT_HEAD;
    BIGINT_INDEX = 2047;
    BIGINT_INDEX = BIGINT_SIZE - 1;
    }
    }

    @@ -48,39 +48,39 @@ void write_to_buffer(char * source, int start, int end) {

    int fizzbuzz_no_conditionals() {
    // initialize BIGINT
    memset(BIGINT, '0', 2048);
    BIGINT[2048] = '\0';
    memset(BIGINT, '0', BIGINT_SIZE);
    BIGINT[BIGINT_SIZE - 1] = '\0';
    memset(BUFFER, 0, BUFFER_SIZE);

    incr();
    while (true) {
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    write_to_buffer(BIGINT, BIGINT_HEAD, BIGINT_SIZE);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    write_to_buffer(BIGINT, BIGINT_HEAD, BIGINT_SIZE);
    incr();
    write_to_buffer(FIZZ, 0, 4);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    write_to_buffer(BIGINT, BIGINT_HEAD, BIGINT_SIZE);
    incr();
    write_to_buffer(BUZZ, 0, 4);
    incr();
    write_to_buffer(FIZZ, 0, 4);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    write_to_buffer(BIGINT, BIGINT_HEAD, BIGINT_SIZE);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    write_to_buffer(BIGINT, BIGINT_HEAD, BIGINT_SIZE);
    incr();
    write_to_buffer(FIZZ, 0, 4);
    incr();
    write_to_buffer(BUZZ, 0, 4);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    write_to_buffer(BIGINT, BIGINT_HEAD, BIGINT_SIZE);
    incr();
    write_to_buffer(FIZZ, 0, 4);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    write_to_buffer(BIGINT, BIGINT_HEAD, BIGINT_SIZE);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    write_to_buffer(BIGINT, BIGINT_HEAD, BIGINT_SIZE);
    incr();
    write_to_buffer(FIZZBUZZ, 0, 8);
    incr();
  2. clusterfudge renamed this gist Oct 29, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion main.c → main.cpp
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    // compiled with gcc main.c -O3
    // compiled with gcc main.cpp -O3
    #include<stdio.h>
    #include<memory.h>

  3. clusterfudge created this gist Oct 29, 2021.
    94 changes: 94 additions & 0 deletions main.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,94 @@
    // compiled with gcc main.c -O3
    #include<stdio.h>
    #include<memory.h>

    const int BUFFER_SIZE = 8092 * 4;
    char BUFFER[BUFFER_SIZE];
    short BUFFER_INDEX = 0;
    const int BIGINT_SIZE = 2048;
    char BIGINT[BIGINT_SIZE];
    short BIGINT_INDEX = 2047;
    short BIGINT_HEAD = 2047;

    char FIZZ[5] = "fizz";
    char BUZZ[5] = "buzz";
    char FIZZBUZZ[9] = "fizzbuzz";

    void incr() {
    BIGINT[BIGINT_INDEX] += 1;
    if (BIGINT[BIGINT_INDEX] == ':') {
    while (BIGINT[BIGINT_INDEX] == ':') {
    BIGINT[BIGINT_INDEX] = '0';
    BIGINT_INDEX -= 1;
    BIGINT[BIGINT_INDEX] += 1;
    }
    BIGINT_HEAD = BIGINT_INDEX < BIGINT_HEAD ? BIGINT_INDEX : BIGINT_HEAD;
    BIGINT_INDEX = 2047;
    }
    }

    void write_to_buffer(char * source, int start, int end) {

    int len = end - start;

    if (BUFFER_INDEX + len > BUFFER_SIZE - 2) {
    BUFFER_INDEX = 0;
    printf("%s", BUFFER);
    // only wipe the maximum size we'll write to the buffer
    // so we always have a terminator, but don't have to zero-out
    int reset_size = 10 > BIGINT_SIZE - BIGINT_HEAD ? 10 : BIGINT_SIZE - BIGINT_HEAD;
    memset(BUFFER + BUFFER_SIZE - reset_size, 0, reset_size);
    }

    memcpy(BUFFER + BUFFER_INDEX, source + start, len);
    BUFFER_INDEX += len;
    BUFFER[BUFFER_INDEX] = '\n';
    BUFFER_INDEX += 1;
    }

    int fizzbuzz_no_conditionals() {
    // initialize BIGINT
    memset(BIGINT, '0', 2048);
    BIGINT[2048] = '\0';
    memset(BUFFER, 0, BUFFER_SIZE);

    incr();
    while (true) {
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    incr();
    write_to_buffer(FIZZ, 0, 4);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    incr();
    write_to_buffer(BUZZ, 0, 4);
    incr();
    write_to_buffer(FIZZ, 0, 4);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    incr();
    write_to_buffer(FIZZ, 0, 4);
    incr();
    write_to_buffer(BUZZ, 0, 4);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    incr();
    write_to_buffer(FIZZ, 0, 4);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    incr();
    write_to_buffer(BIGINT, BIGINT_HEAD, 2048);
    incr();
    write_to_buffer(FIZZBUZZ, 0, 8);
    incr();
    }
    return 0;
    }

    int main() {
    fizzbuzz_no_conditionals();
    return 0;
    }