택배


13

택배

프로그램은 모든 문자열을 입력으로 받아들이고 Courier에서 입력 문자열을 보여주는 픽셀 이미지를 출력해야합니다. abdegopqABDPQR검은 색 픽셀로 둘러싸인 '구멍'(예 : 등) 이 포함 된 모든 문자 도 검은 색으로 채워야합니다.

입력

프로그램은 ASCII 문자열을 입력으로 승인 할 수 있어야합니다. 다른 입력을 수용하기 위해 프로그램 코드 자체를 변경할 필요가없는 한 입력은 원하는 방식이 될 수 있습니다. (예를 들어 읽을 파일의 파일 이름 제외) 표준 허점이 없습니다. 각 입력에 인쇄 가능한 문자가 하나 이상 있다고 가정 할 수 있습니다.

산출

출력은 지정된 '구멍'이 채워진 Courier로 작성된 문자열 (검정색, 배경색 흰색)을 나타내는 흑백 (회색 없음) 픽셀 그래픽이어야합니다. 전체 문자열의 글꼴 크기는 일정해야합니다 (즉, 각 문자마다 크기가 다르지 않아야 함). 전체 크기의 문자 (예 : ABCDEFGHIJKLMNOPRSTUVWXYZj 및 Q는 더 큼 )는 높이가 10px 이상이어야합니다. (JavaScript의 캔버스와 같이 픽셀 그래픽으로 생성되는 한 파일에 파일을 쓰지 않아도됩니다.)이 그래픽을 답과 함께 게시하십시오.

courier.ttf / 글꼴 라이브러리에 액세스 할 수 있습니다.

이 프로그램은 검은 픽셀 수를 세어 콘솔에 쓰거나 결국 출력 방법을 선호해야합니다.

점수

점수는 다음과 같이 평가됩니다. 전체 프로그램 코드는 프로그램의 입력 문자열로 사용해야합니다. 검은 색 픽셀 수가 점수가됩니다. 인쇄 할 수 없거나 ASCII가 아닌 문자가 포함 된 프로그램 코드는 허용되지 않습니다. (표준 허점뿐만 아니라) 점수가 낮을수록 좋습니다.


출력은 흑백으로 지정되므로 회색 픽셀이 허용되지 않습니다. 인코딩에 대해 문의 해 주셔서 감사합니다. 글꼴 때문에 ASCII로 제한됩니다.
flawr

1
설명이 필요한 두 가지 심각한 문제가 있습니다. 첫째, 프로그램이 Courier.ttf 및이를 사용할 수있는 글꼴 라이브러리에 액세스 할 수 있는지 여부는 확실하지 않습니다. 둘째, ASCII가 아닌 문자를 포함하지 않는 프로그램을 진지하게 금지 하시겠습니까?
피터 테일러

예, Courier.ttf 및 글꼴 라이브러리에 액세스 할 수 있습니다. 그렇지 않으면 의미가 없습니다. 감사합니다. ASCII가 아닌 문자를 사용하는 주요 언어를 만들 수 없었습니다. ASCII가 아닌 문자가 필요한 언어를 알고 있습니까?
flawr

1
@flawr APL. Mathematica에서는 유니 코드 문자를 사용하여 몇 가지 사항을 줄일 수 있습니다.
Martin Ender

답변:


12

매스 매 티카, 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

@flawr yes :) (지금은 모두를 위해) (1 초에 계산을 고정)
Martin Ender
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.