ab*1'3:*2+*0pnd3*:::::::::::::::1'3:*3+*0p1'3:*5+*0p1'3:*d+*0p1'3:*f+*0p1'3:*fa++*0p1'3:*fd++*0p1'4'3*f-*0p1'4'3*7-*0p1'4'3*5-*0p6:*:*4-1p6:*:*4+1p6:*:*8+1p6:*:*a+1p6:*:*8+2p6:*:*f1++2p6:*:*f3++2pn75*1-:1'3:*4+*0p6:*:*f2++2pnaa*:::::::::::::::::1'3:*6+*0p1'3:*7+*0p1'3:*f1++*0p1'3:*f2++*0p1'3:*fe++*0p1'3:*ff++*0p1'4'3*e-*0p1'4'3*d-*0p1'4'3*4-*0p1'4'3*3-*0p6:*:*3-1p6:*:*2-1p6:*:*b+1p6:*:*c+1p6:*:*9+2p6:*:*a+2p6:*:*f4++2p6:*:*f5++2pn67*::::::::::1'3:*8+*0p1'3:*a+*0p1'3:*f4++*0p1'3:*f5++*0p1'4'3*f-5-*0p1'4'3*c-*0p1'4'3*2-*0p6:*:*1-1p6:*:*d+1p6:*:*b+2p6:*:*f6++2pna5*::1'3:*9+*0p1'3:*f3++*0p6:*:*1pn68*:::::1'3:*b+*0p1'3:*f8++*0p1'4'3*f-2-*0p1'4'3*9-*0p1'4'3*1+*0p6:*:*f7++2pne8*:::::::1'3:*c+*0p1'3:*f9++*0p1'4'3*f-1-*0p1'4'3*8-*0p1'4'3*2+*0p6:*:*f2++1p6:*:*f+2p6:*:*f8++2pnf4*:1'3:*e+*0p1'4'3*3+*2pn77*::::1'3:*f6++*0p1'4'3*f-4-*0p6:*:*f1++1p6:*:*c+2p6:*:*e+2pnb4*1-::1'3:*f7++*0p6:*:*f+1p6:*:*d+2pnf4*1-::1'3:*fb++*0p6:*:*7+2p1'3:*1+*2pnf4*2-1'3:*fc++*0pn95*:::1'4'3*f-3-*0p1'4'3*a-*0p1'4'3**0p6:*:*1+1pn87*1'4'3*b-*0pnac*2-:1'4'3*6-*0p1'4'3*3+*0pnf4*3-1'4'3*1-*0pn88*2-6:*:*5-1pnc9*1-6:*:*2+1pnb4*:6:*:*3+1p6:*:*6+1pn88*6:*:*9+1pnd4*1-6:*:*e+1pnc8*2-:1'3:**1p1'3:**2pnd7*2+6:*:*4+2pn75*6:*:*6+2pn>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ab*1'3:*2+*0pnd3*:::::::::::::::1'3:*3+*0p1'3:*5+*0p1'3:*d+*0p1'3:*f+*0p1'3:*fa++*0p1'3:*fd++*0p1'4'3*f-*0p1'4'3*7-*0p1'4'3*5-*0p6:*:*4-1p6:*:*4+1p6:*:*8+1p6:*:*a+1p6:*:*8+2p6:*:*f1++2p6:*:*f3++2pn75*1-:1'3:*4+*0p6:*:*f2++2pnaa*:::::::::::::::::1'3:*6+*0p1'3:*7+*0p1'3:*f1++*0p1'3:*f2++*0p1'3:*fe++*0p1'3:*ff++*0p1'4'3*e-*0p1'4'3*d-*0p1'4'3*4-*0p1'4'3*3-*0p6:*:*3-1p6:*:*2-1p6:*:*b+1p6:*:*c+1p6:*:*9+2p6:*:*a+2p6:*:*f4++2p6:*:*f5++2pn67*::::::::::1'3:*8+*0p1'3:*a+*0p1'3:*f4++*0p1'3:*f5++*0p1'4'3*f-5-*0p1'4'3*c-*0p1'4'3*2-*0p6:*:*1-1p6:*:*d+1p6:*:*b+2p6:*:*f6++2pna5*::1'3:*9+*0p1'3:*f3++*0p6:*:*1pn68*:::::1'3:*b+*0p1'3:*f8++*0p1'4'3*f-2-*0p1'4'3*9-*0p1'4'3*1+*0p6:*:*f7++2pne8*:::::::1'3:*c+*0p1'3:*f9++*0p1'4'3*f-1-*0p1'4'3*8-*0p1'4'3*2+*0p6:*:*f2++1p6:*:*f+2p6:*:*f8++2pnf4*:1'3:*e+*0p1'4'3*3+*2pn77*::::1'3:*f6++*0p1'4'3*f-4-*0p6:*:*f1++1p6:*:*c+2p6:*:*e+2pnb4*1-::1'3:*f7++*0p6:*:*f+1p6:*:*d+2pnf4*1-::1'3:*fb++*0p6:*:*7+2p1'3:*1+*2pnf4*2-1'3:*fc++*0pn95*:::1'4'3*f-3-*0p1'4'3*a-*0p1'4'3**0p6:*:*1+1pn87*1'4'3*b-*0pnac*2-:1'4'3*6-*0p1'4'3*3+*0pnf4*3-1'4'3*1-*0pn88*2-6:*:*5-1pnc9*1-6:*:*2+1pnb4*:6:*:*3+1p6:*:*6+1pn88*6:*:*9+1pnd4*1-6:*:*e+1pnc8*2-:1'3:**1p1'3:**2pnd7*2+6:*:*4+2pn75*6:*:*6+2pn>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Çevrimiçi deneyin!
Bu bir cehennem festivali oldu.
Bu nasıl çalışır:
Program, etrafındaki bir Program B'yi birleştiren ve daha sonra kaynak baytının yarısını iki kez kaydırılan bir grup put ifadesidir.
Program aslında 1300 baytlık bir programın 2 kopyasıdır, bu nedenle tüm 1300 baytlık programın her zaman bir bütün olarak çalıştırılması sağlanır.
Daha iyi açıklama:
Her Befunge-98 quine sembolleri böyle a içermesi gerekir @
ya q
ve ,
Sorun : bu sembollerin hiçbiri beri especialy başlangıç noktası iyi olan @
ve q
anında programı sonlandırmak.
Çözüm : Kaynak koddaki bu karakterlerden kurtulun
Sorun : Nasıl?
Çözüm : Kullanımı p
(put) kaynak kodu içeren yazdırmak tek bir bayt kaymıştır ve edecektir gerekli karakterleri içerecek şekilde kaynak kodunu değiştirmek için komutları değil kullanmak g
hile komutu.
Sorun : (bunlar ne zaman sona erecek)
Bir put komutu n x y
karakteri, x-koordinatını, y-koordinatını belirleyen 3 değer çıkar , ancak bu değerlerin başlatılması yarıya bölündüğünde, başlangıç kaynak kodunda kötü karakterler yazabilir. quining için.
Çözüm : (son söz veriyorum)
Kaynak kodun 2 kopyasını kullanın, sonuncusu "doğru olanı", bu yanlışlıkla başka bir sorunu giderir, bu da ikiye bölünen bir put ifadesinin (p komutu + sabit başlatıcılar) yürütülmezse, bu, her ifadenin 2 kopyasına sahip olarak düzeltildi. Bunun çalışması için gereken son şey, kaynak kodun tamamını nasıl yarıya indirebiliriz?
Cevap :
Bu, bir dize baytının iki kopyasının neden kaydırıldığının görsel kanıtıdır == Bir bayt kaydırılan dizenin iki kopyası. Bu, kodun yarısını alabilir, bayt kaydırıp sonra iki kez yazdırabiliriz (VEYA kodun yarısını alır, bayt kaydırır, yazdırır, tekrarlar [Gerçekte olan budur])
Bu nasıl uygulanır : Kaynak 0123456789abcdef'in kaynak olduğunu varsayalım
Befunge Sözde Kodu:
0123456789abcv;;"123456789abcdef" < go this way <--
>PS'0, repeat 2x ^
PS, Yazdırma Yığını anlamına gelir (gerçek bir talimat değildir). Kaynak kodun yarısını kullanarak yığını tersine itiyoruz, ""
sonra yığını yazdırıyoruz ve sonra önünde hareket ettiğimiz '
ilk karakteri getiriyoruz ( komut veriyoruz ) ve bayt kaymasına neden olan en son yazdırıyoruz, sonra döngüyü tekrarlıyoruz ikinci kopyayı yazdırmak için bir kez daha. Ele alınacak bir teknik, kaynak içindeki sembollerdir, kaynak kodunu yürütürken yazdığımızda bu sorun yaratabilir, bunu dışarıdan ilgilenen daha fazla ifadeler ekleyerek atlattım.0
'
Bu, kodun şöyle görünmesini sağlar:
Açıklama :
Yeşil Vurgulama: Kaynağa karakter eklemeye özen gösteren kod
Gri Harfler (problar zayıf görünürlük özür dilerim): Yeşil kodla eklenen kod
Kırmızı Vurgulama: Kaynak kodun ikinci yarısının ilk karakterini Mavi alana taşıyan kod .
Mavi Vurgulama: Bkz. Kırmızı Vurgulama
Turuncu Vurgulama: @
Sarı Alana bir (sonlandırma) komutu koyarak 2 baytlık kaydırılmış kopyalar yazdıktan sonra sonlandırdığımızdan emin olan kod .
Oklar umarım kod akışının nasıl gittiğini daha net hale getirmelidir.
: İşte son sert kısım geliyor
nerede yapacağız bebekler kaynak kodu geliyor?
Kısa cevap: C # Magic
Uzun cevap: 100+ C # koduyla derlenmiş elle yapılan kod parçacıkları. Elle yaklaşık 100 sabit başlatıcı (belirli bir sayıyı istiflemeye iten bir parça kodlama kodu) elle yazdım ve daha sonra 1300 bayt Befunge çıktısına derlemek için özel bir C # programı kullandım, sonra iki kez yapıştırdım ve sonuncuyu yaptım programı.
Hala burada mısın? Okuduğunuz için teşekkürler! (veya en azından sonuna kadar kaydırma)
Umarım kötü şakaları eğlenceli ve sinir bozucu değildir.
Not: Bu koddaki hiçbir put ifadesi hile yapacak bir ag komutu oluşturmaz.
EDIT: Geliştirici araçlarını kullanarak TIO aşağıdaki Javascript kodunu kullanarak kodu doğruladım
setInterval(()=>{document.getElementById("code").value =
document.getElementById("output").value;
document.getElementById("run").click();}, 2000);