Persepsi Kurir

13

Persepsi Kurir

Program harus menerima string apa pun sebagai input dan output gambar piksel yang menunjukkan string input di Courier. Semua huruf yang berisi 'lubang' (seperti abdegopqABDPQRdll) yang dikelilingi oleh piksel hitam juga harus diisi hitam.

Memasukkan

Program harus dapat menerima string ASCII sebagai input. Input dapat dengan cara apa pun yang Anda inginkan, selama kode program itu sendiri tidak harus berubah untuk menerima input yang berbeda. (Kecuali untuk misalnya nama file file yang akan dibaca.) Tidak ada celah standar. Anda dapat mengasumsikan bahwa setiap input mengandung setidaknya satu huruf yang dapat dicetak.

Keluaran

Keluaran harus berupa grafik piksel hitam dan putih (tanpa abu-abu) yang menunjukkan string yang ditulis dalam Kurir (hitam, latar putih), dengan diisi 'lubang' yang ditentukan. Ukuran huruf seluruh string harus konstan (yang berarti tidak ada penskalaan yang berbeda untuk setiap huruf yang berbeda) sehingga huruf berukuran penuh (misalnya ABCDEFGHIJKLMNOPRSTUVWXYZtetapi j dan Q lebih besar) harus memiliki tinggi setidaknya 10 px. (Anda tidak harus menulisnya ke file, tampilan apa pun tidak apa-apa asalkan dihasilkan sebagai pixelgraphics, seperti kanvas dalam JavaScript.) Silakan posting grafik ini dengan jawaban Anda.

Akses ke perpustakaan courier.ttf / font diizinkan.

Program juga harus menghitung jumlah piksel hitam dan menuliskannya ke konsol atau metode keluaran apa yang lebih disukai pada akhirnya.

Skor

Skor dievaluasi sebagai berikut: Kode program lengkap harus digunakan sebagai string input untuk program Anda. Jumlah piksel hitam akan menjadi skor Anda. Kode program yang mengandung huruf yang tidak dapat dicetak atau non-ASCII tidak diperbolehkan. (Serta celah standar.) Semakin rendah skor semakin baik.

cacat
sumber
Output ditentukan sebagai b / w, jadi tidak ada piksel abu-abu yang diperbolehkan. Dan terima kasih telah bertanya tentang penyandian, ini akan terbatas pada ASCII karena fontnya.
flawr
1
Setidaknya ada dua masalah serius yang perlu diklarifikasi. Pertama, tidak jelas apakah program tersebut diizinkan mengakses Courier.ttf dan pustaka font yang dapat menggunakannya. Kedua, apakah Anda serius bermaksud melarang program yang tidak mengandung karakter non-ASCII?
Peter Taylor
Ya, akses ke perpustakaan Courier.ttf dan font diizinkan - tidak masuk akal jika tidak, terima kasih. Saya tidak dapat menemukan bahasa utama apa pun yang mengandalkan karakter non-ASCII - tahukah Anda bahasa apa pun yang membutuhkan karakter non-ASCII?
flawr
1
@ flawr APL. Dan di Mathematica Anda dapat mempersingkat beberapa hal menggunakan karakter Unicode.
Martin Ender
Apakah ImageMagick diizinkan?
Digital Trauma

Jawaban:

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

Ini gambarnya:

masukkan deskripsi gambar di sini

Di Mathematica saat Anda menulis "program", Anda cukup menulis cuplikan. Jadi ini mengharapkan input disimpan jdan hal terakhir yang dikembalikan adalah gambar dan hitungan. Ini juga memuntahkan banyak kesalahan, karena saya tidak melakukan batas memeriksa l, tetapi tetap menghasilkan hasil yang diinginkan.

di mana %mengacu pada kata keluaran terakhir.

Terima kasih kepada Geobits untuk ide algoritma. Saya mengisi gambar dari sudut kiri atas dengan intensitas yang tidak valid, lalu saya mengganti semua piksel putih yang tersisa dengan piksel hitam, dan yang tidak valid dengan yang putih.

Perhatikan bahwa FreeQpemeriksaan sebenarnya tidak diperlukan agar program dapat bekerja dengan benar, tetapi untuk menyelesaikannya dalam waktu yang wajar. Jika saya tinggalkan, saya benar-benar skor kurang 300 piksel.

Martin Ender
sumber
Penghitungan harus menjadi bagian dari program itu sendiri! Selain itu itu solusi yang bagus, apakah Anda menghitung huruf mana (sebagai nama variabel) yang menggunakan jumlah piksel paling sedikit?
flawr
@ flawr ya :) (sekarang untuk semuanya) (memperbaiki penghitungan dalam sedetik)
Martin Ender