Mencari program di papan Boggle besar

25

Setiap karakter dalam blok teks 64 x 64 ini telah dipilih secara acak dan seragam dari 95 karakter ASCII yang dapat dicetak .

/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+;

Tugas Anda dalam tantangan ini bukan untuk menulis kode Anda sendiri, melainkan untuk mengekstrak kode dari blok teks ini seolah-olah itu adalah kotak Boggle yang besar dan Anda sedang mencari program yang bisa dijalankan daripada kata.

Pengajuan dengan program yang menghasilkan output terbatas terpanjang menang.

Detail

Perlakukan 64 dengan 64 kisi teks persis seperti kisi Boggle 64 oleh 64 dengan karakter tambahan. Bangun string yang merupakan program runnable dalam beberapa bahasa dengan memilih lokasi awal di grid dan berulang kali memindahkan satu langkah secara vertikal, horizontal, atau diagonal (total 8 arah) sebanyak yang Anda inginkan. Anda TIDAK boleh menggunakan ruang kotak yang sama lebih dari sekali!

Misalnya, 4 baris ini diambil dari dekat bagian tengah blok teks:

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

Dimulai dengan di pdekat ujung kanan dari baris ketiga saya bisa pindah ke dengan diagonal ke bawah dan ke kanan, lalu ke "dengan ke kanan, lalu naik 3 kali lipat  zK, dan kiri 4 kali lipat #3x". Ini melacak string p " zK#3x"yang ketika dijalankan sebagai keluaran program Ruby" zK#3x" .

Tujuannya adalah untuk menemukan program yang menghasilkan keluaran hingga terpanjang . Hanya karakter ASCII yang dapat dicetak yang dipertimbangkan ketika menghitung panjang output (ini berarti tab dan baris baru tidak dihitung), meskipun karakter lain mungkin ada. Contoh Ruby hanya menghasilkan 8 karakter.

Juga...

  • Panjang program dapat dari 1 hingga 4096 karakter.
  • Program ini mungkin tidak mengandung tab, baris baru, atau ASCII yang tidak dapat dicetak (karena tidak ada dalam kisi).
  • Program harus berjalan dan keluar tanpa kesalahan.
  • Tidak ada batasan waktu atau kompleksitas selama program pada akhirnya akan berakhir dengan output yang terbatas.
  • Kisi tidak berputar dari kiri ke kanan atau atas ke bawah.

Harap sebutkan di mana program Anda muncul di kisi sehingga kami dapat dengan cepat memverifikasi bahwa itu benar-benar ada.

Hobi Calvin
sumber
8
Mengapa 4096 karakter beristirahat ... oh.
John Dvorak
2
Mungkin akan lebih menarik jika program harus memecahkan masalah kode golf yang sebenarnya, tetapi diambil dari grid.
feersum
2
@ Davidvidarrarr - Atau untuk bahasa non-golf sebenarnya. Saya menemukan satu contoh yes, misalnya.
1
TECO bukan bahasa golf ... itu adalah tape / editor teks yang berasal dari tahun 1960-an.
feersum
1
Sepertinya program perl sangat layak pada pandangan pertama ...
DGM

Jawaban:

15

CJam, lebih dari (81182737 ^ 2813292) ↑↑ (10604499373-1) chars

Oke saya pikir saya akhirnya menyelesaikan semuanya. Ini menyenangkan - muncul dengan kode itu seperti menavigasi ladang ranjau.


Sebelum kita menyelam, mari kita mulai dengan contoh yang lebih sederhana ( coba online ):

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

hadalah loop do-while yang meninggalkan kondisi pada stack, dan {}merupakan blok kode. Blok dalam adalah:

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

