ส่งสายจักรวาล


16

โทรจักรวาลเป็นข้อความที่ส่งเข้ามาในพื้นที่ในปี 1999 และปี 2003 มันทำจาก 23 127 * 127px ภาพขาวดำบิตแมปที่ระบุรายละเอียดที่นี่

ภารกิจของคุณคือการเขียนโปรแกรมที่แสดงข้อความ 127 * 2921px ทั้งหมดไม่ว่าจะเป็นข้อความ (ทำจากศูนย์ศูนย์และตัวแบ่งบรรทัด) หรือเป็นรูปภาพ (วาดบนหน้าจอหรือบันทึกไว้ในดิสก์) จะมีผู้ชนะสองประเภท: หนึ่งประเภทสำหรับข้อความและอีกหนึ่งประเภทสำหรับรูปภาพ

เทคนิคทั้งหมดได้รับอนุญาตยกเว้นช่องโหว่ทั่วไป

อนุญาตให้ส่งออก 23 หน้าแยกกัน

อนุญาตให้เขียนโปรแกรมได้สูงสุด 23 โปรแกรม (เช่นเดียวสำหรับแต่ละหน้า) และรวมขนาดเพื่อกำหนดคะแนนของคุณ

ได้รับอนุญาตให้ใช้ไฟล์ไบนารีได้สูงสุด 23 ไฟล์ข้างๆโปรแกรมของคุณ น้ำหนักของพวกเขาจะถูกนับในคะแนนของคุณ

รหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

ที่ 1 บิตต่อพิกเซลภาพประกอบด้วย 127 * 127 * 23/8 = 46370 ไบต์ + 7 บิตของข้อมูล (คำเตือน: ไม่อนุญาตให้ส่งออกศูนย์พิเศษหากคุณเก็บค่าพิกเซลเป็น 46371 ไบต์)

ขึ้นบรรทัดใหม่ / เว้นวรรคได้รับอนุญาตสำหรับการส่งออกข้อความ

เอาต์พุตภาพไม่สามารถมีพิกเซลสีดำใด ๆ นอกเหนือจากพิกเซลสีดำของการโทรจักรวาล มันสามารถวาดในหนึ่งคอลัมน์ (สั่งอย่างถูกต้อง) หรือแยกใน 23 ภาพหรือภาพเคลื่อนไหว (เช่น gif) ยังสั่งได้อย่างถูกต้อง

สิ่งที่แนบมา: เอาท์พุทข้อความและเอาท์พุทภาพที่จะทำซ้ำ:

โทรจักรวาล


19
“ ได้รับอนุญาตให้เขียนหลาย ๆ โปรแกรม (เช่นเดียวสำหรับแต่ละหน้า) และรวมขนาดเพื่อกำหนดคะแนนของคุณ”สิ่งนี้เป็นอันตราย: โปรแกรมเยลลี่เปล่าพิมพ์ออกมา0ว่างเปล่าพิมพ์โปรแกรมSnails ที่ว่างเปล่าพิมพ์1และโปรแกรมGolfScript ที่ว่างเปล่าพิมพ์ขึ้นบรรทัดใหม่ . บางคนอาจจะส่งคำตอบ 0 ไบต์ 373,888 โปรแกรม :)
ลินน์

ฮ่าฮ่าโอเคดังนั้นฉันจะ จำกัด จำนวนรายการไว้ที่ 23
xem

ขึ้นบรรทัดใหม่ / ช่องว่างที่ได้รับอนุญาต?
Loovjo

อ๋อ . . . . .
xem

เราสามารถใช้ไฟล์อื่นหรือเราต้องทำงานกับไฟล์ต้นฉบับเพียงอย่างเดียวได้หรือไม่? เช่น. ฉันสามารถใช้ IO เพื่อเก็บรุ่นที่บีบอัดแล้วขยายขนาดหรือทำทุกอย่างที่จำเป็นต้องเป็นตัวอักษรในรหัส
หวังว่าจะช่วยให้ดี

คำตอบ:


