Turing-komple bir dilin güzel bir özelliği, tüm Evrenin simulasyonu dahil olmak üzere herhangi bir program yazmak için kullanılabiliyor olmasıdır.
Göreviniz tam olarak bunu yapmak: Evreni simüle eden bir program yazmak .
Not: Bu görevi başaracağınızdan şüphem olmasam da, bugünlerde simülasyonunuzdaki 10 90 parçanın da gerçekten yapmaları gerekeni yapıp yapmadığını doğrulamak için yeterli zamanım yok. Bu nedenle, yalnızca test ve değerlendirmeyi basitleştirmek için, evren simülatörünüzün yalnızca tek bir başlangıç parçacıklarıyla çalışması yeterlidir. İşleri ilginç kılmak için, bu parçacığın yeni keşfedilen Higgs Boson olduğunu varsayalım.
Evreniniz, ortasında 120 GeV'lik tek bir Higgs Boson'dan başkasıyla başlamaz. Çıktının çok uzun sürmemesi için, bu evrenin 5.4 × 10 −44 saniyelik "normal saat hızı" yerine sadece 10 -25 saniyede geçmesini sağlayalım .
Bu Higgs bozonu, 1,6 x 10 − 22 saniyelik yarı ömre sahip olduğundan er ya da geç çürür , bu yüzden simülasyonun her tıklayışında,% 0,0433 oranında bozulma olasılığı vardır. Neye düşeceğini buradan kontrol edebilirsiniz . Merkezi ve basitleştirilmiş bir gereksinim olması için, kullanmanız gereken dallanma oranlarını listeler:
Simülasyonu çalıştırma
Simülasyonun her bir onayında, Higgs bozonunun% 0,0433 oranında bozulma olasılığı vardır. Bu durumda, listelenen olasılıklarla birlikte aşağıdaki parçacıklara bozunacaktır (çıkışta bu isimleri kullanmalısınız):
- alt kuark + alt antiquark (% 64,8)
- 2 W bozon (% 14,1)
- 2 gluon (% 8.82)
- tau lepton + antitau lepton (% 7.04)
- çekicilik kuark + çekicilik antiquark (3.27%)
- 2 Z bozonu (% 1,59)
- 2 foton (% 0.223)
- 1 Z bozonu + 1 foton (% 0.111)
- muon + antimuan (% 0,0244)
- üst kuark + üst yapı (% 0.0216)
% 100 toplam için.
Bu parçacıkların bazıları daha da bozunur.
W boson : 10 - 25 saniyenin yarı ömrü , bu, her bir tene kadar eşit olasılıklarla aşağıdakilerden birine çürümede% 50 şans demektir:
- pozitron + nötrino
- antimuan + nötrino
- antitau lepton + nötrino
Z bozonu : 10 - 25 saniyelik yarı ömrü , bu, her onaylamada aşağıdakilerden birine çürümede% 50 şans demektir:
- nötrino + antineutrino (% 20,6)
- elektron + pozitron (% 3,4)
- muon + antimuan (% 3,4)
- tau lepton + antitau lepton (% 3,4)
- aşağı kuark + aşağı antiquark (% 15,2)
- garip kuark + garip antiquark (% 15,2)
- alt kuark + alt antiko (% 15,2)
- yukarı kuark + yukarı antiquark (% 11,8)
- çekicilik kuarkı + çekicilik antiquark (11.8%)
üst kuark : 5 × 10 - 25 saniyenin yarı ömrü , bu, her bir tene kadar eşit olasılıklarla aşağı doğru çürümek için% 12,95 şans demektir:
- W bozon + aşağı kuark
- W boson + garip kuark
- W bozon + alt kuark
Elbette, W bozonu da yakında bozulacak ...
Üst antikuark üst kuark benzer şekilde davranır: bir W boson ve reklam / s / b Antikuark içine çürümeye.
Diğer tüm parçacıklar (yani Z ve W bozonları ve üst kuarklar hariç) yarılanma ömrünün büyüklüğü daha fazladır , bu nedenle çıktının toparlanmaması için, bunların simülasyonumuz için kararlı olduğu kabul edilir .
Evren büyük ölçüde boş olduğundan, tüm parçacıklar kendileri için yeterli alana sahip olacak ve birbirleriyle etkileşime girmeyecektir. Bu nedenle, tüm bireysel parçacıklar, bölünme olasılıkları dahil, her açıdan birbirlerinden bağımsızdır.
Çıktı:
Simülasyonun her tıklaması, simüle edilmiş evrenin içeriğini yeni bir satıra yazdırmanız gerekir. Örneğin:
The universe contains 1 Higgs boson.
The universe contains 1 Higgs boson.
The universe contains 1 Higgs boson.
The universe contains 1 Higgs boson.
The universe contains 2 W bosons.
The universe contains 2 W bosons.
The universe contains 1 W boson, 1 positron and 1 neutrino.
The universe contains 1 positron, 1 antitau lepton and 2 neutrinos.
Simulation ended after 0.8 yoctoseconds.
Çizgideki parçacıkların sırası önemli değildir. Bununla birlikte, biçimlendirme, noktalama işaretleri ve çoğullaştırma dahil, yukarıdaki örnekteki gibi olmalıdır . Eğer bir bütün (mini) evreni simüle ederseniz, güzel görünmelidir (Ve yeterince katı olmayan bir çıktı gereksiniminin kötüye kullanımını ortadan kaldırmak istedim)
Her satır 0,1 yotosaniye karşılık gelir, ancak programınızın çıktısını yazdırması için gerekenden daha uzun sürerse affedilirsiniz.
Simülasyon yalnızca "kararlı" parçacıklar kaldığında sona erer.
puanlama
Standart kod golf kuralları geçerlidir.
Rasgele sayı üreteci sözde rasgele olabilir, ancak dil varsayılan olarak ekmiyorsa onu tohumlamanız gerekir. RNG'nizin olasılık dağılımı tek tip olmalıdır.
- Program bir girdi olarak bir tamsayı alırsa ve bu kadar çok sayıda Higgs bozanı ile başlarsa, kod boyutuna% -10 bonus alırsınız.
Turing makine meraklıları için istisna.
Gerçek bir Turing makinesi veya benzer bir dille (Brainfuck gibi) şanslarını denemeye cesaret edenler için , görevleri aşağıdaki kural değişiklikleriyle daha kolaydır (yalnızca dil Brainfuck türevi veya başka bir şekilde basitleştirilmiş bir Turing ise geçerlidir) Atama eksik, bir ALU bulunmayan makine ve bant üzerindeki değerler yalnızca bir artırılabilir ve azaltılabilir) :
- Parçacık isimleri kuarklar için d, s, b, t, u, c, nötrino için v, tau lepton için T, müon için m, gluon için g, foton için p, Z, W ve H için basitleştirilmiştir. bozonlar, - elektron için ve + için pozitron. Her tikte, listedeki ilk kararsız partikülün bozunup bozulmadığına işaret eden standart girdiden 0 veya 1 değerine sahip bir girdi sağlanır.
Örnek çıktı bu nedenle olacak
H
H
H
H
W W
W W
W + n
+ !T n n
SimulateUniverse
yerleşik bir işlevi var mı?