Я пишу правильную комбинацию единиц и нулей


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 Coneheringaahing

У вас есть какие-нибудь тесты?
Эрик 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.
Эрик 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 Мин

ты абсолютно прав! Я забыл, что могу использовать это!
J42161217

Единственной ошибкой было отсутствие «Import []», потому что я тестировал его с изображением. Теперь все работает нормально. Вы тестируете обновленный код (?), Потому что я не использую 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.