Saya teks kombo yang benar satu dan nol

9

Saya baru-baru ini terdaftar di lagu I'm a Textpert tentang mengirim pesan teks saat mengemudi dan satu baris tertentu dalam lagu menginspirasi tantangan ini.

Saya tidak pernah membungkuk begitu rendah untuk foto teks / Sebaliknya saya teks kombinasi yang benar dari nol dan satu

Sekarang jelas, ini akan menjadi hal yang hampir mustahil untuk dilakukan di kepala orang dan jadi Anda harus membantu para textperts di seluruh dunia dengan mengkodekan sebuah program untuk melakukan hal yang sama.

Tugas Anda adalah mengambil nama file gambar dengan dimensi 500x500piksel dan output file sebagai biner. Anda juga dapat mengambil gambar sebagai input, jika bahasa Anda mendukungnya.

Anda dapat menggunakan file gambar dengan ekstensi

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

Izinkan saya mendemonstrasikan cara mengubah gambar menjadi biner, bagi mereka yang tidak mengerti apa yang saya maksud.

Langkah 1

Ambil piksel pertama dalam file dan ambil nilai RGB-nya sebagai 3 angka desimal: R, G, dan B. Mari kita asumsikan, misalnya, bahwa piksel pertama adalah 255,0,0(merah).

Langkah 2

Ubah setiap angka menjadi representasi biner 8-bit dan gabungkan menjadi angka 24-bit tunggal. Sebagai contoh, ini menghasilkan111111110000000000000000

Langkah 3

Tambahkan nomor 24-bit ini ke output akhir. Oleh karena itu, hasil akhir harus 6000000panjang digit dan harus terdiri dari seluruhnya 1dan0

Ini adalah sehingga kode terpendek menang!

caird coinheringaahing
sumber
1
Bisakah Anda menentukan input. Apakah nama file berfungsi pada input yang mungkin atau bahasa yang memungkinkan gambar sebagai input menggunakannya?
Ian Miller
Format gambar apa yang perlu didukung? Bisakah saya memilih (atau menemukan) format gambar?
L3viathan
Selain itu untuk output, apakah Anda ingin output yang satu dan nol untuk output standar (apakah ini harus berupa string atau dapatkah itu array integer) atau benar-benar membuat file baru dengan data di dalamnya?
Ian Miller
@IanMiller output dapat berupa metode apa pun yang diterima di sini dan input dapat berupa nama file atau gambar, jika Anda mendukungnya.
caird coinheringaahing
Apakah Anda memiliki testcases?
Erik the Outgolfer

Jawaban:

4

Pyth , 14 13 byte

-1 byte terima kasih kepada Erik the Outgolfer ( zdapat dihapus untuk input implisit).

sm.[\08.Bd.n'

Penjelasan

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

Sayangnya, karena alasan keamanan, itu tidak dapat diuji dengan penerjemah online ; Anda harus mengkloning Pyth untuk mengujinya di komputer Anda sendiri.

Jim
sumber
1
Anda dapat mengasumsikan input yang dikutip dan menghapus z.
Erik the Outgolfer
4

MATL , 13 12 byte

YiH&!8&YB!1e

Menerima nama file sebagai string sebagai input. Output angka 24-bit ditampilkan dalam urutan baris-utama.

Sayangnya ini tidak berfungsi pada penerjemah online karena alasan keamanan. Ini adalah tangkapan layar yang bekerja di mesin lokal saya

masukkan deskripsi gambar di sini

Ini adalah versi yang sedikit dimodifikasi di mana saya secara manual membuat gambar 2 x 2 x 3 dan kemudian menggunakan (hampir) kode yang sama untuk memprosesnya.

Penjelasan

        % 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
Suever
sumber
2

Mathematica, 103 byte

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


mengambil gambar x.bmp (atau yang lain) dan mengubahnya menjadi file x.txt

J42161217
sumber
Alih-alih PadLeft, Anda bisa menggunakan argumen ketiga dari IntegerDigits(yaituIntegerDigits[#,2,8]&
JungHwan Min
kamu benar sekali! Saya lupa saya bisa menggunakan ini!
J42161217
Satu-satunya kesalahan adalah "Impor []" yang hilang karena saya mengujinya dengan gambar. Semuanya bekerja dengan baik sekarang. Apakah Anda menguji kode yang diperbarui (?) Karena saya tidak menggunakan PadLeft
J42161217
Ups, saya belum menyegarkan sehingga saya melihat versi lama.
Ian Miller
Berdasarkan aturan, Anda dapat menyimpan banyak byte dengan menuliskannya sebagai fungsi yang menginput gambar dan output ke output standar daripada menggunakan Import`Ekspor`.
Ian Miller
2

C #, 309 byte

Golf kode kedua saya, jika Anda tidak tahu. Mengambil gambar 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)));}}
Harry Wilkins
sumber
Usaha yang bagus dan selamat datang di situs ini! Saya tidak tahu C # jadi tidak bisa memberi Anda golf, tapi saya yakin orang lain akan melakukannya!
caird coinheringaahing
1

Oktaf, 46 byte

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

Membuat fungsi anonim bernama ansyang dapat dipanggil dengan nama file ( ans('file.png')) atau URL ( ans('http://image.png'))

Suever
sumber