Fission , 1328 989 887 797 bayt
Bu cevap biraz uzun sürüyor ( keşfedilebilir bölgeleri olsaydı ) ... lütfen bunu geçmeyi ve diğer cevaplara biraz sevgi göstermeyi unutma!
Bu kod üzerinde çalışmak, bu zorluğa ilham veren şeydi. Fission'da EOEIS'e bir cevap eklemek istedim, bu da beni bu diziye götürdü. Ancak, aslında Fission öğrenmek ve bunu uygulamak birkaç hafta sürdü. Bu arada, dizilim gerçekten üzerimde büyümüştü, bu yüzden bunun için ayrı bir meydan okumaya karar verdim (artı, bu özellikle de EOEIS üzerindeki ağaca çok uzak olmazdı).
Bu yüzden size Monstrosity'yi sunuyorum:
R'0@+\
/ Y@</ /[@ Y]_L
[? % \ / \ J
\$@ [Z/;[{+++++++++L
UR+++++++++>/;
9\ ; 7A9
SQS {+L /$ \/\/\/\/\/ 5/ @ [~ &@[S\/ \ D /8/
~4X /A@[ %5 /; & K } [S//~KSA /
3 \ A$@S S\/ \/\/\/ \/>\ /S]@A / \ { +X
W7 X X /> \ +\ A\ / \ /6~@/ \/
/ ~A\; +;\ /@
ZX [K / {/ / @ @ } \ X @
\AS </ \V / }SZS S/
X ;;@\ /;X /> \ ; X X
; \@+ >/ }$S SZS\+; //\V
/ \\ /\; X X @ @ \~K{
\0X / /~/V\V / 0W//
\ Z [K \ //\
W /MJ $$\\ /\7\A /;7/\/ /
4}K~@\ &] @\ 3/\
/ \{ }$A/1 2 }Y~K <\
[{/\ ;@\@ / \@<+@^ 1;}++@S68
@\ <\ 2 ; \ /
$ ;}++ +++++++L
%@A{/
M \@+>/
~ @
SNR'0YK
\ A!/
Girdide izleyen bir yeni satır olmadığını umuyor, bu yüzden onu aramak isteyebilirsiniz echo -n 120 | ./Fission oeis256504.fis
.
Düzen muhtemelen daha verimli olabilirdi, bu yüzden hala iyileştirilmesi gereken çok yer var (örneğin, bu 911 581 461 374 boşluk içeriyor ).
Açıklamaya geçmeden önce, bunun test edildiğine dair bir not: resmi tercüman tamamen olduğu gibi çalışmaz. a) Mirror.cpp
pek çok sistemde derlenmez. Bu soruna rastlarsanız, rahatsız edici çizgiyi yorumlayın - etkilenen bileşen (rastgele bir ayna) bu kodda kullanılmaz. b) Tanımlanmamış davranışa yol açabilecek birkaç hata vardır (ve bu karmaşık bir program için muhtemelen olacaktır). Düzeltmek için bu düzeltme ekini uygulayabilirsiniz . Bunu yaptıktan sonra, tercümanı ile derleyebilmeniz gerekir.
g++ -g --std=c++11 *.cpp -o Fission
Eğlenceli gerçek: Bu program, Fisyon'un sunduğu #
(rastgele aynalar), :
(yarım aynalar) -
veya |
(düz aynalar) ve "
(baskı modu) dışındaki neredeyse tüm bileşenlerini kullanır .
Peki ya dünya?
Uyarı: Bu çok uzun sürecek ... Fission'ın nasıl çalıştığı ve nasıl programlanabileceği ile gerçekten ilgilendiğinizi farz ediyorum. Çünkü eğer yapmazsan, bunu nasıl özetleyebileceğimden emin değilim. (Bir sonraki paragraf, dilin genel bir tanımını verir.)
Fisyon, hem veri hem de kontrol akışının bir ızgara boyunca hareket eden atomlarla temsil edildiği iki boyutlu bir programlama dilidir . Eğer Marbelous'u daha önce gördüyseniz veya kullandıysanız , konsept belli belirsiz olmalıdır. Her atomun iki tamsayılı özelliği vardır: negatif olmayan bir kütle ve isteğe bağlı bir enerji. Kütle hiç negatif olursa, atom ızgaradan çıkarılır. Çoğu durumda kütleyi atomun "değeri" olarak değerlendirebilir ve enerjiyi, atomların akışını belirlemek için çeşitli bileşenler tarafından kullanılan bir çeşit meta-özellik olarak değerlendirebilirsiniz (yani çoğu anahtar türü işaretine bağlıdır). Enerji). (m,E)
Gerektiğinde atomları belirteceğim . Programın başında, ızgara bir demet ile başlar.(1,0)
dört bileşenin üzerine yerleştirdiğiniz her yerden atom UDLR
(buradaki harf, atomun başlangıçta hareket ettiği yönü gösterir). Tahta daha sonra atomların kütlesini ve enerjisini değiştiren, yönlerini değiştiren veya daha sofistike şeyler yapan bir dizi bileşenle doldurulur . Tam bir liste için esolangs sayfasına bakın , ancak çoğunu bu açıklamada açıklayacağım. Programın birkaç kez kullandığı bir diğer önemli nokta, ağın toroidal olmasıdır: Tarafların herhangi birine çarpan, aynı yönde hareket eden, herhangi bir tarafa çarpan bir atom.
Programı birkaç daha küçük parçaya yazdım ve sonunda birleştirdim, bu yüzden açıklamaya devam edeceğim.
atoi
Bu bileşen ilgi çekici görünmeyebilir, ancak hoş ve basit ve Fission'in aritmetiği ve kontrol akışı ile ilgili önemli kavramları tanıtmama izin veriyor. Bu nedenle, bu bölümden oldukça titiz bir ayrıntıyla geçeceğim, böylece diğer parçaları yeni Fission mekaniği tanıtmaya indirgeyebilir ve detaylı kontrol akışını takip edebilmeniz gereken üst seviye bileşenleri işaret edebilirim.
Fisyon, sayıların tamamını değil, yalnızca tek tek karakterlerden bayt değerlerini okuyabilir. Bu kabul edilebilir bir uygulama olsa da , ben varken, doğru yapabilirim ve gerçek tamsayıları STDIN üzerinde çözümleyebilirim. İşte atoi
kod:
;
R'0@+\
/ Y@</ /[@ Y]_L
[? % \ / \ J
\$@ [Z/;[{+++++++++L
UR+++++++++>/;
O
Fisyondaki en önemli bileşenlerden ikisi fisyon ve füzyon reaktörleridir. Fisyon reaktörlerinden herhangi biri V^<>
(yukarıdaki kodun kullandığı <
ve >
). Bir fisyon reaktörü, bir atomu (karakterin kamasına göndererek), varsayılanı saklayabilir (2,0)
. Bir atom karakterin tepesine çarparsa, iki yeni atom kenarlara gönderilir. Kütleleri, gelen kütlenin depolanan kütle ile bölünmesiyle belirlenir (yani varsayılan olarak yarıya iner) - soldaki atom bu değeri alır ve sağdaki atom kütlenin kalanını alır (yani kütle fisyonda korunur) . Her iki giden atom da gelen enerji eksi değerine sahip olacaktır.depolanan enerji. Bu, aritmetik için fisyon reaktörlerini kullanabileceğimiz anlamına gelir - hem çıkarma hem de bölme için. Bir fisyon reaktörü bölgeden vurulursa, atom basitçe çapraz olarak yansıtılır ve sonra karakterin tepe yönünde hareket eder.
Füzyon reaktörlerinden herhangi biri YA{}
(yukarıdaki kodun kullandığı Y
ve {
). İşlevleri benzer: bir atom depolayabilirler (varsayılan (1,0)
) ve apeksten vurulduğunda iki yeni atom yanlara gönderilir. Bununla birlikte, bu durumda iki atom aynı olacaktır, her zaman gelen enerjiyi korur ve gelen kütleyi depolanan kütle ile çarpın. Yani, varsayılan olarak, füzyon reaktörü sadece tepesine çarpan herhangi bir atomu kopyalar. Yanlardan vurulduğunda, füzyon reaktörleri biraz daha karmaşıktır: Atom ayrıcaBir atom diğer tarafa çarpıncaya kadar (diğer bellekten bağımsız olarak) depolanır. Bu olduğunda, kütlesi ve enerjisi iki eski atomun toplamı olan tepe yönünde yeni bir atom serbest bırakılır. Eşleşen bir atom karşı tarafa ulaşmadan önce yeni bir atom aynı tarafa vurursa, eski atomun üzerine yazılır. Ekleme ve çarpma işlemlerini gerçekleştirmek için füzyon reaktörleri kullanılabilir.
Ben yolumdan almak istiyorum başka basit bileşenidir [
ve ]
hangi basitçe sağa atomun yönünü ayarlamak ve (ne olursa olsun, gelen yönü) sırasıyla, sol. Dikey eşdeğerler M
(aşağı) ve W
(yukarı) olmakla birlikte, atoi
kod için kullanılmazlar . UDLR
ayrıca WM][
ilk atomlarını serbest bıraktıktan sonra da etki ederler.
Neyse, oradaki koda bakalım. Program 5 atomla başlar:
R
Ve L
altta sadece ile (kütle artışı elde +
) olmak (10,0)
ve daha sonra, sırasıyla bir fizyon ve bir füzyon reaktöründe saklanır. Temel 10 girişini ayrıştırmak için bu reaktörleri kullanacağız.
L
Sağ üst köşede kütlesi (düşülmesi alır _
olmak için) (0,0)
ve bir füzyon reaktöründe yan depolanır Y
. Bu okuduğumuz sayının kaydını tutmak içindir - sayıları okudukça kademeli olarak arttırıp çoğaltacağız.
R
Üst sol köşede karakteri yasasında yapılacak kitlesel setini alır 0
ile (48) '0
daha sonra kütle ve enerji ile takas edilir @
ve son olarak kitle ile bir kez artış +
vermek (1,48)
. Daha sonra, çapraz aynalarla yönlendirilir \
ve /
bir fisyon reaktöründe depolanır. 48
ASCII girişini basamakların gerçek değerlerine dönüştürmek için for çıkarma'yı kullanacağız . Ayrıca 1
bölünmeyi engellemek için kütleyi artırmak zorunda kaldık 0
.
- Son olarak,
U
sol alt köşedeki aslında her şeyi harekete geçiren şeydir ve başlangıçta yalnızca kontrol akışı için kullanılır.
Sağa yönlendirildikten sonra, kontrol atomu vurur ?
. Bu giriş bileşenidir. Bir karakter okur ve atomun kütlesini okunan ASCII değerine ve enerjiye ayarlar 0
. Bunun yerine EOF'ye çarparsak, enerji ayarlanacaktır 1
.
Atom devam eder ve sonra vurur %
. Bu bir ayna anahtarı. Pozitif olmayan enerji için bu bir /
ayna gibi davranır . Ancak pozitif enerji için bir gibi davranır \
(ve aynı zamanda enerjiyi 1 oranında azaltır). Böylece karakterleri okurken, atom yukarı doğru yansır ve karakteri işleyebiliriz. Ancak girdiyle işimiz bittiğinde, atom aşağıya doğru yansıyacak ve sonucu almak için farklı bir mantık uygulayabiliriz. Bilginize, karşıt bileşen &
.
Şimdilik hareket eden bir atomumuz var. Her karakter için yapmak istediğimiz rakam değerini okumak, bunu toplam toplamımıza eklemek ve daha sonra bir sonraki haneye hazırlanmak için toplam 10'la çarpmak.
Karakter atomu önce (varsayılan) bir füzyon reaktörüne isabet eder Y
. Bu, atomu böler ve soldaki kopyayı giriş bileşenine geri dönüp bir sonraki karakteri okumak için kontrol atomu olarak kullanırız. Doğru olan kopya işlenecek. Karakteri okuduğumuz durumu düşünün 3
. Atomumuz olacak (51,0)
. Kütle ve enerjiyi değiştiririz @
, böylece bir sonraki fisyon reaktörünün çıkarılmasını kullanabiliriz. Reaktör 48
enerjiyi çıkarır (kütleyi değiştirmeden), bu yüzden iki kopyasını gönderir (0,3)
- enerji şimdi okuduğumuz rakama karşılık gelir. Devam eden kopya basitçe atılır ;
(gelen tüm atomları sadece yok eden bir bileşen). Devam eden kopya ile çalışmaya devam edeceğiz. Yolunu yol boyunca izlemeniz gerekir/
ve \
biraz aynalar.
@
Sadece tekrar füzyon reaktör takasları kütle ve enerji önce, ekleyeceğiz şekilde (3,0)
bizim değişen toplama Y
. Bu nedenle toplam çalışmanın kendisinin daima 0
enerjisine sahip olacağını unutmayın .
Şimdi J
bir sıçrama. Yaptığı herhangi bir atomu enerjisiyle ileriye atlamak. Eğer öyleyse 0
, atom sadece düz devam ediyor. Eğer 1
bir hücreyi 2
atlayacaksa, iki hücreyi atlayacak ve böyle devam edecektir . Enerji atlamada harcanır, böylece atom daima enerji ile sona erer 0
. Akan toplamın sıfır enerjisi olduğundan, atlama şimdilik göz ardı edilir ve atom, {
kütlesini çarparak füzyon reaktörüne yönlendirilir 10
. Devam eden kopya, yeni çalışan toplam olarak reaktöre ;
geri beslenirken aşağıya doğru kopya atılır Y
.
Yukarıdakiler, EOF'ye ulaşana kadar (öncekiler yapılmadan önce yeni rakamların işlendiği komik bir boru hattı şeklinde) tekrarlamaya devam ediyor. Şimdi %
atom atomu aşağı doğru gönderecek. Fikir, (0,1)
çalışan toplam reaktöre çarpmadan önce bu atomu şimdiye çevirmektir , böylece a) toplam etkilenmez (sıfır kütle) ve b) 1
üstünden atlamak için bir enerji elde ederiz [
. Enerjiyi $
artıran enerjiyle kolayca ilgilenebiliriz .
Mesele şu ki ?
, EOF'a çarptığınızda kütleyi sıfırlamamaktadır, bu yüzden kütle hala en son okunan karakter olacaktır ve enerji olacaktır 0
(çünkü geri %
çekilmiştir ). Bu yüzden o kütleden kurtulmak istiyoruz. Bunu yapmak için tekrar kütle ve enerjiyi değiştiriyoruz .1
0
@
Ben bu bölümü bitiriyor önce bir daha bileşeni uygulamaya koyması gerekmektedir: Z
. Bu aslında %
veya ile aynıdır &
. Aradaki fark, pozitif enerji atomlarının doğrudan enerjiden geçmesine izin vermesidir (enerjiyi azaltırken) ve pozitif enerji içermeyen atomları 90 derece sola saptırmasıdır. Bunu, bir atomun enerjisini, Z
tekrar tekrar ve içinden geçirerek elimine etmek için kullanabiliriz - enerji biter bitmez, atom saptırılır ve döngüyü terk eder. Bu şudur:
/ \
[Z/
enerji sıfır olduğunda atomun yukarı doğru hareket edeceği yer. Bu deseni programın diğer bölümlerinde bir şekilde veya birkaç kez kullanacağım.
Atomu bu küçük döngü bırakır Bu yüzden, bunun olacak (1,0)
ve takas (0,1)
ile @
giriş nihai sonucu serbest bırakmak için füzyon reaktörü isabet önce. Bununla birlikte, toplam çalışma 10'luk bir oranla kapalı olacaktır, çünkü zaten geçici olarak başka bir rakam için çarptık.
Şimdi enerji ile 1
, bu atom atlayacak [
ve içine atlayacaktır /
. Bu, onu 10'a bölmek ve yabancı çarpımımızı düzeltmek için hazırladığımız bir fisyon reaktörüne saptırıyor. Yine, yarısını atar ;
ve diğerini çıktı olarak tutarız (burada O
karşılık gelen karakteri basar ve atomu yok eder - burada tam programda atomu kullanıyoruz).
itoa
/ \
input -> [{/\ ;@
@\ <\
$ ;}++ +++++++L
%@A{/
M \@+>/
~ @
SNR'0YK
\ A!/
Tabii ki, sonucu tekrar bir dizgeye dönüştürmek ve yazdırmak zorundayız. Bu kısım bunun için var. Bu, girişin 10 ya da öylesine önce gelmediğini, ancak tam programda kolayca verildiğini varsayar. Bu bit tam programın altında bulunabilir.
Bu kod yeni ve çok güçlü bir Fission bileşeni sunar: yığın K
. Yığın başlangıçta boştur. Negatif olmayan enerjili bir atom yığına çarptığında, atom basitçe yığının üzerine itilir. Negatif enerjili bir atom yığına çarptığında, kütlesi ve enerjisi yığının tepesindeki atom tarafından değiştirilir (bu şekilde atılır). Yığın boş olsa da, atomun yönü tersine çevrilir ve enerjisi pozitif olur (yani çarpılır -1
).
Tamam, asıl koda dönelim. itoa
Snippet'in fikri, bir sonraki yinelemede girişi 10'a bölerken bir sonraki haneyi bulmak için giriş modülünü 10 tekrar tekrar almaktır. Bu, tüm basamakları ters sırayla verir (en az anlamlıdan en anlamlıya). Siparişi düzeltmek için, tüm rakamları bir yığına iteriz ve sonunda bunları yazdırmak için birer birer açılır.
Kodun üst yarısı rakam hesaplamasını yapar: L
artılarla birlikte 10'a bir fizyon ve füzyon reaktörüne klonladığımız ve beslediğimiz bir 10 verir, böylelikle 10 ile çarpabilir ve çarpabiliriz. Döngü esasen [
sol üst köşeden sonra başlar . Mevcut değer bölünür: bir kopya 10'a bölünür, daha sonra 10'la çarpılır ve bir fisyon reaktöründe saklanır, daha sonra tepedeki diğer kopyaya çarpılır. Bu hesaplar i % 10
olarak i - ((i/10) * 10)
. Ayrıca A
, ara sonucu bölme işleminden sonra ve çarpmadan önce i / 10
bölerek bir sonraki yinelemeye besleyebileceğimizi unutmayın .
%
Çünkü bu yineleme değişkeni 0 değerini tatmin edecek bir kez döngü iptal veya daha az bir do-süre döngü, bu kod olur baskı için bile çalışma 0
(öncü sıfır, aksi yaratmadan). Döngüyü terk ettikten sonra yığını boşaltmak ve rakamları yazdırmak istiyoruz. S
tersi olduğundan Z
, gelen bir atomu pozitif olmayan enerjiyle sağa doğru 90 derece sapacak bir anahtardır. Gelen kenar üzerinde atomu aslında hareket Böylece S
düz K
bir basamak kapalı pop (not ~
gelen atomu enerjisine sahip olduğunu olan sağlar -1
). Bu rakam, 48
karşılık gelen rakam karakterinin ASCII kodunu almak için artırılır . A
İle bir kopya yazdırmak için haneyi böler!
ve diğer kopyayı bir Y
sonraki basamak için reaktöre geri besleyin . Yazdırılan kopya, yığın için bir sonraki tetikleyici olarak kullanılır (aynaların M
, soldan vurmak için kenarın çevresine de gönderdiğini unutmayın ).
Yığın boşaldığında, K
irade atomu yansıtacak ve enerjisini +1
doğrudan içinden geçecek şekilde dönüştürecektir S
. N
yeni bir satır yazdırır (sadece düzgün olduğu için :)). Ve sonra atom R'0
, tarafına gelecek şekilde tekrar üzerinden gider Y
. Çevresinde daha fazla atom olmadığından, bu asla serbest bırakılmayacak ve program sona erecektir.
Fisyon Numarasını Hesaplamak: Çerçeve
Programın asıl etine gidelim. Kod, temelde Mathematica referans uygulamamın bir limanıdır:
fission[n_] := If[
(div =
SelectFirst[
Reverse@Divisors[2 n],
(OddQ@# == IntegerQ[n/#]
&& n/# > (# - 1)/2) &
]
) == 1,
1,
1 + Total[fission /@ (Range@div + n/div - (div + 1)/2)]
]
nerede div
maksimal bölümünde tamsayılar sayısıdır.
Başlıca farklar, Fission'ta yarı-tamsayı değerleriyle baş edemememizdir, bu yüzden iki ile çarpılan birçok şey yapıyorum ve Fission'ta tekrarlama yok. Bu soruna geçici bir çözüm bulmak için, bir bölümdeki tüm tamsayıları daha sonra işlenecek bir kuyrukta zorluyorum. İşlediğimiz her sayı için bir sayacı birer birer artırırız ve sıra boşalınca sayacı serbest bırakır ve yazdırılması için göndeririz. (Bir sıra, FIFO sırasına göre Q
tam olarak aynı şekilde çalışır K
.)
İşte bu kavram için bir çerçeve:
+--- input goes in here
v
SQS ---> compute div from n D /8/
~4X | /~KSA /
3 +-----------> { +X
initial trigger ---> W 6~@/ \/
4
W ^ /
| 3
^ generate range |
| from n and div <-+----- S6
| -then-
+---- release new trigger
En önemli yeni bileşenler rakamlardır. Bunlar teleporterler. Aynı sayıdaki tüm telekomünikasyon şirketleri birbirine aittir. Bir atom herhangi teleporter çarptığında hemen olmak aynı grupta, sonraki teleporter hareket edecek yanındaki tepeden aşağıya doğru sıralanmıştır, her zamanki soldan sağa belirlenir. Bunlar gerekli değildir, ancak yerleşim düzenine yardımcı olurlar (ve dolayısıyla biraz golf oynarlar). Ayrıca X
bir atomu çoğaltan, bir kopyasını dümdüz ileri geri diğeri gönderen de var.
Şimdiye dek çerçevenin çoğunu kendiniz çözebilirsiniz. Sol üst köşede hala işlenecek değerler kuyruğu vardır ve birer birer serbest bırakır n
. Bir kopyası n
alt tarafa gönderilir, çünkü aralığı hesaplarken ihtiyacımız vardır, diğer kopya ise hesaplayan üstteki bloğa girer div
(bu kodun en büyük kısmıdır). Bir kez div
hesaplandıktan sonra kopyalanır - bir kopya, sağ üst köşede bulunan bir sayacı arttırır K
. Diğer kopya alt tarafa gönderilir. Olursa div
, 1
derhal yukarı doğru saptırır ve herhangi bir yeni değer belirtmeden, bir sonraki yineleme için tetikleyici olarak kullanırız. Aksi takdirde kullandığımız div
ven
alt kısımdaki bölümde yeni aralığı (yani, sıraya konan karşılık gelen kütlelere sahip bir atom akışı) üretin ve ardından aralık tamamlandıktan sonra yeni bir tetikleyici serbest bırakın.
Kuyruk boşaldığında, tetikleyici doğrudan içinden geçerek S
ve sağ üst köşede yeniden beliren şekilde yansıtılır, burada sayacı (son sonucu) A
bırakıp, sonradan itoa
üzerinden iletilir 8
.
Fisyon Sayısının Hesaplanması: Döngü Gövdesi
Yani geriye kalan tek şey div
, aralığı hesaplayan ve üreten iki bölümdür . Hesaplama div
bu kısım:
;
{+L /$ \/\/\/\/\/ 5/ @ [~ &@[S\/ \
/A@[ %5 /; & K } [S/
\ A$@S S\/ \/\/\/ \/>\ /S]@A / \
X X /> \ +\ A\ / \ /
/ ~A\; +;\ /@
ZX [K / {/ / @ @ } \ X @
\AS </ \V / }SZS S/
X ;;@\ /;X /> \ ; X X
\@+ >/ }$S SZS\+; //\V
/ \\ /\; X X @ @ \~K{
\0X / /~/V\V / 0W//
\ Z [K \ //\
\ /\7\A /;7/\/
Muhtemelen şimdi biraz sabırla kendin için bunu çözecek kadar gördün. Üst düzey dağılım şudur: İlk 12 sütun ya da öylesine bir bölenler akışı oluşturur 2n
. Sonraki 10 sütun tatmin etmeyenleri filtrelemektedir OddQ@# == IntegerQ[n/#]
. Sonraki 8 sütun tatmin etmeyenleri filtreliyor n/# > (# - 1)/2)
. Sonunda, tüm geçerli bölenleri bir yığına iteriz ve bir kez yaptığımızda, tüm yığını bir füzyon reaktörüne boşaltırız (son / en büyük bölenin üzerine yazar) ve sonucu serbest bırakırız, ardından enerjisini ortadan kaldırırız (ki bu - eşitsizliği kontrol etmekten sıfır).
Gerçekten hiçbir şey yapmayan bir sürü çılgın yol var. Ağırlıklı olarak, \/\/\/\/
tepedeki delilik ( 5
s aynı zamanda bunun bir parçasıdır) ve tabanın etrafındaki bir yol ( 7
s içinden geçer ). Bazı zorlu yarış koşullarıyla başa çıkmak için bunları eklemek zorunda kaldım. Fisyon bir gecikme bileşeni kullanabilir ...
Yeni aralığı üreten kod şudur n
ve div
şudur:
/MJ $$\
4}K~@\ &] @\ 3/\
\{ }$A/1 2 }Y~K <\
\@ / \@<+@^ 1;}++@
2 ; \ /
İlk önce hesaplıyoruz n/div - (div + 1)/2
(her iki terim de aynı sonucu veriyor) ve daha sonra saklıyoruz. Sonra div
aşağıdan bir aralık oluştururuz 1
ve saklanan değeri her birine ekleriz.
Biri şudur: iki yeni ortak Bunların ikisi de desenler, ben söz gerektiğini vardır SX
ya ZX
altına (veya döndürülmüş sürümleri) dan isabet. Bu, bir kopyanın doğrudan ilerlemesini istiyorsanız (bir füzyon reaktörünün çıkışlarını yönlendirmek bazen hantal olabilir), bir atomu kopyalamanın güzel bir yoludur. S
Ya da Z
döner içine atomu X
ve daha sonra yayılma orijinal yönde yansıtılan kopya geri döner.
Diğer desen
[K
\A --> output
Eğer herhangi bir değeri K
saklarsak K
, üstten negatif enerji ile vurarak tekrar tekrar alabiliriz . A
Bizim ilgilendiğimiz değerini kopyalar ve ona ihtiyacımız sonraki sefer için yığının üzerine doğru geri kopyalamak neyi gönderir.
Eh, bu oldukça zorluydu ... ama bunu gerçekten yaşarsan, umarım Fission i͝s̢̘̗̗ ͢i̟nç̮̩r̸̭̬̱͔e̟̹̟̜͟d̙i̠͙͎̖͓̯b̘̠͎̭̰̼l̶̪̙̮̥̮y̠̠͎̺͜ ͚̬̮f̟͞u̱̦̰͍n͍ ̜̠̙t̸̳̩̝o ̫͉̙͠p̯̱̭͙̜͙͞ŕ̮͓̜o̢̙̣̭g̩̼̣̝r̤͍͔̘̟ͅa̪̜͇m̳̭͔̤̞ͅ ̜̠̙i͜n̳̯̗̳͇̹.̫̞̲̞̜̳ olduğunu biliyorsundur.