Doğru olanları ve sıfırları bir araya getiriyorum


9

Kısa bir süre önce sürüş sırasında manifatura ilişkin bir Textpert olduğum şarkıyı listeledim ve şarkıdaki belirli bir satır bu zorluğa ilham verdi.

Metin fotoğrafları kadar asla eğilmem / Bunun yerine doğru olanları ve sıfırları birleştiriyorum

Şimdi açıkçası, bu kafa kafalarında yapmak neredeyse imkansız bir şey olurdu ve bu yüzden aynı şeyi yapmak için bir program kodlayarak dünya çapında tekstiller yardımcı olmalıdır.

İşiniz, 500x500piksel boyutlarına sahip bir görüntü dosyasının adını almak ve dosyayı ikili olarak çıkarmaktır . Diliniz destekliyorsa, görüntüyü giriş olarak da alabilirsiniz.

Resim dosyalarını uzantılarla birlikte kullanabilirsiniz

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

Ne demek istediğimi anlamayanlar için bir görüntüyü ikili dosyaya nasıl dönüştüreceğimizi göstermeme izin verin.

Aşama 1

Dosyadaki ilk pikseli alın ve RGB değerini 3 ondalık sayı olarak alın: R, G ve B Örneğin, ilk pikselin 255,0,0(kırmızı) olduğunu varsayalım .

Adım 2

Her sayıyı 8 bitlik ikili gösterimine dönüştürün ve tek bir 24 bitlik sayıya birleştirin. Örneğin, bu111111110000000000000000

Aşama 3

Bu 24 bitlik sayıyı son çıkışa ekleyin. Bu nedenle, son çıkış olmalıdır 6000000basamak uzunluğunda ve tamamen oluşmalıdır 1ve0

Bu bir en kısa kod kazanır!


1
Lütfen girişi belirtebilir misiniz? Dosya adı mümkün olan tek girdi üzerinde mi çalışabilir yoksa giriş olarak resimlere izin veren diller bunu kullanabilir mi?
Ian Miller

Ne tür görüntü formatlarının desteklenmesi gerekir? Bir görüntü formatı seçebilir miyim (veya icat edebilir miyim)?
L3viathan

Ek olarak çıktı için, bunları ve sıfırları standart çıktıya çıkarmasını mı istiyorsunuz (bunun bir dize olması mı yoksa bir tamsayılar dizisi mi olması gerekir) ya da aslında içindeki verilerle yeni bir dosya oluşturmasını mı istiyorsunuz?
Ian Miller

@IanMiller çıktısı burada kabul edilen herhangi bir yöntem olabilir ve bunu desteklerseniz giriş bir dosya adı veya görüntü olabilir.
17:43 de caird coinheringaahing

Test çantanız var mı?
Outgolfer Erik

Yanıtlar:


4

Pyth , 14 13 bayt

Outgolfer Erik sayesinde -1 bayt ( zörtülü girdi için kaldırılabilir).

sm.[\08.Bd.n'

açıklamalar

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

Ne yazık ki, güvenlik nedeniyle, bu test çevrimiçi çevirmenle ; kendi bilgisayarınızda test etmek için Pyth'i klonlamanız gerekir.


1
Alıntılanan girdiyi kabul edebilir ve kaldırabilirsiniz z.
Outgolfer Erik

4

MATL , 13 12 bayt

YiH&!8&YB!1e

Dosya adını girdi olarak dize olarak kabul eder. Çıktı 24 bitlik sayılar, büyük satır sırasıyla görüntülenir.

Ne yazık ki bu, güvenlik nedenleriyle çevrimiçi tercümanlarda çalışmaz. İşte yerel makinemde çalışan bir ekran görüntüsü

resim açıklamasını buraya girin

Burada bir el ile 2 x 2 x 3 görüntü oluşturmak ve daha sonra (neredeyse) aynı kodu işlemek için kullandığım biraz değiştirilmiş bir sürümü .

açıklama

        % 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 bayt

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


x.bmp (veya başka herhangi bir görüntüyü) alır ve x.txt dosyasına dönüştürür


Bunun yerine PadLeft, üçüncü argümanını kullanabilirsiniz IntegerDigits(örn.IntegerDigits[#,2,8]&
JungHwan Min

kesinlikle haklısın! Bunu kullanabileceğimi unutmuştum!
J42161217

Tek hata "Import []" eksikti çünkü ben bir görüntü ile test edildi.Her şey şimdi iyi çalışıyor. Güncellenmiş kodu (?) Test ediyor musunuz, çünkü PadLeft
J42161217

Hata! Yenilenmemiştim, bu yüzden eski bir versiyona bakıyordum.
Ian Miller

Kurallara dayanarak, bir grup Importbayt'ı 'Dışa Aktar' kullanmak yerine bir görüntü giren ve standart çıktıya çıkaran bir işlev olarak yazarak kaydedebilirsiniz.
Ian Miller

2

C #, 309 bayt

İkinci kodum golf, söyleyemezsen. Bir resim çeker 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)));}}

Güzel girişim ve siteye hoş geldiniz! C # bilmiyorum, bu yüzden size golf veremem ama eminim diğerleri yapacak!
Caird Coinheringaahing

1

Oktav, 46 bayt

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

ansBir dosya adı ( ans('file.png')) veya URL ( ans('http://image.png')) ile çağrılabilecek adsız bir işlev oluşturur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.