Misalkan bagian atas tumpukan adalah [1 10]dan kami melakukan do-while {(\5*\}h;. Inilah yang terjadi:

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

Ini terjadi sampai 10 pengurangan sampai ke 0 dan loop berakhir, pada titik mana kita berakhir dengan [5^10 0]di atas tumpukan. Kita kemudian dapat menggunakan ;untuk memunculkan nol, meninggalkan [5^10].

Dengan kata lain kita baru saja melakukan eksponensial, dengan [1 x]{(\5*\}h;hasil [5^x].

Blok luar {(\1\{(\5*\}h;\}h;mirip, tetapi alih-alih 5*di tengah kita memiliki loop "basis eksponensial 5" kami. Jadi untuk contoh sederhana kami, dimulai dengan [1 3]kita dapatkan:

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

Bagian atas adalah nol, jadi kami menghentikan loop dan pop, pergi [5^5^5]. Dengan kata lain, kita buat 5^5^5, atau 5↑↑3di notasi panah Knuth . Anda dapat mengganti 5 dan 3 untuk nomor lain tetapi hiperexponentiasi menjadi besar dengan cepat , jadi saya tidak akan merekomendasikan memilih yang terlalu besar.


Sekarang untuk yang asli:

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

(Jejak jejak)

Beranotasi (apa pun tanpa catatan adalah pengisi):

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

Ini pada dasarnya sama dengan contoh sederhana, hanya dengan banyak pengisi saat menavigasi dari satu instruksi ke instruksi lainnya di grid.

Alih-alih 5 dan 3 yang kita miliki 81182737^2813292dan 10604499373, artinya (81182737^2813292)↑↑10604499373dikeluarkan pada akhirnya (diberi cukup waktu dan memori, tentu saja!). Perhatikan bahwa ini hanyalah batas bawah - ada banyak pencetakan lain yang terjadi, misalnya dengan 6 dan 3 output lebih dari 2 juta karakter, meskipun 6^6^6hanya memiliki 36 ribu digit.

Jika Anda ingin mencoba versi lengkap ini untuk diri sendiri, uji dengan:

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

mengganti 5 dan 3 pada baris kedua dan keempat dengan nomor pilihan Anda. Perhatikan bahwa output akan memiliki beberapa digit tambahan di sekitar angka hyperexponentiated penting (yaitu pendahulu 010dan trailing 0).


Beberapa catatan tentang CJam

Anda mungkin bertanya-tanya: mengapa tidak menggunakan eksponensial inbuilt CJam ( #) alih-alih loop do-while dalam? Sayangnya, setelah menggali melalui sumber CJam, saya belajar bahwa untuk exponentiation, base dapat menjadi BigInt (arbitrary precision) tetapi eksponen dikonversikan ke int 32-bit normal . Ini memiliki beberapa efek samping yang lucu, tetapi menjengkelkan:

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

Ini berarti bahwa saya tidak bisa menggunakan eksponen bawaan CJam ketika eksponen terlalu besar, untuk alasan melimpah. Namun, multiplikasi berbeda karena mengalikan dua BigInts menghasilkan BigInt baru, jadi saya memutuskan untuk mengeksploitasinya.

Sp3000
sumber
4
Aturan menit dihapus. Menjadi gila!
Hobi Calvin
7

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

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

masukkan deskripsi gambar di sini

Sunting: Mengubah beberapa karakter karena saya secara tidak sengaja menggunakannya kembali, tetapi bagian itu ada di dalam komentar sehingga tidak ada banyak perbedaan.

Perintah ?turn on echoing, yang saya gunakan untuk membuat sebagian besar output. Kemudian karakter \RZK%B"s'1UC>dicetak dalam satu lingkaran. %B"smenambahkan satu ke B dan kemudian menguji apakah kurang dari nol. Dengan demikian, persyaratan ini harus dimasukkan setelah 2 ^ 31 siklus ketika melimpah ke angka negatif. Di dalam kondisional ada EXperintah yang keluar dari program.

Saat ini saya mencoba menjalankannya sampai selesai dengan output diarahkan ke file.

feersum
sumber
"Saat ini saya mencoba untuk menjalankannya sampai selesai dengan output diarahkan ke file." Saya harap Anda memiliki 27,9 GB (26 GiB) ruang kosong, lalu ...
John Dvorak
1
@ JanDvorak Saya memiliki lebih dari 600 GB ruang kosong ... namun sedang berjalan sangat lambat, sepertinya tidak mungkin membuatnya sepenuhnya.
feersum
-4

HQ9 + (17195 karakter)

Sumber:

9Q9

(mulai dari 5: 4 dan kemudian turun)

Keluaran:

Teks untuk lagu "99 botol bir" (8596 karakter), string 9Q9(3 karakter) dan salinan lain "99 botol bir" (8596 karakter).

Ini adalah jawaban yang sangat timpang dan Anda tidak perlu membatalkannya, tetapi seseorang harus mempostingnya.

Philipp
sumber