Я надсилаю текст правильного комбінації одиниць та нулів


9

Нещодавно я перерахував пісню Я Textpert про текстові повідомлення під час руху, і один конкретний рядок у пісні надихнув цей виклик.

Я ніколи не нахиляюся так низько, щоб писати фотографії / Натомість я надсилаю правильні комбінації з одиниць та нулів

Очевидно, що це було б майже неможливо зробити в голові, тому вам слід допомогти текстовим текстам у всьому світі, кодуючи програму, щоб зробити те саме.

Ваше завдання - взяти ім'я файлу зображення з розмірами 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

Чи є у вас якісь тести?
Ерік Аутгольфер

Відповіді:


4

Pyth , 14 13 байт

-1 байт завдяки Еріку Позашляховику ( 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.
Ерік Аутгольфер

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

Математика, 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"Export".
Ян Міллер

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'))

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.