Виведіть кольори HTML


30

16-кольорова палітра CGA (також відома як HTML кольори ) - це набір 16 кольорів, які використовуються ранніми графічними адаптерами. Мета цього завдання - вивести всі 16 з них у шістнадцятковому форматі ( RRGGBB) у порядку зростання за шістнадцятковим значенням, розділеними новими рядками. Таким чином, вихід повинен бути саме таким:

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

Допускається одна окрема нова лінія рядків, але це не обов'язково.

Відповіді:


13

Желе , 31 29 27 байт

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

Спробуйте в Інтернеті!

Як це працює

“×Ɗ¡‘дайте кодові точки символів між цитатами в SBCS Jelly , які є 0x11 = 17 , 0x91 = 145 і 0x00 = 0 .

ŒP будує силовий набір масиву кодових точок, поступаючись

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

Останні два записи відповідають комбінаціям, що містять і 80, і FF , тому нам доведеться їх відкинути.

»Ṫ¦209 складається з трьох частин:

  • (хвіст) видаляє останній масив кодових точок, тобто [17, 145, 0] .

  • »209приймає максимум кожного цілого числа в решті набору потужності і 0xD1 = 209 , замінюючи їх усіма на 209 .

  • ¦(розріджений) ітератує елементи, що залишилися від набору живлення. Якщо відповідний індекс знайдений в [17, 145, 0] , елемент замінюється на всі 209 -і. Якщо ні, це залишається недоторканим.

    ¦не є модульним, тому це змінює лише останній масив (індекс 0 ), що залишився в наборі живлення. Індекси 17 і 145 занадто великі і не мають ефекту.

Результат такий.

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

ṗ€3 обчислює третю декартову потужність кожного масиву, тобто масив усіх 3-кортезів елементів кожного масиву.

Fd⁴вирівнює результат і обчислює коефіцієнт і залишок кожного цілого числа, поділеного на 16 .

ịØHіндекси (1-основі) в «0123456789abcdef , так 0x11 , 0x91 , 0x00 , і 0xD1 отримати відображається на " 00 " , " 80 " , " FF " і " С0 " (соотв.).

s3ṢQ розбиває пар символів на 3-кортежі, сортує кортежі та дедублікує.

Нарешті, Yприєднується до унікальних кортежів, розділяючи лінійні корми.


11

Bash + GNU комунальні послуги, 67

  • 2 байти збережено завдяки @manatwork
  • 2 байти збережено завдяки @zeppelin
a={00,80,FF}
eval echo $a$a$a|fmt -w9|sed '16iC0C0C0
/F0*8\|80*F/d'
  • Розширення брекетів {00,80,FF}{00,80,FF}{00,80,FF} надає всі необхідні комбінації у правильному порядку (виключаючи C0C0C0) разом із деякими додатками Додатковими є ті, що містять Fі 8символи, і символи.
  • Результат розширення дужок - це одна окрема пробіл лінія. fmtставить кожен запис у свій рядок
  • 1-й рядок sedвиразу вставляється C0C0C0у відповідний рядок
  • 2-й рядок sedвиразу фільтрує описані вище "додаткові".

Ідеон .


6

Желе , 38 31 байт

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

СпробуйтеItOnline!

Стиснення базису 250 числа ( “...’),
перетвореного на базу 4 ( b4),
блискавки ( ż) з копією себе після векторизованого логічного -і з 1 ( a1$) *,
індексованого ( ) на чотири символи, що використовуються ( “08CF”),
розділене на шматки довжини 3 ( s3)
та з'єднані з каналами рядків ( Y).

* Таким чином, поєднання кожної нульової цифри з іншим нулем, а кожна з будь-яких інших цифр з однією. Поряд з наступним індексуються вибірками це означає , що 'F'стає в парі з іншим 'F'часом '0', '8'і 'C'кожною парою з '0'.


Незначне редагування виправити цю відповідь: “0FC8”як у нас є 00, FF, C0і 80.
Шерлок9

Ох вау, я не помітив! Дякую.
Джонатан Аллан

3

Python 3, 134 129 125 108 91 90 байт

Я думаю, що тут ще дуже багато гольфу. Пропозиції з гольфу вітаються!

Редагувати: -9 байт і велике спасибі Мего за допомогу у форматуванні рядків. -17 байт від з'ясування кращого способу друку рядка в першу чергу. -17 байт від з'ясування кращого способу написання циклу в першу чергу. -1 байт завдяки підказці xnor i%3//2*"\n"замість цього "\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="")

Спробуйте так - вам потрібно загорнути аргумент у круглі дужки (або квадратні дужки) і заплести його *.
Mego

i%3//2*"\n"зберігає байт.
xnor

Це працює і з py 3
Мігель

@ Мігель Ні, це редакція, яку я не прибирав. Він не працює з Python 2.
Sherlock9

2

JavaScript (ES6), 109 107 байт

Збережено 2 байти, завдяки Нілу

Це на 7 9 байт коротше, ніж просто повернення необробленого рядка в задніх пунктах.

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

Тест


1
Цікаво .replace(/./g)така ж довжина .map().join, але .map(x=>'08CF'[x=n>>x&3]+'000F'[x],n+=+v||21)зберігає два байти.
Ніл

