快递信使


13

快递信使

程序必须接受任何字符串作为输入,并输出在Courier中显示输入字符串的像素图像。所有包含abdegopqABDPQR被黑色像素包围的“孔”(如等)的字母也必须用黑色填充。

输入值

本程序必须能够接受任何ASCII字符串作为输入。输入可以是您想要的任何方式,只要程序代码本身不必为了接受其他输入而进行更改即可。(例如,将要读取的文件的文件名除外。)没有标准漏洞。您可以假定每个输入至少包含一个可打印的字母。

输出量

输出必须是黑白(无灰度)像素图形,该图形必须显示用Courier编写的字符串(黑色,背景白色),并填充指定的“孔”。整个字符串的字体大小必须恒定(这意味着每个不同的字母没有不同的缩放比例),以便完整大小的字母(例如ABCDEFGHIJKLMNOPRSTUVWXYZ,j和Q更大)的高度必须至少为10px。(您不必将其写入文件,只要将其显示为像素图形即可,任何形式的显示都是可以的,例如JavaScript中的画布。)请将此图形与您的答案一起发布。

允许访问courier.ttf /字体库。

该程序还必须计算黑色像素的数量,并将其写入控制台或最终首选的输出方法。

得分了

分数的评估如下:完整的程序代码必须用作程序的输入字符串。黑色像素的数量将成为您的得分。不允许包含不可打印或非ASCII字母的程序代码。(以及标准漏洞。)分数越低越好。


输出指定为黑白,因此不允许使用灰色像素。并感谢您询问编码,由于字体,它仅限于ASCII。
瑕疵的

1
至少有两个严重的问题需要澄清。首先,尚不清楚是否允许程序访问Courier.ttf和可以使用它的字体库。其次,您是否认真打算禁止不包含非ASCII字符的程序?
彼得·泰勒

是的,允许访问Courier.ttf和字体库-否则就没有意义了,谢谢。我无法提出依赖非ASCII字符的任何主要语言-您知道需要非ASCII字符的任何语言吗?
瑕疵的

1
@flawr APL。在Mathematica中,您可以使用Unicode字符来缩短一些内容。
Martin Ender 2014年

是否可以使用ImageMagick
Digital Trauma 2014年

Answers:


12

Mathematica,4864像素

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

这是图片:

在此处输入图片说明

在Mathematica中,当您编写“程序”时,只需编写一个代码段。因此,这期望输入存储在其中,j并且返回的最后一件事是图像和计数。这还会吐出一堆错误,因为我不对进行边界检查l,但无论如何都会产生所需的结果。

这里%指的是最后的输出。

感谢Geobits提出的算法思想。我使用无效的强度从左上角填充图像,然后将所有剩余的白色像素替换为黑色像素,并将无效的像素替换为白色。

请注意,FreeQ检查实际上并不是使程序正常运行所必需的,而是要在合理的时间内完成检查。如果我不说的话,我实际上会少得分约300像素。


计数应该是程序本身的一部分!除此之外,这是一个不错的解决方案,您是否计算出使用最少像素数的字母(作为变量名)?
瑕疵的

@flawr yes :)(现在对所有人适用)(在一秒钟内固定计数)
Martin Ender 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.