# -*- coding: utf-8 -*-
# Wiederholungsrechenzeichen alias Metaoperatoren alias Hyperoperatoren mit Invers
#Logarithmus nimmt 1. Argument des Exponentials und gibt 2. Argument zurück.
#Mit 0 kann es aber noch nicht so gut umgehen, also nur "einfache" Zahlen (positiv "natürlich").
#log_1(1) gibt 0 aus, was als Fehlermeldung zu werten ist.
#Meta-Operator n-ter Stufe
def MO(a,n,b): #a (|^n) b
r=a
if (n<1):
r+=1
if (n==1):
r=a+b
if (n==2):
r=a*b
if (n==3):
r=a**b
if (n>3):
for i in range(1,b): #b-1 mal, also z.B.: a°a°a mit b=3, dann 2-mal °a ausführen
r=MO(a,n-1,r) #a und r vertauscht damit bei Exponential "unten angebaut" wird
#print r
#print "MO Ergebnis="+str(r)
return r
#Inverser Meta-Operator n-ter Stufe
def IMO(r,n,l): # r (|v n) l
z=0
if (n<1):
z=r-1
if (n==1):
z=r-l
if (n==2):
while (r>0):
r=r-l
z+=1
#print z
#print r
if (n==3):
while (r>1):
r=r/l
z+=1
#print z
#print r
if (n>3):
while (r>1):
r=IMO(r,n-1,l)
z+=1
#print z
#print r
return z
#Test
#jetzt richtig
for i in range(1,4):
for j in range(1,4):
for k in range(1,4):
print i,j,k,IMO(MO(i,j,k),j,i)