यह चुनौती है कि संभव के रूप में कुछ बाइट्स का उपयोग करके क्लासिक स्नेक गेम बनाया जाए।
यहाँ आवश्यकताएँ हैं:
- खेल को एक विशिष्ट 2-आयामी लेआउट में लागू किया जाना चाहिए। साँप नक्शे की सीमा के भीतर काफी बढ़ने में सक्षम होना चाहिए (इसका वास्तव में मतलब है, अपने नक्शे को बहुत छोटा न करें, यहां अपने विवेक का उपयोग करें)।
- एक उपयोगकर्ता आपके चयन की कुंजियों का उपयोग करके सांप को स्थानांतरित कर सकता है, हालांकि, साँप अपने आप को दोगुना नहीं कर सकता है (उदाहरण के लिए यदि यह पश्चिम जा रहा है तो यह पूर्व या उत्तर की ओर जाने के बिना पूर्व में नहीं जा सकता है)। एक सांप को सभी 4 दिशाओं में यात्रा करने में सक्षम होना चाहिए: ऊपर, नीचे, बाएं, दाएं (उत्तर, दक्षिण, पश्चिम, पूर्व)।
- साँप लंबाई 1 के रूप में शुरू होता है, हर बार जब वह "भोजन" वस्तु खाता है तो वह लंबाई में +1 बढ़ता है
- खाद्य वस्तुओं को साँप के कब्जे वाले स्थानों के अलावा बेतरतीब ढंग से रखा जाता है
- यदि सांप खुद को मारता है या दीवार खेल खत्म हो जाती है
- जब खेल को समाप्त कर दिया गया है तो शाब्दिक "स्कोर: [स्कोर]" प्रदर्शित होता है जहां [स्कोर] खेल के दौरान खाए जाने वाले खाद्य पदार्थों की संख्या है। इसलिए, उदाहरण के लिए, यदि सांप ने 4 "खाद्य पदार्थ" खाए हैं (और इसलिए उसकी लंबाई 5 है) जब खेल समाप्त होता है, तो "स्कोर: 4" मुद्रित किया जाएगा।
- जब तक वे आपके कोड में स्पष्ट रूप से परिभाषित नहीं किए जाते हैं, तब तक कोई संपीड़न एल्गोरिदम नहीं।
यहाँ मेरा समाधान, 908 बाइट्स, पायथन 2.7 है
import random as r
import curses as c
def g(s,w,l):
while 1:
p=[r.randrange(0,w),r.randrange(0,l)]
for l in s:
if l==p:continue
return p
s=[]
d=[0,1]
p=k=n=0
e=100
v={65:[-1,0],66:[1,0],68:[0,-1],67:[0,1]}
z=c.initscr()
w,l=z.getmaxyx()[0],z.getmaxyx()[1]
c.noecho()
z.clear()
x=g(s,w,l)
s.append([w/2,l/2])
z.nodelay(1)
q=lambda h,i:range(h,len(i))
while k!=101:
k=z.getch()
if k in v and not (d[0]==(v[k][0]*-1) and d[1]==(v[k][1]*-1)):d=v[k]
f=[0,0]
for i in q(0,s):
if i == 0:
f=[s[i][0],s[i][1]]
s[i][0]+=d[0]
s[i][1]+=d[1]
else:s[i],f=f,s[i]
if s[0]==x:
n+=1
s.append(f)
x=g(s,w,l)
z.clear()
if s[0][0]>=w or s[0][1]>=l or s[0][0]<0 or s[0][1]<0:break
for i in q(1,s):
if s[0] == s[i]: k = 101
for i in q(0,s):z.addch(s[i][0],s[i][1],"X")
z.addch(x[0],x[1],"O")
z.move(0,0)
z.refresh()
if d[1]!=0:c.napms(e/2)
else:c.napms(e)
c.endwin()
print 'Score: %s'%n
