}0
--@2
@2/\=0MB
}0@1\/
&0/\>0!!
--
@1
00@0
--/\=0
\\@0&0
Marbelous, sadece bir Rube Goldberg benzeri makinede bulunan mermerler tarafından temsil edilen değerlere sahip 8 bitlik bir dildir, bu yüzden bu çok kolay değildi. Bu yaklaşım kabaca şu sözde koda eşdeğerdir:
function recursiveFunction(int i)
{
for(int j = i*512; j > 0; j--)
{
recursiveFunction(i - 1);
}
}
maksimum değer 256 olduğu için (farklı yerlerde farklı şekilde ele alınan Marbleous programında 0 ile temsil edilir), recursiveFunction (1) toplamı , evreni aşacak kadar kolay, 256!*512^256
eşit olan toplam olarak adlandırılır 10^1200
.
Marbelous'un çok hızlı bir tercümanı yok, 10^11
her yıl bu işlevin çağrılarıyla ilgili çalışabilir gibi görünüyor, bu da yılların çalışma zamanına bakıyoruz demektir 10^1189
.
Marbelous kurulunun daha fazla açıklaması
00@0
--/\=0
\\@0&0
00
onaltılık (yani 0) ile temsil edilen bir dildir (veya mermer). Bu mermer üzerine düşerek --
herhangi bir mermeri 1 azalır (00 sarılır ve ondalık basılarak FF veya 255 olur). Şimdi FF değeri olan Mermer, aşağıya doğru \\
bir sütun sağa, aşağıya iten yere düşüyor @0
. Bu bir portal ve mermeri diğer @0
cihaza ışınlıyor . Orada, /\
bir kopyalayıcı olan cihazın üzerindeki mermer toprağı, mermerin bir kopyasını --
soluna koyar (bu mermer portallar arasında dolaşmaya devam eder ve her döngüde azalır) ve bir =0
sağa doğru.=0
mermeri sıfır değerine benzetir ve eşit olması durumunda mermerin yalak düşmesine izin verir ve almazsa sağa iter. Mermerin değeri 0 ise &0
, daha sonra açıklayacağım bir eşanjöre iner .
Sonuçta, bu sadece bir döngüde 0 değerinde bir mermerle başlar ve tekrar 0'a ulaşana kadar azaltır, daha sonra bu 0 değeri mermerini bir senkronize ediciye yerleştirir ve aynı anda döngülemeye devam eder.
}0@1
&0/\>0!!
--
@1
}0
bir giriş aygıtıdır, başlangıçta programı çağırırken nth (temel 0) komut satırı girişi her }n
cihaza yerleştirilir . Eğer bu programı komut satırı girişi 2 ile çağırırsanız, bunun yerine 02 değerinde bir mermer olacaktır }0
. Bu mermer daha sonra &0
cihaza düşer , başka bir senkronizatör, &n
senkronizatörler diğer tüm karşılık &n
gelenler dosyalanıncaya kadar mermerleri tutar . Daha sonra mermer daha önce açıklanan döngüde olduğu gibi azaltılır, ışınlanır ve çoğaltılır. Doğru kopya daha sonra >0
0 değilse eşitsizlik olup olmadığını kontrol eder, 0 değilse, geçer. 0 ise, sağa doğru itilir !!
ve tahtayı sona erdirir.
Tamam, şimdiye kadar 255'ten 0'a kadar sürekli geri sayım yapan bir döngü var ve başka bir, benzer döngü (komut satırı girişi tarafından beslenen) her 0 çarptığında bir kez çalışmasına izin veriyor. Bu ikinci döngü n kez çalıştığında (maksimum 256 ) program sona erer. Demek döngüde maksimum 65536 koşu var. Evreni yenmek için neredeyse yeterli değil.
}0
--@2
@2/\=0MB
Bu tanıdık görünmeye başlamalı, girdi bir kez azaltılmalı, daha sonra bu değer etrafa dolanıp kopyalanmalıdır (mermerin döngünün her hareketinde değil sadece bir kez azaldığını unutmayın). Daha sonra 0'a eşitlik olup olmadığını ve sıfır toprak olmadığını kontrol eder MB
. Bu, Marbelous'taki bir fonksiyondur, her dosya birkaç pano içerebilir ve her pano bir fonksiyondur, her fonksiyonun ızgaradan önce adlandırılması gerekir :[name]
. Dosyadaki ilk işlev dışında standart bir adı olan her işlev: MB. Bu yüzden bu döngü sürekli olarak ana kartı tekrar çağırır ve n - 1
bu fonksiyonun hangi eşgörünümünün çağrıldığı n değeri kullanılır.
Peki neden n*512
?
Eh, ilk döngü 4 tene (ve 256 kez) geçiyor ve ikinci döngü tahta sonlanmadan önce n kez çalışıyor. Bu, tahtanın yaklaşık n*4*256
keneler için çalıştığı anlamına gelir . Son döngü (özyinelemeli işlev çağrısı yapar) daha sıkıştırıcıdır ve 2 tik ile çalışır, bu da işlev n*4*256/2 = n*512
zamanlarını çağırmayı başardığı anlamına gelir .
Bahsetmediğiniz semboller nelerdir?
\/
mermerleri tahtadan söken bir çöp tenekesidir, bu, ayıklanmış mermerler, bir turu çevreleyen diğer mermerleri engellemez ve programın sonlandırılmasını önler.
Bonus
Mermer bir tablonun dibine düşen mermerler STDOUT'a çıktı aldığından, bu program çalışırken ASCII karakterlerinin bir bolluğunu basar.