Kurye ception


13

Kurye ception

Program herhangi bir dizeyi giriş olarak kabul etmeli ve Courier'de giriş dizesini gösteren bir piksel görüntüsü çıkarmalıdır. abdegopqABDPQRSiyah piksellerle çevrili bir 'delik' ( vb.) İçeren tüm harfler de siyahla doldurulmalıdır.

Giriş

Program giriş olarak herhangi bir ASCII dizesini kabul edebilmelidir. Farklı bir girişi kabul etmek için program kodunun kendisinin değişmesi gerekmediği sürece giriş istediğiniz şekilde olabilir. (Örneğin, okunacak dosyanın dosya adı hariç.) Standart boşluklar yok. Her girişin en az bir yazdırılabilir harf içerdiğini varsayabilirsiniz.

Çıktı

Çıktı, belirtilen 'delikler' doldurulmuş olarak Courier'de (siyah, beyaz arka plan) yazılmış dizeyi gösteren siyah beyaz (gri renkte değil) bir piksel grafik olmalıdır. Tüm dizenin font boyutu sabit olmalıdır (bu, her farklı harf için farklı ölçeklendirme anlamına gelmez), böylece tam boyutlu harflerin (örneğin, ABCDEFGHIJKLMNOPRSTUVWXYZj ve Q daha büyük) en az 10 piksel yüksekliğinde olması gerekir. (Bir dosyaya yazmak zorunda değilsiniz, piksel olarak oluşturulduğu sürece, JavaScript'teki tuval gibi her türlü görüntü tamam.) Lütfen bu grafiği cevabınızla birlikte gönderin.

Courier.ttf / font kitaplıklarına erişime izin verilir.

Program ayrıca siyah piksel sayısını saymalı ve konsola veya sonunda hangi çıktı yöntemini tercih ettiğini yazmalıdır.

Puan

Skor aşağıdaki gibi değerlendirilir: Program kodunun tamamı programınıza giriş dizesi olarak kullanılmalıdır. Siyah piksel sayısı sizin puanınız olacaktır. Yazdırılamayan veya ASCII olmayan harfler içeren program koduna izin verilmez. (Standart boşlukların yanı sıra.) Puan ne kadar düşükse o kadar iyidir.


Çıktı s / b olarak belirtildiğinden gri piksele izin verilmiyor. Ve kodlama hakkında sorduğunuz için teşekkür ederiz, bu yazı tipi nedeniyle ASCII ile sınırlı olacak.
flawr

1
Açıklığa ihtiyaç duyan en az iki ciddi sorun var. Öncelikle, programın bir Courier.ttf dosyasına ve onu kullanabilen yazı tipi kitaplıklarına erişmesine izin verilip verilmediği açık değildir. İkincisi, ASCII olmayan karakterler içermeyen programları ciddiye almak istiyor musunuz?
Peter Taylor

Evet, Courier.ttf ve yazı tipi kitaplıklarına erişime izin verilir - aksi takdirde anlamlı olmaz, teşekkür ederim. ASCII olmayan karakterlere dayanan büyük bir dil bulamadım - ASCII olmayan karakterlere ihtiyaç duyan herhangi bir dil biliyor musunuz?
flawr

1
@flawr APL. Mathematica'da Unicode karakterlerini kullanarak birkaç şeyi kısaltabilirsiniz.
Martin Ender

Yanıtlar:


12

Mathematica, 4864 piksel

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

İşte resim:

resim açıklamasını buraya girin

Mathematica'da bir "program" yazdığınızda bir pasaj yazmanız yeterlidir. Bu, depolanan girdinin jve döndürdüğü son şeyin görüntü ve sayım olmasını bekler . Bu da bir sürü hata lveriyor , çünkü kontrolleri yapmıyorum , ancak yine de istenen sonucu üretiyor.

burada %adı geçen son çıktıyı ifade eder.

Algoritma fikri için Geobits'e teşekkürler. Sol üst köşedeki görüntüyü geçersiz bir yoğunlukla dolduruyorum, sonra kalan tüm beyaz pikselleri siyah piksellerle ve geçersiz olanları beyaz olanlarla değiştiriyorum.

FreeQKontrolün programın düzgün çalışması için gerekli olmadığını, ancak makul bir süre içinde bitmesi için gerekli olduğunu unutmayın . Dışarıda bıraksaydım, aslında yaklaşık 300 piksel daha az puan alırdım.


Sayma, programın kendisinin bir parçası olmalıdır! Bunun dışında güzel bir çözüm, hangi harflerin (değişken adları olarak) en az piksel kullandığını hesapladınız mı?
flawr

@flawr yes :) (şimdi hepsi için) (sayımı bir saniyede sabitleme)
Martin Ender
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.