18

GIF, 27386 ไบต์

นี่คือหน้าของการส่งต้นฉบับที่แบ่งเป็นเฟรม GIF แต่ละเฟรมมันไม่ได้มีขนาดเล็กเท่ากับ 1 PNG ของพวกเขาทั้งหมด :(

ภาพเคลื่อนไหวการโทรจักรวาลแบบ GIF


7
สวัสดีและยินดีต้อนรับสู่ PPCG! แม้ว่าสิ่งนี้จะไม่ชนะแต่ก็ยังคงเป็นโพสต์ที่ดี
NoOne อยู่ที่นี่

คุณอยู่ที่นั่นเหรอ? อาจสามารถบันทึก 300bytes หรือมากกว่านั้นหากคุณใช้แผ่นใสเพิ่มเติมในการเปลี่ยน
Magic Octopus Urn

7

HTML, 16012b

ฉันบีบอัดรูปภาพใน PNG8 เปิดในโปรแกรมแก้ไขข้อความต่อท้าย

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

ในตอนท้ายและท้าย:

การสาธิต: http://xem.github.io/miniCosmicCall/


NB: ผนวกเพียง <img src=#>งานได้เช่นกัน แต่มันทำให้มองเห็นขยะได้มากมายดังนั้นฉันจึงไม่ชอบ


PS: เพื่อความสนุกฉันยังใส่ข้อความทั้งหมดไว้ในทวีตที่ปฏิบัติการได้ (คุณสามารถคัดลอกวางไว้ในคอนโซลของเบราว์เซอร์และภาพจะปรากฏขึ้น):

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


1
คำตอบที่สั้นที่สุด +1
Erik the Outgolfer

ยังไม่ได้พูดคำสุดท้ายของฉัน!
xem

ฉันแน่ใจว่าฉันไม่เข้าใจสิ่งที่คุณตั้งใจจะพูดที่นี่
Erik the Outgolfer

ขอโทษฉันหมายถึงฉันพยายามทำบางสิ่งให้เล็กลง
xem

6

Python 2.7 - 10971 8077 ไบต์

อัปเดต:

  • LZMA จริงด้วยเหตุผลบางอย่างไม่ได้ผลสำหรับฉันดังนั้นฉันกลับไปที่ Deflate

  • ฉันพบเครื่องมือออนไลน์เพื่อบีบอัด PNG ให้ดียิ่งขึ้น (พวกเขาบอกว่าใช้การบีบอัดแบบ lossy แต่อาร์เรย์ยังคงไม่เปลี่ยนแปลง)

  • ฉันเล่นกอล์ฟ __main__.pyอีกเล็กน้อย ...
  • ฉันพบว่าฉันข้ามขั้นตอนหนึ่งไปแล้ว (แตกไฟล์ข้อมูลออกจากไฟล์ zip)
  • เพิ่มลิงค์ DL (ดูด้านล่าง)

อัลกอริธึมการบีบอัดส่วนใหญ่มองข้อมูลเป็นอาเรย์ 1 มิติดังนั้นจึงไม่สามารถจับภาพตัวอักษร 2 มิติที่ซ้ำกันที่แสดงในการเรียกของจักรวาล (IMO ยังทำให้มนุษย์ต่างดาวเข้าใจยากเช่นกัน: P)

ก่อนอื่นฉันเลือกตัวละครแต่ละตัวเป็นอาร์เรย์ 7 * 5 และทำรายการของตัวละครที่ไม่ซ้ำกันทั้งหมด (101 ถ้าฉันจำได้) จากนั้นฉันวนซ้ำรูปภาพและเมื่อพบตัวละครตำแหน่งและดัชนีของตัวละครนั้น (ในรายการตัวละคร) จะถูกบันทึก

ตำแหน่งเหล่านั้นสามารถแสดงด้วย int เดียว แต่มีมากกว่า 2K ตัวอักษรและตำแหน่งตั้งแต่ 0-370966 (รูปแบบ divmod) ต้องการมากถึง 3 ไบต์ อย่างไรก็ตามฉันเก็บตำแหน่งอักขระตามลำดับดังนั้นฉันจึงเปลี่ยนตำแหน่งสัมบูรณ์เป็นตำแหน่งออฟเซ็ตแทนทำให้ตัวเลขส่วนใหญ่น้อยกว่า 1 ไบต์ ฉันเข้ารหัสรายการนี้ใน utf-8 เพื่อบัญชีสำหรับจำนวนน้อยที่มากกว่า 1 ไบต์

หลังจากบันทึกและลบตัวอักษรที่ตรงกันทั้งหมดฉันบันทึก png ด้วยการบีบอัดสูงสุด จากนั้นฉันก็บรรจุสคริปต์การสร้างใหม่ของไพ ธ อน (โพรเซสเดียวกัน), png, เทมเพลต chatacter และรายการตำแหน่งอักขระทั้งหมดลงในไฟล์ซิปเพื่อใช้ประโยชน์จากข้อเท็จจริงที่ว่าไพ ธ อนสามารถใช้โฟลเดอร์หรือไฟล์ซิปเป็นอาร์กิวเมนต์และ มันจะเริ่มดำเนินการที่ไฟล์ใด ๆ ในระดับบนสุดชื่อ__main__.pyในระดับบนสุดที่มีชื่อ ฉันเล่นกับ 7z นิดหน่อยเพื่อให้ได้การบีบอัดที่ดีที่สุดซึ่งกลายเป็น LZMA ด้วย 1M dict และ 32 บิตคำ

นี่คือสคริปต์ถอดรหัส (golfed แต่ยังมีความคิดเห็น)

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()
ลิงค์สำหรับดาวน์โหลดไฟล์ zip ...


I am :) (และขอแสดงความยินดีกับคะแนนนี้!)
xem

