कोड गोल्फ का एनीमेशन


28

जब मुझे कोड-गोल्फ प्रविष्टियां दिखाई देती हैं, जो कुछ वर्णों को बंद कर देती हैं, तो कोड को नीचे गिराते हुए, मैं साइड-बाय-साइड अंतर के लिए संपादित इतिहास को देखता हूं। देखें और जानें :)

यह चुनौती एक प्रोग्राम बनाने के लिए है जो सबसे सुंदर एनिमेटेड अंतर पैदा करता है।

  • इनपुट पाठ संस्करणों की किसी भी क्रमबद्ध श्रृंखला होगी।
  • कार्यक्रम किसी भी प्रोग्रामिंग भाषा में लिखा जा सकता है।
  • यह अनुमति दी जाती है कि कार्यक्रम कुछ विशिष्ट प्रोग्रामिंग भाषाओं में इनपुट डेटा तक ही सीमित है।
  • कार्यक्रम को विशिष्ट इनपुट डेटा के लिए ट्यून नहीं किया जाना चाहिए; कार्यक्रम सामान्य होना चाहिए और पाठ संस्करणों की किसी भी क्रमबद्ध श्रृंखला के लिए काम करना चाहिए।
  • इनपुट में प्रत्येक संस्करण के लिए आउटपुट एनीमेशन में एक समान समय होना चाहिए जहां संस्करण का पूरा पाठ प्रदर्शित होता है। आपको संस्करण चरणों के बीच अंतर को चेतन करना होगा, और सभी संस्करण चरणों को आउटपुट में और वर्तमान में होना चाहिए। इन मुख्य फ़्रेमों पर, संस्करण का आकार दिखाया जाना चाहिए और दर्शक को यह समझना चाहिए कि यह एक पूर्ण संस्करण है जो वे उस बिंदु पर देख रहे हैं।
  • हो सकता है कि प्रोग्राम किसी तीसरे पक्ष के कोड का उपयोग अंतर की गणना करने के लिए न करे।
  • सिंटैक्स हाइलाइटिंग आउटपुट वैकल्पिक है। यदि प्रोग्राम सिंटैक्स को रंग देता है, तो ऐसा करने के लिए वह किसी तीसरे पक्ष के कोड का उपयोग नहीं कर सकता है।
  • आउटपुट एक एनिमेटेड GIF होगा।
  • GIF को लेखक करने के लिए कार्यक्रम तीसरे पक्ष के पुस्तकालय का उपयोग कर सकता है।
  • यह एक , इसलिए इस साइट पर लोकप्रियता-प्रतियोगिता की परिभाषा के अनुसार , सबसे अधिक वोटों के साथ प्रवेश जीतता है

यहाँ एक सरल उदाहरण स्क्रिप्ट है जो पायथन के ndiff और तकिया के अल्पविकसित एनिमेटेड GIF समर्थन का उपयोग करता है और प्रत्येक ऐड और स्टेप को हटाता है:

व्यक्तिगत रूप से, मुझे लगता है कि यह एक बहुत खराब काम है। यह सिंटैक्स हाइलाइटिंग नहीं करता है, यह कोशिश नहीं करता है और कोड विखंडू को स्थानांतरित करता है जो पुनर्व्यवस्थित हो जाता है, ऐसा महसूस नहीं होता है कि कोई व्यक्ति इसे संपादित कर रहा है, और इसी तरह। यह कुंजी तख्ते पर बाइट्स में इनपुट के आकार को दिखाने वाले नियमों को भी तोड़ता है, और यह थर्ड पार्टी लाइब्रेरी का उपयोग करता है। सुधार के लिए कमरे के बहुत सारे!

और उम्मीद है कि लोकप्रिय प्रविष्टियाँ codegolf.stackexchange.com समुदाय के लिए भी उपयोगी मजेदार उपकरण बन जाएंगी। अगर कार्यक्रमों को चलाना और उपयोग में लाना आसान हो तो इसकी सराहना की जाती है।


1
विस्तारित बातचीत के रूप में शुद्ध किए गए टिप्पणियाँ यहाँ रुकने के लिए आ रही हैं। इस पोस्ट के बारे में चर्चा इस मेटा प्रश्न पर पाई जा सकती है ।
दरवाज़े

जवाबों:


11

(ओपी)

यहाँ छवि विवरण दर्ज करें

यह प्रश्न में उदाहरण पायथन लिपि पर आधारित है।

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

जीनोम को संरेखित करने के लिए मल्टी सीक्वेंस एलाइनमेंट एल्गोरिदम हैं और वे आसन्न फ्रेम के प्रत्येक जोड़े पर विचार करने की तुलना में बेहतर काम कर सकते हैं?

मुझे सुखद आश्चर्य हुआ कि अंतर के लिए संपादित दूरी को लागू करना कितना सरल था , और इसे पायथन के difflib.ndiffप्रारूप के अनुकूल बना दिया । वेब पर पाई जाने वाली संपादित दूरी के बहुत सारे पायथन कार्यान्वयन हैं, लेकिन मुझे लगता है कि मेरा सूत्रीकरण यह है कि थोड़ा सा tidier और वास्तव में तालिका में पथ का निर्धारण करने वाले मुश्किल लेकिन आवश्यक भाग से संबंधित है; हमारे संदर्भ में, हमें एक को दूसरे में बदलने के चरणों को जानने की आवश्यकता है और न कि केवल कितने कदम हैं।

मैंने एक बहुत ही सरल tokenizer का उपयोग करते हुए वाक्यविन्यास पर प्रकाश डाला , जो कि अपनी शिथिलता, पायथन और इस तरह सहित अधिकांश सी-जैसी भाषाओं के साथ सामना करने में सक्षम होना चाहिए। यह स्रोत को विराम चिह्न, व्हाट्सएप, स्ट्रिंग्स (एस्केप सपोर्ट के साथ) में विभाजित करता है और बाकी सब कुछ एक पहचानकर्ता है और कीवर्ड की सूची के खिलाफ जांचा जाता है। रंग भी परिवर्तन करने के लिए आसान है।

एक गतिशील भाषा में वाक्य रचना हाइलाइटिंग को एकीकृत करना आसान था; हाइलाइटर चरित्र और रंग जोड़े की एक सूची का उत्पादन करता है, और अलग-अलग अज्ञेय है कि क्या इसके अलग-अलग तार या तुलनात्मक रूप से कोई मनमाना पुनरावृत्तियाँ हैं! एक दिलचस्प - और जानबूझकर - पहले हाइलाइटिंग और फिर अलग करने का प्रभाव यह है कि जो अक्षर अपरिवर्तित रहते हैं लेकिन रंग बदलते हैं वे एनिमेटेड हो जाते हैं। मैं प्रत्येक फ्रेम के हाइलाइट की गणना नहीं करना चाहता था क्योंकि इसका मतलब यह होगा कि जैसे ही आप एक समापन स्ट्रिंग को हटाते हैं आप अचानक स्ट्रिंग के रूप में पाठ का एक बड़ा हिस्सा फ्लैश करेंगे।

GIF को संलेखन करने के लिए पायथन का समर्थन सीमित है। PIL ऐसा नहीं करता है, और तकिया इसे बुरी तरह से करता है। मैं पिलो का उपयोग करता हूं, लेकिन फिर पिस्सू को संपीड़ित करने और लूपिंग आदि को जोड़ने के लिए दौड़ना पड़ता है; तकिया सही ढंग से फ्रेम टाइमिंग नहीं लिखता है और न ही आपको निपटान के तरीके आदि का प्रबंधन करने देता है, जो कि शर्म की बात है क्योंकि अलग-अलग दृश्य की इतनी बेहतर समझ है कि पोस्ट-प्रोसेसिंग कदम से अधिक चपटा फ्रेम होता है :(

सोर्स कोड


1
मैंने एक ही अलग एल्गोरिथ्म लागू किया। बाद में मैंने साइथन का उपयोग करके इसे फिर से लिखा और 100x स्पीडअप प्राप्त किया।
रे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.