2

PowerShell, 113 106 байт

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

Так, я не знайшов нічого коротшого, ніж просто надрукувати буквений рядок ... Завдяки @ Martin Smith за зруйнування 7 байтів за допомогою простої заміни (яку я зовсім не помітив). Отже, ми принаймні на 7 байт коротше, ніж просто жорстке кодування. Так!

Але це нудно!

Тож замість цього ...

PowerShell v4, 128 байт

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

[system.consolecolor]Простір імен визначає консольних кольору (спочатку) , доступних в консолі PowerShell. Якщо ми посилаємось на них через цілий масив, подібний до цього, значенням за замовчуванням є ім’я (наприклад, Blackабо Whiteподібне). Ми поєднуємо це з рядком, який був -splitна пробілах, тому тепер у нас є масив рядків імен кольорів.

Ми прокручуємо їх через |%{...}кожну ітерацію і витягуємо відповідне [system.windows.media.colors]значення. За замовчуванням для цих об'єктів типовою кольором є колір у #AARRGGBBформаті як шістнадцяткове значення, тому ми використовуємо це, інкапсулюючи цей виклик у рядок із блоком сценарію "$(...)". Але, оскільки ми не хочемо альфа-значень чи хешу, ми беремо задній кінець [3..8]рядка і потребуємо -joinцього результуючого charмасиву назад у рядок. Потім, простий, Sort-Objectщоб поставити їх у потрібному порядку.


1
Є 21 екземпляр 00і .Replace(7,'00')становить <21 символів.
Мартін Сміт

Я не знаю, як використовувати PowerShell, але, можливо, варто також замінити 80 та FF.
nedla2004

@ Nedla2004 Зробити то -replaceдля 8і 80це те ж лічильнику байтів (економія 12 нулів, що -replace8,80довжина). Робити це на the FFдовше на два байти через лапки, необхідні навколо "FF"у -replace2,"FF"виписці.
AdmBorkBork

Гаразд, мені було цікаво, чи можете ви якось комбінувати заміни.
nedla2004


1

MATL , 39 байт

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

Спробуйте в Інтернеті!

'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 байт

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

Спробуйте в Інтернеті!

Те, що нам потрібно для виведення, - це в основному (обернене та розділене):

FFFFFF00FFFFFF00FF0000FF0C0C0C080808000808080008000008FFFF0000FF00080800000800FF0000080000000000

Що, у десятковій формі:

39402003857025890357721060524755992261661062099432941475272448103296644696683709026793043150430945208910007869898752

Що в Базі-214:

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

Це найпростіше рішення, яке я міг би придумати, тому що в пеклі немає можливості перемогти Денніса. Провели годину, намагаючись, і нічого не обіграло його ідея.



0

Пакетна, 137 байт

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

Так, це так нудно. Попередня спроба зі 148 байтами:

@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

На жаль, ви не можете передати висновок команди forабо call:команди, тому мені доведеться викликати себе рекурсивно.



0

Befunge, 83 69 байт

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

Спробуйте в Інтернеті!

Кольори кодуються в рядку, який ви бачите в першому рядку, по два біти на кольоровий компонент, з додатковим високим бітом, встановленим для примушування кожного значення до діапазону ASCII (за винятком випадків 63, що було б поза діапазоном, як 127 ).

Список кольорів на стеку обробляється наступним чином:

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 байт

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);}

На жаль, це перемагає величезний запас, тим цікавіше, хоч і неймовірно перекручене (мені було весело це писати) C #, 270 байт

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));}}

Ви можете просто повернути рядок у своїй функції - не потрібно зберігати її в змінній, а потім друкувати. Крім того, а) ви можете використовувати лямбда, і б) я впевнений, що є рішення, яке б'є просто скидання струни.
Mego

@Mego це моя перша C # посада в гольфі, не впевнений, як я виконую функцію лямбда від усієї честі!
Alfie Goodacre

Я б запропонував переглянути цей список, щоб знайти деякі поліпшення.
Mego

@Alfie Goodacre: C # лямбда, який просто повертає значення: ()=>@"string_here"(це стосується Action<string>). Я також пропоную використовувати дослідний рядок ( @), щоб ви могли просто помістити нові рядки прямо в рядок, не потребуючи їх уникнути.
молоко

0

C (gcc) , 99 байт

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

Спробуйте в Інтернеті!

Зробивши спробу створення списку чисел і виведення їх під час сортування, я порівняв з наївним рішенням, яке тверезило:

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

Цей час працює на 140 байт порівняно з моєю спробою на 200 та зміною.

Рішення полягало в тому, щоб мислити це як текст, як будь-який інший, хоча і з невеликим алфавітом. Кожен колір можна розглядати як трійку 2-бітних індексів в алфавіті {0xff, 0xc0, 0x80, 00}. Процес кольорового -> триплета -> числа -> символу (зі зміщенням +35, щоб зробити їх усіми для друку та уникнути будь-якої необхідності у втечах) можна проілюструвати як такий:

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   #

Тоді справа лише в ітерації над отриманим рядком та вирізанні відповідних частин рядка алфавіту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.