HTML 색상 출력


30

16 색 CGA 팔레트 ( HTML 색 이라고도 함 )는 초기 그래픽 어댑터에서 사용되는 16 색 세트입니다. 이 과제의 목표는 16 개 형식 ( RRGGBB)으로 16 개 값을 기준으로 오름차순으로 개행 문자로 구분하여 16 개를 모두 출력하는 것 입니다. 따라서 출력은 정확히 다음과 같아야합니다.

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 이다 = 17 0x11을 , = 145 0x91 , 및 × 00 = 0 .

ŒP 코드 포인트 배열의 파워 세트를 생성하여

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

마지막 두 항목은 80FF를 모두 포함하는 조합에 해당 하므로 무시해야합니다.

»Ṫ¦209 세 부분으로 구성됩니다.

  • (tail)은 코드 포인트의 마지막 배열, 즉 [17, 145, 0]을 제거 합니다.

  • »209파워 셋의 나머지 각 정수의 최대 소요 0xD1 209 = 그들 모두 교체 209 .

  • ¦(스파 스)는 나머지 전원 세트의 요소를 반복합니다. 해당 인덱스가 [17, 145, 0] 에서 발견되면 요소는 모두 209 로 바뀝니다 . 그렇지 않으면 그대로 유지됩니다.

    ¦모듈 식이 아니므로 나머지 전원 세트의 마지막 배열 (인덱스 0 ) 만 수정합니다 . 인덱스 17145 가 너무 커서 효과가 없습니다.

결과는 다음과 같습니다.

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

ṗ€3 각 배열의 세 번째 카테 시안 거듭 제곱, 즉 각 배열의 모든 3 개의 튜플 요소 배열을 계산합니다.

Fd⁴결과를 평탄화하고 각 정수의 몫과 나머지를 16 으로 나눈 값을 계산합니다 .

ịØH인덱스 (1 기반)를 "0123456789ABCDEF에 색인화 하므로 0x11 , 0x91 , 0x000xD1"00 " , "80 " , "FF ""C0 " (각각)에 매핑됩니다 .

s3ṢQ 문자 쌍을 3 개의 튜플로 나누고 튜플을 정렬 한 후 중복 제거합니다.

마지막으로 Y줄 바꿈으로 구분하여 고유 한 튜플을 결합합니다.


11

배쉬 + GNU 유틸리티, 67

  • @manatwork 덕분에 2 바이트 절약
  • @zeppelin 덕분에 2 바이트 절약
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일부 엑스트라를 따라가). 엑스트라는 F8문자 가 모두 포함되어 있습니다 .
  • 중괄호 확장의 결과는 공백으로 구분 된 단일 행입니다. fmt각 항목을 자체 줄에 넣습니다.
  • 식의 첫 번째 줄이 해당 줄에 sed삽입 C0C0C0됩니다
  • sed표현식 의 두 번째 줄은 위에서 설명한 "extras"를 걸러냅니다.

Ideone .


6

젤리 , 38 31 바이트

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

TryItOnline!

숫자 ( “...’) 의 기본 250 압축 ,
기본 4 ( b4) 로 변환 , 벡터화 논리 후 자체 사본을 사용하여
압축 ( ż) 및 1 ( a1$) *, 사용
4 개의 문자로 색인화 ( “08CF”),
청크로 분할 길이는 3 ( s3)이고
줄 바꿈 ( Y) 과 결합됩니다 .

* 따라서 각각의 0 자리를 다른 0과 짝을 이루고 다른 숫자는 1과 짝을 이룹니다. 이 수단 페치 인덱싱 다음과 함께 'F'서로 쌍으로된다 'F'동안 '0', '8''C'A의 각 쌍 '0'.


사소한 편집이 답변을 수정합니다 : “0FC8”우리가 가지고있는 00, FF, C0,와 80.
Sherlock9

와우, 나는 몰랐다! 고맙습니다.
Jonathan Allan

3

파이썬 3 134 129 125 108 91 90 바이트

