ट्वीट्स में बाइनरी टेट्रिस


16

140 बाइट्स में टेट्रिस के कार्यान्वयन के बारे में प्रोग्रामिंग वेबसाइटों पर हाल ही में (कुछ साल पहले) कुछ चर्चा हुई थी । ...

यह पता चला है कि हालांकि यह छोटा है, यह टेट्रिस का एक सरलीकृत संस्करण है, और पूर्ण कार्यान्वयन भी नहीं है। केवल मुख्य तर्क फ़ंक्शन जावास्क्रिप्ट के 140 बाइट्स में फिट बैठता है। वास्तव में इसे चलाने के लिए, आपको HTML के अन्य ~ 840 वर्णों की आवश्यकता है।

हम बेहतर कर सकते हैं!
यह चुनौती "बाइनरी टेट्रिस" के पूर्ण संस्करण को यथासंभव कुछ ट्वीट्स में लागू करना है।

बाइनरी टेट्रिस नियम:

  • कार्यक्रम में कम से कम 5 कॉलम और 6 पंक्तियों वाली कोशिकाओं के साथ खेल का मैदान प्रदर्शित होना चाहिए।
    • प्रदर्शन के किसी भी तरीके का उपयोग किया जा सकता है, जब तक कि ब्लॉक और फ़ील्ड के किनारों को स्पष्ट रूप से चिह्नित नहीं किया जाता है।
  • कम से कम दो प्रकार के ब्लॉक होने चाहिए: #और ##। अतिरिक्त ब्लॉक सपोर्ट जैसे कि ###L की तरह आकार वाले एंगल ब्लॉक मेरे द्वारा उतारे जाएंगे: P और बाइनरी टेट्रिस का सबसे पूरा गेम (मूल और रोटेशन फीचर्स की तरह सबसे अधिक ब्लॉक) मेरी खुशी और 50 बार रिपीट करने वाला संभावित इनाम जीतेंगे।
  • शीर्ष पंक्ति में फ़ील्ड में नए ब्लॉक जोड़े जाते हैं, और एक ब्लॉक सेल को केंद्र स्तंभ पर कब्जा करना चाहिए।
  • ब्लॉक एक निश्चित दर पर नीचे की पंक्ति की ओर उतरते हैं। उपयोगकर्ता इनपुट के बिना भी ब्लॉक उतरना चाहिए।
  • जब ब्लॉक फ़ील्ड के निचले हिस्से या निचले ब्लॉक को छूते हैं, तो वे गिरना बंद कर देते हैं और जगह में तय हो जाते हैं। एक नया ब्लॉक जोड़ा गया है।
  • जब पंक्ति के सभी कॉलम ब्लॉक से भर जाते हैं, तो पंक्ति खाली कर दी जाती है, और ऊपर दिए गए सभी निश्चित ब्लॉक एक पंक्ति को छोड़ देते हैं।
  • कार्यक्रम कीपेस का जवाब देना चाहिए। निम्नलिखित कार्य करने वाले 3 अद्वितीय कुंजियाँ होनी चाहिए
    • शिफ्ट करंट ब्लॉक 1 कॉलम छोड़ दिया
    • वर्तमान ब्लॉक दाएं 1 कॉलम को शिफ्ट करें
    • 1 पंक्ति नीचे वर्तमान ब्लॉक को शिफ्ट करें
  • प्रत्येक ट्वीट में केवल 140 अक्षर हो सकते हैं। मल्टी-बाइट वर्णों का उपयोग करना, जिन्हें ट्वीट्स में डाला जा सकता है, की अनुमति है।
  • एक ट्वीट में क्या हो सकता है, इसके नियम सरल हैं। यदि आप इसे ट्वीट कर सकते हैं तो आप इसका उपयोग कर सकते हैं।

  • व्याख्या की गई भाषाएँ समान नियमों का पालन करती हैं। प्रत्येक अनुभाग को चश्मा का पालन करना चाहिए। जब तक कोई रन टाइम एरर नहीं होता है (और बाकी स्पेसिफिकेशंस का पालन ​​करते हुए) आपका जवाब मान्य है गोल्फिंग नियम:
    क्योंकि मूल कार्यान्वयन "ट्वीट करने योग्य" था, इसलिए इस चुनौती की आवश्यकता है। प्रविष्टियों को ट्वीट्स की एक श्रृंखला (140 वर्णों या उससे कम की रेखाओं) के रूप में प्रसारित किया जाना चाहिए।

  • पहले ट्वीट में कंपाइलर / इंटरप्रेटर का नाम, प्रोग्राम का नाम और कोई कमांड लाइन आर्ग्युमेंट होना चाहिए

    • इसे फ़ाइल "P0" के रूप में सहेजा जाएगा
  • निम्नलिखित एन ट्वीट्स में प्रोग्राम को लाइनों की एक श्रृंखला के रूप में होना चाहिए।
    • प्रत्येक ट्वीट को एक फ़ाइल में T <n> नाम से संग्रहीत किया जाएगा, जहां n 1..N है
  • प्रत्येक पंक्ति को पिछली लाइनों में जोड़ा जाएगा और संकलित या व्याख्या की जाएगी। यह एक मान्य ऑब्जेक्ट फ़ाइल या प्रोग्राम का उत्पादन करना चाहिए।
  • प्रोग्राम को अंतिम पंक्ति जोड़ने तक कार्यात्मक होने की आवश्यकता नहीं है।
  • कार्यक्रम निम्नलिखित तरीके से चलाया जाएगा (छद्म बैश)

    interp,prog,args = split P0 /\s/ 
    touch $prog
    for file in ./T* do
      cat $prog file > $prog
      $interp $prog $args
      die("FAIL") if $? #detect error
    done
    

    दुभाषिया एक सामान्य रूप से उपलब्ध निष्पादन योग्य कार्यक्रम होना चाहिए जो पहले से ही टेट्रिस को लागू नहीं करता है।

