Arka fon
PICASCII , görüntüleri ASCII sanatına dönüştüren zarif bir araçtır.
Aşağıdaki on ASCII karakterini kullanarak farklı parlaklık derecelerine ulaşır:
@#+';:,.`
Bu karakterlerin (karakter elemanları) 1'den (tabelada) 10'a (boşluk) kadar parlaklığa sahip olduğunu söyleyeceğiz.
Aşağıda, doğru yazı tipiyle görüntülenen küçük bir kodun, Gal bayrağının, devrik bir fraktalın, büyük bir alabalık ve küçük bir golfün dönüştürülmesinin sonuçlarını görebilirsiniz:
Bu kemandaki görüntüleri görebilir ve Google Drive'dan indirebilirsiniz .
Görev
PICASCII'nin sonuçları görsel olarak hoş olsa da, birleştirilen beş görüntü de 153,559 bayt ağırlığında. Kalitelerinin bir bölümünü feda etmeye hazırsak, bu görüntüler ne kadar sıkıştırılabilir?
Göreviniz, yukarıdakiler gibi bir ASCII sanat görüntüsünü kabul eden ve girdi olarak minimum kalite kabul eden ve görüntünün kayıplı bir sıkıştırmasını (tam bir program veya tek bir dizgeyi döndüren bir işlev biçiminde) basan bir program yazmaktır. kalite gereksinimi.
Bu, ayrı bir dekompresör yazmadığınız anlamına gelir; Sıkıştırılmış görüntülerin her birinde yerleşik olmalıdır.
Orijinal görüntü, satır beslemeleri ile aynı uzunluktaki çizgilere ayrılmış, 1 ile 10 arasında parlaklığa sahip karakterlerden oluşacaktır. Sıkıştırılmış görüntünün aynı boyutta olması ve aynı karakter kümesini kullanması gerekir.
N charxel içeren sıkıştırılmamış bir görüntü için, görüntünün sıkıştırılmış bir versiyonunun kalitesi
Nerede c ı parlaklığı olan i inci sıkıştırılmış resmin çıktı charxel ve u ı parlaklığı i inci sıkıştırılmamış görüntünün charxel.
puanlama
Kodunuz, her bir görüntü için giriş ve minimum kalite ayarları olan 0.50, 0.60, 0.70, 0.80 ve 0.90 olarak yukarıdaki beş görüntü ile çalıştırılacaktır.
Puanınız, tüm sıkıştırılmış görüntülerin boyutlarının, yani yirmi beş sıkıştırılmış görüntünün tümünün uzunluğunun yirmi beşinci kökünün geometrik ortalamasıdır.
En düşük puan kazanır!
Ek kurallar
Kodunuz yalnızca puanlama için kullanılanları değil, keyfi görüntüler için çalışmak zorundadır.
Test durumlarda doğru kod, ancak bu bile olmayan bir programı optimize beklenmektedir girişimi benden bir upvote almazsınız keyfi görüntüleri sıkıştırmak için.
Kompresörünüz dahili byte stream kompresörleri (örneğin, gzip) kullanabilir, ancak bunları sıkıştırılmış görüntüler için kendiniz uygulamanız gerekir.
Normalde bayt akım dekompresörlerinde (örneğin baz dönüşüm, çalışma uzunluğu kod çözme) kullanılan mermilere izin verilir.
Kompresör ve sıkıştırılmış görüntüler aynı dilde olmak zorunda değildir.
Ancak, tüm sıkıştırılmış görüntüler için tek bir dil seçmelisiniz.
Sıkıştırılmış her görüntü için standart kod golf kuralları uygulanır.
Doğrulama
Tüm kalite gereksinimlerini kolayca doğrulamak ve bir gönderinin puanını hesaplamak için bir CJam senaryosu hazırladım.
Java tercümanını buradan veya buradan indirebilirsiniz .
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
Örnek
Bash → PHP, puan 30344.0474
cat
Tüm girdiler için% 100 kalite elde eder.
$ 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