HTML renklerini çıktılayın


30

16 renkli CGA paleti ( HTML renkleri olarak da bilinir ), erken grafik bağdaştırıcıları tarafından kullanılan 16 renk grubudur. Bu zorluğun amacı, 16 tanesinin tümünü hex formatında ( RRGGBB), artan sırayla hex değerine göre, yeni satırlarla ayrılmış olarak çıkarmaktır. Bu nedenle, çıktı tam olarak bu olmalıdır:

000000
000080
0000FF
008000
008080
00FF00
00FFFF
800000
800080
808000
808080
C0C0C0
FF0000
FF00FF
FFFF00
FFFFFF

Tek bir takip satırına izin verilir, ancak gerekli değildir.

Yanıtlar:


13

Jöle , 31 29 27 bayt

“×Ɗ¡‘ŒP»Ṫ¦209ṗ€3Fd⁴ịØHs3ṢQY

Çevrimiçi deneyin!

Nasıl çalışır

“×Ɗ¡‘Jelly tırnak arasında karakter kodu puan verim SBCS olan, = 17 0x11 , = 145 0x91 ve 0x00 = 0 .

ŒP kod noktaları dizisinin güç kümesini kurar,

[[], [17], [145], [0], [17, 145], [17, 0], [145, 0], [17, 145, 0]]

Son iki giriş her ikisini de içerir kombinasyonları karşılık 80 ve FF onları atmak zorunda.

»Ṫ¦209 üç bölümden oluşur:

  • (tail) son kod noktası dizisini kaldırır, yani [17, 145, 0] .

  • »209güç kümesinin geri kalanındaki her bir tamsayı için maksimum değer alır ve 0xD1 = 209 , hepsini 209 ile değiştirir .

  • ¦(seyrek), powerset'in geri kalanının elementlerini yineler. Gelen işaret bulunursa [17, 145, 0] , eleman tüm ile değiştirilir 209 's. Aksi takdirde, dokunulmadan bırakılır.

    ¦modüler değildir, bu yüzden powerset'in geri kalan kısmındaki sadece son diziyi (index 0 ) değiştirir. 17 ve 145 endeksleri çok büyük ve etkisizdir.

Sonuç aşağıdaki gibidir.

[[], [17], [145], [0], [17, 145], [17, 0], [209, 209]]

ṗ€3 Her bir dizinin üçüncü Kartezyen gücünü, yani her bir dizinin tüm 3-tuples dizisini hesaplar.

Fd⁴sonucu düzleştirir ve 16'ya bölünen her tamsayı için bölüm ve kalanları hesaplar .

ịØH"0123456789ABCDEF" dizinine (1 tabanlı) , böylece 0x11 , 0x91 , 0x00 ve 0xD1 "00" , "80" , "FF" ve "C0" ile eşleştirilir (sırasıyla).

s3ṢQ karakter çiftlerini 3-tuplere ayırır, tupleri sıralar ve veri tekilleştirir.

Son olarak, Ysatır besleyicilerle ayırarak, benzersiz perdeleri birleştirir.


11

Bash + GNU Yardımcı Programları, 67

  • @ Manatwork sayesinde 2 bayt kurtarıldı
  • @Zeppelin sayesinde 2 bayt kurtarıldı
a={00,80,FF}
eval echo $a$a$a|fmt -w9|sed '16iC0C0C0
/F0*8\|80*F/d'
  • Ayracı genişleme {00,80,FF}{00,80,FF}{00,80,FF} (hariç doğru sırayla tüm ihtiyaç kombinasyonları verir C0C0C0bazı ekstralar birlikte). Ekstralar, her ikisini de içerenleri Fve 8karakterleridir.
  • Ayraç genişlemesinin sonucu, boşlukla ayrılmış tek bir satırdır. fmther girişi kendi satırına koyar
  • sedİfadenin ilk satırı C0C0C0uygun satıra eklenir .
  • sedİfadenin 2. satırı yukarıda açıklanan "ekstraları" filtreler.

Ideone .


6

Jöle , 38 31 bayt

“mạ9ṣṃwɠƁ,¡ẓw’b4µża1$ị“08CF”s3Y

TryItOnline!

