summaryrefslogtreecommitdiff
path: root/three
diff options
context:
space:
mode:
authorMichael Hunteman <michael@huntm.net>2023-07-04 17:03:53 -0500
committerMichael Hunteman <michael@huntm.net>2023-07-06 17:23:45 -0500
commitbfce8f0d0d828209ec0bec71371ee94a7ad62d3e (patch)
treebdf49ca788ca1ca030d5b1cccfd0c9dffeb3f69f /three
Initial commit
Diffstat (limited to 'three')
-rw-r--r--three/conv.c65
-rw-r--r--three/escape.c53
-rw-r--r--three/expand.c19
-rw-r--r--three/search.c25
4 files changed, 162 insertions, 0 deletions
diff --git a/three/conv.c b/three/conv.c
new file mode 100644
index 0000000..d3e654e
--- /dev/null
+++ b/three/conv.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <limits.h>
+
+void
+reverse(char s[])
+{
+ int i = 0;
+ while (s[i] != '\0') {
+ ++i;
+ }
+ --i;
+ char c;
+ for (int j = 0; j < i / 2; ++j) {
+ c = s[i - j];
+ s[i - j] = s[j];
+ s[j] = c;
+ }
+}
+
+void
+itoa(int n, char s[])
+{
+ int i, sign;
+ if ((sign = n) < 0) {
+ n = -n - 1;
+ }
+ i = 0;
+ do {
+ s[i++] = n % 10 + '0';
+ } while ((n /= 10) > 0);
+ if (sign < 0) {
+ s[i++] = '-';
+ }
+ s[i] = '\0';
+ reverse(s);
+}
+
+void
+itob(int n, char s[], int b)
+{
+ int i, sign;
+ if ((sign = n) < 0) {
+ n = -n;
+ }
+ i = 0;
+ do {
+ s[i++] = (n % b <= 9) ? n % b + '0' : n % b - 10 + 'a';
+ } while ((n /= b) > 0);
+ if (sign < 0) {
+ s[i++] = '-';
+ }
+ s[i] = '\0';
+ reverse(s);
+}
+
+int
+main()
+{
+ char s[32];
+ itoa(INT_MIN, s);
+ printf("%s\n", s);
+ itob(380, s, 16);
+ printf("%s\n", s);
+ return 0;
+}
diff --git a/three/escape.c b/three/escape.c
new file mode 100644
index 0000000..1f1dfe9
--- /dev/null
+++ b/three/escape.c
@@ -0,0 +1,53 @@
+#include <stdio.h>
+
+void
+ctoe()
+{
+ int c;
+ while ((c = getchar()) != EOF) {
+ if (c == '\\') {
+ c = getchar();
+ switch(c) {
+ case 'n':
+ putchar('\n');
+ break;
+ case 't':
+ putchar('\t');
+ break;
+ default:
+ putchar(c);
+ break;
+ }
+ } else {
+ putchar(c);
+ }
+ }
+}
+
+void
+etoc()
+{
+ int c;
+ while ((c = getchar()) != EOF) {
+ switch(c) {
+ case '\n':
+ putchar('\\');
+ putchar('n');
+ break;
+ case '\t':
+ putchar('\\');
+ putchar('t');
+ break;
+ default:
+ putchar(c);
+ break;
+ }
+ }
+}
+
+int
+main()
+{
+ etoc();
+ return 0;
+}
diff --git a/three/expand.c b/three/expand.c
new file mode 100644
index 0000000..180cc98
--- /dev/null
+++ b/three/expand.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+
+int
+main()
+{
+ int c, p;
+ while ((c = getchar()) != EOF) {
+ if (c == '-') {
+ c = getchar();
+ for (++p; p < c + 1; ++p) {
+ putchar(p);
+ }
+ } else {
+ putchar(c);
+ }
+ p = c;
+ }
+ return 0;
+}
diff --git a/three/search.c b/three/search.c
new file mode 100644
index 0000000..30426c7
--- /dev/null
+++ b/three/search.c
@@ -0,0 +1,25 @@
+#include <stdio.h>
+
+int
+binsearch(int x, int v[], int n)
+{
+ int low, high, mid;
+ low = 0;
+ high = n - 1;
+ while (low <= high) {
+ mid = (low + high) / 2;
+ if (x < v[mid]) {
+ high = mid - 1;
+ } else {
+ low = mid;
+ }
+ }
+ return -1;
+}
+
+int
+main()
+{
+ binsearch();
+ return 0;
+}