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

int add (int a, int b)
{
	return a + b;
}

int gcd (int a, int b)
{
	if (a == b) return a;
	if (a < b) return gcd (a, b - a);
	return gcd (a - b, b);
}

int gcd2 (int a, int b)
{
	while (b != 0) {
		if (a > b) a = a % b;
		else {
			a = a + b;
			b = a - b;
			a = a - b; // space-constrained swap! :]
		}
	}
	return a;
}

void swap (int *a, int *b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

void sort (int *a, int len)
{
	for (int i = 0; i < len - 1; ++i) {
		for (int j = 0; j < i; ++j) {
			if (a[j] > a[j + 1]) {
				swap (a + j, a + j + 1);
			}
		}
	}
}

unsigned strlen (const char*s)
{
	int i;
	for (i = 0; *s; ++i, ++s);
	return i;
}

void strcpy (const char*src, char*dst)
{
	/*int length = strlen(src)+1;
	for (int i = 0; i < length; ++i) {
	    dst[i] = src[i];
	} */
	while (true) {
		*dst = *src;
		if (!* (src++)) break;
		dst++;
	}
}

char* strcat (const char*src, char*dst)
{
#if 1 // version from english lab, use #if 0 to switch implementations
	while (*dst) ++dst;
	while (true) {
		*dst = *src;
		if (!* (src++)) break;
		dst++;
	}
	return dst;
#else //version from czech lab (doesn't return anything though):
	strcpy (src, dst + strlen (dst));
#endif
}

// linked list of integers spoiler
struct IntList {
	int val;
	IntList *nxt;
};

void list_add (int v, IntList**l)
{
	//TODO
}

int main()
{
	IntList *l = NULL;
	list_add (1, &l);
	list_add (2, &l);

	/*const char *a = "Hello";
	char b[32];
	b[0] = 0;
	strcat(a, b);
	strcat(a, b);
	strcat(a, b);
	printf("%s\n", b);
	printf("strlen: %d\n", strlen(a));*/



	/*int *a = (int *)malloc(10*sizeof(int));
	for (int i = 0; i < 10; ++i)
	{
	    printf("Enter number %d\n", i);
	    scanf("%d", a+i);
	}

	sort(a, 10);

	for (int i = 0; i < 10; ++i)
	    printf("%d ", a[i]); printf("\n");

	free(a);*/
	/*printf("The result is: %d \n", add(1, 2));

	int a, b;

	scanf("%d", &a);
	scanf("%d", &b);

	printf("The result of gcd is: %d\n", gcd(a, b));
	printf("The result of gcd2 is: %d\n", gcd2(a, b));*/
	for (;;); //ALSO: use ctrl+F5
	return 0;
}
