From bbc81042481e8e32a7e5cc1d90d53d585a548d23 Mon Sep 17 00:00:00 2001 From: Chloe M Date: Sat, 15 Aug 2026 17:03:19 -0500 Subject: initial commit Signed-off-by: Chloe M --- .gitignore | 1 + Makefile | 14 ++++++ levd/Makefile | 13 +++++ levd/levd.c | 77 +++++++++++++++++++++++++++++ newpass/.gitignore | 1 + newpass/Makefile | 13 +++++ newpass/core/newpass.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 251 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 levd/Makefile create mode 100644 levd/levd.c create mode 100644 newpass/.gitignore create mode 100644 newpass/Makefile create mode 100644 newpass/core/newpass.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5e56e04 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f6bba39 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +.PHONY: all +all: bin levd newpass + +.PHONY: bin +bin: + mkdir -p bin/ + +.PHONY: newpass +newpass: + cd newpass/; $(MAKE) + +.PHONY: levd +levd: + cd levd/; $(MAKE) diff --git a/levd/Makefile b/levd/Makefile new file mode 100644 index 0000000..9088129 --- /dev/null +++ b/levd/Makefile @@ -0,0 +1,13 @@ +CFILES = \ + levd.c + +OUT_FILE = ../bin/levd +CFLAGS = -Wall -pedantic +CC = clang + +.PHONY: all +all: $(OUT_FILE) + +.PHONY: $(OUT_FILE) +$(OUT_FILE): + $(CC) $(CFLAGS) $(CFILES) -o $@ diff --git a/levd/levd.c b/levd/levd.c new file mode 100644 index 0000000..16da6d5 --- /dev/null +++ b/levd/levd.c @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2026, Chloe M., et al. + * Provided under the BSD-3 clause. + */ + +#include +#include + +/* + * Compute the levenshtein distance between two strings + * + * @s1: First string to compare + * @s2: Second string to compare + * @l1: Length of first string to compare + * @l2: Length of second string to compare + */ +static int +lev_distance(const char *s1, const char *s2, size_t l1, size_t l2) +{ + int matrix[l1 + 1][l2 + 1]; + int i, j, c1, c2; + int delete, insert; + int subst, min; + + for (i = 0; i <= l1; ++i) { + matrix[i][0] = i; + } + + for (i = 0; i < l2; ++i) { + matrix[0][i] = i; + } + + for (i = 1; i <= l1; ++i) { + c1 = s1[i - 1]; + for (j = 1; j <= l2; ++j) { + c2 = s2[j - 1]; + if (c1 == c2) { + matrix[i][j] = matrix[i-1][j-1]; + } else { + delete = matrix[i-1][j] + 1; + insert = matrix[i][j-1] + 1; + subst = matrix[i-1][j-1] + 1; + min = delete; + + if (insert < min) + min = insert; + if (subst < min) + min = subst; + + matrix[i][j] = min; + } + } + } + + return matrix[l1][l2]; +} + +int +main(int argc, char **argv) +{ + char *s1, *s2; + size_t l1, l2; + + if (argc < 3) { + printf("fatal: expected s1 and s2\n"); + return -1; + } + + s1 = argv[1]; + s2 = argv[2]; + + l1 = strlen(s1); + l2 = strlen(s2); + + printf("%d\n", lev_distance(s1, s2, l1, l2)); + return 0; +} diff --git a/newpass/.gitignore b/newpass/.gitignore new file mode 100644 index 0000000..345c0c3 --- /dev/null +++ b/newpass/.gitignore @@ -0,0 +1 @@ +/newpass diff --git a/newpass/Makefile b/newpass/Makefile new file mode 100644 index 0000000..8d28a99 --- /dev/null +++ b/newpass/Makefile @@ -0,0 +1,13 @@ +CFILES = \ + core/newpass.c + +OUT_FILE = ../bin/newpass +CFLAGS = -Wall -pedantic +CC = clang + +.PHONY: all +all: $(OUT_FILE) + +.PHONY: $(OUT_FILE) +$(OUT_FILE): + $(CC) $(CFLAGS) $(CFILES) -o $@ diff --git a/newpass/core/newpass.c b/newpass/core/newpass.c new file mode 100644 index 0000000..93b481f --- /dev/null +++ b/newpass/core/newpass.c @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2026, Chloe M., et al. + * Provided under the BSD-3 clause. + */ + +#include +#include +#include +#include +#include +#include + +static const char chrtab[] = { + "ab123cde987654321=0fghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWZYZ" + "!@#$%^&*()[]>