Simyacı (1547 bayt)
_->In_NN+2b+al+g
al+g+0NN->ak
al+g+NN->ah
ah+b->ah+m+d+z+a
ah+0b->C+Z+Q
Z+j+z->Z+j+d
Z+j+0z->M+s
M+g+b->M+g+r
M+g+h->M+g+d
M+g+0b+0h+q->J+U
J+o+h->J+o+m
J+o+a->J+o+d
J+o+0h+0a->2C+an+Q
an+j+h->an+j+d
an+j+0h->aC+s
aC+g->e+am+P
am+l+b->am+l+d
am+l+0b->al+s
ak+b->ak+m+d
ak+0b->C+aj+Q
aj+j+h->aj+j+b
aj+j+0h->I+n
I+f+e->I+f+a
I+f+b->I+f+m+d+z
I+f+0e+0b->C+ai+Q
ai+j+h->ai+j+b
ai+j+0h->aB+n
aB+f->H
H+z->H+d
H+a+e->H
H+0z+0e->G+i
G+i+0b->ag
G+i+b->az+b+n
az+f+0b->Out_a
az+f+b->G+b+n
G+f->G+t
ag+e->ag
ag+0e->af+t
af+i+e->af+i+a
af+i+0e->Out_a
Q->F+s
F+g+b->F+g+y
F+g+A->F+g
F+g+0b+0A->av+o
av+o+0m->w
av+o+m->m+ae+A
ae+m->ae+b
ae+0m->u+n
u+f+b->u+f+m
u+f+e->u+f+E
u+f+A->u+f+k+c
u+f+0b+0e+0A->ad
ad+c->ad+A
ad+0c->ac
ac+y->ac+d+c
ac+0y->ab
ab+c->ab+y
ab+0c->V+l
V+l+0k->x
V+l+k->aa+t
aa+i+0e->W
aa+i+e->Y
Y+E->Y+D+c
Y+0E->X
X+c->X+E
X+0c->aa+i
W+D->W+e
W+0D->V+P
x+E->x
x+d->x
x+b->x+k
x+0E+0d+0b->aw
aw+h->aw+d
aw+0h->aE+s
aE+g->p
p+b->p+2r
p+k->p+d
p+B->p
p+q->p
p+0b+0k+0B+0q->r+q+av+U
w+h->w+d
w+y->w+r
w+C->w+B+q
w+0h+0y+0C->aD+U
aD+o->j
U->au+s
au+g+b->au+g+d
au+g+0b->v
v+d->d+aA+t
aA+i+k->R
aA+i+0k->at
at+B->at+k+c
at+0B->L
L+c->L+B
L+r->L+b
L+0c+0r->as+n
as+f+b->as+f+r
as+f+0b->R
R+0e->K
R+e+q->ar+D+c
ar+e+q->ar+c
ar+0q->aq
aq+c->aq+q
aq+0c->R
K+D->K+e
K+h->K+b
K+0D+0h->ap+P
ap+l+b->ap+l+h
ap+l+0b->v
v+0d+k->v
v+0d+r->v
v+0d+0k+0r->o
s+0d->g
s+d->d+ao+t
ao+i->ao+P
ao+l->s
P->O+c
O+b->2c+O
O+0b->N
N+c->b+N
N+0c+e->O
N+0c+0e->l
n+b->n+c
n+0b->T
T+c->ay
T+0c->e+n
ay+c->b+T
ay+0c->f
t+d->t+c
t+0d->S
S+c->ax
S+0c->e+t
ax+c->d+S
ax+0c->i
Çevrimiçi demo .
Not: Bu oldukça yavaş. Bir kuralı aynı anda birden çok kez uygulamayı destekleyen bir tercümanla test yapıyorsanız benimki - ayrıştırıcıdaki bir hatayı düzelten en son sürüme sahip olduğunuzdan emin olun), o zaman iki kural ekleyerek önemli bir hız elde edebilirsiniz:
T+2c->b+T
S+2c->d+S
mevcut kurallar üzerinden bir rota çizer
T+c->ay
ay+c->b+T
S+c->ax
ax+c->d+S
Kısmi diseksiyon
Yüksek düzeyde, bu benim CJam cevabımla aynı yaklaşımı kullanır.
Simyacı'nın hesaplama modeli aslında Minsky kayıt makinesidir . Bununla birlikte, Simyacı kod ve verilerin denkliğini çok güzel bir şekilde ortaya koyar ve üretim kuralının sol tarafında birçok jetona etkili bir şekilde izin vererek, durumun bir atom tarafından temsil edilmesi kısıtlanmaz: bir grup atom kullanabiliriz ve bu (özyinelemesiz) altprogramlara izin verir. Bu golf için çok kullanışlıdır. Gerçekten eksik olan tek şey makrolar ve hata ayıklama.
0xbir( 2 A + 1 ) 2xP
e
b
n
b
e
b
t
d
e
d
a, b = b, 0
en az 17 bayta genişler:
S+a->S+b
S+0a->T
nerede S
mevcut durumu ve T
gelecek durumudur. O bir "hareket" olarak yapılmalıdır çünkü tahribatsız "copy", daha pahalıdır a
için b
ve bir yardımcı tmp
bir "hareket", ardından tmp
arkasınaa
.
Gizleme
Çeşitli değişkenleri birbirine taktım ve programın golf sürecinde yaklaşık 60 eyaleti ortadan kaldırdım ve birçoğunun zaten özellikle anlamlı isimleri yoktu, ancak tamamen golf yapmak için bir minimiser yazdım, böylece isimler şimdi tamamen anlaşılmaz. İyi şanslar tersine mühendislik! Kod hakkında birkaç varsayım yapan ancak diğer Simyacı programları en aza indirgemek için uyarlanabilen minimizer (CJam'da):
e# Obfuscate / minimise Alchemist program
e# Tokenise
qN%[SNS]e_*S%
e# Get token frequencies for substitution purposes, special-casing the I/O ones
_["+" "0" "2" "->" "_" N "In_n" "n" "Out_tmp2" "tmp2"]-
$e`$W%1f=
e# Empirically we want a two-char input for n and a one-char one for tmp2
["In_n" "Out_tmp2" "n" "tmp2"]\+
["In_NN" "Out_a" "NN"] "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"1/:A+ A2m*:e_"NN"a-+
1$,<
er
_s,p