Ich schreibe die richtige Kombination aus Einsen und Nullen

9

Ich habe kürzlich in dem Song aufgeführt, dass ich ein Textpert bin, der sich mit SMS während der Fahrt befasst, und eine bestimmte Zeile im Song hat diese Herausforderung inspiriert.

Ich bücke mich nie so tief, um Fotos zu schreiben. Stattdessen schreibe ich die richtige Kombination aus Einsen und Nullen

Offensichtlich wäre dies eine fast unmögliche Sache in einem Kopf, und deshalb sollten Sie Textperten weltweit helfen, indem Sie ein Programm codieren, um dasselbe zu tun.

Ihre Aufgabe ist es, den Namen einer Bilddatei mit den Abmessungspixeln zu übernehmen 500x500und die Datei als Binärdatei auszugeben. Sie können auch ein Bild als Eingabe verwenden, wenn Ihre Sprache dies unterstützt.

Sie können Bilddateien mit den Erweiterungen verwenden

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

Gestatten Sie mir zu demonstrieren, wie ein Bild in ein Binärbild konvertiert wird, für diejenigen, die nicht verstehen, was ich meine.

Schritt 1

Nehmen Sie das erste Pixel in der Datei und rufen Sie seinen RGB-Wert als 3 Dezimalzahlen ab: R, G und B. Nehmen wir beispielsweise an, dass das erste Pixel 255,0,0(rot) ist.

Schritt 2

Konvertieren Sie jede Zahl in ihre 8-Bit-Binärdarstellung und verketten Sie sie in eine einzelne 24-Bit-Zahl. Für das Beispiel ergibt dies111111110000000000000000

Schritt 3

Fügen Sie diese 24-Bit-Nummer zur endgültigen Ausgabe hinzu. Daher sollte die endgültige Ausgabe 6000000lang sein und vollständig aus 1und bestehen0

Dies ist ein also gewinnt der kürzeste Code!

Caird Coinheringaahing
quelle
1
Können Sie bitte die Eingabe angeben. Soll der Dateiname für die einzig mögliche Eingabe verwendet werden, oder können Sprachen, die Bilder als Eingabe zulassen, diesen verwenden?
Ian Miller
Welche Bildformate müssen unterstützt werden? Kann ich ein Bildformat auswählen (oder erfinden)?
L3viathan
Möchten Sie zusätzlich für die Ausgabe die Einsen und Nullen in die Standardausgabe ausgeben (muss dies eine Zeichenfolge sein oder kann es sich um ein Array von Ganzzahlen handeln) oder tatsächlich eine neue Datei mit den darin enthaltenen Daten erstellen?
Ian Miller
Die @ IanMiller-Ausgabe kann hier eine beliebige akzeptierte Methode sein , und die Eingabe kann entweder ein Dateiname oder ein Bild sein, wenn Sie dies unterstützen.
Caird Coinheringaahing
Haben Sie Testfälle?
Erik der Outgolfer

Antworten:

4

Pyth , 14 13 Bytes

-1 Byte dank Erik the Outgolfer ( zkann für implizite Eingaben entfernt werden).

sm.[\08.Bd.n'

Erklärungen

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

Leider kann dies aus Sicherheitsgründen nicht mit dem Online-Dolmetscher getestet werden . Sie müssen Pyth klonen, um es auf Ihrem eigenen Computer zu testen.

Jim
quelle
1
Sie können zitierte Eingaben annehmen und entfernen z.
Erik der Outgolfer
4

MATL , 13 12 Bytes

YiH&!8&YB!1e

Akzeptiert einen Dateinamen als Zeichenfolge als Eingabe. Die ausgegebenen 24-Bit-Nummern werden in Zeilenreihenfolge angezeigt.

Leider funktioniert dies in den Online-Dolmetschern aus Sicherheitsgründen nicht. Hier ist ein Screenshot davon, der auf meinem lokalen Computer funktioniert

Geben Sie hier die Bildbeschreibung ein

Hier ist eine leicht modifizierte Version, in der ich manuell ein 2 x 2 x 3-Bild erstelle und es dann (fast) mit demselben Code verarbeite.

Erläuterung

        % 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
quelle
2

Mathematica, 103 Bytes

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


Nimmt ein Bild x.bmp (oder ein anderes) und konvertiert es in eine x.txt-Datei

J42161217
quelle
Stattdessen PadLeftkönnten Sie das dritte Argument von IntegerDigits(dhIntegerDigits[#,2,8]&
JungHwan Min
du liegst absolut richtig! Ich hatte vergessen, dass ich das benutzen könnte!
J42161217
Der einzige Fehler war das fehlende "Import []", weil ich es mit einem Bild getestet habe. Jetzt funktioniert alles einwandfrei. Testen Sie den aktualisierten Code (?), Weil ich PadLeft
J42161217
Hoppla, ich hatte mich nicht aktualisiert, also habe ich mir eine alte Version angesehen.
Ian Miller
Basierend auf den Regeln können Sie eine Reihe von Bytes speichern, indem Sie sie als eine Funktion schreiben, die ein Bild Importeingibt und in die Standardausgabe ausgibt, anstatt "Exportieren" zu verwenden.
Ian Miller
2

C #, 309 Bytes

Mein zweiter Code Golf, wenn Sie nicht sagen können. Nimmt ein Bild 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
quelle
Netter Versuch und willkommen auf der Seite! Ich kenne C # nicht, kann dir also keine Golfplätze geben, aber ich bin mir sicher, dass andere es tun werden!
Caird Coinheringaahing
1

Oktave, 46 Bytes

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

Erstellt eine anonyme Funktion mit dem Namen ans, die entweder mit einem Dateinamen ( ans('file.png')) oder einer URL ( ans('http://image.png')) aufgerufen werden kann.

Suever
quelle