Kanıtlanmış optimal!
((([()][()][()])))
Çevrimiçi deneyin!
açıklama
Beyin Flak, Beyin Flueue, Miniflak ve Fλak
([()][()][()]) Push -3
( ) Copy
( ) Copy
Bu yazdırır:
-3
-3
-3
(Sonunda yeni bir satır var)
Brain-Flak Klasik
Brain-Flak Classic, Brain-Flak'ın orjinal versiyonudur ve modern Brain-Flak'tan bazı önemli farklılıklar göstermektedir. BFC'de [...]
, olumsuzlamak yerine içeriğini yazdırır.
[()] Print 1
[()] Print 1
[()] Print 1
( ) Push 3
( ) Push 3
( ) Push 3
İşlemin sonunda yığının ( 3 3 3
) içeriği yazdırılır.
Bu yazdırır:
1
1
1
3
3
3
(Sonunda yeni bir satır var)
Flakcats
Flakcats diğer 4 faştan oldukça farklı ve bunun Flakcats'de işe yaramasına şaşırdım. Buradaki üç operatör, Brain-Flak'ın kullandıklarıyla neredeyse aynı.
Bu özel programda Flakcats arasındaki ana fark, (...)
Flakcats'deki ([{}]...)
Brain-Flak ile aynı olan operatördür . Ancak bu bizim için bir fark yaratmaz çünkü sıfırları toplar ve böylece Brain-Flak'ın yaptığı gibi çalışır.
İşte Brian-Flak'a derlenmiş program:
([{}]([{}]([{}][()][()][()])))
Bu yazdırır:
-3
-3
-3
(Sonunda yeni bir satır var)
İçinde En iyilik Kanıtı Beyin-Flak ve Miniflak
Bu resmi bir kanıt değil, daha titiz yapılması için genişletilmesi gereken gayri resmi bir kanıttır.
Brain-Flak programlarının dengeli bir dize olması ve program uzunluğunun 3 katı olması gerektiği kısıtlamaları nedeniyle, herhangi bir geçerli gönderim uzunluğu 6 katı olmalıdır. Bu, 18'den küçük herhangi bir çözümün uzunluğu 12 olması gerektiği anlamına gelir.
Çıktıların son satırındaki yeni satır nedeniyle, yığının son yüksekliği üçün katı olmalı, yoksa çıktı üzerindeki kısıtlamaları kıracağız.
Herhangi bir geçerli uzunluk uzunluğu (12), 2 tip paranteze sahip olmalıdır (farklı karakterlerin sayısındaki kısıtlamaları daha az kıracak ve daha fazlası, 12 karakterden fazla anlamına gelecektir). Program çıktı ürettiğinden, zorlamalıdır.
Bu bize diğer kaşlı ayraçlarımızı seçmemizi sağlar. Seçenekler şunlardır:
<...>/<>
Bu başarısız olur, çünkü sıfırdan farklı bir sayı oluşturmak için "değer" üretmemiz gerekir, ()
ikiden fazla itmeyi imkansız kılan bir tane oluşturmaktan vazgeçmeliyiz .
[...]/[]
Bu, son başarısızlığın aynı nedeni ile başarısız olur. Köşeli parantezler değer kazanmakta çok kötü. []
Monad olabilir değer yaratmak ama biz ilk sayılarını itmek gerekir ve biz daha sonra yeterli parens üç kez itmek arta kalan yok.
{...}/{}
Bu umut verici, bir döngü yaratabilir ve ()
birçok kez basmak için bir tane kullanabiliriz , ancak ne yazık ki mümkün değil.
Döngünün sona ermesi için yığında bir noktada sıfır olması gerekir ve doğru çıktının elde edilebilmesi için programın sonunda yığında sıfırdan başka bir şey olmalı. Döngü sonunda ne []
ne <>
de sıfır bulunduğundan, yığının altından örtük bir sıfır olmalıdır . Bu, döngünün yığına herhangi bir yeni sayı ekleyemeyeceği anlamına gelir, bu da onu işe yaramaz hale getirir.
Ayraç seçimlerinden hiçbiri 12 uzunluğunda bir program oluşturamayacağından, hiçbiri mevcut olamaz.
Miniflak, Brain-Flak'ın bir alt kümesi olduğundan, daha kısa bir Miniflak programı da daha kısa bir Brain-Flak programı olacaktır ve dolayısıyla mevcut değildir.
Beyin-Flueue Brain-Flak merkezli bir şaka dilidir. İkisi birbirine çok benziyor, tercümanları her yerde aynı, iki satır. İkisi arasındaki fark, adından da anlaşılacağı gibi Brain-Flueue verilerini sıralarda saklarken Brain-Flak verilerini yığınlarda saklar.
Başlamak için, Brain-Flak tarafından yaratılan program boyutunda aynı kısıtlamalara sahibiz, bu nedenle 12 boyutunda bir program arıyoruz. Ayrıca, (...)
herhangi bir çıktı ya da başka bir çift oluşturmak için bir ihtiyacımız olacak . <>
ve []
çiftleri onlar Beyin-Flak çalışmaz aynı nedenden dolayı Beyin Flueue çalışmaz.
Artık programımızın karakterlerden oluşması gerektiğini biliyoruz ((())){{{}}}
.
Önceki kanıtlarda kullanılan aynı yöntemlerle, final programında bir döngü olması gerektiğini gösterebiliriz.
İşte ispatların farklı olduğu yer burası çünkü Brain-Baca, programların sıradaki değerleri içeren bir döngüden çıkmasını istiflemekten ziyade sıralar boyunca işler.
Döngüden çıkmak için sıradaki sıfıra ihtiyacımız olacak (ya da boş bir sıra, ancak sıra boşsa Brain-Flak ile aynı problemi alırız) bu, program ({})
oluşturmak için programımızı açmak zorunda kalacağımız anlamına gelir . sıfır. Gerekli sayıda öğeyi kuyruğa itmek için döngünün içine doğru bir itmeye ihtiyacımız olacak. Ayrıca döngüden önce sıfır olmayan bir sayıya basmamız gerekir; böylece döngüye hiç girebiliriz; bu bize asgari olarak mal olacak (())
. Şimdi sahip olduğumuzdan daha fazla ebeveyn kullandık.
Dolayısıyla, 12 baytlık bir görevi yerine getirmek için Beyin-Baca programı yoktur ve ayrıca programımız en uygunudur.
Aşağıdaki çözüm Flakcats ve Brain-Flak Classic'te en uygunudur.
((([][][])))
açıklama
[][][] -3
((( ))) push 3 times
Alternatif 24 byte Brain-Flak çözümleri
(<((<((<(())>)())>)())>)
Çevrimiçi deneyin!
((<((<((<>)())>)())>)())
Çevrimiçi deneyin!
((((((()()()){}){}){})))
Çevrimiçi deneyin!