4P.a+80pa2*&wdt,kd&w74*,.ok@
Çevrimiçi deneyin!
Yazdırılamayan karakter 0x18.
açıklama
Her zamanki "
temelli Fungeoid sorguları ile ilgili sorun, kaynak kodun tamamını tekrar edersek, o zaman ayrıca ek alıyoruz "
ve dizgenin artık kaynak kodunun tamamını kapsamaması . Var olan cevabın g
bunun yerine hile-y yaklaşımını kullandığını düşünüyorum.
Bu cevap "
temelli yaklaşımı kullanır, ancak bir "
kaynağa dahil etmek yerine çalışma zamanında programa yazarız. Bu şekilde, "
programın ne sıklıkta tekrar edildiğine bakılmaksızın yalnızca bir kişi olacak (çünkü programın boyutundan bağımsız olarak, yalnızca belirli bir koordinata yazıyoruz).
Genel fikir, o zaman yığında bütün kaynak kodun bir gösterimini yaratmamızdır, ancak sadece kodun büyüklüğü tarafından belirlenen döngünün uzunluğu ile karakterlerin ilk 29'unda (yani program uzunluğu) dolaşır. Bu nedenle, gerçekte rasgele karakterler (satır satırları hariç) ekleyebiliriz @
ve sonuç her zaman temel programın döngüsel bir tekrarıdır, kaynaktan bir karakter daha uzun olacaktır.
4P Push 4! = 24. This is the code point of the unprintable, which we're
using as a placeholder for the quote.
.a+ Duplicate it and add 10, to get 34 = '"'.
80p Write '"' to cell (8,0), i.e. where the first unprintable is.
Placeholder, becomes " by the time we get here, and pushes the code
points of the entire program to the stack. However, since we're already
a good bit into the program, the order will be messed up: the bottom
of the stack starts at the 24 (the unprintable) followed by all
characters after it (including those from extraneous repetitions). Then
on top we have the characters that come in front of the `"`.
So if the initial program has structure AB, then any valid program has
the form ABC (where C is a cyclic repetition of the initial program),
and the stack ends up holding BCA. We don't care about C, except to
determine how big the program is. So the first thing we need to do is
bring B to the top, so that we've got the initial program on top of
the stack:
a2* Push 10*2 = 20.
&w Run the following section 21 times, which is the length of B.
dt, Pull up the value at the bottom of the stack.
k End of loop.
d&w Run the following section D+1 times, where D is the length of ABC.
74* Push 28, one less than the number of characters in AB.
, Pull up the 29th stack element, which is the next character to print.
.o Print a copy of that character.
k End of loop.
@ Terminate the program.