Congratulations to: * 2024/anders - Prize in sound coding - layered music generator * 2024/burton - Prize in pentagrammatology - wordle hard mode solver * 2024/cable1 - Prize in bot talk - LLM inference engine * 2024/cable2 - Prize in murky waters - salmon recipe * 2024/carlini - Prize in perfect timing - Intel 4004 emulation * 2024/codemeow - Prize in tray planting - bonsai generator * 2024/endoh1 - Prize in patient pointillism - slow ray tracer in CPP * 2024/endoh2 - Prize in solid body physics - rotating rigid body simulation * 2024/ferguson1 - Prize in diabolical logistics - Oregon trail pact with the devil * 2024/ferguson2 - Prize in yil-tas - Navajo code talker translator * 2024/howe - Nice accent eh-ward - mini vi * 2024/kramer - Prize in linguistic arithmetic - natural language numerical calculator * 2024/kurdyukov1 - Prize in phased periodicity - phase of the Moon * 2024/kurdyukov2 - Prize in art restoration - JPEG artifact removal * 2024/kurdyukov3 - Prize in virtual quietus - gaming VM and doom * 2024/kurdyukov4 - Prize in embiggening - encode without literals * 2024/maffiodo - Prize in creative interpretation - Jav\*script interpreter * 2024/mills - Prize in ℤ₃ - Infocom v3 story interpreter * 2024/stedolan - Best one liner - icon from MD5 * 2024/straadt - Prize in imitative rebooting - OpenRISC CPU and Linux * 2024/tmarrec - Prize in cyclonic coding - 3D tornado simulation * 2024/tompng - Prize in quasi bijection - vortex encryptor decryptor * 2024/weaver - Sur prize - rickroll Ran `make update` to perform the above. new file: 2024/burton/.entry.json
82 lines
1.9 KiB
C
82 lines
1.9 KiB
C
/*
|
|
* lencount.c - finds longest length string.
|
|
*/
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include <ctype.h>
|
|
#include <stdlib.h>
|
|
#include <getopt.h>
|
|
#include <errno.h>
|
|
|
|
static int testmode;
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
char *filename = "data.src";
|
|
FILE *fp = NULL;
|
|
char *buf = NULL, *p=0;
|
|
size_t len = 0, strings = 0, longest = 0;
|
|
int k, exitcode = 0;
|
|
|
|
while ((k = getopt(argc, argv, "i:t")) != -1)
|
|
{
|
|
switch (k)
|
|
{
|
|
case 'i':
|
|
filename = optarg;
|
|
break;
|
|
case 't':
|
|
testmode = 1;
|
|
break;
|
|
case ':':
|
|
case '?':
|
|
exit(1);
|
|
break; /* this triggered an annoying warning but it's an extra sanity check */
|
|
}
|
|
}
|
|
errno = 0;
|
|
fp = fopen(filename, "r");
|
|
if (fp == NULL)
|
|
{
|
|
fprintf(stderr, "couldn't open data file %s: %s\n", filename, strerror(errno));
|
|
exit(1);
|
|
}
|
|
|
|
while (getdelim(&buf, &len, '\0', fp) != -1)
|
|
{
|
|
++strings;
|
|
if (strlen(buf) >= BLOCKSIZE)
|
|
{
|
|
if (testmode)
|
|
exitcode = 666;
|
|
else
|
|
printf("WARNING: string %zu is >= BLOCKSIZE length: %zu >= %d\n", strings, strlen(buf), BLOCKSIZE);
|
|
}
|
|
if (strlen(buf) > longest)
|
|
{
|
|
longest = strlen(buf);
|
|
if (p)free(p);
|
|
p = strdup(buf);
|
|
}
|
|
}
|
|
if (p)
|
|
{
|
|
if (!testmode)
|
|
printf("out of a total of %zu strings, %zu is the longest string:\n%s\n\n", strings, longest, p);
|
|
free(p);
|
|
p = NULL;
|
|
}
|
|
else
|
|
{
|
|
fprintf(stderr, "error: no string found!\n");
|
|
exit(666);
|
|
}
|
|
|
|
if (testmode && exitcode != 0)
|
|
{
|
|
fprintf(stderr, "failed testmode: run '%s -i %s' (without -t) to see problematic strings!",
|
|
argv[0], filename);
|
|
exit(exitcode);
|
|
}
|
|
}
|