Görev
Genişlik w
ve yükseklik görüntüsünü h
ve iki tamsayı alan a <= w/2
ve b <= h/2
görüntünün ascii art gösterimini a
x boyutlarıyla çıkaran bir program veya işlev yazın b
.
ASCII sanatı aşağıdaki adımlar (veya aynı çıktıya sahip başka bir işlem) yoluyla oluşturulmalıdır:
Yeniden boyutlandırma
w
xh
görüntüyü2a
x2b
. Yeniden(x, y)
boyutlandırılan görüntüdeki pikselin rengi , aşağıdaki köşelere sahip dikdörtgenin içindeki orijinal görüntüdeki tüm piksellerin renklerinin ortalamasına eşit olmalıdır:(floor[x * w/2a], floor[y * h/2b]) (ceil[(x+1) * w/2a], ceil[(y+1) * h/2b])
Yeniden boyutlandırılan görüntü, rengin kırmızı, yeşil ve mavi bileşenlerinin ortalaması alınarak ve her bir bileşenin bu ortalamaya ayarlanmasıyla doygunluğu azaltılmalıdır.
Aşağıdaki kurallara uyarak her 2x2 piksel bloğu için bir karakter çıkarılmalıdır:
- Let
e = 3 - floor[color/64]
renk (aralık 0..255 olarak) sol üst pikselin renk kırmızı bileşeni belirtir,. Izin vermekf
,g
veh
bu değere bakın, ancak sırasıyla sağ üst, sol alt ve sağ alt pikseller için. - Izin
z
ortalama olmake
,f
,g
,h
. - Aşağıdakine karşılık gelen karakteri çıktılayın (beyaz
3 - floor[color/64]
sıfır olan bir pikseli ve gri sıfır olmayanı temsil eder). - = Boşluk (
) çıktısı al
- ya da = Çıkış
"
durumundae (or f) >= 2
ve'
başka türlü. - ya da = Çıkış
,
durumundag (or h) >= 2
ve.
başka türlü. - veya = Çıktı
-
- veya = Çıktı
;
- = Çıktı
\
- = Çıktı
/
- = Çıktı
J
- = Çıktı
L
- = Çıktı
7
- = Çıktı
P
-
z = 1
: çıktı*
.z = 2
: çıktıC
.z = 3
: çıktı#
.
- Let
Diğer notlar: Yukarıdaki adımlarda atılan tüm ortalamalar tamsayı bölümü kullanmalıdır (yani 0'a yuvarlama).
Görüntüleri okumak için kitaplık kullanabilirsiniz, ancak yeniden boyutlandırma ve desatürasyon adımları için kitaplıklar kullanılamaz.
Giriş
Programınız üç veri parçası alacaktır:
- Bir şekil. Bu resim istediğiniz herhangi bir biçimde olabilir (örn. PNG, PPM)
- ASCII sanatının genişliği (karakter sayısı olarak)
- Ascii sanatının yüksekliği (karakter sayısı olarak)
Giriş, STDIN aracılığıyla okunabilir, komut satırı bağımsız değişkeni olarak geçirilebilir, değişken olarak depolanabilir vb.
Çıktı
Programınız, görüntüden ve yukarıda açıklanan işlemle oluşturulan ascii sanatını çıktılar. Her satır aynı genişlikte (giriş olarak geçen genişlik) olmalıdır ve fazladan boşluk eklenemez veya kaldırılamaz. Son satırın sonunda bir satırsonu olabilir, ancak bu zorunlu değildir. Boş satırlar (yalnızca boşluklu satırlar) atlanmamalıdır.
Örnekler
Tüm görüntüler Wikipedia'dan alındı ve kamu malı olarak yayınlandı. Programınızın tüm resimler ve geçerli girişler için çalışması bekleniyor.
Genişlik = 52, Yükseklik = 25:
.-- *** - ----. - ********** L. - .-- 7 ---- P- .J ****************. . ********* \. , ****************** L \ J ********** '. - ********************. J *********** L / J *********************; ./*************.L ; ********************* PJ **************; 7; ********************** '. *************** ;; *. ; **********************; ***************; J *. *********************** ******* P ******** '**; C ********************* C ******* P; *******. **; C ********************** J ***************; **; Cı *********************; **************** **.; ********************** '*************** P; ** J ********************* P *************** / *** ********************** 7 ************* 'J **; ; ******************** C "'P *********** PJ ***'; "7 ****************** C" "********** S. ** C; '* C *************'; ********* - J ** CP '* C ********** P 7 ** 7 ** P / - **** P - * CCCCC * P- '7 ******** P' '---' --- '
Genişlik: 70, Yükseklik: 3:
---------------------------. .---------------- J ***************************** P-J ***************** *** / J **; ---------- ********* P --------- '-------------------- -'
Genişlik: 50, Yükseklik: 25:
.J --- .J * P --- J * L--. J *** 'L-J *********** - J ****; **************** L ; ***** '.J ******************** J **** 7 ************************ P ** CC *; . ********* LJ *********** P- ** C * P 'J ********************** - 7 * C * L **********************; J * Z **; **********************; JC ** C **. ; ; ******** CCC ° C ** CCCC ** "7 ***** L. 7 ***** CCCCCC **** CC ** ' - *****. -J - ** C * C * CC ****** CC * ' ; ** CC ***; '** CCC ***** CCCC *; '- **** - - *** CCCCC *** - '------'
Genişlik: 26, Yükseklik: 17:
-, L J - ** L .C # J '; * PL, C # " .PP 7. JC7P ;; * J ;; , C'C; J; CC; L C "# * L 7-P; *; PC 7CL *** J * PC '# '7 # C * C # P'; P JC # C- J # CCC # L.JC # CJCC # C; ; # - - #, CCC # CCCCCCCC * .- -.C; ; CCCCCCCCCCCC ; **** J ** L; CCCCCCCCCCCC ; *******; 'CCCCCCCCCCCP '*******' CCCCCCCCCCC ' '* P-7 *' "CCCCP '- '---
Bu kod golf , bu yüzden en kısa cevap kazanır.