Bir sayının ( “...’),
taban 4 ( b4) e dönüştürülen bir sayı 250 sıkıştırması ,
sıkıştırılmış ( ż) vektörel mantıktan sonra kendisinin bir kopyası ile ve 1 ( a1$) * ile,
dizilenmiş ( ), kullanılan dört karakterin içine dizilmiş ( “08CF”)
uzunluk 3 ( s3)
ve satır beslemeleri ( Y) ile birleştirildi .

* Böylece her bir sıfır basamağını başka bir sıfır ile ve diğer herhangi bir basamağın bir tanesiyle eşleştirmek. Bu getirme dizin oluşturulmuş aşağıdaki ile birlikte 'F'başka bir eşleştirilmiş olur 'F'süre '0', '8've 'C'bir ile her bir çiftin '0'.


Minör düzenlemek bu cevabı düzeltmek için: “0FC8”, bizim gibi 00, FF, C0ve 80.
Sherlock9

Vay canına, farketmedim! Teşekkür ederim.
Jonathan Allan,

3

Python 3, 134 129 125 108 91 90 bayt

Burada yapılacak çok fazla golf olduğunu düşünüyorum. Golf önerileri hoş geldiniz!

Düzenleme: -9 bayt ve çok dize biçimlendirme ile yardımcı olmak için Mego teşekkürler. -17 bayt ilk etapta dize yazdırmak için daha iyi bir yol bulmaktan bayt. -17 bayt, for döngüsü ilk etapta yazmak için daha iyi bir yol bulmaktan. -1 byte i%3//2*"\n"yerine kullanılacak ucu sayesinde "\n"*(i%3<2).

for i in range(48):print(end="F0C8F000"[0x10114abf7f75c147d745d55//4**i%4::4]+i%3//2*"\n")

Ungolfing

z = 0
a = [0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 2, 2, 2, 3, 3, 3, 1, 3, 3, 3, 1, 3, 1, 1, 3, 0, 0, 1, 1, 0, 1, 3, 3, 1, 1, 3, 1, 0, 1, 1, 3, 1, 1, 1, 1, 1]
for i in range(len(a)):
    z = (z + a[i]) * 4
z //= 4                   # we multiplied by 4 one too many times
for i in range(48):
    m = z // 4**j % 4
    s = "F0C8F000"[c::4]
    if i % 3 == 2:
        s += "\n"
    print(s, end="")

Bunun gibi deneyin - argümanı parantez içine (veya köşeli parantez içine) sarmanız ve üzerine yapıştırmanız gerekir *.
Mego

i%3//2*"\n"bir bayt kaydeder.
xnor

Bu py 3 ile de çalışır
Miguel

@Miguel Hayır, temizlemediğim bir düzenleme. Python 2 ile çalışmıyor.
Sherlock9

2

JavaScript (ES6), 109 107 bayt

Neil sayesinde 2 bayt kaydedildi

Bu, ham dizginin backticks'te döndürülmesinden daha kısa 7 9 bayttır.

_=>[...'1121173113106393'].map(v=>[4,2,0].map(x=>'08CF'[x=n>>x&3]+'000F'[x],n+=+v||21).join``,n=-1).join`
`

Ölçek


1
İlginç .replace(/./g)bir şekilde aynı uzunlukta .map().join, ancak .map(x=>'08CF'[x=n>>x&3]+'000F'[x],n+=+v||21)iki bayt kaydeder.
Neil

2

PowerShell, 113 106 bayt

'777
7780
77FF
7807
78080
7FF7
7FFFF
8077
80780
80807
808080
C0C0C0
FF77
FF7FF
FFFF7
FFFFFF'-replace7,'00'

Evet, edebi yazı dizisini basmaktan daha kısa bir şey bulamadım ... Basit bir değişim kullanarak 7 byte'ı tıraş ettiğim için @ Martin Smith sayesinde (ki tamamen gözden kaçırdım). Yani, sadece kodlamadan en az 7 byte kısayız. Yuppi!

Ama bu çok sıkıcı!

Bunun yerine ...

PowerShell v4, 128 bayt

[consolecolor[]](0,7+9..15)+-split'Lime Maroon Navy Olive Purple Silver Teal'|%{-join"$([windows.media.colors]::$_)"[3..8]}|sort

[system.consolecolor]Ad konsol renkleri (doğal olarak) tanımlar mevcut PowerShell konsoluna. Onlara bunun gibi bir tamsayı dizisi üzerinden başvurursak, varsayılan değer addır (örn. BlackVeya Whitebenzeri). Bunu -split, uzayda yer alan bir dize ile birleştiririz , bu yüzden şimdi bir dizi renk adı dizisine sahibiz.

Bunların arasında dolaşıyoruz |%{...}ve her yineleme karşılık gelen [system.windows.media.colors]değeri çekiyor . Bu nesneler için varsayılan dize, #AARRGGBBonaltılık değer biçiminde renktir , bu nedenle bu çağrıyı bir komut dosyası bloğuyla bir dize kaplayarak kaldıracağız "$(...)". Ancak, alfa değerlerini veya karmasını istemediğimizden, [3..8]dizenin arka ucunu alırız ve -joinsonuç olarak chardizgiye geri döneriz. Sonra, Sort-Objectdoğru sıraya koymak için basit .


1
21 örneği vardır 00ve .Replace(7,'00')<21 karakterdir.
Martin Smith,

PowerShell'i nasıl kullanacağımı bilmiyorum, ancak 80 ve FF'nin yerini almaya da değer olabilir.
nedla2004

@ nedla2004 -replacefor 8ve 80aynı bayt sayısının yapılması ( -replace8,80uzunluk olarak 12 sıfır kaydeder ). Bunun için yapılması, ifadede FFgerekli olan tırnak işaretleri nedeniyle iki bayt daha uzundur . "FF"-replace2,"FF"
AdmBorkBork

Tamam, değiştirmeleri bir şekilde birleştirebilir misin diye merak ediyordum.
nedla2004


1

MATL , 39 bayt

'80FFC000'2e'3na:1Fswv1=`uIn'F4:ZaZ)6e!

Çevrimiçi deneyin!

'80FFC000'         % Push this string
2e                 % Reshape with 2 rows. So 1st column contains '80', 2nd 'FF' etc
'3na:1Fswv1=`uIn'  % Push this string
F4:Za              % Convert from base 95 to alphabet [1 2 3 4]
Z)                 % Use as column indices into the first string
6e!                % Reshape with 6 rows and transpose.
                   % Implicitly display

