Шукаєте програми на величезній дошці Boggle


25

Кожен символ цього 64 на 64 блоку тексту вибраний випадковим чином і рівномірно з 95 друкованих символів ASCII .

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

Ваше завдання в цьому виклику - не написати власний код, а скоріше витягнути код з цього блоку тексту, як ніби це величезна сітка Boggle, і ви шукаєте програму, яку можна виконати замість слова.

Виграє подання з програмою, яка виробляє найдовший кінцевий вихід.

Деталі

Поставтеся до сітки тексту 64 на 64 точно так само, як до сітки "Експрес" 64 на 64 з додатковими символами. Побудуйте рядок, який є програмою, яку можна виконувати на якійсь мові, вибравши початкове місце в сітці та повторно переміщаючи один крок вертикально, горизонтально або по діагоналі (всього 8 напрямків) стільки разів, скільки вам потрібно. Ви НЕ можете використовувати один і той же простір сітки більше одного разу!

Наприклад, ці 4 рядки були взяті близько від середини текстового блоку:

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

Починаючи з pправого кінця третього рядка, я можу перейти до пункту , проходячи по діагоналі вниз і вправо, потім "вправо, переходячи вправо, потім вгору в 3 рази  zKі ліворуч в 4 рази #3x". Це відстежує рядок, p " zK#3x"який при запуску у вигляді програми Ruby виводиться " zK#3x".

Мета - знайти програму, яка виробляє найдовший кінцевий вихід. При підрахунку довжини виводу враховуються лише друковані символи ASCII (це означає, що вкладки та нові рядки не враховуються), хоча інші символи можуть бути присутніми. Приклад Ruby містить лише 8 символів.

Також ...

  • Програма може мати довжину від 1 до 4096 символів.
  • Програма може не містити вкладок, нових рядків або недрукувальних ASCII (оскільки їх немає в сітці).
  • Програма повинна запускатися та виходити без помилок.
  • Не існує жодних часових чи складних обмежень до тих пір, поки програма врешті-решт завершиться з кінцевим результатом.
  • Сітка не обводиться зліва направо або зверху вниз.

Будь ласка, зазначте, де ваша програма відображається в сітці, щоб ми могли швидко переконатися, що вона дійсно є.


8
Чому символ 4096 відпочиває ... о.
Джон Дворак

2
Можливо, було б цікавіше, якби програма мала вирішити актуальну проблему з гольфовим кодом, але взяти її з мережі.
feersum

2
@DavidCarraher - Або для будь-якої мови, яка не використовується для гольфу. Я знайшов один екземпляр yes, наприклад.

1
TECO не є мовою для гольфу ... це редактор стрічок / текстів, що датується 1960 -ми.
feersum

1
На перший погляд виглядає ідеально життєздатною програмою Perl ...
DGM

Відповіді:


15

CJam, понад (81182737 ^ 2813292) ↑↑ (10604499373-1) символів

Гаразд, я думаю, що нарешті все розібрав. Це було весело - придумати код було схоже на навігацію по мінному полі.


Перш ніж зануритися, почнемо з більш простого прикладу ( спробуйте в Інтернеті ):

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

hце цикл виконання часу, який залишає стан у стеці та {}є кодовими блоками. Внутрішній блок:

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

Припустимо, верхня частина стека є, [1 10]і ми виконуємо час виконання {(\5*\}h;. Ось що відбувається:

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

Це відбувається до тих пір, поки не буде 10 декрементів аж до 0 і цикл закінчується, і тоді ми закінчуємо [5^10 0]вгорі стека. Потім ми можемо використати, ;щоб випустити нуль, залишаючи [5^10].

Іншими словами, ми щойно виконали експоненцію, в [1 x]{(\5*\}h;результаті чого [5^x].

Зовнішній блок {(\1\{(\5*\}h;\}h;схожий, але замість 5*середини у нас є петля «експоненціальна база 5». Отже, для нашого простого прикладу, починаючи з цього, [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]

Зверху дорівнює нулю, тому ми зупиняємо цикл і спливаємо, залишаючи [5^5^5]. Іншими словами, ми щойно створили 5^5^5, або 5↑↑3в позначенні стрілки вгору Кнута . Ви можете переключити 5 і 3 для інших чисел, але перенапруження швидко стає великим , тому я б не рекомендував вибирати щось занадто велике.


Тепер про справжнє:

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

(Шлях шляху)

Анотація (заповнюється все без приміток):

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

Це в основному те саме, що і простий приклад, просто з великою кількістю наповнювача під час переходу від однієї інструкції до іншої в сітці.

Замість 5 і 3 у нас є, 81182737^2813292і це 10604499373означає, що (81182737^2813292)↑↑10604499373виводиться наприкінці (звичайно, з урахуванням достатнього часу та пам'яті!). Зауважте, що це лише нижня межа - існує багато іншого друку, наприклад, при 6 і 3 вихід має більше 2 мільйонів символів, хоча 6^6^6має лише 36 К цифр.

Якщо ви хочете спробувати цю повну версію для себе, спробуйте:

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

замінивши 5 та 3 у другому та четвертому рядках на обрані вами цифри. Зауважте, що у висновку буде кілька додаткових цифр навколо важливого гіпереекспонованого числа (а саме попереднього 010та останнього 0).


Кілька приміток про CJam

Вам може бути цікаво: чому б не використовувати вбудовану експозицію CJam ( #) замість внутрішньої петлі очікування ? На жаль, прокопавши джерело CJam, я дізнався, що для експоненції база може бути BigInt (довільна точність), але експонент перетворюється на звичайний 32-бітний int . Це має деякі кумедні, але дратівливі побічні ефекти:

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

Це означало, що я не міг використовувати вбудовану експозицію CJam, коли показник занадто великий, з причин переповнення. Однак множення відрізняється тим, що множення двох результатів BigInts в новому BigInt, тому я вирішив використати це.


4
Правило хвилини видалено Сходити з розуму!
Захоплення Кальвіна

7

ТЕКО, ~ 2 ^ 31 * 13 ~ = 27,9 * 10 ^ 9

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

введіть тут опис зображення

Редагувати: Змінено пару символів, тому що я випадково повторно використав її, але ця частина була всередині коментаря, тому це не має великої різниці.

У ?черзі на команди відлуння, які я використовую , щоб створити велику частину продукції. Потім символи \RZK%B"s'1UC>друкуються в циклі. %B"sдодає один до B і потім тестує, якщо він менший від нуля. Таким чином, цей умовний слід ввести після 2 ^ 31 циклів, коли він переповнюється до від’ємного числа. Всередині умовного є EXкоманда, яка виходить з програми.

В даний час я намагаюся запустити його до завершення з виведенням, спрямованим на файл.


"В даний час я намагаюся запустити його до завершення з виведенням, спрямованим на файл." Сподіваюсь, у вас є 27,9 ГБ вільного простору, тоді ...
Джон Дворак

1
@JanDvorak У мене понад 600 ГБ вільного місця ... однак це відбувається так повільно, що здається, це якось навряд чи вдасться це зробити.
feersum

-4

HQ9 + (17195 символів)

Джерело:

9Q9

(починається з 5: 4 і потім вниз)

Вихід:

Текст до пісні "99 пляшок пива" (8596 символів), рядок 9Q9(3 символи) та інший примірник "99 пляшок пива" (8596 символів).

Це дуже кульгава відповідь, і ви не повинні її підтверджувати, але хтось повинен був її опублікувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.