Mais um blog inútil.

Maio 30, 2012

Arvorezinha 2.0 – No explicit loops nor conditions, C99 & POSIX Compliant

Filed under: Arvorezinha,Coding,Serious Business,Useless — thread @ 13:52

Cá vai uma arvorezinha 2.0 totalmente inútil em C, sem loops nem condições (pelo menos, explicitamente)... um verdadeiro apedrejamento aos rins dos recursos. No entanto, está compliant com C99 e POSIX. Não está à prova de numeros demasiado grandes para o seu tamanho... receberão um exit status 1 caso se exceda o temporary size max e uma arvorezinha bem destruida.

Deixando-me de lengalengas... aqui vai:

-- EDIT: Nova versão do code. Não valia a pena criar outro post com mais do mesmo, portanto editei aqui mesmo.

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>

#define TEMPORARY_SIZE_MAX 128

int n, l, magic = 0;

void bye(void);
void bazinga(void);
void draw_bottom(void);
void draw_top(void);

void (*magic_matrix[2][2]) (void) = { { &bazinga, &draw_top }, { &bye, &draw_bottom } };


void sigsegv_syntax(int s) {
    printf("Invalid syntax.\n");
    exit(EXIT_FAILURE);
}

void sigsegv_toolarge(int s) {
    printf("Value too large.\n");
    exit(EXIT_FAILURE);
}

void bye(void) {
    exit(EXIT_SUCCESS);
}

void bazinga(void) {
    n = l;
    magic++;

    draw_bottom();
}

void draw_bottom(void) {
    printf("\x1b[%dC\x1b[%dD", (l / 2) * (n & 1) + 1, !(n & 1));
    fwrite(memset((char [TEMPORARY_SIZE_MAX]) { }, 0x23, TEMPORARY_SIZE_MAX), n & 1, l - !(l & 1), stdout);
    fwrite("\n", n & 1, 1, stdout);

    magic_matrix[magic][!!--n]();
}

void draw_top(void) {
    printf("\x1b[%d%c", n - 1, 0x43 + !(n - 1));
    fwrite(memset((char [TEMPORARY_SIZE_MAX]) { }, 0x2A, TEMPORARY_SIZE_MAX), 1, (((l - n) + 1) * 2) - 1, stdout);
    putchar('\n');

    magic_matrix[magic][!!--n]();
}


int main(int argc, char *argv[]) {
    signal(SIGSEGV, &sigsegv_syntax);

    n = l = atoi(argv[1]);

    signal(SIGSEGV, &sigsegv_toolarge);

    draw_top();

    return EXIT_SUCCESS;
}

PoC:

# gcc -Wall --std=c99 -o arv2 arv2.c
# ./arv2 15
              *
             ***
            *****
           *******
          *********
         ***********
        *************
       ***************
      *****************
     *******************
    *********************
   ***********************
  *************************
 ***************************
*****************************
       ###############
       ###############
       ###############
       ###############
       ###############
       ###############
       ###############
       ###############
# echo $?
0
#

Um comentário a “Arvorezinha 2.0 – No explicit loops nor conditions, C99 & POSIX Compliant”

  1. gatuno diz:

    dasssss não é pa meninos!!...

Comentar

widgeon
widgeon
widgeon
widgeon