@xem ... หลังจากโพสต์ไม่นานฉันยังคงยุ่งกับมันและมันก็หัก rn (หลามทำให้ฉันมีข้อผิดพลาดในการโหลด zlib) ขณะที่มันอยู่ในคอมพิวเตอร์ที่ทำงานของฉัน ฉันจะวางมันในวันจันทร์ถ้าฉันสามารถเปลี่ยนกลับเป็นสถานะการทำงานได้ : P
Aaron

ฉันรู้สึกว่าเป็นไปได้ที่จะปรับสมดุลระหว่างการบีบอัด png และอักขระที่ฉันเข้ารหัส (ที่ใช้น้อยกว่า) เพื่อบันทึกไบต์อีกไม่กี่ ..
Aaron

1
@xem ฉันจะเพิ่มการเชื่อมโยงดล ...
แอรอน

ชอบแนวคิดการบีบอัด 2 มิติ ... แล้วการบีบอัด 3 มิติคืออะไร (ซ้อนภาพ)
NonlinearFruit

3

Gzip bzip2ในเปลือก20914 18965 ไบต์

จัดทำไฟล์ข้อมูลผลลัพธ์ด้วยข้อความที่ให้ไว้ในคำถาม bzip2sมันและเปลี่ยนชื่อไฟล์ไปยัง สิ่งนี้จะช่วยให้:

bzcat s

เพื่อทำงาน ดังนั้นจึงเพิ่มข้อมูลได้สูงถึง 1,9588 ไบต์และคำสั่ง 7 ไบต์


1
ฉันคิดว่าคุณสามารถประหยัด k ได้สองสามอันโดยใช้ 'bzip2' แทน!
Dom Hastings

@ DomHastings: ในที่สุดฉันก็ทำตามคำแนะนำของคุณ
Julie Pelletier

สำหรับการวิจัยต่อไป: ทาสีและzopfli
บาดเจ็บทางดิจิทัล

2

Pyth, 46381 ไบต์

ด้วยเหตุผลที่ชัดเจนมันไม่สามารถโพสต์ได้ที่นี่

jc.BC"<too long>"127

ตัวอย่าง.

Pastebin ของ hexdump ของโปรแกรม


