?'+)=:!@/*"*'6/{=+'+}/{
Cobalah online!
Penjelasan
Dibuka:
? ' + )
= : ! @ /
* " * ' 6 /
{ = + ' + } /
{ . . . . .
. . . . .
. . . .
Ini benar-benar hanya program linier dengan /
digunakan untuk pengalihan. Kode linier adalah:
?'+){=+'+}*"*'6{=:!@
Yang menghitung n (n +1) (2n +1) / 6 . Ini menggunakan tepi memori berikut:
Di mana titik memori (MP) dimulai pada tepi berlabel n , menunjuk ke utara.
? Read input into edge labelled 'n'.
' Move MP backwards onto edge labelled 'n+1'.
+ Copy 'n' into 'n+1'.
) Increment the value (so that it actually stores the value n+1).
{= Move MP forwards onto edge labelled 'temp' and turn around to face
edges 'n' and 'n+1'.
+ Add 'n' and 'n+1' into edge 'temp', so that it stores the value 2n+1.
' Move MP backwards onto edge labelled '2n+1'.
+ Copy the value 2n+1 into this edge.
} Move MP forwards onto 'temp' again.
* Multiply 'n' and 'n+1' into edge 'temp', so that it stores the value
n(n+1).
" Move MP backwards onto edge labelled 'product'.
* Multiply 'temp' and '2n+1' into edge 'product', so that it stores the
value n(n+1)(2n+1).
' Move MP backwards onto edge labelled '6'.
6 Store an actual 6 there.
{= Move MP forwards onto edge labelled 'result' and turn around, so that
the MP faces edges 'product' and '6'.
: Divide 'product' by '6' into 'result', so that it stores the value
n(n+1)(2n+1)/6, i.e. the actual result.
! Print the result.
@ Terminate the program.
Secara teori dimungkinkan untuk menyesuaikan program ini dengan panjang sisi 3, karena /
yang tidak diperlukan untuk perhitungan, :
dapat digunakan kembali untuk mengakhiri program, dan beberapa '"=+*{
mungkin dapat digunakan kembali juga, membawa jumlah yang diperlukan perintah di bawah 19 (maksimum untuk panjang sisi 3). Saya ragu apakah mungkin untuk menemukan solusi semacam itu dengan tangan, jika ada.
f(1) == 1 * 1 (1)
danf(24) == 70 * 70 (4900)
.