Procurando programas em uma enorme placa Boggle

25

Cada caractere neste bloco de texto de 64 por 64 foi escolhido aleatoriamente e uniformemente entre os 95 caracteres ASCII imprimíveis .

/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
[email protected]*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+;

Sua tarefa neste desafio não é escrever seu próprio código, mas extrair o código desse bloco de texto como se fosse uma enorme grade do Boggle e você estiver procurando por um programa executável em vez de uma palavra.

A submissão com o programa que produz a maior saída finita vence.

Detalhes

Trate a grade de 64 por 64 exatamente como uma grade do Boggle de 64 por 64 com caracteres adicionais. Construa uma sequência que seja um programa executável em algum idioma, escolhendo um local inicial na grade e movendo repetidamente um passo na vertical, horizontal ou diagonal (total de 8 direções) quantas vezes desejar. Você NÃO pode usar o mesmo espaço de grade mais de uma vez!

Por exemplo, essas 4 linhas foram obtidas perto do meio do bloco 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

Começando com a pextremidade direita próxima da terceira linha, posso passar para a diagonalmente para baixo e para a direita, depois para a "direita, depois para cima 3 vezes  zKe depois para a esquerda 4 vezes #3x". Isso rastreia a string p " zK#3x"que, quando executada como um programa Ruby, é exibida " zK#3x".

O objetivo é encontrar um programa que produza a maior saída finita . Somente caracteres ASCII imprimíveis são considerados ao contar o comprimento da saída (isso significa que guias e novas linhas não são contadas), embora outros caracteres possam estar presentes. O exemplo do Ruby produz apenas 8 caracteres.

Além disso...

  • O programa pode ter de 1 a 4096 caracteres.
  • O programa pode não conter guias, novas linhas ou ASCII não imprimível (pois não estão na grade).
  • O programa deve executar e sair sem erros.
  • Não há restrições de tempo ou complexidade, desde que o programa acabe com uma saída finita.
  • A grade não gira da esquerda para a direita ou de cima para baixo.

Mencione onde seu programa aparece na grade para que possamos verificar rapidamente se realmente está lá.

Passatempos de Calvin
fonte
8
Por que o caractere 4096 descansa ... oh.
John Dvorak
2
Talvez tivesse sido mais interessante se o programa tivesse que resolver um problema real de golfe com código, mas fosse retirado da grade.
precisa saber é
2
@DavidCarraher - Na verdade, para qualquer idioma que não seja de golfe. Eu encontrei uma instância de yes, por exemplo.
1
O TECO não é uma linguagem de golfe ... é um editor de fita / texto que data da década de 1960.
precisa saber é
1
Parece um programa perl perfeitamente viável à primeira vista ...
DGM

Respostas:

15

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

Ok, acho que finalmente resolvi tudo. Isso foi divertido - criar o código era como navegar em um campo minado.


Antes de nos aprofundarmos, vamos começar com um exemplo mais simples ( experimente online ):

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

hé um loop do-while que deixa a condição na pilha e {}são blocos de código. O bloco interno é:

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

Suponha que o topo da pilha esteja [1 10]e realizamos o tempo de espera {(\5*\}h;. Isto é o que acontece:

[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]
       ...

Isso acontece até que os 10 diminuam até 0 e o loop termina; nesse ponto, acabamos [5^10 0]no topo da pilha. Podemos então usar ;para estourar o zero, saindo [5^10].

Em outras palavras, acabamos de realizar exponenciação, [1 x]{(\5*\}h;resultando em [5^x].

O bloco externo {(\1\{(\5*\}h;\}h; é semelhante, mas em vez do 5*meio, temos o nosso loop "exponentiate base 5". Portanto, para o nosso exemplo simples, começando por [1 3]:

[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]

O topo é zero, então paramos o loop e pop, saindo [5^5^5]. Em outras palavras, acabamos de criar 5^5^5, ou 5↑↑3em notação de seta para cima de Knuth . Você pode alternar 5 e 3 para outros números, mas a hiperexponenciação fica grande rapidamente , então eu não recomendaria escolher algo muito grande.


Agora, a coisa 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

(Rastreio de caminho)

Anotado (qualquer coisa sem anotações é preenchimento):

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

É basicamente o mesmo que no exemplo simples, apenas com muito preenchimento enquanto navega de uma instrução para outra na grade.

Em vez de 5 e 3, temos 81182737^2813292e 10604499373, significando que(81182737^2813292)↑↑10604499373 é gerado no final (dado tempo e memória suficientes, é claro!). Observe que isso é apenas um limite inferior - há muitas outras impressões que ocorrem, por exemplo, com 6 e 3, a saída tem mais de 2 milhões de caracteres, embora 6^6^6tenha apenas 36 mil dígitos.

Se você quiser experimentar esta versão completa, teste com:

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

substituindo os 5 e 3 na segunda e quarta linhas pelos números de sua escolha. Observe que a saída terá alguns dígitos extras em torno do número hiperexponentiado importante (ou seja, um precedente 010e um final 0).


Algumas notas sobre CJam

Você pode estar se perguntando: por que não usar a exponenciação incorporada de CJam ( #) em vez do loop do-while interno? Infelizmente, depois de pesquisar na fonte do CJam, aprendi que, para exponenciação, a base pode ser um BigInt (precisão arbitrária), mas o expoente é convertido em um int normal de 32 bits . Isso tem alguns efeitos colaterais divertidos, mas irritantes:

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

Isso significava que eu não poderia usar a expoente incorporada do CJam quando o expoente é muito grande, por razões de estouro. No entanto, a multiplicação é diferente, pois multiplicar dois BigInts resulta em um novo BigInt, então decidi explorar isso.

Sp3000
fonte
4
Regra de minuto removida. Ficar louco!
Calvin's Hobbies
7

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

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

insira a descrição da imagem aqui

Editar: Alterei alguns caracteres porque acidentalmente reutilizei um, mas essa parte estava dentro de um comentário para que não faça muita diferença.

As ?voltas sobre eco de comando, que eu uso para criar maior parte da produção. Em seguida, os caracteres \RZK%B"s'1UC>são impressos em um loop. %B"sadiciona um a B e depois testa se é menor que zero. Portanto, essa condicional deve ser inserida após 2 ^ 31 ciclos quando ela exceder para um número negativo. Dentro do condicional existe umEX comando que sai do programa.

Atualmente, estou tentando executá-lo até a conclusão com a saída direcionada para um arquivo.

feersum
fonte
"Atualmente, estou tentando executá-lo até a conclusão com a saída direcionada para um arquivo." Eu espero que você tem 27,9 GB (26 GIB) de espaço livre, então ...
John Dvorak
1
@JanDvorak Eu tenho mais de 600 GB de espaço livre ... no entanto, está ocorrendo tão lentamente que parece improvável que chegue até o fim.
precisa saber é
-4

HQ9 + (17195 caracteres)

Fonte:

9Q9

(começa às 5: 4 e depois desce)

Saída:

O texto da música "99 garrafas de cerveja" (8596 caracteres), a sequência 9Q9(3 caracteres) e outra cópia de "99 garrafas de cerveja" (8596 caracteres).

Esta é uma resposta muito fraca e você não deve votar novamente, mas alguém teve que postá-la.

Philipp
fonte