1

05AB1E , 57 bayt

•P{Ætg7«r¨ëÅ,…}ù¢Ý%Vt®£8ãøÚ$0óDÛY²Zþ…ð7ê‘Ó{òìàYëØU¥•hR6ô»

Çevrimiçi deneyin!

Çıktımız olması gereken temel olarak (tersine çevrilmiş ve bölünmüş):

FFFFFF00FFFFFF00FF0000FF0C0C0C080808000808080008000008FFFF0000FF00080800000800FF0000080000000000

Hangi, ondalık sayı:

39402003857025890357721060524755992261661062099432941475272448103296644696683709026793043150430945208910007869898752

Base-214'teki hangisi:

P{Ætg7«r¨ëÅ,…}ù¢Ý%Vt®£8ãøÚ$0óDÛY²Zþ…ð7ê‘Ó{òìàYëØU¥

Bu benim bulabileceğim en basit çözüm, çünkü cehennemde Dennis'i yenmem mümkün değil. Denemek için bir saat harcadı ve hiçbir şey onun fikrini yendi.



0

Toplu, 137 bayt

@for %%c in (000000 000080 0000FF 008000 008080 00FF00 00FFFF 800000 800080 808000 808080 C0C0C0 FF0000 FF00FF FFFF00 FFFFFF)do @echo %%c

Evet, bu çok sıkıcı. Önceki 148-bayt girişimi:

@if "%2"=="" (call %0 000000 80&call %0 C0C0C0 FF)|sort&exit/b
@echo %1
@for %%c in (0000%2 00%200 00%2%2 %20000 %200%2 %2%200 %2%2%2)do @echo %%c

Ne yazık ki forbir call:komutun çıktısını alamıyorsunuz , bu yüzden özyinelemeli kendimi çağırmam gerekiyor.



0

Befunge, 83 69 bayt

<v"UVTYZQPefij?EDA@"
v>>9\:4/:\4/>4%:3g,0`
<^_@#:,+55$_^#!-9:,g3
F08C

Çevrimiçi deneyin!

Renkler, ilk satırda gördüğünüz dizgede, her bileşen için iki bit olmak üzere, her bir değeri ASCII aralığına zorlamak için ayarlanan ek bir yüksek bit ile kodlanmıştır (63 dışında, 127 dışındadır) ).

Yığındaki renklerin listesi aşağıdaki şekilde işlenir:

9\          9 is pushed behind the current colour to serve as a marker.
:4/:\4/     The colour is repeatedly divided by 4, splitting it into 3 component parts.

>           The inner loop deals with each of the 3 components. 
 4%         Modulo 4 masks out the 2 bits of the colour component that we care about.
 :3g,       That is used as an index into the table on line 4 to get the character to output.
 0`3g,      For component values greater than 0 the second char is a '0', otherwise an 'F'. 
 :9-!       Check if the next component is our end marker.
^           If not, repeat the inner loop.

55+,        Output a newline.
:_          Repeat the outer loop until there are no more colours on the stack. 

0

C #, 195 bayt

void n(){string a="000000\r\n000080\r\n0000FF\r\n008000\r\n008080\r\m00FF00\r\n00FFFF\r\n800000\r\n800080\r\n808000\r\n808080\r\nC0C0C0\r\nFF0000\r\nFF00FF\r\nFFFF00\r\nFFFFFF";Console.Write(a);}

Ne yazık ki, bu çok büyük bir farkla, inanılmaz derecede sarsılmış olsa da daha ilginç (attığım tonla daha çok eğlendim) C #, 270 bayt

void n(){string a,b,c,d;a="00";b="80";c="C0";d="FF";for(int i=0;i<16;i++){Console.WriteLine((i<7?a:i<11?b:i>11?d:c)+(i<3?a:i<5?b:i<7?d:i<9?a:i<11?b:i==11?c:i<14?a:d)+(i==0||i==3||i==5|i==7||i==9||i==12||i==14?a:i==1||i==4||i==8||i==10?b:i==2||i==6||i==13||i==15?d:c));}}

Dize doğrudan işlevinizde döndürebilirsiniz - değişkende saklamanız ve sonra yazdırmanız gerekmez. Ayrıca, a) Bir lambda kullanabilirsiniz, ve b) Sadece ipi dökmek için çarpan bir çözüm olduğuna eminim.
Mego

