ฉันส่งข้อความคำสั่งผสมที่ถูกต้องของคนและศูนย์


9

ฉันเพิ่งจะเข้าร่วมในเพลงฉันเป็น Textpertเกี่ยวกับการส่งข้อความขณะขับรถและอีกหนึ่งบรรทัดในเพลงเป็นแรงบันดาลใจให้กับความท้าทายนี้

ฉันไม่เคยก้มหัวให้ต่ำกับรูปถ่ายข้อความ / แต่ฉันส่งข้อความคอมโบที่ถูกต้องของคนและศูนย์

ตอนนี้เห็นได้ชัดว่านี่เป็นสิ่งที่แทบเป็นไปไม่ได้เลยที่คุณจะทำในสิ่งเดียวกันดังนั้นคุณควรช่วย textperts ทั่วโลกโดยการเขียนโปรแกรมเพื่อทำสิ่งเดียวกัน

งานของคุณคือใช้ชื่อไฟล์ภาพที่มีขนาด500x500พิกเซลและส่งออกไฟล์เป็นไบนารี นอกจากนี้คุณยังสามารถถ่ายรูปเป็นอินพุตได้หากภาษาของคุณรองรับ

คุณสามารถใช้ไฟล์ภาพที่มีนามสกุล

  • .jpg
  • .png
  • .gif
  • .bmp
  • .svg

อนุญาตให้ฉันสาธิตวิธีแปลงรูปภาพให้เป็นไบนารีสำหรับผู้ที่ไม่เข้าใจในสิ่งที่ฉันหมายถึง

ขั้นตอนที่ 1

ใช้พิกเซลแรกในไฟล์และดึงค่า RGB เป็นเลขทศนิยม 3 ตัว: R, G และ B สมมติว่าตัวอย่างเช่นพิกเซลแรกคือ255,0,0(สีแดง)

ขั้นตอนที่ 2

แปลงตัวเลขแต่ละตัวให้เป็นตัวแทนไบนารี 8 บิตและต่อเชื่อมเป็นตัวเลข 24 บิตเดียว สำหรับตัวอย่างผลตอบแทนนี้111111110000000000000000

ขั้นตอนที่ 3

เพิ่มหมายเลข 24 บิตนี้ไปยังเอาต์พุตสุดท้าย ดังนั้นผลลัพธ์สุดท้ายควรเป็น6000000ตัวเลขที่ยาวและควรประกอบด้วยทั้งหมด1และ0

มันคือ รหัสที่สั้นที่สุดชนะ!


1
คุณช่วยระบุการป้อนเข้าได้ไหม ชื่อไฟล์ทำงานกับอินพุตที่เป็นไปได้เท่านั้นหรือสามารถใช้ภาษาที่อนุญาตให้ใช้รูปภาพเป็นอินพุตได้หรือไม่?
เอียนมิลเลอร์

ต้องรองรับรูปแบบไฟล์ประเภทใด ฉันสามารถเลือก (หรือประดิษฐ์) รูปแบบภาพได้หรือไม่
L3viathan

นอกจากนี้สำหรับเอาต์พุตคุณต้องการให้มันส่งออกอ็อบเจกต์และเลขศูนย์ไปยังเอาต์พุตมาตรฐาน (สิ่งนี้จำเป็นต้องเป็นสตริงหรือสามารถเป็นอาร์เรย์ของจำนวนเต็ม) หรือสร้างไฟล์ใหม่ด้วยข้อมูลในนั้นจริงหรือไม่?
เอียนมิลเลอร์

@IanMiller เอาต์พุตสามารถเป็นวิธีที่ยอมรับได้ที่นี่และอินพุตอาจเป็นชื่อไฟล์หรือรูปภาพหากคุณสนับสนุน
caird coinheringaahing

คุณมีตัวอย่างหรือไม่?
Erik the Outgolfer

คำตอบ:


4

Pyth , 14 13 ไบต์

-1 ไบต์ด้วยErik the Outgolfer ( zสามารถลบออกได้สำหรับอินพุตโดยนัย)

