Latar Belakang
PICASCII adalah alat yang rapi yang mengubah gambar menjadi seni ASCII.
Ini mencapai tingkat kecerahan yang berbeda dengan menggunakan sepuluh karakter ASCII berikut:
@#+';:,.`
Kami akan mengatakan bahwa charxels (elemen karakter) ini memiliki kecerahan dari 1 (tanda-ke) hingga 10 (spasi).
Di bawah ini, Anda dapat melihat hasil dari konversi kode kecil, bendera Welsh, fraktal overhanded, trout besar dan golf kecil, ditampilkan dengan font yang benar:
Anda dapat melihat gambar di biola ini dan mengunduhnya dari Google Drive .
Tugas
Sementara hasil akhir dari PICASCII secara visual menyenangkan, kelima gambar yang digabungkan memiliki berat 153.559 byte. Berapa banyak gambar ini dapat dikompres jika kita mau mengorbankan sebagian dari kualitasnya?
Tugas Anda adalah menulis program yang menerima gambar seni ASCII seperti yang di atas dan kualitas minimum sebagai input dan mencetak kompresi gambar yang hilang - dalam bentuk program penuh atau fungsi yang mengembalikan satu string - yang memuaskan persyaratan kualitas.
Ini berarti Anda tidak dapat menulis dekompresor terpisah; itu harus built-in ke masing-masing gambar terkompresi.
Gambar asli akan terdiri dari charxels dengan kecerahan antara 1 dan 10, dipisahkan oleh garis-garis menjadi garis-garis dengan panjang yang sama. Gambar yang dikompres harus memiliki dimensi yang sama dan menggunakan serangkaian karakter yang sama.
Untuk gambar yang tidak terkompresi yang terdiri dari n charxels, kualitas dari versi gambar yang dikompres didefinisikan sebagai
di mana c i adalah kecerahan dari karakter ke- i dari output gambar terkompresi dan u i kecerahan dari karakter ke- i dari gambar yang tidak terkompresi.
Mencetak gol
Kode Anda akan dijalankan dengan lima gambar dari atas sebagai input dan pengaturan kualitas minimum 0,50, 0,60, 0,70, 0,80 dan 0,90 untuk masing-masing gambar.
Skor Anda adalah rata-rata geometris dari ukuran semua gambar terkompresi, yaitu, akar dua puluh lima produk dari panjang semua dua puluh lima gambar terkompresi.
Skor terendah menang!
Aturan tambahan
Kode Anda harus berfungsi untuk gambar sewenang-wenang, bukan hanya yang digunakan untuk mencetak gol.
Diharapkan bahwa Anda mengoptimalkan kode Anda terhadap kasus-kasus uji, tetapi sebuah program yang bahkan tidak mencoba untuk mengompres gambar yang sewenang-wenang tidak akan mendapatkan upvote dari saya.
Kompresor Anda mungkin menggunakan kompresor stream byte bawaan (misalnya, gzip), tetapi Anda harus menerapkannya sendiri untuk gambar yang dikompresi.
Bulit-in yang biasanya digunakan dalam dekompresi aliran byte (mis. Konversi basis, dekode run-length) diperbolehkan.
Kompresor dan gambar terkompresi tidak harus dalam bahasa yang sama.
Namun, Anda harus memilih satu bahasa untuk semua gambar terkompresi.
Untuk setiap gambar yang dikompresi, aturan golf kode standar berlaku.
Verifikasi
Saya telah membuat skrip CJam untuk dengan mudah memverifikasi semua persyaratan kualitas dan menghitung skor kiriman.
Anda dapat mengunduh juru bahasa Java dari sini atau di sini .
e# URLs of the uncompressed images.
e# "%s" will get replaced by 1, 2, 3, 4, 5.
"file:///home/dennis/codegolf/53199/original/image%s.txt"
e# URLs of the compressed images (source code).
e# "%s-%s" will get replaced by "1-50", "1-60", ... "5-90".
"file:///home/dennis/codegolf/53199/code/image%s-%s.php"
e# URLs of the compressed images (output).
"file:///home/dennis/codegolf/53199/output/image%s-%s.txt"
e# Code
:O;:C;:U;5,:)
{
5,5f+Af*
{
C[IQ]e%g,X*:X;
ISQS
[U[I]e%O[IQ]e%]
{g_W=N&{W<}&}%
_Nf/::,:=
{
{N-"@#+';:,.` "f#}%z
_::m2f#:+\,81d*/mq1m8#
_"%04.4f"e%S
@100*iQ<"(too low)"*
}{
;"Dimension mismatch."
}?
N]o
}fQ
}fI
N"SCORE: %04.4f"X1d25/#e%N
Contoh
Bash → PHP, skor 30344.0474
cat
Mencapai kualitas 100% untuk semua input.
$ java -jar cjam-0.6.5.jar vrfy.cjam 1 50 1.0000 1 60 1.0000 1 70 1.0000 1 80 1.0000 1 90 1.0000 2 50 1.0000 2 60 1.0000 2 70 1.0000 2 80 1.0000 2 90 1.0000 3 50 1.0000 3 60 1.0000 3 70 1.0000 3 80 1.0000 3 90 1.0000 4 50 1.0000 4 60 1.0000 4 70 1.0000 4 80 1.0000 4 90 1.0000 5 50 1.0000 5 60 1.0000 5 70 1.0000 5 80 1.0000 5 90 1.0000 SCORE: 30344.0474