@Mego bu benim golfdeki ilk C # post'um, tüm dürüstlük içinde bir lambda işlevi nasıl yaptığımdan emin değilim!
Alfie Goodacre

Yapılması gereken bazı iyileştirmeleri bulmak için bu listeye bakmanızı tavsiye ederim .
Mego

@Alfie Goodacre: Sadece bir değer döndüren C # lambda: ()=>@"string_here"(bu atar Action<string>). Ayrıca verbatim bir string ( @) kullanmanızı öneririm, böylece yeni satırları doğrudan dizeye koymanıza gerek kalmadan dizeye koyabilirsiniz.
süt

0

C (gcc) , 99 bayt

f(i){for(i=48;i--;)printf("%.2s%s","FFC08000"+("#&/28MNQRSV]^_ab"[i/3]-35>>i%3*2&3)*2,"\n\0"+i%3);}

Çevrimiçi deneyin!

Bir numara listesi oluşturma ve sıralama sırasında bunları çıkarmayı içeren bir girişimde bulunduktan sonra, ayık olan naif çözümle karşılaştırdım:

f(){puts("000000\n000080\n0000FF\n008000\n008080\n00FF00\n00FFFF\n800000\n800080\n808000\n808080\nC0C0C0\nFF0000\nFF00FF\nFFFF00\nFFFFFF");}

Bu, 200 denememe ve değişime kıyasla 140 byte hızında çalışıyor.

Çözüm, küçük bir alfabe de dahil olmak üzere, onu diğerleri gibi bir metin olarak düşünmekti. Her renk, {0xff, 0xc0, 0x80, 00} alfabesine 2 bitlik indekslerin üçlüsü olarak düşünülebilir. Renk -> üçlü -> sayı -> karakter (hepsini yazdırılabilir hale getirmek ve kaçma gereksinimini önlemek için ofset +35 ile) işlemi şöyle gösterilebilir:

000000  333     63  b
000080  332     62  a
0000FF  330     60  _
008000  323     59  ^
008080  322     58  ]
00FF00  303     51  V
00FFFF  300     48  S
800000  233     47  R
800080  232     46  Q
808000  223     43  N
808080  222     42  M
C0C0C0  111     21  8
FF0000  033     15  2
FF00FF  030     12  /
FFFF00  003     3   &
FFFFFF  000     0   #

O zaman sadece ortaya çıkan dizgiyi yinelemekten ve alfabetik dizginin uygun kısımlarını kesmekten ibarettir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.