sm.[\08.Bd.n'

คำอธิบาย

sm.[\08.Bd.n'

            '    # Open the path/URL given as implicit input. Return list of color triples for color images: [(255, 125, 23), ...]
          .n     # Flatten the list
 m     .Bd       # For each element of the list, convert to binary
  .[\08          # Pad with zeros on the left up to 8 characters
s                # Concatenate the list of bytes

แต่น่าเสียดายเพราะเหตุผลด้านความปลอดภัยที่ไม่สามารถผ่านการทดสอบกับล่ามออนไลน์ ; คุณจะต้องโคลน Pyth เพื่อทดสอบบนคอมพิวเตอร์ของคุณเอง


1
คุณสามารถสมมติอินพุตและลบzได้
Erik the Outgolfer

4

MATL , 13 12 ไบต์

YiH&!8&YB!1e

ยอมรับชื่อไฟล์เป็นสตริงเป็นอินพุต หมายเลข 24- บิตเอาต์พุตจะแสดงตามลำดับหลักแถว

น่าเสียดายที่นี่ใช้งานไม่ได้กับล่ามออนไลน์เพราะเหตุผลด้านความปลอดภัย นี่คือภาพหน้าจอของมันที่ใช้กับเครื่องของฉัน

ป้อนคำอธิบายรูปภาพที่นี่

นี่เป็นเวอร์ชั่นที่ปรับเปลี่ยนเล็กน้อยซึ่งฉันสร้างรูปภาพ 2 x 2 x 3 ด้วยตนเองจากนั้นใช้ (เกือบ) รหัสเดียวกันเพื่อดำเนินการ

คำอธิบาย

        % Implicitly grab input as a string
Yi      % Read in as an M x N x 3 image
H&!     % Permute the dimensions of the image to be 3 x N x M
8&YB    % Convert to a binary string using 8 bits for each element
!       % Transpose the result
1e      % Reshape to a row vector
        % Implicitly display the result

2

Mathematica, 103 ไบต์

F=Flatten;Export["x.txt",FromDigits@F[IntegerDigits[#,2,8]&/@F[ImageData[Import["x.bmp"],"Byte"],1],2]]


ถ่ายภาพ x.bmp (หรืออื่น ๆ ) และแปลงเป็นไฟล์ x.txt


แทนที่จะPadLeftใช้คุณสามารถใช้อาร์กิวเมนต์ที่สามของIntegerDigits(เช่นIntegerDigits[#,2,8]&
JungHwan Min

คุณพูดถูก! ฉันลืมไปแล้วว่าฉันสามารถใช้สิ่งนี้ได้!
J42161217

ข้อผิดพลาดเพียงอย่างเดียวคือ "นำเข้า []" ที่ขาดหายไปเพราะฉันกำลังทดสอบด้วยภาพตอนนี้ทุกอย่างทำงานได้ดี คุณทดสอบรหัสที่อัปเดตแล้วหรือยังเพราะฉันไม่ได้ใช้ PadLeft
J42161217

โอ๊ะฉันไม่รีเฟรชดังนั้นฉันจึงดูเวอร์ชั่นเก่า
เอียนมิลเลอร์

ขึ้นอยู่กับกฎที่คุณสามารถบันทึกได้หลายไบต์โดยเขียนเป็นฟังก์ชั่นที่อินพุตรูปภาพและเอาท์พุทไปยังเอาต์พุตมาตรฐานแทนที่จะใช้Import" ส่งออก"
เอียนมิลเลอร์

2

C #, 309 ไบต์

รหัสที่สองของฉันกอล์ฟถ้าคุณไม่สามารถบอกได้ ถ่ายภาพx.jpg ...

using System;using System.Drawing;using System.Linq;class Program{static void Main(string[]a){Bitmap b=(Bitmap)Image.FromFile("x.jpg");Console.WriteLine(string.Join("",from i in Enumerable.Range(0,250000)select Convert.ToString(Convert.ToInt32(b.GetPixel((int)Math.Floor((double)i/500),i%500).Name,16),2)));}}

ยินดีต้อนรับและยินดีต้อนรับสู่เว็บไซต์! ฉันไม่รู้ C # ดังนั้นไม่สามารถมอบสนามกอล์ฟให้คุณได้ แต่ฉันมั่นใจว่าคนอื่นจะ!
caird coinheringaahing

1

อ็อกเทฟ 46 ไบต์

@(x)dec2bin(permute(imread(x),[3,1,2]),8)'(:)'

สร้างฟังก์ชั่นที่ไม่ระบุชื่อansที่สามารถเรียกได้ด้วยชื่อไฟล์ ( ans('file.png')) หรือ URL ( ans('http://image.png'))

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