나는 1과 0의 올바른 콤보를 문자


9

나는 최근에 운전 중에 문자 메시지에 관한 Textpert 라는 노래를 들었 으며 노래의 특정 줄이이 도전에 영감을주었습니다.

나는 문자 사진만큼 낮게 구르지 않았다 / 대신 나는 1과 0의 올바른 콤보를 문자

분명히, 이것은 거의 불가능한 일이 될 것이므로 동일한 일을 수행하는 프로그램을 코딩하여 텍스트 퍼트를 전 세계적으로 도와야합니다.

당신의 임무는 크기 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
입력을 지정할 수 있습니까? 파일 이름이 유일하게 가능한 입력에서만 작동합니까, 아니면 입력으로 이미지를 허용하는 언어가이를 사용할 수 있습니까?
Ian Miller

어떤 종류의 이미지 형식을 지원해야합니까? 이미지 형식을 선택 (또는 발명) 할 수 있습니까?
L3viathan

또한 출력의 경우 1과 0을 표준 출력으로 출력하거나 (문자열이어야하거나 정수 배열 일 수 있습니까) 실제로 데이터가 포함 된 새 파일을 작성 하시겠습니까?
이안 밀러

@IanMiller 출력은 여기에서 허용되는 모든 방법이 될 수 있으며 입력을 지원하는 경우 입력은 파일 이름 또는 이미지가 될 수 있습니다.
caird coinheringaahing

테스트 케이스가 있습니까?
아웃 골퍼 에릭

답변:


4

Pyth , 14 13 바이트

Outgolfer Erik 덕분에 -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.
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

수학, 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

유일한 실수는 이미지로 테스트했기 때문에 누락 된 "Import []"였습니다. 업데이트 된 코드 (?)를 테스트하고 있습니까? PadLeft를 사용하지 않습니다.
J42161217

죄송합니다. 새로 고침하지 않아 이전 버전을보고있었습니다.
Ian Miller

규칙에 따라 Import'내보내기'를 사용하지 않고 이미지를 입력하고 표준 출력으로 출력하는 함수로 작성하여 많은 바이트를 절약 할 수 있습니다.
Ian Miller

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.