Befunge - 37 x 5 = 185 38 x 3 = 114 karakter
Befunge'nin kayan nokta desteği olmadığı için bu tam sayılarla sınırlıdır.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
açıklama
Befunge'nin en büyük ayırt edici özelliği, çoğu dil gibi doğrusal bir talimat kümesi olmak yerine; kontrolün herhangi bir yönde akabildiği tek karakterli talimatların 2d ızgarasıdır.
Birincisi &
sadece ilk sayıyı girer. v
Ve >
daha sonra ikinci satırda ana yola yönlendirme kontrolü.
~:0`!#v_
Bu, bir karakter ( ~
) girer , çoğaltır ( :
), yığına sıfır iter ( 0
), ilk iki öğeyi `
açar ve ikincinin birinciden büyük olup olmadığını belirler ( şaşırtmak için `` ` backticks kodunu girin. ), üst öğenin ( !
) doğruluğunu tersine çevirir , sonra sıfırsa sağa, aksi takdirde aşağıya doğru gider ( #v_
).
Temel olarak, girdinin artık girişi -1
temsil edip etmediğini kontrol eder.
># $ .# @
Giriş daha -1
sonra yinelenen giriş değeri atılır ( $
), yığının üst kısmı bir tamsayı ( .
) olarak çıkar ve program durdurulur ( @
).
:" "`! #v_
Aksi takdirde, girişin bir boşluktan küçük veya ona eşit olup olmadığını belirlemek için benzer bir işlem tekrarlanır. Eğer bir boşluksa, kontrol aşağı iner, aksi takdirde kontrol kafaları sağa.
^ ># $ .# @#<
Bir boşluksa sola ( <
) yönlendirilir ; program durdurma ( @
), çıkış ( .
) ve sağ yönlendirme ( >
) kullanılarak tümü atlanır #
; ancak atılan alanı yığından kaldırmak için yürütülür. Sonunda bir sonraki çalıştırmaya ( ^
) başlamak için yönlendirilir .
:","`#^_
Aynı süreci ise üzerinde bölmek için kullanılan bir boşluk olmasaydı [+, *]
ya da [-, \]
sağa ve yukarı sırasıyla gidiyor.
>~ "*"`#v_&*>
^ >&+
Çünkü [+, *]
a +
veya a olup olmadığını belirlemek için tekrar bölünür *
. Eğer +
aşağı yönlendirilirse, bir sonraki sayı girilir ( &
) ve eklenir ( +
), kontrol daha sonra etrafına sarılır ve bir sonraki karakter için ana yola yönlendirilir. Eğer *
öyleyse ( &
) girer ve çarpar ( *
) sonra doğrudan etrafı sarar.
/& _ #`&# "-"$# -#<
Çünkü [-, \]
sağdan sola başlar. #
'İlk bir yol olacak şekilde onlara karakteri atlama s "-"`_
bunun ise sadece belirler -
ya da /
. Eğer öyleyse, /
input ( &
) ve divide ( /
) için sola devam eder . Eğer öyleyse -
sağa dönüyorsa, karakterlerin atlanması için tekrar atlanır, böylece &"-"$-
sayı girilir ( &
) -
, yığına itilen karakterin ardından atılır ( "-"$
) ve ardından çıkarma ( -
) hesaplanır . Kontrol daha sonra ana yola geri yönlendirilir.