아직도 할 골프가 많다고 생각합니다. 골프 제안을 환영합니다!

편집 : -9 바이트 및 문자열 형식 지정에 도움을 주신 Mego에게 감사드립니다. -17 바이트는 처음에 문자열을 인쇄하는 더 좋은 방법을 찾아냅니다. -17 바이트는 처음부터 for 루프를 작성하는 더 좋은 방법을 찾아냅니다. i%3//2*"\n"대신 xnor의 팁 덕분에 -1 바이트 "\n"*(i%3<2).

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

언 골핑

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에서도 작동합니다.
Miguel

@Miguel 아니요, 정리하지 않은 편집입니다. 파이썬 2에서는 작동하지 않습니다.
Sherlock9

2

자바 스크립트 (ES6) 109 107 바이트

Neil 덕분에 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 바이트를 절약합니다.
Neil

2

PowerShell, 113106 바이트

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

예, 리터럴 문자열을 인쇄하는 것보다 짧은 것을 찾지 못했습니다 ... 간단한 교체 (완전히 간과 한)를 사용하여 7 바이트를 줄인 @ Martin Smith 에게 감사드립니다 . 따라서 단순히 하드 코딩하는 것보다 최소 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]네임 스페이스는 콘솔 색상 (기본적으로) 정의 가능한 파워 쉘 콘솔을. 우리는이 같은 정수 배열을 통해 그것들을 참조하는 경우, 디폴트 값은 (예를 들어, 이름 Black또는 White등이). -split공백에 있는 문자열과 결합하여 색상 이름으로 구성된 문자열 배열을 갖습니다.

우리는 그것들 |%{...}을 반복하고 각 반복은 해당 [system.windows.media.colors]값을 가져옵니다 . 이러한 객체의 기본 #AARRGGBB문자열은 16 진수 값 형식 의 색상 이므로 스크립트 블록을 사용하여 해당 호출을 문자열로 캡슐화하여이를 활용합니다 "$(...)". 우리는 알파 값 또는 해시를하지 않기 때문에 그러나, 우리는 백 엔드 걸릴 [3..8]에 문자열의 및 필요 -join그 결과 char문자열로 -array 다시. 그런 다음 Sort-Object올바른 순서로 배치하는 것이 간단 합니다.


1
21 개의 인스턴스가 00있으며 .Replace(7,'00')<21 자입니다.
Martin Smith

PowerShell을 사용하는 방법을 모르지만 80과 FF를 대체하는 것이 좋습니다.
nedla2004

@ 하 nedla2004 -replace대해 880동일한 바이트 카운트된다 (인 12 0을 저장 -replace8,80길이). 을 위해 그것을 이렇게하면 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

Base-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

불행히도 a for또는 call:명령 의 출력을 파이프 할 수 없으므로 재귀 적으로 호출해야합니다.



0

Befunge, 83 69 바이트

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

온라인으로 사용해보십시오!

색상은 첫 번째 줄에 표시되는 문자열 (색상 구성 요소 당 2 비트)로 인코딩되어 각 값을 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));}}

함수에서 문자열을 직접 반환 할 수 있습니다-변수에 저장 한 다음 인쇄 할 필요가 없습니다. 또한 a) 람다를 사용할 수 있으며 b) 단순히 문자열을 덤프하는 것보다 나은 솔루션이 있다고 확신합니다.
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");}

200에서 시도하고 변경하는 것과 비교하여 140 바이트로 클럭합니다.

해결책은 작은 알파벳이 있지만 다른 텍스트와 마찬가지로 텍스트로 생각하는 것이 었습니다. 각 색상은 알파벳 {0xff, 0xc0, 0x80, 00}에 대한 2 비트 인덱스의 삼중 항으로 생각할 수 있습니다. 색상-> 삼중 항-> 숫자-> 문자 (모든 문자를 인쇄 가능하게하고 이스케이프가 필요없는 오프셋 +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   #

그런 다음 결과 문자열을 반복하고 알파벳 문자열의 적절한 부분을 잘라내는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.