aboutsummaryrefslogtreecommitdiff
path: root/exam_final/rendu/brainfuck
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-07-26 23:17:36 +0200
committerCharles <sircharlesaze@gmail.com>2019-07-26 23:17:36 +0200
commit264ae2f047a53ffac92271e4609038d17605738e (patch)
tree480c68814f822439850029df0e0249a2cafb8177 /exam_final/rendu/brainfuck
parentad9867052d496f2c2a7f120a512208fb4dd4e787 (diff)
downloadpiscine-264ae2f047a53ffac92271e4609038d17605738e.tar.gz
piscine-264ae2f047a53ffac92271e4609038d17605738e.tar.bz2
piscine-264ae2f047a53ffac92271e4609038d17605738e.zip
exam final
Diffstat (limited to 'exam_final/rendu/brainfuck')
-rwxr-xr-xexam_final/rendu/brainfuck/brainfuck.c85
-rwxr-xr-xexam_final/rendu/brainfuck/stack.c42
-rwxr-xr-xexam_final/rendu/brainfuck/stack.h26
3 files changed, 153 insertions, 0 deletions
diff --git a/exam_final/rendu/brainfuck/brainfuck.c b/exam_final/rendu/brainfuck/brainfuck.c
new file mode 100755
index 0000000..4cd619d
--- /dev/null
+++ b/exam_final/rendu/brainfuck/brainfuck.c
@@ -0,0 +1,85 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* brainfuck.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: exam <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2019/07/26 16:42:44 by exam #+# #+# */
+/* Updated: 2019/07/26 17:43:25 by exam ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "stack.h"
+#include <stdlib.h>
+#include <unistd.h>
+
+void go_close(char **str)
+{
+ t_stack *st;
+
+ st = create_elem(**str);
+ while (st != NULL)
+ {
+ (*str)++;
+ if (**str == '[')
+ st = push(st, '[');
+ if (**str == ']')
+ st = pop(st);
+ }
+}
+
+void go_open(char **str)
+{
+ t_stack *st;
+
+ st = create_elem(**str);
+ while (st != NULL)
+ {
+ (*str)--;
+ if (**str == ']')
+ st = push(st, ']');
+ if (**str == '[')
+ st = pop(st);
+ }
+}
+
+int main(int argc, char **argv)
+{
+ char *ptr;
+ char *origin;
+ char *str;
+ int i;
+
+ if (argc != 2)
+ {
+ write(1, "\n", 1);
+ return (0);
+ }
+ origin = (char*)malloc(2048);
+ ptr = origin;
+ i = 0;
+ while (i < 2048)
+ ptr[i++] = 0;
+ str = argv[1];
+ while (*str)
+ {
+ if (*str == '>')
+ ptr++;
+ else if (*str == '<')
+ ptr--;
+ else if (*str == '+')
+ (*ptr)++;
+ else if (*str == '-')
+ (*ptr)--;
+ else if (*str == '.')
+ write(1, ptr, 1);
+ else if (*str == '[' && *ptr == 0)
+ go_close(&str);
+ else if (*str == ']' && *ptr != 0)
+ go_open(&str);
+ str++;
+ }
+ free(origin);
+ return (0);
+}
diff --git a/exam_final/rendu/brainfuck/stack.c b/exam_final/rendu/brainfuck/stack.c
new file mode 100755
index 0000000..c79c039
--- /dev/null
+++ b/exam_final/rendu/brainfuck/stack.c
@@ -0,0 +1,42 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* stack.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: exam <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2019/07/26 17:28:55 by exam #+# #+# */
+/* Updated: 2019/07/26 17:40:35 by exam ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stdlib.h>
+#include "stack.h"
+
+t_stack *create_elem(char data)
+{
+ t_stack *elem;
+
+ elem = malloc(sizeof(t_stack));
+ elem->data = data;
+ elem->next = NULL;
+ return (elem);
+}
+
+t_stack *push(t_stack *stack, char data)
+{
+ t_stack *elem;
+
+ elem = create_elem(data);
+ elem->next = stack;
+ return (elem);
+}
+
+t_stack *pop(t_stack *stack)
+{
+ t_stack *tmp;
+
+ tmp = stack->next;
+ free(stack);
+ return (tmp);
+}
diff --git a/exam_final/rendu/brainfuck/stack.h b/exam_final/rendu/brainfuck/stack.h
new file mode 100755
index 0000000..6d0d57b
--- /dev/null
+++ b/exam_final/rendu/brainfuck/stack.h
@@ -0,0 +1,26 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* stack.h :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: exam <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2019/07/26 17:33:37 by exam #+# #+# */
+/* Updated: 2019/07/26 17:39:15 by exam ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef STACK_H
+# define STACK_H
+
+typedef struct s_stack
+{
+ char data;
+ struct s_stack *next;
+} t_stack;
+
+t_stack *push(t_stack *stack, char data);
+t_stack *create_elem(char data);
+t_stack *pop(t_stack *stack);
+
+#endif