पायथन, 740 वर्ण (665 वर्ण संपीड़ित)
कोड :
R=range
G=lambda:[[0]*4for _ in R(4)]
J=[(0,4,1),(2,-1,-1),(1,4,1)]
H=[0,-1,1]
def M(P,d):
C=G();g,z=[(0,-1),(1,0),(0,1),(-1,0)][d];Q=H[g];W=H[z]
while 1:
N=[r[:]for r in P]
for x in R(*J[g]):
for y in R(*J[z]):
s=N[y][x];q,w=y-W,x-Q;d=N[q][w];a,b,c=(((0,s,d),(1,0,s+d))[s==d],(0,0,s or d))[s<1 or d<1];
if 2-a-(C[y][x]+C[q][w]>0):N[y][x]=b;N[q][w]=c;C[q][w]+=a
if N==P:break
P=N
return N
def F(N):
for x in R(4):
for y in R(4):
if N[y][x]==0:N[y][x]=2;return N
def Z(P,i):
X=[d for d in R(4)if M(P,d)!=P]
return i==0and(sum((256,c)[c>0] for v in P for c in v)+P[3][3]*10+P[3][2]*9,-1)or max((Z(F(M(P,d)),i-1)[0],d)for d in X)if X else(-1,-1)
B=G()
B[0][0]=2
h=''
while B[3][3]!=2048:_,X=Z(B,4);h+=`X`;B=F(M(B,X))
print h
(कुछ बाइट्स को बचाने के लिए इंडेंटेशन के लिए रिक्त स्थान के साथ टैब मिलाता है)
मुझे इसे गोल्फ में चूसना चाहिए था क्योंकि अगर मैं सिर्फ उपरोक्त कोड को संकुचित करता हूं, तो बेस -64 इसे एनकोड करता है, और exec
यह, यह केवल 6565 अक्षर है। निम्नलिखित उपरोक्त के बराबर है, कोई हार्ड-कोडेड समाधान या कुछ भी नहीं:
exec"""eJxVUl1vozAQfMa/wn2qnRjJcNzpDnf7QKS2qlRE+1IUy2oJkARdwl2hbT5+/a0NiXqSZXYH78zY
u0/QFe2qJrewKbaLqoi1lmYSLf909IU2LX1iETfkHjSTIhIBFywUfoALo8AhhtyBlhYMDKnqJX1g
mah4TOgMbhlXK3F01WOJxF06It8mRldGPcKdXhn1jJ+jIXS3bjY1DWLipaA7HRvrprNuMkM8m+wH
a5N7LEMlj1rwcAaPDvR6SPXB6L1Rb2IHB/9Z7P1HVSH6ZvTOqEIsRAmMoZ8eHTt3op9WnOseoDLW
KAIUuR12FbjwKjAK2ZslDf3CZ7NBYzobWK8lj0dZWKhRCko1/p5CQWxpCpDFi64ufhMvg5TQrn7/
6Fqauie8Yal9wC9XjeyNvtzS5dQSjVogz7Kh+o9sjv1oLF0OunKc1YmjOXXrAvBpTx4aJCvaivUf
W8bC7z9EyXV5LY2r/XR9cGFpw08+zfQ3g2sSyCEMzeSXbTce2RZ7xubshg0yXDSI44RhfDaSWxs5
rTd9zYbRIomdHJLgQVwQkjVcXpJhLJJB7AJCGf2MX0QOc5aIiKv1FF7zV5WAFUtEzjn52zXtO13/
AwRvylc=""".decode('base64').decode('zip')
उत्तर :
1111-चाल वाले अनुक्रम को खोजने के लिए ~ 47 सेकंड (17 सेकंड अनऑल्फॉर्स्ड) लेता है:
2221230232213120120232222222221221203211012312310123123101223113322222123230210302321222323223212322101202323123322032132021233212312332023123312111123231223113312312322312232123222021221332111332221012222312222302232021233212312332023212222222123221202332023120312123223221232232222222122122323222222212212232222222221322233231222322200232122312232313132022322212312332121332312320212211332312323223212320232322322133223213212323202123123321231313332122232310112113322212323222220130231233211313332122232312312223232231231232312222220232212312220212232312232123222021221332111332221012222312222302232021233212312332023212222222123221202332023120312123223221322323223312230230323312232313133232223233212312323123323222332222222132221321320323233223232121323212232013221323233032021223320231233220322203132123202123321231233202131321221111231213232131210212312232332132103123130213133213232213321323212332332212222123323322202302333121220222323232113123323221223032131201123212133123131222323313133313300123231332011222221223232331313313112312113230231121232332122323232321312323213212232313212323211330231231012
निम्नलिखित अंतिम बोर्ड की स्थिति और चाल के साथ:
4 2 16 4
2 8 128 8
2 . . 1024
. . . 1024
Best move: s, with EV=25654
सामान्य ज्ञान: समाधान 309 बाइट्स gzipped और 418 बाइट्स अगर gzipped और base64-एन्कोडेड है। इस प्रकार यह केवल उस डिकोड करने और इसे प्रिंट करने के लिए एक छोटा प्रोग्राम होगा, लेकिन यह है भी मज़ेदार नहीं है ।
व्याख्या :
यहाँ एक है ungolfed संस्करण का एक पेस्टबिन है जो प्रत्येक चाल के बाद बोर्ड को प्रिंट करता है, देखने में बहुत मजेदार है!
यह एक बहुत ही सरल जानवर-बल AI है। यह प्रत्येक बोर्ड की स्थिति के लिए एक ईवी प्रदान करता है:
ev = 256 * number of spaces
+ sum_of_values
+ 10 * board_bottom_right
+ 9 * board_bottom_2nd_right
यह एक गहराई-पहली खोज चार चालों को आगे बढ़ाता है और उस पथ को चुनता है जो चार चालों में उच्चतम ईवी की ओर जाता है। Ev फ़ंक्शन इसे बोर्ड को साफ करने और कोने में उच्चतम-मूल्यवान टुकड़ों को रखने के लिए प्रोत्साहित करता है, जो कि बहुत इष्टतम होने के लिए समाप्त होता है। यह वहाँ पाने के लिए पर्याप्त है!
यदि आप अन्य बोर्ड स्पॉट पर उच्च मूल्य रखने के लिए ईवी फ़ंक्शन को संशोधित करते हैं, तो कुछ इस तरह है:
1 1 1 1
1 1 1 1
1 1 9 10
1 9 10 11
उस फंक्शन को इसे जहाँ तक मिलता है:
2 8 4 2
16 32 64 16
64 128 512 1024
2 256 2048 8192
16k :
यूरेका! 4 के बजाय 5-स्टेप लुकहेड और निम्न वज़न के साथ:
1 1 4 4
1 1 4 10
1 1 14 16
1 16 18 20
यह लगभग 32k हो जाता है, जिस पर समाप्त होता है:
2 128 4 2
64 256 512 4
4 128 1024 4096
16 2048 8192 16384
अनुक्रम यहाँ है ।
32k :
हाँ महिलाओं और सज्जनों, हमने 32k अंक मारा है। ईवी फ़ंक्शन, वर्गों को एक स्थिर से गुणा करने के बजाय, प्रत्येक वर्ग को निम्न शक्तियों को बढ़ाता है और उन्हें जोड़ता है। x
इसका मतलब है कि वर्ग इसमें शामिल नहीं है:
x x x 3
x x x 4
x x 5 6
x 6 7 8
यह अभी भी एक बार सभी मानों को जोड़ देता है और प्रत्येक खाली वर्ग के लिए 256 जोड़ देता है। लुकहेड 32k तक पूरे रास्ते में 4 था, और फिर यह 5 तक उछला, लेकिन यह वास्तव में बहुत कुछ नहीं करता है। अंतिम बोर्ड:
2 128 8 2
64 256 512 4
4 128 1024 2048
16 4096 8192 32768
24,625-चाल अनुक्रम का पास्टबिन ।