first commit

This commit is contained in:
Jose Caban
2025-06-07 11:38:03 -04:00
commit e0316ca3ff
79 changed files with 3155 additions and 0 deletions

132
FizzBuzz/C/fizzbuzz.c Normal file
View File

@@ -0,0 +1,132 @@
#include <stdio.h>
#include <time.h>
void fizzbuzz(int n)
{
int i;
for (i = 1; i <= n; i++)
{
if (i%3 == 0 || i%5 == 0)
{
if (i % 3 == 0 && i % 5 == 0)
printf("fizzbuzz\n");
else if (i%3==0)
printf("fizz\n");
else
printf("buzz\n");
}
else
{
printf("%d\n", i);
}
}
}
#define BUF_SIZE 1024
void fizzbuzz_fast(int n)
{
int i;
char str[BUF_SIZE];
int curr_str_pos = 0;
for (i = 1; i <= n; i++)
{
if (i % 3 == 0 || i % 5 == 0)
{
char* strToPrint;
int result;
if (i % 3 == 0 && i % 5 == 0)
{
strToPrint = "fizzbuzz\n";
}
else if (i % 3 == 0)
{
strToPrint = "fizz\n";
}
else
{
strToPrint = "buzz\n";
}
result = snprintf(str + curr_str_pos, BUF_SIZE - curr_str_pos, "%s", strToPrint);
if (!(result < BUF_SIZE - curr_str_pos))
{
printf("%s", str);
curr_str_pos = 0;
result = snprintf(str + curr_str_pos, BUF_SIZE - curr_str_pos, "%s", strToPrint);
}
curr_str_pos += result;
}
else
{
int result;
result = snprintf(str + curr_str_pos, BUF_SIZE - curr_str_pos, "%d\n", i);
if (!(result < BUF_SIZE - curr_str_pos))
{
printf("%s", str);
curr_str_pos = 0;
result = snprintf(str + curr_str_pos, BUF_SIZE - curr_str_pos, "%d\n", i);
}
curr_str_pos += result;
}
}
if (curr_str_pos != 0)
{
printf("%s", str);
}
}
void fizzbuzz_branchless(int n)
{
char *zzc[]={"fizz\n","buzz\n","fizzbuzz\n","%d\n"};
int zxc[]={3,0,0,1,0,0,2};
for (int i = 1; i < n; ++i)
{
int a=i%3==0;
int b=i%5==0;
int t=b^a;
printf(zzc[zxc[a<<2|(b<<1)|t]],i);
}
}
int main(int argc, char **argv)
{
(void)argc;
(void)argv;
int n;
clock_t reg_start, reg_end, branchless_start, branchless_end, fast_start, fast_end;
printf("How many fizzbuzzes?: ");
int ret = scanf("%d", &n);
if (ret)
{
reg_start = clock();
fizzbuzz(n);
reg_end = clock();
branchless_start = clock();
fizzbuzz_branchless(n);
branchless_end = clock();
fast_start = clock();
fizzbuzz_fast(n);
fast_end = clock();
printf("regular time: %ld\n", reg_end - reg_start);
printf("branchless time: %ld\n", branchless_end - branchless_start);
printf("fast time: %ld\n", fast_end - fast_start);
}
else
{
printf("Invalid input\n");
}
return 0;
}