I fuck, you fuck
I fuck, you fuck is a pseudonatural esolang used for insulting others doing Project Euler problems. It is invented by User:None1.
It is case insensitive.
Data Storage
Variables with unbounded unsigned integers are used.
Commands
Variable definition
There's a fucker named X
Define a variable named X, initially zero. The names You, me and I are reserved.
Increment and decrement
I fuck X
Increment X.
I unfuck X
Decrement X, if the result is less than zero, then result in zero.
I/O
You fuck X
Get an integer from user input and store it into X.
You fuck X again
Get a character from user input and store its ASCII into X.
X fucks you
Output X as decimal.
X fucks you again.
Output X as ASCII.
Termination
Fuck you
Terminate the program.
Arithmetic
X fucks Y
Add Y by X.
X unfucks Y
Subtract Y by X, if the result is less than zero, result in zero.
X fucks Y again
Multiply Y by X.
X fucks Y over and over
Let Y be XY.
X unfucks Y again
Let Y be the quotient of X/Y.
X unfucks Y over and over
Let Y be the remainder of X/Y.
Comment
Fuck! Any text
Is a comment, the space is MANDATORY.
Control flow
While loop
while X is fucked CODE end fuck
While X is not zero, do CODE.
while X is unfucked CODE end fuck
While X is zero, do CODE.
while X is more fucked than the Y CODE end fuck
While X is greater than Y, do CODE.
while X is less fucked than the Y CODE end fuck
While X is less than Y, do CODE.
Conditonal statement
It is like the while loop, just replace the while with if.
The if-else statement is allowed:
Any if statement CODE1 else fuck CODE2 end fuck
For instance:
If A is fucked A fucks you else fuck You fuck A end fuck
Assuming that the variable A is defined, this program outputs A if it is nonzero, otherwise, it reads A.
Literals
Fuck X integer times
Add X by integer.
String output
fuck "Base64 of any text"
Outputs the corresponding text without spaces or line feeds after it.
Example programs
Hello World
fuck "SGVsbG8sIFdvcmxkIQ=="
Project Euler
16
There's a fucker named a Fuck a 1000 times There's a fucker named b Fuck b 2 times b fucks a over and over b unfucks b There's a fucker named c while a is fucked c unfucks c Fuck c 10 times a unfucks c over and over c fucks b c unfucks c Fuck c 10 times a unfucks c again a unfucks a c fucks a end fuck b fucks you
20
There's a fucker named a There's a fucker named b Fuck b 100 times Fuck a 1 times while b is fucked b fucks a again I unfuck b end fuck There's a fucker named c while a is fucked c unfucks c Fuck c 10 times a unfucks c over and over c fucks b c unfucks c Fuck c 10 times a unfucks c again a unfucks a c fucks a end fuck b fucks you
Truth Machine
There's a fucker named x You fuck x if x is fucked while x is fucked x fucks you end fuck else fuck x fucks you end fuck
Cat Program
There's a fucker named x you fuck x again while x is fucked x fucks you again you fuck x again end fuck
Intepreters
Currently none. Here's a compiler in python to C:
#End with "fucker ends fucking", case insensitive from base64 import b64decode as dc lic=['#include<stdio.h>\n#define int unsigned long long\nsigned main(){\nint FUCK_YOU=0,FUCK_ME,i,you,me;'] def sw(x,y):return x[:len(y)]==y def ew(x,y):return x[-len(y):]==y def swl(x,y,z):return sw(x,y)and len(x)==len(y)+z def ewl(x,y,z):return ew(x,y)and len(x)==len(y)+z while True: _=input().casefold() if _=='':continue if _=="fucker ends fucking": print('\n'.join(lic),end='\n}\n//Generated by automated IFUF->C python program') break cmds=_.split() if swl(cmds,['i','fuck'],1):lic.append(cmds[2]+'='+cmds[2]+'+1;') if swl(cmds,["there's","a",'fucker','named'],1): lic.append('int '+cmds[4]+'=0;') if swl(cmds,['i','unfuck'],1): lic.append('%s=%s-1;if(%s<0)%s=0;'%((cmds[2],)*4)) if swl(cmds,['you','fuck'],1): lic.append('scanf("%lld",&'+cmds[2]+');') if swl(cmds,['you','fuck'],2)and cmds[3]=='again': lic.append(cmds[2]+'=getchar();') if ewl(cmds,['fucks','you'],1): lic.append('printf("%lld",'+cmds[0]+');') if ewl(cmds,['fucks','you','again'],1): lic.append('printf("%c",(char)('+cmds[0]+'%256));') if _=='fuck you':lic.append('return 0;') if len(cmds)==3 and cmds[1]=='fucks': lic.append('%s=%s+%s;'%(cmds[2],cmds[2],cmds[0])) if len(cmds)==3 and cmds[1]=='unfucks': lic.append('%s=%s-%s;if(%s<0)%s=0;'%(cmds[2],cmds[2],cmds[0],cmds[2],cmds[2])) if len(cmds)==4 and cmds[1]=='fucks'and cmds[3]=='again': lic.append('%s=%s*%s;'%(cmds[2],cmds[2],cmds[0])) if len(cmds)==4 and cmds[1]=='unfucks'and cmds[3]=='again': lic.append('%s=%s/%s;'%(cmds[2],cmds[2],cmds[0])) if cmds[1]=='unfucks'and ewl(cmds,['over','and','over'],3): lic.append('%s=%s%%%s;'%(cmds[2],cmds[2],cmds[0])) if cmds[1]=='fucks'and ewl(cmds,['over','and','over'],3): lic.append('''FUCK_YOU=1; for(FUCK_ME=1;FUCK_ME<%s;FUCK_ME++)FUCK_YOU=FUCK_YOU*%s; %s=FUCK_YOU;'''%(cmds[2],cmds[0],cmds[2])) if cmds[0]=='fuck!':lic.append('//'+_[6:]) if _=='end fuck':lic.append('}') if cmds[0]=='if'or cmds[0]=='while': if ewl(cmds,['is','fucked'],2): lic.append(cmds[0]+'('+cmds[1]+'){') if ewl(cmds,['is','unfucked'],2): lic.append(cmds[0]+'(!'+cmds[1]+'){') if ewl(cmds[:-1],'is more fucked than the'.split(),2): lic.append(cmds[0]+'('+cmds[1]+'>'+cmds[7]+'){') if ewl(cmds[:-1],'is less fucked than the'.split(),2): lic.append(cmds[0]+'('+cmds[1]+'<'+cmds[7]+'){') if _=='else fuck':lic.append('}else{') if len(cmds)==4 and cmds[0]=='fuck'and cmds[3]=='times': lic.append(cmds[1]+'='+cmds[1]+'+'+str(int(cmds[2]))+';') if len(cmds)==2 and cmds[0]=='fuck': __=cmds[1] if len(__)>2 and __[0]=='"'and __[-1]=='"': lic.append('printf("%s","'+dc(bytes(__[1:-1],'ascii')).decode('ascii')+'");')
Here is a more correct interpreter in C++, based on the compiler to C. It can compile all the examples correctly. You need this bignum package to compile the C++ code:
#End with "fucker ends fucking", case insensitive from base64 import b64decode as dc lic=['#include<iostream>\n#include"bn_cpp.h"\nusing std::cin;\nusing std::cout;\nint main(){\nbn_cpp::bn FUCK_YOU(0),FUCK_ME(0),i(0),you(0),me(0);\nchar _;'] def sw(x,y):return x[:len(y)]==y def ew(x,y):return x[-len(y):]==y def swl(x,y,z):return sw(x,y)and len(x)==len(y)+z def ewl(x,y,z):return ew(x,y)and len(x)==len(y)+z class FuckingError(Exception): pass while True: fk=input() _=fk.casefold() if _=='':continue if _=="fucker ends fucking": print('\n'.join(lic),end='\n}\n//Generated by automated IFUF->C++ python program') break cmds=_.split() if swl(cmds,['i','fuck'],1): lic.append(cmds[2]+'++') continue if swl(cmds,["there's","a",'fucker','named'],1): lic.append('bn_cpp::bn '+cmds[4]+'(0);') continue if swl(cmds,['i','unfuck'],1): lic.append('%s--;if(%s<bn_cpp::bn(0))%s=bn_cpp::bn(0);'%((cmds[2],)*3)) continue if swl(cmds,['you','fuck'],1): lic.append('cin>>'+cmds[2]+';') continue if swl(cmds,['you','fuck'],2)and cmds[3]=='again': lic.append('_=getchar();'+cmds[2]+'=((~_)?_:0);') continue if ewl(cmds,['fucks','you'],1): lic.append('cout<<'+cmds[0]+"<<'\\n';") continue if ewl(cmds,['fucks','you','again'],1): lic.append('cout<<char('+cmds[0]+'.to_int()&255);') continue if _=='fuck you': lic.append('return 0;') continue if len(cmds)==3 and cmds[1]=='fucks': lic.append('%s=%s+%s;'%(cmds[2],cmds[2],cmds[0])) continue if len(cmds)==3 and cmds[1]=='unfucks': lic.append('%s=%s-%s;if(%s<bn_cpp::bn(0))%s=bn_cpp::bn(0);'%(cmds[2],cmds[2],cmds[0],cmds[2],cmds[2])) continue if len(cmds)==4 and cmds[1]=='fucks'and cmds[3]=='again': lic.append('%s=%s*%s;'%(cmds[2],cmds[2],cmds[0])) continue if len(cmds)==4 and cmds[1]=='unfucks'and cmds[3]=='again': lic.append('%s=%s/%s;'%(cmds[2],cmds[0],cmds[2])) continue if cmds[1]=='unfucks'and ewl(cmds,['over','and','over'],3): lic.append('%s=%s%%%s;'%(cmds[2],cmds[0],cmds[2])) continue if cmds[1]=='fucks'and ewl(cmds,['over','and','over'],3): lic.append('''FUCK_YOU=bn_cpp::bn(1); for(FUCK_ME=bn_cpp::bn(0);FUCK_ME<%s;FUCK_ME++)FUCK_YOU=FUCK_YOU*%s; %s=FUCK_YOU;'''%(cmds[2],cmds[0],cmds[2])) continue if cmds[0]=='fuck!': lic.append('//'+_[6:]) continue if _=='end fuck': lic.append('}') continue if cmds[0]=='if'or cmds[0]=='while': if ewl(cmds,['is','fucked'],2): lic.append(cmds[0]+'('+cmds[1]+'.to_bool()){') continue if ewl(cmds,['is','unfucked'],2): lic.append(cmds[0]+'(!'+cmds[1]+'.to_bool()){') continue if ewl(cmds[:-1],'is more fucked than the'.split(),2): lic.append(cmds[0]+'('+cmds[1]+'>'+cmds[7]+'){') continue if ewl(cmds[:-1],'is less fucked than the'.split(),2): lic.append(cmds[0]+'('+cmds[1]+'<'+cmds[7]+'){') continue if _=='else fuck': lic.append('}else{') continue if len(cmds)==4 and cmds[0]=='fuck'and cmds[3]=='times': lic.append(cmds[1]+'='+cmds[1]+'+bn_cpp::bn('+str(int(cmds[2]))+');') continue if len(cmds)==2 and cmds[0]=='fuck': __=fk.split()[1] if len(__)>2 and __[0]=='"'and __[-1]=='"': for i in dc(bytes(__[1:-1],'ascii')): lic.append(f'cout<<char({i});') continue raise FuckingError('What The Fuck!')