Corriere Ception


13

Corriere Ception

Il programma deve accettare qualsiasi stringa come input e generare un'immagine pixel che mostri la stringa di input in Courier. Tutte le lettere che contengono un 'buco' (come abdegopqABDPQRecc.) Che è circondato da pixel neri devono anche essere riempite di nero.

Ingresso

Il programma deve essere in grado di accettare qualsiasi stringa ASCII come input. L'input può essere come desiderato, purché il codice del programma stesso non debba cambiare per accettare un input diverso. (Tranne ad esempio il nome file del file da leggere.) Nessuna scappatoia standard. Si può presumere che ogni input contenga almeno una lettera stampabile.

Produzione

L'output deve essere un pixel bianco e nero (senza grigio) che mostra la stringa scritta in Courier (in nero, bianco di sfondo), con i "buchi" specificati riempiti. La dimensione del carattere dell'intera stringa deve essere costante (ciò significa che nessun ridimensionamento diverso per ogni diversa lettera) in modo che le lettere a dimensione intera (ad es. ABCDEFGHIJKLMNOPRSTUVWXYZJ e Q siano più grandi) devono avere un'altezza di almeno 10px. (Non è necessario scriverlo su un file, qualsiasi tipo di display è ok purché sia ​​generato come pixelgraphics, come ad esempio canvas in JavaScript.) Si prega di pubblicare questo grafico con la risposta.

È consentito l'accesso alle librerie courier.ttf / font.

Il programma deve anche contare il numero di pixel neri e scriverlo sulla console o quale sia il metodo di output preferito alla fine.

Punto

Il punteggio viene valutato come segue: Il codice completo del programma deve essere utilizzato come stringa di input per il programma. Il numero di pixel neri sarà il tuo punteggio. Il codice di programma che contiene lettere non stampabili o non ASCII non è consentito. (Oltre alle scappatoie standard.) Più basso è il punteggio, meglio è.


L'output è specificato come b / n, quindi non sono ammessi pixel grigi. E grazie per aver chiesto informazioni sulla codifica, questo sarà limitato ad ASCII a causa del carattere.
Flawr,

1
Ci sono almeno due problemi seri che richiedono chiarimenti. In primo luogo, non è chiaro se al programma sia consentito l'accesso a un Courier.ttf e alle librerie di font che possono usarlo. In secondo luogo, intende seriamente vietare i programmi che non contengono caratteri non ASCII?
Peter Taylor,

Sì, l'accesso a Courier.ttf e alle librerie di font è consentito - altrimenti non avrebbe senso, grazie. Non sono stato in grado di inventare una lingua importante che si basa su caratteri non ASCII - conosci qualche lingua che ha bisogno di caratteri non ASCII?
Flawr,

1
@flawr APL. E in Mathematica potresti accorciare alcune cose usando i caratteri Unicode.
Martin Ender,

ImageMagick è consentito?
Trauma digitale,

Risposte:


12

Mathematica, 4864 pixel

l = ImageData[Binarize[Rasterize[Style[j, FontSize -> 15]], .71]]
i = {{1, 1}}
While[Length[i] > 1 - 1,
 {r, c} = j = i[[1]]; l[[r, c]] = 2; i = i[[2 ;; -1]];
 If[FreeQ[i, {r, c} = J = j + #] && l[[r, c]] == 1, 
    i = i~Join~{J}] & /@
  {{1, 1 - 1}, {1 - 1, 1}, {-1, 1 - 1}, {1 - 1, -1}}
 ]
Image[l = l /. 1 -> 1 - 1 /. 2 -> 1]
Count[l, 1 - 1, {2}]

Ecco l'immagine:

inserisci qui la descrizione dell'immagine

In Mathematica quando scrivi un "programma" scrivi semplicemente uno snippet. Quindi questo si aspetta l'input memorizzato je l'ultima cosa che restituisce è l'immagine e il conteggio. Questo sputa anche un sacco di errori, perché non eseguo il controllo dei limiti l, ma produce comunque il risultato desiderato.

dove si %riferisce a detta ultima uscita.

Grazie a Geobits per l'idea dell'algoritmo. Sto riempiendo l'immagine dall'angolo in alto a sinistra con un'intensità non valida, quindi sostituisco tutti i pixel bianchi rimanenti con pixel neri e quelli non validi con pixel bianchi.

Si noti che il FreeQcontrollo non è effettivamente necessario per il corretto funzionamento del programma, ma per il completamento entro un ragionevole lasso di tempo. Se lo tralasciassi, in realtà avrei un punteggio di circa 300 pixel in meno.


Il conteggio dovrebbe essere parte del programma stesso! A parte questo, è una buona soluzione, hai calcolato quali lettere (come nomi di variabili) utilizzano il minor numero di pixel?
Flawr,

@flawr yes :) (ora per tutti loro) (risolvendo il conteggio in un secondo)
Martin Ender
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.