diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-07-26 23:17:36 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-07-26 23:17:36 +0200 |
| commit | 264ae2f047a53ffac92271e4609038d17605738e (patch) | |
| tree | 480c68814f822439850029df0e0249a2cafb8177 /exam_final/rendu/brainfuck | |
| parent | ad9867052d496f2c2a7f120a512208fb4dd4e787 (diff) | |
| download | piscine-264ae2f047a53ffac92271e4609038d17605738e.tar.gz piscine-264ae2f047a53ffac92271e4609038d17605738e.tar.bz2 piscine-264ae2f047a53ffac92271e4609038d17605738e.zip | |
exam final
Diffstat (limited to 'exam_final/rendu/brainfuck')
| -rwxr-xr-x | exam_final/rendu/brainfuck/brainfuck.c | 85 | ||||
| -rwxr-xr-x | exam_final/rendu/brainfuck/stack.c | 42 | ||||
| -rwxr-xr-x | exam_final/rendu/brainfuck/stack.h | 26 |
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 |
