Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

The suckless approach

  #include <stdio.h>
  #include <stdint.h>
  #include <stdlib.h>

  void fizzbuzz(int i) {
      uint32_t r3 = i % 3;
      uint32_t r5 = i % 5;
      uint32_t is_nonzero_3 = (r3 | -r3) >> 31;
      uint32_t is_nonzero_5 = (r5 | -r5) >> 31;
      uint32_t is_zero_3 = is_nonzero_3 ^ 1;
      uint32_t is_zero_5 = is_nonzero_5 ^ 1;
      uint32_t idx = (is_zero_5 << 1) | is_zero_3;

      const char *fmt[] = {
          "%d\n",
          "Fizz\n",
          "Buzz\n",
          "FizzBuzz\n"
      };

      printf(fmt[idx], i);
  }

  typedef void (*func_t)(int);

  void run_loop(int i);
  void stop_loop(int i) { exit(0); }

  func_t actions[] = { stop_loop, run_loop };

  void run_loop(int i) {
      fizzbuzz(i);
      int d = 99 - i;
      uint32_t is_neg = ((uint32_t)d) >> 31;
  }

  func_t actions_table[] = { run_loop, stop_loop };

  void run_loop_wrapper(int i) {
      fizzbuzz(i);
      int d = 99 - i;
      uint32_t is_neg = ((uint32_t)d) >> 31;
      actions_table[is_neg](i + 1);
  }

  int main() {
      actions_table[0] = run_loop_wrapper;
      run_loop_wrapper(1);
      return 0;
  }


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: