एक कॉस्मिक कॉल भेजें


16

ब्रह्मांडीय कॉल संदेश 1999 और 2003 में अंतरिक्ष में भेजा के रूप में विस्तृत यह 23 127 * 127px मोनोक्रोम बिटमैप छवियों का बना है है यहाँ

आपका मिशन एक ऐसा प्रोग्राम लिखना है जो पूरे 127 * 2921px संदेश को प्रदर्शित करता है, या तो एक पाठ (शून्य से बना, लोगों और लाइन को तोड़ता है) या एक छवि के रूप में (स्क्रीन पर खींचा या डिस्क पर सहेजा गया)। विजेताओं की दो श्रेणियां होंगी: एक पाठ आउटपुट के लिए और एक छवि आउटपुट के लिए।

आम खामियों को छोड़कर सभी चालों की अनुमति है।

इसे 23 पृष्ठों को अलग से आउटपुट करने की अनुमति है।

इसे 23 कार्यक्रमों तक लिखने की अनुमति है (जैसे, प्रत्येक पृष्ठ के लिए एक) और अपने स्कोर को निर्धारित करने के लिए उनके आकार का योग करें।

इसे आपके प्रोग्राम (नों) के साथ 23 बाइनरी फ़ाइलों तक उपयोग करने की अनुमति है। उनका वजन आपके स्कोर में गिना जाता है।

सबसे छोटा कोड (बाइट में) जीतता है।

प्रति पिक्सेल 1 बिट पर, छवि में 127 * 127 * 23/8 = 46370 बाइट्स + 7 बिट्स डेटा होते हैं। (चेतावनी: यदि आप पिक्सेल मूल्यों को 46371 बाइट्स में संग्रहीत करते हैं तो यह एक अतिरिक्त शून्य आउटपुट करने की अनुमति नहीं है)

टेक्स्ट आउटपुट के लिए ट्रेलिंग न्यूलाइन / स्पेस की अनुमति है।

कॉस्मिक कॉल के काले पिक्सेल के अलावा विज़ुअल आउटपुट में कोई ब्लैक पिक्सेल नहीं हो सकता है। इसे एक कॉलम (सही तरीके से ऑर्डर किया गया) में खींचा जा सकता है, या 23 छवियों में विभाजित किया जा सकता है, या एनिमेटेड (जीआईएफ की तरह) भी सही तरीके से ऑर्डर किया जा सकता है।

अनुलग्नक: पाठ आउटपुट , और छवि आउटपुट पुन: पेश करने के लिए:

कॉस्मिक कॉल


19
"यह कई कार्यक्रमों को लिखने की अनुमति है (जैसे, प्रत्येक पृष्ठ के लिए एक) और अपने स्कोर को निर्धारित करने के लिए उनके आकार का योग करें।" यह खतरनाक है: खाली जेली कार्यक्रम प्रिंट करता है 0, खाली घोंघे कार्यक्रम प्रिंट 1, और खाली गोल्फस्क्रिप्ट कार्यक्रम एक नई रेखा प्रिंट करता है। । कोई व्यक्ति 0-बाइट, 373888-प्रोग्राम उत्तर :)
लिन

हाहा, ठीक है, इसलिए मैं कार्यक्रमों की संख्या को 23 तक सीमित कर दूंगा।
xem

अनुगामी newlines / रिक्त स्थान की अनुमति है?
लोवजो

हां । । । । । ।
xem

क्या हम किसी अन्य फ़ाइल का उपयोग कर सकते हैं या क्या हमें केवल स्रोत फ़ाइल पर ही काम करना है? उदाहरण के लिए। क्या मैं एक संपीड़ित संस्करण को स्टोर करने के लिए IO का उपयोग कर सकता हूं और फिर इसे डिकम्प्रेस कर सकता हूं या क्या सब कुछ कोड में शाब्दिक होना चाहिए।
उम्मीद है कि

जवाबों:


18

जीआईएफ, 27386 बाइट्स

यहाँ व्यक्तिगत GIF फ्रेम में कटा हुआ मूल संचरण के पृष्ठ हैं, यह उन सभी में से 1 पीएनजी जितना छोटा नहीं निकला :(

ब्रह्मांडीय कॉल एनिमेटेड GIF


7
नमस्कार, और PPCG में आपका स्वागत है! जबकि यह जीतने वाला नहीं है , यह अभी भी एक अच्छा पद है।
NoOneIsHere

क्या आपने ऐसा किया? यदि आप संक्रमणों पर योगात्मक पारदर्शिता का उपयोग करते हैं तो 300bytes या तो बचा सकते हैं।
मैजिक ऑक्टोपस उर्फ़

7

HTML, 16012b

मैंने पीएनजी 8 में छवि को संपीड़ित किया, इसे एक पाठ संपादक में खोला, जोड़ा

<svg onload="document.body.innerHTML='<img src=#>'">

अंत में, और ध्वनि:

डेमो: http://xem.github.io/miniCosmicCall/


नायब: बस अपील <img src=#> काम करना भी बहुत काम आता है, लेकिन यह बहुत सारा कचरा दिखाई देता है, इसलिए मैं इसे पसंद नहीं करता।


पुनश्च: मस्ती के लिए, मैंने पूरा संदेश एक एकल, निष्पादन योग्य ट्वीट में डाला (आप इसे ब्राउज़र कंसोल में कॉपी कर सकते हैं और छवि दिखाई देती है):

https://twitter.com/MaximeEuziere/status/742440423994580992


1
सबसे छोटा उत्तर + 1
आउटगोल्फ

मेरा अंतिम शब्द अभी तक नहीं कहा!
xem

मुझे यकीन है कि मैं समझ नहीं सकता कि आप यहाँ क्या कहना चाहते हैं।
आउटगॉल्फ

क्षमा करें, मेरा मतलब है कि मैं कुछ छोटा करने की कोशिश कर रहा हूं
xem

6

पायथन 2.7 - 10,971 8077 बाइट्स

अपडेट करें:

  • LZMA वास्तव में किसी कारण से मेरे लिए काम नहीं करता है, इसलिए मैं Deflate पर वापस चला गया।

  • मुझे PNG को और भी संक्षिप्त करने के लिए एक ऑनलाइन टूल मिला (वे कहते हैं कि वे हानिपूर्ण संपीड़न का उपयोग करते हैं, लेकिन सरणी अपरिवर्तित रहती है)

  • मैंने __main__.pyस्क्रिप्ट को थोड़ा और आगे बढ़ाया ...
  • मैंने पाया कि मैं एक कदम छोड़ रहा था (ज़िप संग्रह से डेटा फ़ाइलों को निकालना)
  • जोड़ा गया डीएल लिंक (नीचे देखें)

अधिकांश संपीड़न एल्गोरिदम डेटा को 1 आयामी सरणी के रूप में देखते हैं, और इसलिए कॉस्मिक कॉल में प्रदर्शित दोहराए जाने वाले 2 आयामी वर्णों को कैप्चर नहीं कर सकते हैं (IMO भी एलियंस को समझने में कठिन बनाता है: P)।

सबसे पहले, मैंने प्रत्येक चरित्र को 7 * 5 सरणी के रूप में चुना और सभी अद्वितीय पात्रों की सूची बनाई (101 यदि मुझे याद है)। तब मैंने छवि पर ध्यान दिया, और जब एक चरित्र मिला, तो उस चरित्र की स्थिति और सूचकांक (चरित्र सूची में) दर्ज किए गए थे।

उन पदों को एक एकल इंट के साथ दर्शाया जा सकता है, हालांकि 2k से अधिक चार्ट पाए जाते हैं, और 0-370966 (डिवमॉड फॉर्म) से लेकर प्रत्येक को 3 बाइट तक की आवश्यकता होती है। हालाँकि मैंने वर्ण स्थिति को एकत्र किया है, इसलिए मैंने इसके बजाय ऑफ़सेट स्थिति में बदल दिया, जिससे अधिकांश संख्या 1 बाइट से कम हो गई। मैंने इस सूची को utf-8 में उन कुछ संख्याओं के लिए जिम्मेदार ठहराया है जो 1 बाइट से अधिक थीं

सभी मिलान किए गए वर्णों को रिकॉर्ड करने और निकालने के बाद, मैंने अधिकतम संपीड़न के साथ png को बचाया। मैंने तब अजगर पुनर्निर्माण स्क्रिप्ट (उसी प्रक्रिया को उल्टा), पीएनजी, चैट बैक्टीरिया टेम्पलेट, और चरित्र स्थिति सूची को सभी को ज़िप फ़ाइल में पैक किया, ताकि इस तथ्य का फायदा उठाया जा सके कि अजगर एक तर्क के रूप में एक फ़ोल्डर या ज़िप फ़ाइल ले सकता है, और यह नामित शीर्ष स्तर की किसी भी फ़ाइल पर निष्पादन शुरू करेगा__main__.py । मैंने सबसे अच्छा संपीड़न प्राप्त करने के लिए 7z के साथ थोड़ा सा खेला, जो 1M तानाशाह और 32 बिट शब्दों के साथ LZMA निकला।

यहाँ डिकोडर स्क्रिप्ट है (अभी भी टिप्पणियों के साथ)

import sys,zipfile as z
z.ZipFile(sys.argv[0]).extractall() #extract data files from zip to cwd
from numpy import*
o=open  #next line overwrites open, which I need
from PIL.Image import*
from scipy.ndimage import*
a=imread('p')[:,:,0]/255 #read image file
a[:2414,0]=0 #draw vertical borders
a[2541:,0]=0
a[2412:,-1]=0
a[:2287,-1]=0
for x in range(0,2921,127):a[[x,x+126],:]=0 #draw horizontal borders
with o('c','rb') as f:t=f.read();C=[int(i)for c in t for i in'{0:08b}'.format(ord(c))] #read character template file and convert to list of bytes
C=array(C[:-1]).reshape([101,7,5]) #re-slice (extra 0 appended to make even number of bytes) and re-shape
with o('l','rb') as f:L=array([ord(x)for x in f.read().decode('utf_8')]).reshape([2158,2]) #read decode and reshape positional list
p=0 #relative position accumulator
for e in L:p+=e[0];x,y=p%127,p/127;a[y:y+7,x:x+5]=C[e[1]] #divmod for x,y position and paste character template onto array at position
i=fromarray(a*255)
i.show()
जिप फाइल के लिए डाउनलोड करने के लिए लिंक ...


मैं :) हूं (और इस स्कोर के लिए बधाई!)
xem

