Buscando programas en un gran tablero de Boggle


25

Cada carácter en este bloque de texto de 64 por 64 ha sido elegido aleatoria y uniformemente de los 95 caracteres ASCII imprimibles .

/rq$:Zy5*g'$DeGXX2o8y "{@Cg:FR9qih}xh >5$DsF1Fs5Ao~smFp;.RJbV )U
c4\(|Sx*V$10G9xO:NjHKasem%,\9[pPm@&kTaN~HC[;9`lgqlAH(7dt0a-5}LJ[
&sifw9V-.PLRoD~F'dJYA^Q)L#h>$9h!B4b&ceKp8~HndzDm#1/ySydrf5T8[Y%4
U9>HLQ74Qf[^V9tpWrKFcFxZJ::4?z/o]3u,V[B&hB9lFYA0:rW#yql5z9.d*D}U
:M2*O9'7_HMGw_=%@hR>O+(@Dr6MIt(=/{-{4lia0Vmws32wr(fnTmT%HSo&7!uz
\KZWG&KnXh+6E+Q>%pV(<Bnm-d+p~y~]Ta"aw9)]0A_AHz\tP3&}1R^/yPPSgN?8
".7|Uj)S7-k[`yeLO~P2a?z3wiS(R-\k'?z(pVm;;D^k/q84?&7:,E*9$UQ"UbBJ
ME]&*R ,*7PDF4Tw*-;De{YeP_al.CJcJX`@V_y+>^<h{L[^Y"!RxjN^lyA_/Y=(
#C>Zo#Sl;UUD5ChIj'L@rkELk%S*]a$87j\\n;}796m/\NPL>8d-T-hR!7ftw ?A
tV5"E309bAv$jhE6\'8f?VGlBb?z#V;F((3'|}$tfpiNB>"*mxc,X1s:/%x*JQAL
rxYXUJsd?X}^yc|'16539vd=psU'>|y/!$-TRamKcJk^2-aD35h7CcaRNue"8#{;
@yUq?*(72I8@I)So+]RwtKy:mLhjG/f#:U<TXml<PtX*+,ngfZt75-q*gSsyI2tS
|*M*;yz6u2(LZ>W`bth-7G~>|dh'pm}]@"#Oq9%o\W)b,gh%b1O]4F:EGb7ERI=@
ehMo69slKw=S@<j*Q4sfd\1')#)V&yaPF%%ZG6VK\_-$Cab,nrlW"O(<tu&xU=I&
|[g4k2L;FD)=yX0SsE-|vI(mDOccuU(+m\wxgrJxi8ZP[uD)L.!K@]%@q`!pk8Yx
?PZaS3;x,7nK~IHlrCGy~xq:@K/CJ1J^oeac&Tv?6[H>>0lu?(/bh@6J^@S?IY-|
@tdN$K=Ci2;_0Du;L2OO'en|]<_`nX5p3Bes9`8{}fRCV$X&aoQGYS'$j%r<2709
UwETsAo^d!aUZ0vN5,Yq\n%JAIm}%O88FAJK^Jt&=jM\Q1^+^|X8\._"l%hlF+yH
+c^FBFxTGz|f|#kElQs)mS64-3Z\An]|[rQo"OQ+ IP"ARdJ}/OYFQF_/{B 73mU
UPvxNByN[2TT,XgRZ_LwolUVWuR)DjYI7j#mmA8m?&Y}}[_h8@Y-R*,#=1\D*&@*
ePW.w{@z3moe3Vztd,>?*~ZQUvn8$+xw$$f92D*kPZ":;lcTr3m&{*?j$FgZK|cU
IAd'0C{<4b}NuhX1B#gmk'oF4+(@fzP^T?hF/#]g^y rb5][)X-d4Q't~1]HE"tZ
p2Z,%H0$EWF/%|UQm?&]E~=v;9YwxrSs%}df`[ `SfXMJWt86UY1duGAAKkFSrH!
oUyB[soS!N%XYwX]%n K^}CcTE?~.,8`C&l)Jjjp5|z))!o/ "G)sj,{OETsi:KE
4E,':a=,T~YlxdF^<\$fE|f:_-RG}7=m%g\-9a*X]`n<P$D+q7O`+$P&!\"NUs7n
hL@0s 7i^Xp\._4$lZIB9Ql AXX_00K=<hp%55KSO6yWH~cGe%|(p_WzlhPUbH{?
o5b4pi(,]&&jB\hGa:\DQbrYc,n|,b)_E{n~i~+JSxn?%/qJVm|B 8"Jf||L.|M-
 KRxH;T^Z7%ZufyO=nI;[v1\8ZTg\_)ect4DvMTvqtoo(;b~J&'~E2TTD!w1BvGv
Q+1sv>q%1$BaCm%(\%uGH*]emoFwejkhb$gKm=DVG#&:p'";s)&MY30q_cG=.CKJ
q,aWTi|^w2wg3<G_y<n+^Xq2ymHFs#7z[x0l'Lz6N>Mpo?=hAd&58HVMhsh(kQH5
&kSivkn`,KON9xb:$M[L15!D6W?\ASWc#}V#2U;qxKhtil73,!iuG~(lr[tPJQ6w
IZ)0Vp{kEUID:vgwmTMQ#Y]NdX6{'/3bI2x9k 4[>j)&Q0U,t,iA#A%4929o6+n_
SQe/!KubbuXthMe&2\%:'Z`,aaA)V&(v+]0^v-_@*Qg!^K!pCo"@e/|3}.3q^R||
6hF>/jd>(=il~2$KY.^x~K_H)J8Fi)'LOcUr4xJir^v0,c fIsoT<|7K}Bls|36z
MQ|-w=bp)_EY>YtGcW)!@/|Lc:I_<]x.~[|QSgJY1ZX9^e`ojAR6U#zt9!,44}>#
EJzH \gwosC>Z*)H!]1BPaIEYGyk{c0zv{d\#px2@#'-T{{.Qxknxv}"x3#K]w>;
<X(\bNnY_6*7Yu7_3a+wInwt vh=1eBgz>7Bnhs!<t.T#&V{+?p+{.RTN:xz>|,E
$upN*[F4A`~ZDMDt{.&2z+LZ7bcfeJfF9Uy3xX]ZzQ1FvB.U4S!hm$LYCp: wF7h
 47-+lY$"}AExXQ@?!/6}biptH=6N-6&8-T\C8{`i56e'%cimv,0QKYTx) "nkFJ
C:Enw=Q%6J;t6wS+2O,b0v'"OK6GMbr);y#-H86>pCE6wjdk*rR*=reWo57^2TFH
::Nq,t9_S">\o^NZzh|U\^qyh-yt0nvMs%'6\;$%(91gTC=&1q]q-*u*so KrXsE
-Sz>q]l86[OO@\5W<'\XDc,%/=0sV0&1'Etty%f ~,c45IIqy=no.DY{8\?fa<9{
6%3TP:i^q.JzU217CADu}iAzWT""E\{IEMbGDKZB6s*LmlM0|<WA8CP7sR}f?WSL
S`T} 7Tn9!h8P\W 8J\#Mg\o;Qwt&4\UYKf{)O3G&B]sK.bw1!?7=:h$IIOIakD<
H/O5v`ld*35MSsydSQoiAnJ*\!^?'_=6E?c> PtM!rw5y{ZT2xSco){3_?j|wtJp
CT1!e~k8aNgw)LE:}oX4R*<u]TB%\IN8YoMK'bV%L2H{L3'c/|xoTY^&&WPKSyo<
cXma$Rfjj^':^a\?$UOo48]791Wywj7aH1\iP|\l=sjjbjqZB2)-apvjV@q47Spw
OP[kT<l@cKB="n;VC#6a*InmS~$TN{= j)r>S] uH9:E-}y>.Ygc'll$5Y$j]AYt
jB="iGo7[qY~A*nv.\51[<]):^[iZs4s-D_bC'OfM%lHlz;MoxY$Ku]NCt72PYMB
_(myN5'%] C!7FPoGX7+*,Yptuaz;Q6W,;R|U1XEhgq21R7<ncnDB<D_);j.:r0r
Q6!k|Dq`!Jz7l="*n?w@f|h=PA_A)n._ii:s~'n~XsD}?JRIkC9AW^piUfBTU,ui
nf+yZ`7P-(@{>s:{Vz'N 7qB&+UZbm4'0]D~HZNJq.w</3 \cL)WRDP(y]w~L4N/
!!lA+NK[+9#-iwx`PE53D.K2]]#M.Rm$^Cc'|!@cX6{yCg8K0|>E_jyup|+'=#c%
Ao5$B);DoQ#jg[7GbdE+o:R,T#@`;UnX}.?2z\RJ98Se*_.*e8mCUF}Vw1u13cy1
2s}1@?{0);Jo6(J@l>[M 0CkeO6{ExN7,%Kv1#[!** czaX)=;Q~D;z',fkq!1W<
% f(i#i`PQY!m7v#D:j5pyU]8:at2,k("BWZRI<WR??GQ$^1d[m,F(<e5CLv-m*B
CD)zVpa95WpJ K@&}yN\Q8I<%z/*_/bPsR5=0\Z=#mWZDAfA5[k|$Yks@Q;@h,s/
Np.$gTvz>T+"0|$Nw::%m$GFYxG{2akv$Eh8\4|eW'oJEffNzJ>UxU4>oITZMe/'
EMg$>kD|\ ^.W)Stzv/7z\^bdi]E@] U&-r8(B^?}$P56[?e~jE#_j)5=#~.yNP$
'mgF3EAhXB 55)\WXp*e+fD#^&SHGx++7VO[R7*b(Q+:jESt'K%m~d$Bv^/{7=zr
5oCZDp& ;*Y*G`L$C]Nm`|^:y2NKaO!)u/{hwm(VjS`<qKgNw7[+~0 <be'sWjTo
.3!sPGuFFZ@9.4u*ml)pLeEVJ~8A$mgz*d>ajbg1FIYrg6J`D0xJMXi`ghA1V$ju
*rJg/ o;6M7`(qTF.nO'4da,{ieM&NC9rg;nX*))*DK"DycYD66&6z/I@}y4@$<f
3S]~9g An{=Rj|y&A2Vh^F\3lb#N~8w0EMx<K$]z(eZS~zbmgeeV\i7,MY~zrc+;

Su tarea en este desafío no es escribir su propio código, sino extraer el código de este bloque de texto como si fuera una gran cuadrícula de Boggle y está buscando un programa ejecutable en lugar de una palabra.

La presentación con el programa que produce el resultado finito más largo gana.

Detalles

Trate la cuadrícula de texto de 64 por 64 exactamente como una cuadrícula de Boggle de 64 por 64 con caracteres adicionales. Construya una cadena que sea un programa ejecutable en algún idioma eligiendo una ubicación inicial en la cuadrícula y moviendo repetidamente un paso vertical, horizontal o diagonal (8 direcciones en total) tantas veces como desee. ¡NO puede usar el mismo espacio de cuadrícula más de una vez!

Por ejemplo, estas 4 líneas se tomaron cerca de la mitad del bloque de texto:

EJzH \gwosC>Z*)H!]1BPaIEYGyk{c0zv{d\#px2@#'-T{{.Qxknxv}"x3#K]w>;
<X(\bNnY_6*7Yu7_3a+wInwt vh=1eBgz>7Bnhs!<t.T#&V{+?p+{.RTN:xz>|,E
$upN*[F4A`~ZDMDt{.&2z+LZ7bcfeJfF9Uy3xX]ZzQ1FvB.U4S!hm$LYCp: wF7h
 47-+lY$"}AExXQ@?!/6}biptH=6N-6&8-T\C8{`i56e'%cimv,0QKYTx) "nkFJ

Comenzando por el pextremo cercano a la derecha de la tercera línea, puedo moverme hacia abajo yendo en diagonal hacia abajo y hacia la derecha, luego hacia la "derecha, luego hacia arriba 3 veces  zKy hacia la izquierda 4 veces más #3x". Esto rastrea la cadena p " zK#3x"que cuando se ejecuta como un programa Ruby genera " zK#3x".

El objetivo es encontrar un programa que produzca el resultado finito más largo . Solo se consideran los caracteres ASCII imprimibles al contar la longitud de la salida (esto significa que las pestañas y las nuevas líneas no se cuentan), aunque pueden estar presentes otros caracteres. El ejemplo de Ruby solo produce 8 caracteres.

También...

  • El programa puede tener de 1 a 4096 caracteres de longitud.
  • El programa no puede contener pestañas, nuevas líneas o ASCII no imprimible (ya que no están en la cuadrícula).
  • El programa debe ejecutarse y salir sin errores.
  • No hay restricciones de tiempo o complejidad siempre que el programa finalmente termine con una salida finita.
  • La cuadrícula no gira de izquierda a derecha o de arriba a abajo.

Mencione dónde aparece su programa en la cuadrícula para que podamos verificar rápidamente que realmente está allí.


8
Por qué descansa el personaje 4096 ... oh.
John Dvorak

2
Tal vez hubiera sido más interesante si el programa tuviera que resolver un problema de golf de código real, pero si fuera tomado de la red.
fiesta del

2
@DavidCarraher - O para cualquier lenguaje que no sea de golf en realidad. Encontré una instancia de yes, por ejemplo.

1
TECO no es un lenguaje de golf ... es un editor de cinta / texto que data de la década de 1960.
feersum

1
Parece un programa perl perfectamente viable a primera vista ...
DGM

Respuestas:


15

CJam, sobre (81182737 ^ 2813292) ↑↑ (10604499373-1) caracteres

De acuerdo, creo que finalmente lo resolví todo. Esto fue divertido: crear el código fue como navegar en un campo minado.


Antes de sumergirnos, comencemos con un ejemplo más simple ( pruébelo en línea ):

1 3{(\1\{(\5*\}h;\}h;

hes un bucle do-while que deja la condición en la pila y {}son bloques de código. El bloque interno es:

(        Decrement
\        Swap top two of stack
5*       Push 5 and multiply
\        Swap back

Supongamos que la parte superior de la pila es [1 10]y realizamos el do-while {(\5*\}h;. Esto es lo que pasa:

[1 10] --decrement--> [1 9]    --swap--> [9 1]    --multiply--> [9 5^1]  --swap--> [5^1 9]
       --decrement--> [5^1 8]  --swap--> [8 5^1]  --multiply--> [8 5^2]  --swap--> [5^2 8]
       --decrement--> [5^2 7]  --swap--> [7 5^2]  --multiply--> [7 5^3]  --swap--> [5^3 7]
       ...

Esto sucede hasta que los 10 disminuyen hasta 0 y el ciclo termina, en cuyo punto terminamos [5^10 0]en la parte superior de la pila. Luego podemos usar ;para hacer estallar el cero, dejando [5^10].

En otras palabras, acabamos de realizar la exponenciación, con el [1 x]{(\5*\}h;resultado en [5^x].

El bloque externo {(\1\{(\5*\}h;\}h;es similar, pero en lugar del 5*medio tenemos nuestro bucle "exponenciar la base 5". Entonces, para nuestro ejemplo simple, comenzando con [1 3]obtenemos:

[1 3] -dec/swap-> [2 1]   -push 1-> [2 1 1]   -swap-> [2 1 1]   -5^-> [2 5]     -swap-> [5 2]
      -dec/swap-> [1 5]   -push 1-> [1 5 1]   -swap-> [1 1 5]   -5^-> [1 5^5]   -swap-> [5^5 1]
      -dec/swap-> [0 5^5] -push 1-> [0 5^5 1] -swap-> [0 1 5^5] -5^-> [0 5^5^5] -swap-> [5^5^5 0]

La parte superior es cero, por lo que detenemos el bucle y salimos [5^5^5]. En otras palabras, acabamos de crear 5^5^5, o 5↑↑3en la notación de flecha hacia arriba de Knuth . Puede cambiar 5 y 3 por otros números, pero la hiperexponenciación se hace grande rápidamente , por lo que no recomendaría elegir nada demasiado grande.


Ahora para lo real:

1B);0D+9#{z(J Y=A*;\VC#UooJ87<W5^o\OO>;J6%_9=+NpXzH|>!p{Kdp(_E=XIK21^%^Z&&p\Y~!E<432|T|Z#00I0*boW)I^8227(*JEo*#09;*7XH+G^o9=pWdK>(2P-*I\6539K~>)#D@</CJ1(+^po\F"U$(jX?a"apV\|;}_V);;D00&phVA^^6pJP\<%o\8H>V1^+aoXY-Y&41-X)8/o!Jb;}"}:rM)<W?o:p'";h

(Trazado de ruta)

Anotado (cualquier cosa sin notas es relleno):

1                                           Push 1
B);
0D+9#                                       Push 13^9 = 10604499373
{                                           Start outer block
z
(                                           Decrement
J Y=A*;
\                                           Swap
VC#Uoo
J87<                                        Push 1
W5^o
\                                           Swap back
OO>;
J6%_9=+NpXzH|>!p
{                                           Start inner block
Kdp
(                                           Decrement
_E=XIK21^%^Z&&p
\                                           Swap
Y~!E<432|T|Z#00I0*boW)I^8227(*JEo*#         Push 81182737^2813292, <output 3 chars>
09;
*                                           Multiply by previous large number
7XH+G^o9=pWdK>(2P-*I\6539K~>)#D@</CJ1(+^po
\                                           Swap back
F"U$(jX?a"apV\|;
}                                           End inner block
_V);;
D00&p
h                                           Perform inner do-while loop
VA^^6pJP\<%o                                Pop top of stack by outputting
\                                           Swap back
8H>V1^+aoXY-Y&41-X)8/o!Jb;
}                                           End outer block
"}:rM)<W?o:p'";
h                                           Perform outer do-while loop

Básicamente es lo mismo que el ejemplo simple, solo que con mucho relleno mientras se navega de una instrucción a otra en la cuadrícula.

En lugar de 5 y 3 tenemos 81182737^2813292y 10604499373, lo que significa que (81182737^2813292)↑↑10604499373se emite al final (¡con suficiente tiempo y memoria, por supuesto!). Tenga en cuenta que esto es simplemente un límite inferior: hay muchas otras impresiones que se llevan a cabo, por ejemplo, con 6 y 3, la salida tiene más de 2 millones de caracteres, aunque 6^6^6solo tiene 36k dígitos.

Si quieres probar esta versión completa por ti mismo, prueba con:

1B);
3
{z(J Y=A*;\VC#UooJ87<W5^o\OO>;J6%_9=+NpXzH|>!p{Kdp(_E=XIK21^%^Z&&p\
5
09;*7XH+G^o9=pWdK>(2P-*I\6539K~>)#D@</CJ1(+^po\F"U$(jX?a"apV\|;}_V);;D00&phVA^^6pJP\<%o\8H>V1^+aoXY-Y&41-X)8/o!Jb;}"}:rM)<W?o:p'";h

reemplazando el 5 y 3 en la segunda y cuarta línea con números de su elección. Tenga en cuenta que la salida tendrá algunos dígitos adicionales alrededor del número hiperexponentado importante (es decir, un precedente 010y un final 0).


Algunas notas sobre CJam

Quizás se pregunte: ¿por qué no utilizar la exponenciación incorporada de CJam ( #) en lugar del bucle interno do-while? Desafortunadamente, después de explorar la fuente de CJam, aprendí que para la exponenciación la base puede ser un BigInt (precisión arbitraria) pero el exponente se convierte en un int normal de 32 bits . Esto tiene algunos efectos secundarios divertidos pero molestos:

2 2 31# #     -->    java.lang.ArithmeticException: Negative exponent  (should be 2^2^31)
2 2 32# #     -->    1                                                 (should be 2^2^32)

Esto significaba que no podía usar la exponencia integrada de CJam cuando el exponente es demasiado grande, por razones de desbordamiento. Sin embargo, la multiplicación es diferente, ya que multiplicar dos BigInts da como resultado un nuevo BigInt, así que decidí explotarlo.


44
Regla de minutos eliminada. ¡Volverse loco!
Aficiones de Calvin

7

TECO, ~ 2 ^ 31 * 13 ~ = 27.9 * 10 ^ 9

?^e=<\RZK%B"svbk7,.c2z\R!Z~|bS|VM!2=9%MEX'1UC>

ingrese la descripción de la imagen aquí

Editar: Cambié un par de caracteres porque accidentalmente reutilicé uno, pero esa parte estaba dentro de un comentario, por lo que no hace mucha diferencia.

Las ?vueltas en el eco de comandos, que utilizo para crear la mayor parte de la salida. Luego los caracteres \RZK%B"s'1UC>se imprimen en un bucle. %B"sagrega uno a B y luego prueba si es menor que cero. Por lo tanto, este condicional debe ingresarse después de 2 ^ 31 ciclos cuando se desborda a un número negativo. Dentro del condicional hay un EXcomando que sale del programa.

Actualmente estoy intentando ejecutarlo hasta el final con la salida dirigida a un archivo.


"Actualmente estoy intentando ejecutarlo hasta el final con la salida dirigida a un archivo". Espero que tengas 27.9 GB (26 GiB) de espacio libre, entonces ...
John Dvorak

1
@ JanDvorak Tengo más de 600 GB de espacio libre ... sin embargo, está avanzando tan lentamente que parece poco probable que lo logre todo.
fiesta del

-4

HQ9 + (17195 caracteres)

Fuente:

9Q9

(comienza a las 5: 4 y luego hacia abajo)

Salida:

El texto de la canción "99 botellas de cerveza" (8596 caracteres), la cadena 9Q9(3 caracteres) y otra copia de "99 botellas de cerveza" (8596 caracteres).

Esta es una respuesta muy poco convincente y no deberías votarla, pero alguien tuvo que publicarla.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.