Tôi nhắn tin kết hợp chính xác của những người và số không


9

Gần đây tôi đã liệt kê bài hát Tôi là một Textpert về việc nhắn tin trong khi lái xe và một dòng cụ thể trong bài hát đã truyền cảm hứng cho thử thách này.

Tôi không bao giờ cúi thấp đến mức để nhắn tin hình ảnh / Thay vào đó tôi nhắn tin kết hợp chính xác của những người và số không

Bây giờ rõ ràng, đây sẽ là một điều gần như không thể làm được trong đầu và vì vậy bạn nên giúp các nhà văn bản trên toàn thế giới bằng cách mã hóa một chương trình để làm điều tương tự.

Công việc của bạn là lấy tên của tệp hình ảnh với các 500x500pixel kích thước và xuất tệp dưới dạng nhị phân. Bạn cũng có thể lấy một hình ảnh làm đầu vào, nếu ngôn ngữ của bạn hỗ trợ nó.

Bạn có thể sử dụng tệp hình ảnh với phần mở rộng

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

Cho phép tôi trình bày cách chuyển đổi hình ảnh thành nhị phân, cho những người không hiểu ý tôi.

Bước 1

Lấy pixel đầu tiên trong tệp và truy xuất giá trị RGB của nó dưới dạng 3 số thập phân: R, G và B. Ví dụ, giả sử rằng pixel đầu tiên là 255,0,0(màu đỏ).

Bước 2

Chuyển đổi mỗi số thành biểu diễn nhị phân 8 bit của nó và ghép thành một số 24 bit duy nhất. Ví dụ, điều này mang lại111111110000000000000000

Bước 3

Thêm số 24 bit này vào đầu ra cuối cùng. Do đó, đầu ra cuối cùng phải là các 6000000chữ số dài và phải bao gồm toàn bộ 10

Đây là một để mã ngắn nhất chiến thắng!


1
Bạn có thể vui lòng chỉ định đầu vào. Là tên tệp để làm việc trên đầu vào duy nhất có thể hoặc các ngôn ngữ có thể cho phép hình ảnh làm đầu vào sử dụng không?
Ian Miller

Những loại định dạng hình ảnh cần phải được hỗ trợ? Tôi có thể chọn (hoặc phát minh) một định dạng hình ảnh không?
L3viathan

Ngoài ra, đối với đầu ra, bạn muốn nó xuất các số và số 0 thành đầu ra tiêu chuẩn (đây có phải là một chuỗi hay nó có thể là một mảng các số nguyên) hoặc thực sự tạo một tệp mới với dữ liệu trong đó không?
Ian Miller

Đầu ra @IanMiller có thể là bất kỳ phương thức nào được chấp nhận ở đây và đầu vào có thể là tên tệp hoặc hình ảnh, nếu bạn hỗ trợ điều đó.
caird coinheringaahing

Bạn có bất kỳ testcase?
Erik the Outgolfer

Câu trả lời:


4

Bình thường , 14 13 byte

-1 byte nhờ Erik Outgolfer ( zcó thể được loại bỏ cho đầu vào ngầm).

sm.[\08.Bd.n'

Giải thích

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

Thật không may, vì lý do an toàn, điều đó không thể được kiểm tra với trình thông dịch trực tuyến ; bạn sẽ phải sao chép Pyth để kiểm tra nó trên máy tính của riêng bạn.


1
Bạn có thể giả định đầu vào trích dẫn và loại bỏ z.
Erik the Outgolfer

4

MATL , 13 12 byte

YiH&!8&YB!1e

Chấp nhận tên tệp dưới dạng chuỗi làm đầu vào. Các số 24 bit đầu ra được hiển thị theo thứ tự chính hàng.

Thật không may, điều này không hoạt động trong các thông dịch viên trực tuyến vì lý do bảo mật. Đây là một ảnh chụp màn hình của nó hoạt động trên máy cục bộ của tôi

nhập mô tả hình ảnh ở đây

Đây là một phiên bản sửa đổi một chút trong đó tôi tự tạo một hình ảnh 2 x 2 x 3 và sau đó sử dụng (gần như) cùng một mã để xử lý nó.

Giải trình

        % 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

Toán học, 103 byte

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


lấy một hình ảnh x.bmp (hoặc bất kỳ hình ảnh nào khác) và chuyển đổi nó thành tệp x.txt


Thay vì PadLeft, bạn có thể sử dụng đối số thứ ba của IntegerDigits(tức làIntegerDigits[#,2,8]&
JungHwan Min

bạn hoàn toàn đúng! Tôi đã quên tôi có thể sử dụng này!
J42161217

Lỗi duy nhất là thiếu "Nhập []" vì tôi đã thử nghiệm nó với một hình ảnh. Mọi thứ đều hoạt động tốt. Bạn đang kiểm tra mã được cập nhật (?) Vì tôi không sử dụng PadLeft
J42161217

Rất tiếc, tôi đã không làm mới nên tôi đang xem một phiên bản cũ.
Ian Miller

Dựa trên các quy tắc, bạn có thể lưu một loạt byte bằng cách viết nó dưới dạng hàm nhập hình ảnh và xuất ra đầu ra tiêu chuẩn thay vì sử dụng Import`Xuất khẩu '.
Ian Miller

2

C #, 309 byte

Golf mã thứ hai của tôi, nếu bạn không thể nói. Chụp ảnh 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)));}}

Nỗ lực tốt đẹp và chào mừng đến với trang web! Tôi không biết C # vì vậy không thể cho bạn chơi gôn nhưng tôi chắc chắn những người khác sẽ chơi!
caird coinheringaahing

1

Octave, 46 byte

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

Tạo một hàm ẩn danh có tên anscó thể được gọi bằng tên tệp ( ans('file.png')) hoặc URL ( ans('http://image.png'))

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.