Dafne

INTERPRETERS

direct/axiomatic interpreter (Zimbu)

imp/ort sys¿ĐAFNE
Đeffne = "SATOR AREPO TENET OPERA ROTAS".split()
Đict = dict(zip("ROTASPEN", "DAFNEBR0"))
D = ["".join(Đict[c] for c in Đeffne[4 - i]) for i in range(5)]
print("¿ĐAFNE?")
for line in sys.stdin:
     s = line.strip()
     if all(c in Đict for c in s) and "".join(Đictz[c] for c in s) == D[0]:
         print(*D, sep="\n")```
self-modifying
```bash
// CLASS D

  CONST A="ROTASPEN",B="DAFNEBR0";

  FUNC M(c CHAR) CHAR { VAR i=A.indexOf(c); RETURN i<0?c:B[(3*i+5)%8]; }

  FUNC T(s STRING) STRING
    VAR o=""; FOR i IN 0..s.len()-1 o+=M(s[i]); OD RETURN o;
  END

  FUNC E() LIST<STRING>
    VAR W="SATOR AREPO TENET OPERA ROTAS".split(" "),D LIST<STRING>=[];
    FOR i IN 0..4 D.append(T(W[4-i])); OD
    RETURN D;
  END

  FUNC main()
    VAR D=E();
    Out.println("¿ĐAFNE?");
    WHILE TRUE
      VAR s=In.readLine().trim();
      IF s.len()>0
        IF T(s)==D[0]
          FOR r IN D Out.println(r); OD
        FI
      FI
    OD
  END

END

WIKI

= The DAFNE square = Axiomatic DAFNE “doorway” (Zimbu)

CLASS D

  CONST A="ROTASPEN"; CONST B="DAFNEBR0";

  FUNC m(c CHAR) CHAR
    VAR i=A.indexOf(c);
    RETURN i>=0?B[(3*i+5)%8]:c;
  END

  FUNC main()
    VAR W="SATOR AREPO TENET OPERA ROTAS".split(" ");
    VAR D LIST=[];
    FOR i IN 0..4
      VAR s=W[4-i],o="";
      FOR j IN 0..s.len()-1 o+=m(s[j]); OD
      D.append(o);
    OD

    Out.println("¿ĐAFNE?");
    WHILE TRUE
      VAR s=In.readLine().trim();
      VAR ok=TRUE;
      FOR i IN 0..s.len()-1 IF A.indexOf(s[i])<0 ok=FALSE; FI OD
      IF ok
        VAR t="";
        FOR i IN 0..s.len()-1 t+=m(s[i]); OD
        IF t==D[0]
          FOR r IN D Out.println(r); OD
        FI
      FI
    OD
  END

END</pre>
{|
| 
|-
| DAFNE
|-
| ABRDN
|-
| FR0RF
|-
| NDRBA
|-
| ENFAD
|}

0D theta conversion operator
SATOR
    O
    T
    A
    S
=== Triadic expansion === (python)
#!SELF-MODIFYING
import re,sys

# ===============
# AXIOM
# ROTAS
# OPERA
# TENET
# AREPO
# SATOR
# ===============

A="ROTASPEN";B="DAFNEBR0"
f=lambda c:B[(3*A.index(c)+5)%8]if c in A else c
g=lambda t:"\n".join("".join(f(c)for c in l)for l in t.split("\n"))

def r():
 s=open(__file__,encoding="utf-8").read()
 m=re.search(r"AXIOM\n((?:# [A-Z0-9]{5}\n){5})",s)
 b=[ln[2:] for ln in m.group(1).splitlines()]
 return "\n".join(b),s

def w(b,s):
 x="\n".join("# "+l for l in b.split("\n"))+"\n"
 s=re.sub(r"(AXIOM\n)(?:# [A-Z0-9]{5}\n){5}",r"\1"+x,s)
 open(__file__,"w",encoding="utf-8").write(s)

b,s=r()

if b=="DAFNE\nABRDN\nFR0RF\nNDRBA\nENFAD":
 print(b)
