Program Anda harus mengambil input karakter, seperti ini:
@+.0
Dan menampilkan karakter yang diurutkan berdasarkan seberapa gelap mereka, seperti ini:
.+0@
Persyaratan:
Anda harus menggunakan font monospace untuk deteksi kegelapan.
Anda harus mencari tahu berapa banyak piksel yang diambil setiap karakter. Anda benar-benar harus menggambar karakter dan menghitung piksel, yaitu Anda tidak bisa hanya jumlah piksel hardcode.
- Sebagai aturan yang lebih konkret: jika Anda mengganti font, program Anda tetap bekerja. Selain itu, program Anda harus dapat beralih font hanya dengan mengubah variabel atau nilai atau string dalam kode.
Jika Anda menggunakan antialiasing, Anda harus menghitung piksel sebagai persentase dari piksel hitam penuh. Misalnya, sebuah
rgb(32, 32, 32)
piksel akan dihitung 1/8 dari satu piksel penuh. Abaikan aturan ini jika karakter Anda tidak terhubung.Setelah menghitung piksel, Anda harus mengurutkan karakter berdasarkan jumlah piksel, dan menampilkannya secara berurutan.
Ini adalah kode-golf , jadi kode terpendek dalam byte akan menang.
Jawaban:
Mathematica,
112 110108 byteIni kemungkinan masih bisa di-golf lebih lanjut. Mengasumsikan string dalam variabel s.
Dan sekarang menggunakan sintaks yang benar untuk mengurutkan satu daftar dengan daftar lain.
Kasing uji keberuntungan -> "Oh yeah, itu berhasil" -> Facepalm
Terima kasih untuk mata yang tajam, David Carraher.
Memperbarui: Mengganti OCR A dengan Menlo karena saya menyadari bahwa pada OSX nama font OCR A sebenarnya OCR A Std. Jadi saya menyortir font default, bukan real deal. Menlo juga monospace dengan jumlah byte yang sama, sehingga tidak ada laba atau rugi bersih.
Saya telah memasang ekspor CDF yang di-host notebook , sehingga Anda dapat melihat kode dalam tindakan jika Anda mau. Saya masih mencari cara bagaimana menambahkan beberapa interaktivitas ke CDF yang di-host di web, jadi untuk sekarang ini hanya statis.
Output untuk
s = FromCharacterCode /@ Range[33, 135];
dengan "Kurir"Output untuk yang sama, tetapi dengan FontFamily "Monospace":
Perhatikan bahwa hasil akhir ditampilkan dalam font internal MM, bukan font yang sedang disortir. Karenanya, Anda melihat perbedaan dalam font yang dipilih tercermin dalam pengurutan. Namun, tautan CDF menunjukkan keduanya untuk yang melengkapi.
Kode tidak dikunci:
sumber
"" <> (FromCharacterCode /@ Range[33, 135])
StringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
Bash + ImageMagick:
164147148 karakterContoh dijalankan:
Pemisah dimasukkan di antara kelompok abu-abu. Karakter dengan tingkat abu-abu identik tidak terpisahkan:
sumber
sort
QBasic, 259 byte
Saya melakukan ini untuk bersenang-senang, jadi secara teknis tidak sesuai dengan aturan dalam satu cara. Tidak mengambil daftar karakter, tetapi mencetak semua karakter dari 32-255 dan menggunakannya. Jika Anda benar-benar ingin melihat versi yang sesuai dengan aturan ini, tolong beri tahu saya.
Itu juga gagal teknis lainnya: "Selanjutnya, program Anda harus dapat beralih font dengan hanya mengubah variabel atau nilai atau string dalam kode." Tidak ada cara mudah untuk melakukan ini dari dalam QBasic. Namun, program ini tentu saja akan berfungsi dengan baik dengan codepage apa pun yang Anda pilih.
Terakhir, saya bisa memeras beberapa karakter (kebanyakan spasi putih yang disisipi oleh QBasic IDE,) tapi itu mungkin tidak sepadan karena jawaban ini tidak memiliki peluang untuk menang.
sumber
Javascript + Kanvas dan Browser DOM (
280237235 byte)Versi terbaru dengan suggetions dari Fors dan sikat gigi di komentar:
Versi yang lebih mudah dibaca:
Mungkin bisa bermain golf lebih banyak.
Saya baru di situs ini, jadi saya tidak yakin bagaimana input biasanya dibaca untuk jawaban Javascript. Saya berasumsi input terkandung dalam variabel bernama
s
. Jika ini tidak apa-apa, saya akan memperbarui jawaban dan jumlah char.JSFiddle dari versi yang diperbarui.
JSFiddle versi pertama .
sumber
c
dans
tidak perlu (a=document.createElement('canvas').getContext('2d')
dany+=a.getImageData(0,0,30,30).data[i]
), elemen tidak perlu ditambahkan, nol inisialisasi dariy
dapat dikombinasikan dengani
(i=y=0
), penambahan selisih darii
dapat dikombinasikan dengan penambahany
(for(...;y+=...[i++]);
), dan jenis huruf Monako memiliki jarak satu dan memiliki nama yang lebih pendek dari Kurir.prompt()
; tapi ini juga baik.y=i=0;
dan mengubaha.fillText(x,0,20)
kea.fillText(x,y=i=0,20)
.PHP, 298 karakter
Saya telah menambahkan beberapa jeda baris sehingga Anda dapat melihatnya dalam semua keburukannya:
Kode ini menggunakan font GD yang disertakan dengan PHP. Argumen kedua
imagechar()
memilih font (angka dari 1 hingga 5 valid).Contoh:
Jika Anda memasukkan yang berikut di atas kode yang ditunjukkan di atas, maka Anda akan dapat menyediakan daftar karakter di browser web Anda.
sumber
imagecreatetruecolor
Anda bisa menjatuhkan alokasi pertama dan menggunakan nama fungsi langsung pada yang kedua, untuk -11.[]
bukannyaarray()
. danforeach($a as$v)
bekerja jugaGTB
Ini memiliki kode untuk menjadi kode tersulit kedua yang pernah saya tulis untuk kalkulator. Tidak ada nilai piksel yang dikodekan dengan keras, ia menggambar teks pada grafik dan menghitung untuk menghitung setiap piksel.
Memasukkan
Keluaran
sumber
Jawa -
468 450444@+.0abcdefghijklmnopqrstuvwxyz
->.irl+jcvtfxyzsuonkheaqpdb0wgm@
Tidak Disatukan:
sumber
Catatan tambahan, 381
Ini sesuatu yang sangat berbeda, hanya untuk bersenang-senang. Karena sebagian besar font adalah vektor, 'menghitung piksel' sedikit aneh, bukan. Menghitung area bentuk mesin terbang, meskipun dengan cara yang benar, tidak mudah. Alternatif dapat memindai persegi panjang dan menghitung 'hit' ketika suatu titik berada di dalam bentuk mesin terbang, dan Postscript memiliki operator untuk pemeriksaan semacam ini. Padahal, benar, pemindaian dan pengujian-pengujian hanyalah cara aneh menghitung piksel.
.
Dan berikut ini adalah hasil untuk 3 font berbeda (pilihannya dapat di-komentar, di atas):
sumber
Perl (dengan GD) (159)
pemakaian:
sunting: disingkat menjadi 159 karakter
sumber
Java, 584
Wow ... Ini bukan bahasa yang baik untuk melakukan ini.
Pemakaian:
Pengaturan ini menghasilkan:
Satu-satunya baris di sini yang perlu penjelasan:
Kemudian bagian terakhir ini menyatukannya ...
Dengan mengulangi semua poin dan menjumlahkan jumlah poin. Informasi kepadatan ini diteruskan kembali ke pembanding dan digunakan untuk menyortir.
sumber
R, 195 karakter
Diindentasikan dengan komentar:
Contoh:
Kehadiran font dalam plot R menjadi tergantung pada platform, saya tidak dapat menjamin bahwa itu bekerja pada PC, tetapi itu pada Mac (OS X 10.7.5, R 2.14.2).
sumber
SmileBASIC,
179176173 byteMenggunakan font yang saat ini dimuat. Font dapat dimuat dengan
LOAD"GRPF:filename"
.Kode lebih mudah dibaca:
sumber
PHP - 485
Demo:
Kode:
sumber
Python + freetype-py: 147
sumber