Terminaller bugünlerde çok sıkıcı . Eskiden şöyle görünürlerdi:
Şimdi sadece mülayim ve donuk ve siyah-beyazlar. Terminalimi yeniden renklendirecek bir program yazmanı istiyorum!
Açıklama
Şu örneği inceleyin: Ruby kodu:

Çoğu Linux terminali bu kaçış dizilerini destekler ( \ekaçış karakterini temsil eder) ve Windows bunları ANSICON ile destekleyebilir . Bir dizenin metnini veya arka plan rengini değiştirebilen belirli kaçış dizisinin sözdizimi aşağıdadır:
\e[{{COLOR}}m
burada \e( 0x1BASCII'de) kaçış karakterini temsil eder ve {{COLOR}}yerine kullanmak istediğiniz rengin numarası gelir (bunun hakkında daha fazla ayrıntı). Bu çıkış dizisinden sonra gelen metin yönlendirildiği gibi biçimlendirilir ve değeri 0tüm biçimlendirmeyi sıfırlar.
Zorluğunuz, renk içerebilecek bazı metinleri belirten bir dize almak ve renkli bir sürümünü çıkarmaktır.
Giriş çıkış
Normal metin normal gibi çalışır ve tam olarak yazdırılır. Örneğin, girdi wafflesözel çıktı olmadan aynı çıktıyı verir.
Bir renk belirtme sözdizimi Wikipedia'nın sözdizimine benzer . Örneğin, cümledeki "kırmızı renk" kelimelerini kırmızı ile renklendirmek This is the color red!için giriş şu şekilde olur:
This is {{red|the color red}}!
Arka plan renkleri de çalışır. Beyaz bir arka plan üzerinde siyah harfler istiyorsanız, bunu kullanırsınız:
{{black|white|This text is black on white}}
Yalnızca bir arka plan rengi elde etmek için ön planı atlayın:
{{|red|This text has a red background}}
Şartname
İki açık kıvrık ayraç her zaman bir renk yönergesinin başlangıcını belirtir . Sonlanan iki kıvrık parantez ucu belirtir. Parantezler her zaman eşleşecektir; Orada bir asla {{karşılık gelen olmadan }}ve }}onun tekabül önce gelmeyecek {{. Bu renk yönergeleri iç içe {{geçmeyecek ve bir renk yönergesinde asla görünmeyecektir.
Bir renk yönergesinde her zaman bir veya iki |sembol olacaktır. Bir tane varsa, önceki metin ön plan rengidir ve sonraki metin bu renkte gösterilecek dizedir. İki tane varsa, birinciden önceki metin ön plan rengidir, birinciden sonraki ancak ikinciden önceki metin arka plan rengidir ve ikinciden sonraki metin görüntülenecek dizedir. Bu dikey çubuklar bir renk yönergesinin dışında bulunabilir ve tam olarak yazdırılmalıdır.
Ön plan rengi veya arka plan rengi (her ikisi birden değil) boş olabilir, bu durumda bunları varsayılan olarak bırakmalısınız. Son dize (çıktı alınacak olan) asla boş olmaz.
Belirli bir renkteki metnin çıktısı için talimatlar:
Bir renk dizisi "Açıklama" bölümünde tanımlanmıştır. Örneğin, 42'lik bir renk dizisi olacaktır
"\e[42m".Bir renk ayarlamak için, aşağıda belirtilen sayının renk sırasını yazdırın:
Color name | Color sequence number (foreground / background) --------------+---------- black | 30 / 40 red | 31 / 41 green | 32 / 42 yellow | 33 / 43 blue | 34 / 44 magenta | 35 / 45 cyan | 36 / 46 lightgray | 37 / 47 darkgray | 90 / 100 lightred | 91 / 101 lightgreen | 92 / 102 lightyellow | 93 / 103 lightblue | 94 / 104 lightmagenta | 95 / 105 lightcyan | 96 / 106 white | 97 / 107Renk adları büyük / küçük harfe duyarlıdır ve asla geçersiz bir renk adı verilmez. Sen böyle şeyler işlemek gerekmez
REDveyalightgrey(bir ile yazıldığındane).Bir renk dizisini yazdırdıktan sonra, onu izleyen tüm metinler için geçerli olacaktır. Bir renk sırasını sona erdirmek için (varsayılan renge sıfırlama),
0("\e[0m") renk sırasını girin .
Test durumu
{{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }} {{red|'}} {{red|'}} {{|yellow| }}
{{|yellow| }} \_/ {{|yellow| }}
{{|yellow| }} {{|yellow| }}
{{|yellow| }}
Bu, gülen kırmızı yüzle gülen bir yüz çıkarmalıdır.
kurallar
Bir rengi otomatik olarak ayrıştırmak için programlama dilinizin kitaplıklarını veya işlevlerini kullanamazsınız. Bu, ne anlama geldiğini belirleyen kişi olmanız gerektiği
"red"anlamına gelir; bunu sizin için otomatik olarak yapacak bir kütüphaneniz olamaz.Bu kod golf , bu yüzden bayt içindeki en kısa kod kazanacak!
\n\[\e[32m\]\w\n\[\e[0m\]> (yeşil dizin adı, sonraki satırda düz istemi) çalmak , ama ben bir programdan çalışamaz (şimdiye kadar python ve Java çalıştı). Herhangi bir fikir?
echo -e "\e[31mtest\e[0m".
youmecazi anlamda your program(bir kütüphane işlevine yapılan çağrının aksine) ve determineanlamında olduğu figure outgibi değil anlamına geldiğini düşünüyorum choose. Yani, eşlemeyi işlemesi gereken programınızdır: String ("red") | -> Integer (31). redbunun sadece 31bilginin programa entegre edilmesi gerektiğini söylemesidir. Tam olarak tartışılabilecek olmasına rağmen your program- genel amaçlı Dize düzenleme işlevlerini kullanabilir miyiz? - açıkça aldatma / kötüye kullanma.