else:
 nb=g(b)
 w(nb,s)
 print(nb)
{| |+ Dafne L-system |- ! # Axioms !! expansion rule |- |
# ROTAS
# OPERA
# TENET
# AREPO
# SATOR
||
DAFNE
ABRDN
FR0RF
NDRBA
ENFAD
BDFBR
D00BB
F0F0F
BB00D
RBFDB
BDNRA
DE0BR
N0F0N
RB0ED
ARNDB
|} === 1D expansion === ROTASPEN DAFNEBR0
DAFNE
ABRDN
FR0RF
NDRBA
ENFAD
expansion rules
[4,4,4,4,4,4,4,5,6]
[4,2,6,8,4,7,4,2,3]
[4,6,4,4,2,8,7,2,4]
[4,8,7,4,8,7,4,8,7]
[4,4,3,8,2,6,4,2,7]
[4,7,2,6,2,8,3,4,7]
[4,4,4,4,4,4,4,4,4]
[5,2,7,8,2,3,4,4,6]
[6,3,2,4,7,4,8,6,2]
[1,4,4,4,4,4,4,4,4]
NNNNABNBNN0RNNF
NNN0NRNAONOROAB
NEBNAFRANN0RNAR
NABNRANNNNNNN0R
0NRBAONNNNNNNOR
NAFFNRNNNNEBN0R
NBNNNNBFANNNNBN
NAONNNNRNNNNNAO
RANNNN0BANNNRAN
N0RNNNNNNNRANAB
NORNNNNNNBAO0NR
N0RNEBNNNFNRNAF
NNFN0RNBNNABNNN
OABNORNAO0NRNNN
NARN0RRANNAFNEB
''i.e''
s=[list("DAFNE"),list("ABRDN"),list("FR0RF"),list("NDRBA"),list("ENFAD")]
r=[[4,4,4,4,4,4,4,5,6],[4,2,6,8,4,7,4,2,3],[4,6,4,4,2,8,7,2,4],[4,8,7,4,8,7,4,8,7],
   [4,4,3,8,2,6,4,2,7],[4,7,2,6,2,8,3,4,7],[4,4,4,4,4,4,4,4,4],[5,2,7,8,2,3,4,4,6],
   [6,3,2,4,7,4,8,6,2],[1,4,4,4,4,4,4,4,4]]
expansion rule
u=[]
for row in s:
    for c in row:
        if c not in u:u.append(c)
while len(u)<9:u.append(u[-1])
m={i+1:u[i] for i in range(9)}
sr={u[i]:i for i in range(len(u))}
alternating 0/O
C=[0]
def z(x):
    if x!=8:return m[x]
    C[0]^=1
    return "0" if C[0] else "O"
'''Linear (X)'''
def X(g):
    o=[]
    for row in g:
        a=[[],[],[]]
        for c in row:
            t=r[sr[c]] if c in sr else [4]*9
            b=[z(x) for x in t]
            a[0]+=b[:3];a[1]+=b[3:6];a[2]+=b[6:]
        o+=a
    return o

for L in X(s):print("".join(L))
The ROTASPEN dictionary creates a "Dafne square" which is a condensed [https://en.wikipedia.org/wiki/Vedic_square Vedic square]. The vedic square can be observed via Vedic_square.pgm # Scalar expansion
     CLASS DQ

  CONST A="ROTASPEN", B="DAFNEBR0";
  FUNC m(c CHAR) CHAR { VAR i=A.indexOf(c); RETURN i>=0?B[(3*i+5)%8]:c; }

  FUNC rot(s STRING) STRING
    VAR n=s.len();
    RETURN n>0 ? s[1 .. n] + s[0] : "";
  END

  FUNC evolve(q STRING, r STRING, w INT) STRING
    WHILE q.len() > w
      IF r[0]=='0'
        q = q[1 .. q.len()];
      ELSE
        r = rot(r);
        IF q[0]=='1' q += r[0]; FI
      FI
      r = rot(r);
    OD
    RETURN q;
  END

  FUNC main()
    VAR axiom="0010111101100110111100101000101";
    VAR ruler="00101011000110000111101000110101110101000101011101";

    VAR out = evolve(axiom, ruler, 3);
    Out.println(out);
  END

END