स्कोरिंग :
सबसे कम ट्वीट्स, जिनमें P0 भी शामिल है। सबसे बड़ी संख्या में अतिरिक्त वर्ण (140 * संख्या के ट्वीट्स - कुल वर्ण संख्या) से टूटे हुए संबंध।

उदाहरण प्रविष्टी

chrome a.htm
<html><div id="output"></div></html>
<script>cool java script here</script>

स्कोर = 3 (334 अतिरिक्त)

cc a.c ;a.out
main(){/*cool prog here*/}

स्कोर = 2 (241 स्पेयर)

tetris

स्कोर = 1 (134 अतिरिक्त) यदि यह कानूनी था, जो यह नहीं है

विशेष धन्यवाद

मुझे यहां असली की सहमति से यह पोस्ट करने की अनुमति दी गई थी


ट्वीट्स में UTF-8 वर्ण हो सकते हैं। क्या यह यहाँ भी सही है (उदाहरण के लिए, क्या हम CJK पात्रों का उपयोग करके एक ट्वीट में 400ish बाइट्स भर सकते हैं?)
रॉबर्ट फ्रेज़र

@RobertFraser यदि आप इसे एक ट्वीट में टाइप कर सकते हैं और इसे भेज सकते हैं तो हाँ
क्रिस्टोफर

अगर कुछ भी जो एक ट्वीट में फिट हो सकता है, खेल है, तो क्या हम अपने प्रत्येक "ट्वीट" के भीतर नई सुर्खियों में आ सकते हैं? ट्वीट्स के भीतर लाइन ब्रेक की अनुमति है।
नॉटजगन

@ नतजगन हाँ। आप इसे ट्वीट कर सकते हैं आप यह कर सकते हैं
क्रिस्टोफर

2
यदि चुनौती इस तरह से होने जा रही है, तो आपको एक सटीक विनिर्देश शामिल करने की आवश्यकता है कि एक ट्वीट में किस चरित्र अनुक्रम की अनुमति है।
feersum

जवाबों:


8

पायथन 3, 5 ट्वीट्स का स्कोर (242 अतिरिक्त, गिनती P0)

टेट्रिस कार्यक्रम का डेमो (पोस्ट किए गए संस्करण की तुलना में थोड़ा अधिक चिकना)

-19 बाइट जोनाथन एलन को धन्यवाद !

ट्वीट के बीच से स्पेयर काउंट नई खबरों को ध्यान में नहीं रखता है।

कलरव 1 (घोषणा, 12 बाइट्स)

python3 t.py

ट्वीट 2 (70 बाइट्स)

import msvcrt as m,os;f=c=s=0;a=34636833;r=range;p=1<<32;t=30
while 1:

ट्वीट 3 (129 बाइट्स)

 if m.kbhit()and b"\xe0"==m.getch():p=[p>>(not(a|f<<1)&p),p,p<<(not(a<<4|f>>1)&p),p>>5-5*(bool(f&p>>5)or p<t)][ord(m.getch())-77]

ट्वीट 4 (113 बाइट्स)

 c+=1;print("\n".join("".join(".#"[1&(f|p)>>i*5+j]for j in r(5))for i in r(6))[::-1]);os.system("cls")
 if c%t<1:

ट्वीट 5 (134 बाइट्स)

  if f&p>>5or p<t:s=~s;f|=p;p=2-s<<26
  else:p>>=5
 for i in r(0,t,5):
  if f|31<<i==f:b=bin(f)[2:].zfill(t);f=int(b[:-i-5]+b[t-i:],2)

पूर्ण कार्यक्रम (449 बाइट्स)

