Scrivo la combinazione corretta di uno e zeri


9

Di recente ho elencato la canzone I'm a Textpert riguardo ai messaggi di testo durante la guida e una particolare riga della canzone ha ispirato questa sfida.

Non mi chino mai così in basso come inviare foto di testo / Invece scrivo la combinazione corretta di uno e di zero

Ora, ovviamente, questa sarebbe una cosa quasi impossibile da fare in testa e quindi dovresti aiutare i textper a livello mondiale codificando un programma per fare la stessa cosa.

Il tuo compito è quello di prendere il nome di un file immagine con i 500x500pixel delle dimensioni e di generare il file come binario. Puoi anche prendere un'immagine come input, se la tua lingua la supporta.

È possibile utilizzare i file di immagine con le estensioni

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

Mi permetta di dimostrare come convertire un'immagine in binario, per coloro che non capiscono cosa intendo.

Passo 1

Prendi il primo pixel nel file e recupera il suo valore RGB come 3 numeri decimali: R, G e B. Supponiamo, ad esempio, che il primo pixel sia 255,0,0(rosso).

Passo 2

Converti ogni numero nella sua rappresentazione binaria a 8 bit e concatenalo in un singolo numero a 24 bit. Per l'esempio, questo produce111111110000000000000000

Passaggio 3

Aggiungi questo numero a 24 bit all'output finale. Pertanto, l'output finale deve essere 6000000composto da cifre lunghe e deve essere composto interamente 1e0

Questo è un quindi vince il codice più corto!


1
Potete per favore specificare l'input. Il nome del file funziona sull'unico input possibile o le lingue che consentono le immagini come input possono utilizzarlo?
Ian Miller,

Che tipo di formati di immagine devono essere supportati? Posso scegliere (o inventare) un formato immagine?
L3viathan,

Inoltre, per l'output vuoi che emetta quelli e gli zeri nell'output standard (deve essere una stringa o può essere una matrice di numeri interi) o effettivamente creare un nuovo file con i dati in essa contenuti?
Ian Miller,

L'output di @IanMiller può essere un metodo accettato qui e l'input può essere un nome file o un'immagine, se lo supporti.
caird coinheringaahing l'

Hai delle prove?
Erik the Outgolfer,

Risposte:


4

Pyth , 14 13 byte

-1 byte grazie a Erik the Outgolfer ( zpuò essere rimosso per input implicito).

sm.[\08.Bd.n'

spiegazioni

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

Sfortunatamente, per motivi di sicurezza, ciò non può essere verificato con l' interprete online ; dovrai clonare Pyth per testarlo sul tuo computer.


1
È possibile assumere input e rimuovere citati z.
Erik the Outgolfer,

4

MATL , 13 12 byte

YiH&!8&YB!1e

Accetta un nome file come stringa come input. I numeri di uscita a 24 bit vengono visualizzati nell'ordine delle righe principali.

Purtroppo questo non funziona negli interpreti online per motivi di sicurezza. Ecco uno screenshot che funziona sul mio computer locale

inserisci qui la descrizione dell'immagine

Ecco una versione leggermente modificata in cui creo manualmente un'immagine 2 x 2 x 3 e quindi uso (quasi) lo stesso codice per elaborarla.

Spiegazione

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

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


prende un'immagine x.bmp (o qualsiasi altra) e la converte in file x.txt


Invece di PadLeft, potresti usare il terzo argomento di IntegerDigits(cioèIntegerDigits[#,2,8]&
JungHwan Min

hai assolutamente ragione! Avevo dimenticato di poterlo usare!
J42161217

L'unico errore è stato il "Import []" mancante perché lo stavo testando con un'immagine. Ora tutto funziona bene. Stai testando il codice aggiornato (?) Perché non utilizzo PadLeft
J42161217

Oops, non mi ero rinfrescato, quindi stavo guardando una versione precedente.
Ian Miller,

In base alle regole potresti salvare un sacco di byte scrivendola come una funzione che inserisce un'immagine e l'output nell'output standard piuttosto che usare Import`Export`.
Ian Miller,

2

C #, 309 byte

Il mio secondo codice golf, se non puoi dirlo. Scatta un'immagine 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)));}}

Bel tentativo e benvenuto nel sito! Non conosco C # quindi non posso darti nessun golf ma sono sicuro che altri lo faranno!
caird coinheringaahing

1

Ottava, 46 byte

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

Crea una funzione anonima denominata ansche può essere chiamata con un nome file ( ans('file.png')) o un URL ( ans('http://image.png'))

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.