@ xem ... पोस्ट करने के कुछ समय बाद, मैंने इसके साथ गड़बड़ करना जारी रखा, और यह टूट गया है rn (अजगर मुझे लोड पर किसी प्रकार की zlib त्रुटि दे रहा है) यह भी मेरे काम के कंप्यूटर पर है। अगर मैं इसे कार्यशील स्थिति में वापस ला सकता हूं तो मैं इसे सोमवार तक रखूंगा। : पी
एरोन

मुझे ऐसा लगता है कि कुछ अधिक बाइट्स को बचाने के लिए मैं पीएनजी संपीड़न और किन वर्णों के बीच एक संतुलन को अनुकूलित कर सकता हूं (कम इस्तेमाल किया गया) ..
हारून

1
@xem मैंने एक dl लिंक जोड़ा ...
एरॉन

2 डी संपीड़न विचार प्यार ... 3 डी संपीड़न के बारे में क्या? (छवियों को रोकते हुए)
नॉनलाइनरफोर्स

3

Gzip bzip2 खोल में, २०,९१४ १८,९६५ बाइट्स

प्रश्न में प्रदान किए गए पाठ आउटपुट के साथ आउटपुट डेटा फ़ाइल बनाएं, bzip2इसे फ़ाइल का नाम बदलें s। यह तब अनुमति देता है:

bzcat s

काम करने के लिए। तो यह 18958 बाइट डेटा और 7 बाइट कमांड तक जोड़ता है।


1
मुझे लगता है कि आप इसके बजाय 'bzip2' का उपयोग करके कश्मीर के एक जोड़े को बचा सकते हैं!
डोम हेस्टिंग्स

