1と0の正しい組み合わせにテキストを送信します


9

私は最近、運転中にテキストメッセージを送信するTextpertである曲リストしました。この曲の特定の1行がこの課題に影響を与えました。

私は写真にテキストを送るほど低く身をかがめることはありません/その代わりに私は1と0の正しい組み合わせにテキストを送ります

これは明らかに、これを頭の中で行うことはほとんど不可能であるため、同じことを行うようにプログラムをコーディングすることにより、世界中のtextpertを支援する必要があります。

あなたの仕事は、500x500ピクセルサイズの画像ファイルの名前を取り、ファイルをバイナリとして出力することです。言語がサポートしている場合は、入力として画像を使用することもできます。

拡張子付きの画像ファイルを使用できます

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

私の意味が理解できない人のために、画像をバイナリに変換する方法を示すことができます。

ステップ1

ファイルの最初のピクセルを取り、RGB値をR、G、Bの3つの10進数として取得します。たとえば、最初のピクセルが255,0,0(赤)であるとします。

ステップ2

各数値を8ビットのバイナリ表現に変換し、単一の24ビットの数値に連結します。例では、これは111111110000000000000000

ステップ3

この24ビットの数値を最終出力に追加します。したがって、最終的な出力があるべき6000000長い数字と完全で構成すべきである10

これはので、最短のコードが勝ちます!


1
入力をご指定頂けますか?ファイル名は唯一の可能な入力で機能しますか、それとも入力として画像を許可する言語はそれを使用できますか?
Ian Miller

どのような画像フォーマットをサポートする必要がありますか?画像形式を選択(または発明)できますか?
L3viathan 2017年

さらに、出力では、1と0を標準出力に出力しますか(これは文字列である必要がありますか、それとも整数の配列にすることができますか)、実際にデータを含む新しいファイルを作成しますか?
Ian Miller

@IanMillerの出力は、ここで受け入れられている任意のメソッドにすることができ、入力がファイル名または画像(サポートする場合)にすることができます。
caird coinheringaahing 2017

テストケースはありますか?
Erik the Outgolfer 2017年

回答:


4

Pyth14 13バイト

Erik the Outgolferのおかげで-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 2017年

4

MATL13 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ファイルに変換します


の代わりにPadLeftIntegerDigits(すなわちIntegerDigits[#,2,8]&
JungHwan Min

あなたは、絶対に正しい!これを使うことができるのを忘れていた!
J42161217 2017年

唯一の間違いは、画像でテストしていたため、「インポート[]」がないことでした。更新されたコード(?)をテストしていますか?PadLeftを使用していません
J42161217

おっと、リフレッシュしていなかったので、古いバージョンを見ていました。
Ian Miller

ルールに基づいて、Import`Export` を使用するのではなく、画像を入力して標準出力に出力する関数として書き込むことで、大量のバイトを節約できます。
Ian Miller

2

C#、309バイト

わからない場合は、私の2番目のコードゴルフ。画像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.