Goldfuck

Goldfuck is a derivative of !!Fuck created by User:None1
==Syntax==
Any Goldfuck program is the golden ratio (or "phi") recited, with wrong digits.
Starting from the digit after the decimal point, a correct digit stands for ! in !!Fuck, while a wrong digit stands for a # in !!Fuck.
Since ! appears more frequently than # in !!Fuck, you can hide any !!Fuck program in a Goldfuck program.
Hint: You can use this program in Brainfuck to generate the digits in the golden ratio.
==Example Programs==
To make it easy to compare with the golden ratio, here is a approximation of the golden ratio.
1.618033988749894848204586834365638117720309179805762862135448622705
26046281890244970720720418939113748475408807538689175212663386222353
69317931800607667263544333890865959395829056383226613199282902678806
75208766892501711696207032221043216269548626296313614438149758701220
34080588795445474924618569536486444924104432077134494704956584678850
98743394422125448770664780915884607499887124007652170575179788341662
56249407589069704000281210427621771117778053153171410117046665991466
97987317613560067087480710131795236894275219484353056783002287856997
82977834784587822891109762500302696156170025046433824377648610283
===Hello World===
1.6180339787498948482645868343756381177203391798027628625354486227057604628179024497072052041893961374847560880753838917501266338622233369317934800607667269544333090865989395820056383226613599282902678876752087668922017115962076322212432162691486262963136244381197587012303408058870544547498461856959648644491410443207723449440495658467185098743399422126448770664760915888607499987124037652177575179785341662562424075893697040042812104276517711077780431531314101970466059914669792731762356006708758071018179523489427521942435305478300228985699782971
The same program with wraps (wraps are not allowed in Goldfuck because programs in this esolang can only have numbers and a decimal point):
1.6180339787498948482645868343756381177203391798027628625354486
227057604628179024497072052041893961374847560880753838917501266
338622233369317934800607667269544333090865989395820056383226613
599282902678876752087668922017115962076322212432162691486262963
136244381197587012303408058870544547498461856959648644491410443
207723449440495658467185098743399422126448770664760915888607499
987124037652177575179785341662562424075893697040042812104276517
711077780431531314101970466059914669792731762356006708758071018
179523489427521942435305478300228985699782971
===Cat Program===
 1.6180339880498948482025868343656371177203090798057628601354486227055
===Truth Machine===
 1.61803998874489484920458683466563811772130917980576486213544862070526046181890944970726720418839113738475408407538189175212663346222373693179308006076672638443338608659573958294563832266133992829126788037520876689253171163620703222107321626954852629631361448
The same program with wraps:
1.6180399887448948492045868346656381177213091798057648621354486207
052604618189094497072672041883911373847540840753818917521266334622
237369317930800607667263844333860865957395829456383226613399282912
6788037520876689253171163620703222107321626954852629631361448
==Turing Completeness==
It is Turing complete because !!Fuck is.
==Interpreter==
Interpreter in Python, requires the bigfloat package for arbitrary precision decimal.
from bigfloat import *
import sys
def bf(code):
 s=[]
 matches={}
 tape=[0]*1000000
 for i,j in enumerate(code):
 if j=='[':
 s.append(i)
 if j==']':
 m=s.pop()
 matches[m]=i
 matches[i]=m
 cp=0
 p=0
 while cp<len(code):
 if code[cp]=='+':
 tape[p]=(tape[p]+1)%256
 if code[cp]=='-':
 tape[p]=(tape[p]-1)%256
 if code[cp]==',':
 c=sys.stdin.read(1)
 tape[p]=(ord(c) if c else 0)%256
 if code[cp]=='.':
 print(chr(tape[p]),end=)
 if code[cp]=='<':
 p-=1
 if code[cp]=='>':
 p+=1
 if code[cp]=='[':
 if not tape[p]:
 cp=matches[cp]
 if code[cp]==']':
 if tape[p]:
 cp=matches[cp]
 cp+=1
def fuck2bf(code):
 cleancode=''
 for i in code:
 if i in '!#':
 cleancode+=i
 cp=0
 table=' ><+-,.[]'
 b=''
 while cp<len(cleancode):
 idx=cleancode.index('#',cp)-cp
 b+=table[idx]
 cp+=idx+1
 return b
def run(code):
 bf(fuck2bf(code))
def compute_phi(p): # phi computing function, unsure about precision
 num1,den1,prenum1,preden1,num2,den2=1,1,0,1,1,10**p
 while abs((num1*preden1-prenum1*den1)*den2)>=num2*den1*preden1:
 num1,den1,prenum1,preden1=den1+num1,num1,num1,den1
 with precision((p+20)*4):
 x=BigFloat.exact(num1)/BigFloat.exact(den1)
 return str(x)[2:p+2]
def goldfuck(code):
 if not code.replace('.',).isdigit() or code.count('.')!=1: # Verify syntax
 raise SyntaxError('Invalid syntax')
 code=code[2:]
 phi=compute_phi(len(code))
 fuck=''
 for i,j in enumerate(code):
 if phi[i]==j:
 fuck+='!'
 else:
 fuck+='#'
 run(fuck)
goldfuck(input())
==See also==
* Pi, encodes brainfuck programs in π.
* BrainPi, an esolang similar to this one created by the same author on the Pi day.
Category:Languages
Category:Turing complete
Category:Brainfuck derivatives
Category:Brainfuck equivalents
Category:Implemented
Category:2023