@DomHastings: मैंने आखिरकार आपकी सलाह का पालन किया।
जूली पेलेटियर

आगे के शोध के लिए: बबलगम और ज़ोपफली
डिजिटल ट्रॉमा

2

पायथ, 46381 बाइट्स

स्पष्ट कारणों से इसे यहाँ पोस्ट नहीं किया जा सकता है।

jc.BC"<too long>"127

नमूना।

कार्यक्रम के हेक्सडंप के पास्टबिन।


तुम लैटिन में 7 बिट्स को सांकेतिक शब्दों में बदलना 1, चार सही? सरल और अच्छा! :) बेशक, मैं बहुत बेहतर संपीड़न की तलाश में हूँ: p
xem

1
हां, मैं बेहतर कम्प्रेशन बना रहा हूं। मैंने उन्हें 8 से 8 तक, वैसे भी इनकोडिंग किया।
लीक नून

वैसे, मुझे आश्चर्य है कि आपको यह स्कोर कैसे मिला: 127 * 127 * 23/8 = लगभग 46371 बाइट्स। 355 अन्य बाइट्स कहां गए?
xem

धन्यवाद, यह वास्तव में अब यह मेल खाता है। आप वास्तव में उपरोक्त कोड में अतिरिक्त 10 बाइट्स ( jc.BC""127") देख सकते हैं।
लीक नून

आप अतिरिक्त बिट के साथ कैसे व्यवहार करते हैं? (पूरा संदेश 46370 बाइट्स + 7 बिट्स लेता है। आपका अंतिम बाइट एक अतिरिक्त शून्य का उत्पादन कर सकता है, जो एक वैध आउटपुट नहीं है)
xem

2

बैश + वेबपी बाइनरी, 11 + 15330 = 15341 बाइट्स

जैसा कि नियम यह बताता है:

आपका मिशन एक प्रोग्राम लिखना है जो पूरे 127 * 2921px संदेश को प्रदर्शित करता है ... या एक छवि के रूप में (स्क्रीन पर खींचा गया) या डिस्क पर सहेजा गया )।

इसे आपके प्रोग्राम (नों) के साथ 23 बाइनरी फ़ाइलों तक उपयोग करने की अनुमति है।उनका वजन आपके स्कोर में गिना जाता है।

तथा

आम खामियों को छोड़कर सभी चालों की अनुमति है।

... मैं मूर्खतापूर्ण कुछ सरल पोस्ट करने के लिए विरोध नहीं कर सका।

प्रोग्राम बैश में है और यह डिस्क पर सेव करके इमेज को आउटपुट करता है।
यह 1 बाइनरी फ़ाइल का उपयोग करता है, जो कि छवि फ़ाइल भी होती है (हाँ वेबपी एक छवि प्रारूप है), इसलिए प्रोग्राम उतना कम कर सकता है ... उस फ़ाइल की एक प्रतिलिपि बनाएँ।

तो, कोड (11 बाइट्स):

cp b a.webp

साथी बाइनरी को "बी" नाम दिया गया है, कोड को सही एक्सटेंशन ("a.webp") के साथ डिस्क पर छवि फ़ाइल लिखता है।

मुझे द्विआधारी अपलोड करने का बहुत कम कारण दिखाई देता है, क्योंकि यह तुच्छ रूप से चलकर बनाया गया है

cwebp -z 9 <downloaded input file> b

यह 15330 बाइट्स के साथ फाइल तैयार करता है। अगर कोई चाहे तो मैं इसे कहीं अपलोड कर सकता हूं।

NB: दोषरहित संपीड़न मोड -zको cwebpसक्रिय करता है। 9संपीड़न ताकत (अधिकतम) है।


ओपी लेखक को यह पसंद है
xem

1

पायथन 3, 64513 बाइट्स

केवल ASCII का उपयोग करें!

http://pastebin.com/PMLb4Xti

पुराना संस्करण, 64529 बाइट्स: http://pastebin.com/nteYkUtM


import lzma,base64,os
आउटगोल्फ

@ E @Gʀɪᴋᴛʜᴇ धन्यवाद!
TuxCrafting

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