Chuyển phát nhanh


13

Chuyển phát nhanh

Chương trình phải chấp nhận bất kỳ chuỗi nào làm đầu vào và xuất hình ảnh pixel hiển thị chuỗi đầu vào trong Chuyển phát nhanh. Tất cả các chữ cái chứa 'lỗ' (như abdegopqABDPQRv.v.) được bao quanh bởi các pixel đen cũng phải được lấp đầy màu đen.

Đầu vào

Chương trình phải có thể chấp nhận bất kỳ chuỗi ASCII nào làm đầu vào. Đầu vào có thể là bất kỳ cách nào bạn muốn, miễn là bản thân mã chương trình không phải thay đổi để chấp nhận đầu vào khác. (Ngoại trừ ví dụ tên tệp của tệp sẽ được đọc.) Không có sơ hở tiêu chuẩn. Bạn có thể giả sử rằng mỗi đầu vào chứa ít nhất một chữ cái có thể in được.

Đầu ra

Đầu ra phải là đồ họa pixel đen trắng (không có màu xám) hiển thị chuỗi được viết bằng Chuyển phát nhanh (màu đen, nền trắng), với các 'lỗ' được chỉ định. Kích thước phông chữ của toàn bộ chuỗi phải không đổi (có nghĩa là không có tỷ lệ khác nhau cho mỗi chữ cái khác nhau) để các chữ cái có kích thước đầy đủ (ví dụ: ABCDEFGHIJKLMNOPRSTUVWXYZj và Q lớn hơn) phải có chiều cao tối thiểu 10px. (Bạn không phải ghi nó vào một tệp, bất kỳ loại màn hình nào cũng được miễn là nó được tạo dưới dạng pixelgraphics, ví dụ như canvas trong JavaScript.) Vui lòng đăng hình ảnh này với câu trả lời của bạn.

Truy cập vào thư viện chuyển phát nhanh.ttf / font được cho phép.

Chương trình cũng phải đếm số lượng pixel đen và ghi nó vào bàn điều khiển hoặc phương thức đầu ra từng được ưa thích cuối cùng.

Ghi bàn

Điểm số được đánh giá như sau: Mã chương trình đầy đủ phải được sử dụng làm chuỗi đầu vào cho chương trình của bạn. Số lượng pixel đen sẽ là điểm số của bạn. Mã chương trình có chứa các chữ cái không in được hoặc không phải ASCII không được phép. (Cũng như sơ hở tiêu chuẩn.) Điểm càng thấp càng tốt.


Đầu ra được chỉ định là b / w, do đó không cho phép các pixel màu xám. Và cảm ơn bạn đã hỏi về mã hóa, điều này sẽ bị giới hạn ở ASCII vì phông chữ.
flawr

1
Có ít nhất hai vấn đề nghiêm trọng cần làm rõ. Đầu tiên, không rõ liệu chương trình có được phép truy cập vào Courier.ttf và các thư viện phông chữ có thể sử dụng nó hay không. Thứ hai, bạn có nghiêm túc có ý định cấm các chương trình không chứa các ký tự không phải ASCII không?
Peter Taylor

Có, truy cập vào Courier.ttf và thư viện phông chữ được cho phép - điều đó sẽ không có ý nghĩa gì khác, cảm ơn bạn. Tôi không thể đưa ra bất kỳ ngôn ngữ chính nào dựa vào các ký tự không phải ASCII - bạn có biết ngôn ngữ nào cần các ký tự không phải ASCII không?
flawr

1
@flawr APL. Và trong Mathematica bạn có thể rút ngắn một vài điều bằng cách sử dụng các ký tự Unicode.
Martin Ender

Câu trả lời:


12

Toán học, 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}]

Đây là hình ảnh:

nhập mô tả hình ảnh ở đây

Trong Mathematica khi bạn viết một "chương trình", bạn chỉ cần viết một đoạn. Vì vậy, điều này mong đợi đầu vào được lưu trữ jvà điều cuối cùng nó trả về là hình ảnh và số đếm. Điều này cũng tạo ra một loạt các lỗi, bởi vì tôi không kiểm tra giới hạn l, nhưng dù sao nó cũng tạo ra kết quả mong muốn.

trong đó %đề cập đến đầu ra cuối cùng.

Cảm ơn Geobits cho ý tưởng cho thuật toán. Tôi đang lấp đầy hình ảnh từ góc trên bên trái với cường độ không hợp lệ, sau đó tôi thay thế tất cả các pixel trắng còn lại bằng các pixel đen và các pixel không hợp lệ bằng các pixel trắng.

Lưu ý rằng FreeQkiểm tra không thực sự cần thiết để chương trình hoạt động chính xác, nhưng để nó hoàn thành trong một khoảng thời gian hợp lý. Nếu tôi bỏ nó đi, tôi thực sự sẽ ghi được ít hơn khoảng 300 pixel.


Việc đếm nên là một phần của chính chương trình! Ngoài ra, đó là một giải pháp hay, bạn có tính toán các chữ cái (dưới dạng tên biến) sử dụng số lượng pixel ít nhất không?
flawr

@flawr có :) (bây giờ cho tất cả bọn họ) (sửa lỗi đếm trong một giây)
Martin Ender
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.