Befunge 2 boyutlu ezoterik bir programlama dilidir. Temel fikir, (tek karakterlik) komutların 2 boyutlu bir ızgara üzerine yerleştirilmesidir. Kontrol akışı ızgara boyunca yürür, üzerinden geçtiği komutları uygular ve bir oka ( >^<v
) bastığında yön değiştirir . Komutlar yığın tabanlıdır; bu listeye bakın . Ayrıca bkz . Http://esolangs.org/wiki/Befunge .
Befunge-98 için özellikler mevcuttur.
Sorun
Befunge programını daha kompakt bir temsile dönüştüren bir program yazın. Örneğin, aşağıdaki program yazdırılır 0
:
> 0 v
> @ .
^ <
Bu durumda, alanların satırlarını kaldırarak programın davranışını değiştirmeden sıkıştırılabilir,
>0v
>@.
^ <
Daha karmaşık dönüşümler, komut dizilerini döndürebilir veya yansıtabilir ve programı sıkıştırmak için gereksiz kontrol akışı komutlarını ortadan kaldırabilir. Örneğin, bu programla:
>12345v
6
v....7<
.
.
.
@
programın sonunu deliğe sokabilirsiniz:
>12345v
>...@ 6
^....7<
İlk örnek için, mümkün olan en kompakt program
>0.@
Çıktı programı aynı sonucu verdiği sürece herhangi bir dönüşümü kullanabilirsiniz.
Giriş programları
Giriş programları geçerli Befunge-98 programlarıdır.
Girdi programının deterministik olduğunu varsayabilirsiniz. Yani, harici durumu okuyan komutları kullanmaz: kullanıcı giriş komutları &
ve ~
rasgeleleştirici ?
ve kendi kendini değiştiren kod komutları p
ve g
.
Giriş programının sona erdiğini varsayabilirsiniz.
puanlama
Bu bir kod golf değil, kod golf yapan bir program yazmak için bir problemdir.
Giriş, bir dizi test vakasıdır (yukarıdaki giriş kısıtlamalarını karşılayan Befunge programları). Toplam puan, test senaryolarının puanlarının toplamıdır.
Her test vakası için puan
Skor, çıktı programındaki boş olmayan hücrelerin dışbükey gövdesinin alanıdır; burada her hücre, dört köşesi Kartezyen düzlemde kafes noktaları olan bir kare olarak ele alınır. Örneğin,
> v
@ <
9,5 puan alır.
Programınız belirli bir girişte makul bir süre ve bellekte sona ermezse, puan giriş programının sonucudur. (Bunun nedeni, programınız zamanında sona ermezse, giriş programını değiştirmeden çıkaran zaman sınırlayıcı bir sarmalayıcı ekleyebilmenizdir.)
Sınama programı, programınızla işlendikten sonra farklı bir sonuca sahipse (veya sonlandırılamazsa), puan, giriş programının puanı artı 100 puanlık bir cezadır.
.
çıkış tamsayı anlamına gelir, ancak sol üst köşeden başlıyorsanız, çıktıda tamsayı bulunmaz.
.
bir tamsayı verir. Ama aynı zamanda, yığın üzerinde yeterli parametre olmadığında, befunge bunun yerine yeterli miktarda sıfır olduğunu iddia eder. Yani ikinci örnek çıktı 000
.
g
ve p
izin verilmiyor (üzgünüm, bunları unuttum; düzenlenmiş).