import msvcrt as m,os;f=c=s=0;a=34636833;r=range;p=1<<32;t=30
while 1:
 if m.kbhit()and b"\xe0"==m.getch():p=[p>>(not(a|f<<1)&p),p,p<<(not(a<<4|f>>1)&p),p>>5-5*(bool(f&p>>5)or p<t)][ord(m.getch())-77]
 c+=1;print("\n".join("".join(".#"[1&(f|p)>>i*5+j]for j in r(5))for i in r(6))[::-1]);os.system("cls")
 if c%t<1:
  if f&p>>5or p<t:s=~s;f|=p;p=2-s<<26
  else:p>>=5
 for i in r(0,t,5):
  if f|31<<i==f:b=bin(f)[2:].zfill(t);f=int(b[:-i-5]+b[t-i:],2)

क्या कोई बुराई बिट बिंदु हैकिंग करता है और दो पूर्णांकों में फ़ील्ड और टुकड़ा संग्रहीत करता है। मैं कोशिश करूंगा और जल्द ही स्पष्टीकरण दूंगा।

नोट: यह केवल विंडोज पर चलता है, लेकिन इसे msvcrtgetchऔर "cls"→ के माध्यम से लिनक्स पर स्विच किया जा सकता है "clear"। इसके अतिरिक्त, चरित्र इनपुट पायथन के आईडीएलई पर काम नहीं करता है, इसलिए मैं इसे कहीं और चलाने की सलाह दूंगा।


वाह अच्छा किया! यह लघु
क्रिस्टोफर

1
अच्छा कार्य। \xe0क्या चार बाइट्स एक नहीं हैं, इसलिए ट्वीट 3 को 130 होना चाहिए। आपको लगता है कि time.sleep(.1);c+=1ट्वीट 4 से चूक गए हैं और ऑर्डर बदल दिया है (मुझे नहीं पता है कि ऑर्डर में बदलाव जानबूझकर किया गया है) और फिर \nदो बाइट्स एक नहीं हैं, इसलिए यह 134 होना चाहिए ।
जोनाथन एलन

1
... आपको लगता है कि यह sleepमेरी मशीन के बिना खेलने योग्य लगता है ।
जोनाथन एलन

1
आप परीक्षण c%10<1और हटा भी सकते हैं c=0
जोनाथन एलन

1
@JonathanAllan सुझाव के लिए धन्यवाद! मैं इसे पोस्ट करते समय बहुत जल्दी में था इसलिए ऐसा लगता है कि मैं ट्वीट्स को विभाजित करने के साथ कुछ लापरवाह था।
नॉटजैगन

3

जावास्क्रिप्ट (4 ट्वीट्स / 343 317 बाइट्स / 243 स्पेयर)

हेडर और ट्वीट्स प्रारूप की आवश्यकताओं के बारे में बिल्कुल निश्चित नहीं है, इसलिए कृपया सलाह दें कि इसे सही करने की आवश्यकता है या नहीं। अभी भी थोड़ा और मुंडा जा सकता है मैं निश्चित हूं।

ट्वीट 1 - P0 (11 बाइट्स)

chrome a.js

ट्वीट 2 (82 बाइट्स)

a=y=z=j=0,onkeyup=b=>R((k=b.keyCode-40)?z*2*(d=k+3?k+1?1:.5:2)&65|j*d&a||(z*=d):0)

ट्वीट 3 (126 बाइट्स)

R=d=>{d||(!(!y||a&j>>5)||(y>25?a=0:(31^31&(a|=j)>>y||(a=a>>y+5<<y|a&-1>>>-y-5>>5),y=0)),y-=5),y>=0||(y=30,z=12/(new Date%3+1))

ट्वीट 4 (98 बाइट्स)

j=z<<y;for(o="",i=30;i--;)o+=1<<i&(a|j)?"#":"_",o+=i%5?"":"<br>";O.innerHTML=o},setInterval(R,300)

इसे JSFiddle में चलाएं: https://jsfiddle.net/CookieJon/7Lenhcge/

(कीबोर्ड आयोजनों पर ध्यान देने के लिए आउटपुट फलक पर क्लिक करें)


कृपया प्रश्न के आंशिक रूप से पूर्ण या अमान्य उत्तर पोस्ट न करें। मेटा चर्चा के अनुसार इस उत्तर को तब तक हटा दिया जाना चाहिए जब तक कि यह प्रश्न में उल्लिखित युक्ति का अनुपालन न करे
PunPun1000

@ PunPun1000 मेरी क्षमायाचना। यह अब पूरा हो चुका है और अनिर्धारित है।
बंपी

कोई बात नहीं, मैं अपनी नीचता दूर कर दूंगा। PPCG में आपका स्वागत है।
पुनपुन 1000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.