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!


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.


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

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


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)));}}

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.