Courrier Ception

13

Courrier Ception

Le programme doit accepter n'importe quelle chaîne en entrée et produire une image pixel qui montre la chaîne d'entrée dans Courier. Toutes les lettres contenant un «trou» (comme abdegopqABDPQRetc.) entouré de pixels noirs doivent également être remplies de noir.

Contribution

Le programme doit pouvoir accepter n'importe quelle chaîne ASCII en entrée. L'entrée peut être comme vous le souhaitez, tant que le code de programme lui-même n'a pas à changer pour accepter une entrée différente. (À l'exception, par exemple, du nom du fichier à lire.) Pas de failles standard. Vous pouvez supposer que chaque entrée contient au moins une lettre imprimable.

Production

La sortie doit être un graphique de pixels en noir et blanc (pas de gris) qui montre la chaîne écrite en Courier (en noir, fond blanc), avec les «trous» spécifiés remplis. La taille de la police de la chaîne entière doit être constante (ce qui signifie pas de mise à l'échelle différente pour chaque lettre différente) de sorte que les lettres de taille normale (par exemple, ABCDEFGHIJKLMNOPRSTUVWXYZmais j et Q sont plus grandes) doivent avoir une hauteur d'au moins 10 px. (Vous n'avez pas besoin de l'écrire dans un fichier, tout type d'affichage est correct tant qu'il est généré sous forme de pixelgraphics, comme par exemple une toile en JavaScript.) Veuillez poster ce graphique avec votre réponse.

L'accès aux bibliothèques courier.ttf / font est autorisé.

Le programme doit également compter le nombre de pixels noirs et l'écrire sur la console ou quelle que soit la méthode de sortie préférée à la fin.

But

Le score est évalué comme suit: Le code de programme complet doit être utilisé comme chaîne d'entrée pour votre programme. Le nombre de pixels noirs sera votre score. Le code de programme qui contient des lettres non imprimables ou non ASCII n'est pas autorisé. (Ainsi que les failles standard.) Plus le score est bas, mieux c'est.

flawr
la source
La sortie est spécifiée en noir et blanc, donc aucun pixel gris n'est autorisé. Et merci d'avoir posé des questions sur l'encodage, cela va être limité à ASCII à cause de la police.
flawr
1
Il existe au moins deux problèmes graves qui doivent être clarifiés. Premièrement, il n'est pas clair si le programme est autorisé à accéder à Courier.ttf et aux bibliothèques de polices qui peuvent l'utiliser. Deuxièmement, avez-vous sérieusement l'intention d'interdire les programmes qui ne contiennent pas de caractères non ASCII?
Peter Taylor
Oui, l'accès à Courier.ttf et aux bibliothèques de polices est autorisé - cela n'aurait aucun sens autrement, merci. Je n'ai pas été en mesure de proposer une langue majeure qui repose sur des caractères non ASCII - connaissez-vous des langues qui nécessitent des caractères non ASCII?
flawr
1
@flawr APL. Et dans Mathematica, vous pouvez raccourcir quelques éléments en utilisant des caractères Unicode.
Martin Ender
ImageMagick est-il autorisé?
Digital Trauma

Réponses:

12

Mathematica, 4864 pixels

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}]

Voici l'image:

entrez la description de l'image ici

Dans Mathematica, lorsque vous écrivez un "programme", vous écrivez simplement un extrait. Donc, cela attend l'entrée stockée dans jet la dernière chose qu'elle renvoie est l'image et le nombre. Cela crache également un tas d'erreurs, car je ne vérifie pas les limites l, mais cela produit le résultat souhaité de toute façon.

%fait référence à ladite dernière sortie.

Merci à Geobits pour l'idée de l'algorithme. Je remplis l'image du coin supérieur gauche d'une intensité non valide, puis je remplace tous les pixels blancs restants par des pixels noirs et ceux non valides par des blancs.

Notez que la FreeQvérification n'est pas réellement nécessaire pour que le programme fonctionne correctement, mais pour qu'il se termine dans un délai raisonnable. Si je le laissais de côté, je marquerais en fait environ 300 pixels de moins.

Martin Ender
la source
Le comptage devrait faire partie du programme lui-même! En dehors de cela, c'est une bonne solution, avez-vous calculé quelles lettres (en tant que noms de variables) utilisent le moins de pixels?
flawr
@flawr yes :) (maintenant pour tous) (correction du décompte en une seconde)
Martin Ender