คุณเข้ารหัสบิต 7 คูณ 7 ในตัวอักษรละติน -1 ใช่ไหม? เรียบง่ายและดี! :) แน่นอนฉันกำลังมองหาการบีบอัดที่ดีกว่ามาก: p
xem

1
ใช่ฉันทำการบีบอัดที่ดีขึ้น ฉันเข้ารหัสพวกเขา 8 คูณ 8 โดยวิธี
Leun Nun

อย่างไรก็ตามฉันสงสัยว่าคุณได้รับคะแนนนี้ได้อย่างไร: 127 * 127 * 23/8 = ประมาณ 46371 ไบต์ 355 ไบต์อื่นหายไปไหน
xem

ขอบคุณมันตรงกับตอนนี้เลย คุณสามารถเห็น 10 ไบต์พิเศษในรหัสด้านบน ( jc.BC""127")
Leun Nun

คุณจัดการกับบิตพิเศษอย่างไร (ข้อความทั้งหมดจะใช้เวลา 46,370 ไบต์ + 7 บิตไบต์สุดท้ายของคุณอาจสร้างศูนย์พิเศษซึ่งไม่ได้เป็นผลผลิตที่ถูกต้อง.)
xem

2

Bash + WebP binary, 11 + 15330 = 15341 bytes

ตามกฎระบุสิ่งนี้:

ภารกิจของคุณคือการเขียนโปรแกรมที่แสดงข้อความ 127 * 2921px ทั้งหมด ... หรือเป็นรูปภาพ (วาดบนหน้าจอหรือบันทึกไว้ในดิสก์ )

ได้รับอนุญาตให้ใช้ไฟล์ไบนารีได้สูงสุด 23 ไฟล์ข้างๆโปรแกรมของคุณ น้ำหนักของพวกเขาจะถูกนับในคะแนนของคุณ

และ

เทคนิคทั้งหมดได้รับอนุญาตยกเว้นช่องโหว่ทั่วไป

…ฉันไม่สามารถต้านทานการโพสต์สิ่งที่ง่ายอย่างโง่เขลา

โปรแกรมอยู่ในทุบตีและส่งภาพโดยบันทึกไว้ในดิสก์
มันใช้ไฟล์ไบนารี่ 1 ไฟล์ซึ่งเกิดขึ้นเป็นไฟล์รูปภาพ (ใช่ WebP เป็นรูปแบบภาพ) ดังนั้นโปรแกรมสามารถทำได้เพียงแค่ ... ทำสำเนาของไฟล์นั้น

ดังนั้นรหัส (11 ไบต์):

cp b a.webp

สมมติว่าไบนารีตัวช่วยคือชื่อ "b" โค้ดจะเขียนไฟล์ภาพไปยังดิสก์ที่มีนามสกุลถูกต้อง ("a.webp")

ฉันเห็นเหตุผลเล็กน้อยที่จะอัปโหลดไบนารีเพราะมันถูกสร้างขึ้นเล็กน้อยโดยการเรียกใช้

cwebp -z 9 <downloaded input file> b

มันสร้างไฟล์ที่มี 15330 ไบต์ หากใครต้องการฉันสามารถอัปโหลดที่ไหนก็ได้

NB: -zตัวเลือกในการcwebpเปิดใช้งานโหมดการบีบอัดแบบไม่สูญเสีย 9คือความแข็งแรงของการบีบอัด (สูงสุด)


ผู้เขียน OP ชอบสิ่งนี้
xem

1

Python 3, 64513 ไบต์

ใช้ ASCII เท่านั้น!

http://pastebin.com/PMLb4Xti

รุ่นเก่า, 64529 ไบต์: http://pastebin.com/nteYkUtM


import lzma,base64,os
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀขอบคุณ!
TuxCrafting

1
@ ฉันไม่คิดว่ามันจำเป็นเพราะมีความยาวที่น่าขัน ให้คะแนนความคิดเห็นเป็นตัวตัดสิน
Rɪᴋᴇʀ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.