Je ne vais pas vous exposer ici le principe du Brainfuck, mais pour les plus curieux d'entre vous, je vous invite à visiter cette page d'Esolang (EN) ainsi que la page wikipédia dédié (FR).

CodeFuck n'est pas un interpréteur de code. Il génère un code C et le compile. Du coté syntaxe, Il évite les répétitions et ajoute de nouveaux opérateurs. Il reste cependant 100% compatible au BrainFuck

Source

CodeFuck source repository

CodeFuck Esolang

Hello World

CodeFuck

+10[>+7>+10>+3>+<4-]>+2.>+.+7.2+3.>+2.<2+15.>.+3.-6.-8.>+.>.

BrainFuck

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

Operators

 

Opertator Description
> Inc Cell
< Dec Cell
+ Inc Octet
- Dec Octet
. Output ASCII
 ; Output Integer
, Input ASCII
 : Input Integer
f create function
F run function
[ While != 0
/ While == 0
( If == 0
{ If != 0
 ! If > 0
 ? If < 0
| with ( { ! ?
ex : |? 
Else If ...
& Else
] \ ) } # Close condition block
_ Load VAR
$ VAR value
 %your comment% Comment

Conditions examples

Example 1

CodeFuck

(.|!.|?.)

C

if (*cell==0) {
    putchar(*cell);
} else if (*cell>0) {
    putchar(*cell);
} else if (*cell<0) {
    putchar(*cell);
}

Example 2

CodeFuck

{100.|?50.&.}

C

if (*cell!=100) {
    putchar(*cell);
} else if (*cell<50) {
    putchar(*cell);
} else {
    putchar(*cell);
}

Example 3

CodeFuck

[100{80.|!30.|?30.&.}+]

C

while (*cell!=100) {
    if (*cell!=80) {
        putchar(*cell);
    } else if (*cell>30) {
        putchar(*cell);
    } else if (*cell<30) {
        putchar(*cell);
    } else {
        putchar(*cell);
    }
    ++*cell;
}

Functions examples

The creation of a function always takes place before any other operations

CodeFuck

f1
    +65.
f
.
F1

or

f1+65.f.F1

C

long f1(long cell) {
    [...]
    *cell+=65;
    putchar(*cell);
    return cell*;
}

int main(int argc, char **argv)
{
    [...]
    putchar(*cell);
    *cell=f1(*cell);
    [...]
}

Example hello.cf

Code

+10[
    >+7
    >+10
    >+3
    >+
    <4-
]
>+2.
>+.
+7.2
+3.
>+2.
<2+15.
>.
+3.
-6.
-8.
>+.
>.
"Salut le monde
"
>5
+48;" == "."
"
[-]
+65;" == "."
"
[-]
+97;" == "."
"
[-];" "
/+5\;" "
{-5};" "
(+);" "-;"
*cell ";" == ";"
"
[15+]
(15"*cell ";" == ";"
")
/15-\
{15"*cell ";" != 15"_}"
*cell ";" == "($;)[-]_"
"

Output

Hello World!
Salut le monde!
48 == 0
65 == A
97 == a
05010
*cell 0 == 0
*cell 15 == 15
*cell 14 not 15
14 == 14

Example Math.cf

Code

>5+43
>+45
<6
"Add
  ":>"+"< :[<+>-]"= "<; >[-]<[-]
"
Sub
  ":>"-"< :[<->-]"= "<; >[-]<[-]
"
Mul
  ":_"x" >:[>+$<-]"= ">; <[-]>[-]

Output

Add
  10
+ 10
= 20

Sub
  78
- 45
= 33

Mul
  3
x 6
= 18

Advanced Example

Code

"CodeFuck Math

Options :
        0   Addition
        1   Soustraction
        2   Multiplication
        3   Division
      : ":"
"
(
    %            CHAR +            %
    >5+43<5
    "Addition
  " :>5.<4" ":[<+>-]"= "<;"        
"
|(1
    %            CHAR -             %
    >6+45<6
    -
    "Soustraction
  " :>6.<5" ":[<->-]"= "<;"
"
|(2
    -2
    "Multiplication
  " :_"x ">:[>+$<-]"= ">;"
"
|(3 
    -3
    "Division
  " :>"÷ ":>
    <2[
        >[->+>+<2]
        >[-<2-
            [>]>3
            [
                <[
                    >3-<3[-]
                ]>2
            ]<2
        ]>3+
        <2[
            -<2+>2
        ]<3
    ]
    >[-]>4[-<5+>5]
    <4+6<"= ";"
"
)

Output

CodeFuck Math

Options
        0   Addition
        1   Soustraction
        2   Multiplication
        3   Division
n° 1

Soustraction
  5675
- 55
= 5620

C Generate

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

void memsetcf(char *array, int z, long unsigned int s );
int main(int argc, char **argv);

void memsetcf(char *array, int z, long unsigned int s ) {
   long unsigned int p;
   for (p=z; p<=s; p++){
   array[p]=z;
   }
}

int main(int argc, char **argv)
{
    long *cell = calloc(30000, 1);
    long *cells = cell;
    char num[8]; char c; int i=0; int var=0;
    if (!cell) {
        fprintf(stderr, "Error allocating memory.\n");
        return 1;
    }
/*--------------------------------------------*/
/*------------------CodeFuck------------------*/
/*--------------------------------------------*/
    putchar(67);
    putchar(111);
    putchar(100);
    putchar(101);
    putchar(70);
    putchar(117);
    putchar(99);
    putchar(107);
    putchar(32);
    putchar(77);
    putchar(97);
    putchar(116);
    putchar(104);
    putchar(10);
    putchar(10);
    putchar(79);
    putchar(112);
    putchar(116);
    putchar(105);
    putchar(111);
    putchar(110);
    putchar(115);
    putchar(32);
    putchar(58);
    putchar(10);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(48);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(65);
    putchar(100);
    putchar(100);
    putchar(105);
    putchar(116);
    putchar(105);
    putchar(111);
    putchar(110);
    putchar(10);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(49);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(83);
    putchar(111);
    putchar(117);
    putchar(115);
    putchar(116);
    putchar(114);
    putchar(97);
    putchar(99);
    putchar(116);
    putchar(105);
    putchar(111);
    putchar(110);
    putchar(10);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(50);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(77);
    putchar(117);
    putchar(108);
    putchar(116);
    putchar(105);
    putchar(112);
    putchar(108);
    putchar(105);
    putchar(99);
    putchar(97);
    putchar(116);
    putchar(105);
    putchar(111);
    putchar(110);
    putchar(10);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(51);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(68);
    putchar(105);
    putchar(118);
    putchar(105);
    putchar(115);
    putchar(105);
    putchar(111);
    putchar(110);
    putchar(10);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(32);
    putchar(58);
    putchar(32);
    *cell = getchar();
    while (*cell!=0) {
        num[i]=*cell; i++;
        *cell-=10;
        if (*cell!=0) {
            *cell+=10;
            *cell = getchar();
        }
    }
    *cell = atoi(num);
    memsetcf(num, 0, sizeof (num)); i=0;
    putchar(10);
    if (*cell==0) {
/*            CHAR +            */
        cell+=5;
        *cell+=43;
        cell-=5;
        putchar(65);
        putchar(100);
        putchar(100);
        putchar(105);
        putchar(116);
        putchar(105);
        putchar(111);
        putchar(110);
        putchar(10);
        putchar(32);
        putchar(32);
        *cell = getchar();
        while (*cell!=0) {
            num[i]=*cell; i++;
            *cell-=10;
            if (*cell!=0) {
                *cell+=10;
                *cell = getchar();
            }
        }
        *cell = atoi(num);
        memsetcf(num, 0, sizeof (num)); i=0;
        cell+=5;
        putchar(*cell);
        cell-=4;
        putchar(32);
        *cell = getchar();
        while (*cell!=0) {
            num[i]=*cell; i++;
            *cell-=10;
            if (*cell!=0) {
                *cell+=10;
                *cell = getchar();
            }
        }
        *cell = atoi(num);
        memsetcf(num, 0, sizeof (num)); i=0;
        while (*cell!=0) {
            --cell;
            ++*cell;
            ++cell;
            --*cell;
        }
        putchar(61);
        putchar(32);
        --cell;
        printf("%li", *cell);
        putchar(32);
        putchar(32);
        putchar(32);
        putchar(32);
        putchar(32);
        putchar(32);
        putchar(32);
        putchar(32);
        putchar(10);
    } else if (*cell==1) {
/*            CHAR -             */
        cell+=6;
        *cell+=45;
        cell-=6;
        --*cell;
        putchar(83);
        putchar(111);
        putchar(117);
        putchar(115);
        putchar(116);
        putchar(114);
        putchar(97);
        putchar(99);
        putchar(116);
        putchar(105);
        putchar(111);
        putchar(110);
        putchar(10);
        putchar(32);
        putchar(32);
        *cell = getchar();
        while (*cell!=0) {
            num[i]=*cell; i++;
            *cell-=10;
            if (*cell!=0) {
                *cell+=10;
                *cell = getchar();
            }
        }
        *cell = atoi(num);
        memsetcf(num, 0, sizeof (num)); i=0;
        cell+=6;
        putchar(*cell);
        cell-=5;
        putchar(32);
        *cell = getchar();
        while (*cell!=0) {
            num[i]=*cell; i++;
            *cell-=10;
            if (*cell!=0) {
                *cell+=10;
                *cell = getchar();
            }
        }
        *cell = atoi(num);
        memsetcf(num, 0, sizeof (num)); i=0;
        while (*cell!=0) {
            --cell;
            --*cell;
            ++cell;
            --*cell;
        }
        putchar(61);
        putchar(32);
        --cell;
        printf("%li", *cell);
        putchar(10);
    } else if (*cell==2) {
        *cell-=2;
        putchar(77);
        putchar(117);
        putchar(108);
        putchar(116);
        putchar(105);
        putchar(112);
        putchar(108);
        putchar(105);
        putchar(99);
        putchar(97);
        putchar(116);
        putchar(105);
        putchar(111);
        putchar(110);
        putchar(10);
        putchar(32);
        putchar(32);
        *cell = getchar();
        while (*cell!=0) {
            num[i]=*cell; i++;
            *cell-=10;
            if (*cell!=0) {
                *cell+=10;
                *cell = getchar();
            }
        }
        *cell = atoi(num);
        memsetcf(num, 0, sizeof (num)); i=0;
        var=*cell;
        putchar(120);
        putchar(32);
        ++cell;
        *cell = getchar();
        while (*cell!=0) {
            num[i]=*cell; i++;
            *cell-=10;
            if (*cell!=0) {
                *cell+=10;
                *cell = getchar();
            }
        }
        *cell = atoi(num);
        memsetcf(num, 0, sizeof (num)); i=0;
        while (*cell!=0) {
            ++cell;
            *cell+=var;
            --cell;
            --*cell;
        }
        putchar(61);
        putchar(32);
        ++cell;
        printf("%li", *cell);
        putchar(10);
    } else if (*cell==3) {
        *cell-=3;
        putchar(68);
        putchar(105);
        putchar(118);
        putchar(105);
        putchar(115);
        putchar(105);
        putchar(111);
        putchar(110);
        putchar(10);
        putchar(32);
        putchar(32);
        *cell = getchar();
        while (*cell!=0) {
            num[i]=*cell; i++;
            *cell-=10;
            if (*cell!=0) {
                *cell+=10;
                *cell = getchar();
            }
        }
        *cell = atoi(num);
        memsetcf(num, 0, sizeof (num)); i=0;
        ++cell;
        putchar(195);
        putchar(183);
        putchar(32);
        *cell = getchar();
        while (*cell!=0) {
            num[i]=*cell; i++;
            *cell-=10;
            if (*cell!=0) {
                *cell+=10;
                *cell = getchar();
            }
        }
        *cell = atoi(num);
        memsetcf(num, 0, sizeof (num)); i=0;
        ++cell;
        cell-=2;
        while (*cell!=0) {
            ++cell;
            while (*cell!=0) {
                --*cell;
                ++cell;
                ++*cell;
                ++cell;
                ++*cell;
                cell-=2;
            }
            ++cell;
            while (*cell!=0) {
                --*cell;
                cell-=2;
                --*cell;
                while (*cell!=0) {
                    ++cell;
                }
                cell+=3;
                while (*cell!=0) {
                    --cell;
                    while (*cell!=0) {
                        cell+=3;
                        --*cell;
                        cell-=3;
                        while (*cell!=0) {
                            --*cell;
                        }
                    }
                    cell+=2;
                }
                cell-=2;
            }
            cell+=3;
            ++*cell;
            cell-=2;
            while (*cell!=0) {
                --*cell;
                cell-=2;
                ++*cell;
                cell+=2;
            }
            cell-=3;
        }
        ++cell;
        while (*cell!=0) {
            --*cell;
        }
        cell+=4;
        while (*cell!=0) {
            --*cell;
            cell-=5;
            ++*cell;
            cell+=5;
        }
        cell-=4;
        *cell+=6;
        --cell;
        putchar(61);
        putchar(32);
        printf("%li", *cell);
        putchar(10);
    }
/*--------------------------------------------*/
/*----------------End CodeFuck----------------*/
/*--------------------------------------------*/
    free(cells);
    return 0;
}

Source

CodeFuck source repository

CodeFuck Esolang